停车场模拟管理系统 下载本文

内容发布更新时间 : 2024/11/18 5:53:49星期一 下面是文章的全部内容请认真阅读。

实验二 停车场模拟管理系统

一 题目内容:

设停车场只有一个可停放几辆汽车的狭长通道,且只有一个大门可供汽车进

出。汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已停满几辆汽车 ,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道 上的第一辆车即可进入;当停车场内某辆车要离开时,由于停车场是狭长的通道 ,在它之后开入的车辆必须先退出车场为它让路,待该车辆开出大门,为它让路 的车辆再按原次序进入车场。在这里假设汽车不能从便道上开走,试设计这样一 个停车场模拟管理程序。

二 问题分析:

(1)为了便于区分每辆汽车并了解每辆汽车当前所处的位置,需要记录汽车的

牌照号码和汽车的当前状态,所以为汽车定义一个新的类型CAR

(2)由于车位是一个狭长的通道,所以不允许两辆车同时进入停车位,当有车到来要

进入停车位的时候车要顺次停放,当某辆车要离开时,比它后到的车要先暂时离开

停车位,而且越后到的车就越先离开停车位,显然这和栈的“后进先出”特点相吻合,

所以可以使用一个栈来描述停车位。

由于停车位只能停放有限的几辆车,而且为了便于停车场的管理,要为每个车

位分配一个固定的编号,不妨设为1、2、3、4、5(可利用数组的下标),分别表示停

车位的1车位、2车位、3车位、4车位、5车位,针对这

种情况使用一个顺序栈比较方

(3)当某辆车要离开停车场的时候,比它后进停车位的车要为它让路,而且当它开走之后,让路的车还要按照原来的停放次序再次进入停车位的某个车位上,为了完成这项功能,再定义一个辅助栈,停车位中让路的车依次“压入”辅助栈,待提出请求的车开走后再从辅助栈的栈顶依次“弹出”到停车位中,对辅助栈也采用顺序栈,具体定义与停车位栈类似, (4)功能函数

STOPPING * init_stopping() 初始化“停车位栈” BUFFER * init_buff() 初始化“辅助栈” PAVEMENT * init_pavement() 初始化“便道队列” Int car_come(int pos) 将pos指定的汽车信息输入“停车位栈” ,并修改该车状态

Int car_leave(int pos) 将pos指定的汽车信息从“停车位栈”删除,并修改该车状态

Int stop_to_buff(int pos) 将pos指定的汽车信息从“停车位栈”移动到“辅助栈”

Int buff_to_stop(int pos) 将pos指定的汽车信息从“辅助栈”移动到“停车位栈”

Int pave_to_stop(int pos) 将pos指定的汽车信息从“便道队列”移动到“停车位栈”

Int car_disp(int pos) 将pos指定的汽车信息显示

在屏幕上

三,程序设计

// 停车场管理.cpp : Defines the entry point for the console application. //

#include #include\ #include #include #include #include #include ///////////////////////

#define STACKSIZE1 4/*停车场容量STACKSIZE1-1个位*/ #define STACKSIZE2 10/*临时停车场容量*/

#define maxqueue 4 //只能存maxqueue-1个在便道 #define null 0 /////////////////////

#include\

#define LEN sizeof(struct Carinfo) #include\#include\#include\#include\#include\#include\#include\#include\

//////////////////////////*------------------------------

车辆--------------------------------*/

void putininfo(Carinfo *car,Sqstack *park) {

// char ch[128];

// char timestr[128]; if(!car) { cout<<\分配空间失败!\ } else { cout<<\分配空间成功!可以登记停车。\ // printf(\请输入进站时间:\\n\

登记

// scanf(\ // printf(\请输出站时间:\\n\ // scanf(\ time_t t; memset(car->clock_treach,0x0,25);//将内存设为指定字符 time(&t); sprintf(car->clock_treach,\ // printf(\ // ofstream out1(\ // out1<

// car->clock_treach=(int)ch; // timestr=ch;

// cout<ordercode=park->getnum(); printf(\欢迎进入!请输入车牌号(6位):\\n\ scanf(\ }

}/*----------------------便道类型*----------------------------------*/ class Queue {

private: int i; public:

Carinfo *items[maxqueue]; int top3;

friend class Sqstack; friend class tempstack;

friend int Leave(Sqstack *park,tempstack *tmp,Queue *pave); Queue() { top3=0; }

int queuein(Carinfo *car) { if(((top3+1)

{

cout<<\便道已满!\ return 0; } }

Carinfo * queueout() { Carinfo *temp; temp=items[1]; for(i=1;iordercode--; } top3--; return temp; }

};//到达车辆信息

void Reach (Sqstack *park,Carinfo *car,Queue *pave) {/*?????????????*/

Carinfo *temp=new Carinfo;

// temp->clock_tleave=car->clock_tleave; // temp->clock_treach=car->clock_treach;

strcpy(temp->clock_treach,car->clock_treach); strcpy(temp->lisence,car->lisence); if(car->ordercode) {

temp->ordercode=car->ordercode; } else { temp->ordercode=pave->top3+1; }

if(park->push1(park,temp)) cout<<\ else { cout<<\ pave->queuein(temp); }

}/*--------------------- 停车场类型--------------------------*/ class Sqstack {