内容发布更新时间 : 2024/11/18 8:45:24星期一 下面是文章的全部内容请认真阅读。
实验二 停车场模拟管理系统
一 题目内容:
设停车场只有一个可停放几辆汽车的狭长通道,且只有一个大门可供汽车进
出。汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已停满几辆汽车 ,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道 上的第一辆车即可进入;当停车场内某辆车要离开时,由于停车场是狭长的通道 ,在它之后开入的车辆必须先退出车场为它让路,待该车辆开出大门,为它让路 的车辆再按原次序进入车场。在这里假设汽车不能从便道上开走,试设计这样一 个停车场模拟管理程序。
二 问题分析:
(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
#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< }/*----------------------便道类型*----------------------------------*/ 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;i };//到达车辆信息 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 {