停车场模拟管理程序设计与实现

上传人:鲁** 文档编号:506502854 上传时间:2023-02-01 格式:DOC 页数:15 大小:296KB
返回 下载 相关 举报
停车场模拟管理程序设计与实现_第1页
第1页 / 共15页
停车场模拟管理程序设计与实现_第2页
第2页 / 共15页
停车场模拟管理程序设计与实现_第3页
第3页 / 共15页
停车场模拟管理程序设计与实现_第4页
第4页 / 共15页
停车场模拟管理程序设计与实现_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《停车场模拟管理程序设计与实现》由会员分享,可在线阅读,更多相关《停车场模拟管理程序设计与实现(15页珍藏版)》请在金锄头文库上搜索。

1、 停车场模拟管理程序的设计与实现一、问题描述:设停车厂只有一个可停放几辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可进入;当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门后,为它让路的车辆再按原次序进入车场。在这里假设汽车不能从便道上开走。二、数据结构设计 1、为了便于区分每辆汽车,需要记录汽车的车牌号码,所以为汽车定义一个新的类型CAR,具体定义如下: typedef structc

2、har license_plate9;/汽车牌照号码,定义为一个字符串型CAR; 2、由于车位是一个狭长的通道,所以不允许两辆车同时出入停车位,当有车到来要进入停车位时也要顺次停放,当某辆车要离开时,比它后到的车要先暂时离开停车位,而且越后到的车越先离开停车位,显然这和栈的“后进先出”特点相吻合,所以可以使用一个栈来描述停车位。由于停车位只能停放有限的几辆车,而且为了便于停车场的管理,要为每个车位分配一个固定的编号,不妨设为0,1,2,3和4(可利用数组下标),分别表示停车位的0车位,1车位,2车位,3车位和4车位,针对这种情况使用一个顺序栈比较方便,具体定义如下:typedef struct

3、CAR STOPMAX_STOP;/各汽车信息的存储空间int top; /用来指示栈顶位置的静态指针STOPPING;3、当停车场的停车位上都已经停满了汽车,又有新的汽车到来时要把它调度到便道上,便到上的车辆要按照进入便道的先后顺序顺次存放在便道上,为便道上的每个位置也分配一个固定的编号,当有车从停车位上离开后,便道上的第一辆汽车就立即进入停车位上的某个车位,由于问题描述中限制了便道上的汽车不能从便道上开走,即便道上的汽车只有在停车位上停放过后才能离开停车场,这样越早进人便道的汽车就越早进人停车位,而且每次进入停车位的汽车都是处于便道“最前面”的汽车,显然,这和队列的“先进先出”特点相吻合,

4、所以,这里使用一个顺序队来描述便道,可以利用数组的下标表示便道的位置,具体定义如下:#define MAX_PAVE 100 /便道不限制停放车辆的数目,设为足够大typedef struct CAR PAVEMAX_PAVE;/各汽车信息的存储空间int front,rear; /用来指示对头和队尾位置的静态指针int num;PAVEMENT;4、当某辆车要离开停车场的时候,比它后进停车位的车要为它让路,而且当它开走之后让路的车辆还要按照原来的停放次序再次进入停车位的某个位置上,为了完成这项功能,再定义一个辅助栈,停车位中让路的车依次“压入”辅助栈,待提出开走请求的车开走后,再从辅助栈的栈

5、顶依次“弹出”到停车位中。对辅助栈也采用顺序栈,具体定义与停车栈类似,如下:typedef structCAR BUFFERMAX_STOP;/各汽车信息的存储空间int top; /用来指示栈顶位置的静态指针BUFFER;三、功能函数设计本程序从总体上分为4个大的功能模块,分别为程序功能介绍和操作提示模块,汽车进入车位的管理模块,汽车离开停车位的管理模块和查看停车场停车状态的查询模块。具体功能描述如下:1、程序功能介绍和操作提示模块:此模块给出程序的功能,并给出程序功能所对应的键盘操作的提示,具体屏幕显示如下所示:欢迎使用本程序本程序为停车场的模拟管理程序,有车到来时请按【C】键。然后根据屏

6、幕提示进行相关操作,有车要走时请按【L】键。然后根据屏幕提示进行相关操作,显示停车情况请按【D】键。然后根据屏幕提示进行相关操作,要退出程序请按【Q】键。请选择您要做的操作!函数原型为:void welcome() cout欢迎使用本程序endl;coutendl;cout本程序为停车场的模拟管理程序,有车到来时请按【C】键。endl;cout然后根据屏幕提示进行相关操作,有车要走时请按【L】键。endl; cout然后根据屏幕提示进行相关操作,显示停车情况请按【D】键。endl;cout然后根据屏幕提示进行相关操作,要退出程序请按【Q】键。endl;cout请选择您要做的操作!endl;2、

7、汽车进入停车位的管理模块:此模块用来登记停车场的汽车车牌号和对该车的调度。其中,调度过程要以屏幕信息的形式反馈给用户来指导用户对车辆进行调度。例如,调度过程要以屏幕信息的形式反馈给用户来指导用户对车辆的调度。例如,当期车位上0、1、2、3车位分别停放着牌照为JF001、JF002、JF003、JF004的汽车,便道上无汽车,当牌照为JF005的汽车到来后屏幕应给出如下提示信息:牌照为JF005的汽车停入停车位的5号车位!按A键继续程序的运行。函数原型为:void come(STOPPING *s,BUFFER * l,PAVEMENT * q)CAR x;char b9;coutb;for(i

8、nt i=0;itop=MAX_STOP-1) cout车位已满,请进入便道上等候!rear=(q-rear+1)%MAX_PAVE;/若停车场内车位已满,将车辆信息存入队列中 q-PAVEq-rear=x; q-num+;elses-top+;s-STOPs-top=x; /若停车场内车位未满,将车辆信息存入栈中cout牌照为STOPs-top.license_plate的汽车停入停车位的top号车位!endl;cout按A键继续进行程序endl;3、汽车离开停车场车位的车辆做调度处理。其中调度过程要以屏幕信息的形式反馈给用户来指导用户对车辆的调度,当有车辆离开停车场后应该立刻检查便道上是否

9、有车,如果有,则立即让便道上的第一辆汽车进入停车位。例如,当前停车位上0、1、2、3、4车位分别停放着牌照为JF001、JF002、JF003、JF004、JF005的汽车,便道上的1和2位置上分别停放着牌照为JF006和JF007的汽车,当接收到JF003要离开的信息时,屏幕应给出如下提示信息:函数原型为:void leave(STOPPING *s,BUFFER * l,PAVEMENT * q)coutn;while(n4)coutn;if(ns-top)cout无此车!endl;cout按A键继续进行程序endl;return ;if(ntop)while(n!=s-top)cout牌

10、照为STOPs-top.license_plate的汽车暂时退出停车位!top+;l-BUFFERl-top=s-STOPs-top; /将停在要开走的汽车前面的汽车暂时退出停车场,存入临时栈中s-top-;if(n=s-top)cout牌照为STOPs-top.license_plate的汽车从停车场开走;top-;while(l-top!=-1) s-top+;s-STOPs-top=l-BUFFERl-top; l-top-;cout牌照为STOPs-top.license_plate的汽车停入停车位的top号车位!topnum!=0)if(q-num=0)break;elseq-fro

11、nt=(q-front+1)%MAX_PAVE;s-top+;s-STOPs-top=q-PAVEq-front;/停车场未满,便道有车,此时存入停车场q-num-;cout牌照为STOPs-top.license_plate的汽车停入停车位的top号车位!endl;cout按A键继续程序的运行。top=-1)cout停车场内无车!endl;elsecout停车场内的情况:top)topp+;couttopp车位-STOPtopp.license_platenum!=0)cout便道上的情况:front;int m=q-num;int i=0;while(m!=0)i+;m-;couti车位-PAVEfrontt+1.license_plateendl;/输出便道上的车辆信息情况frontt+;cout按A键继续程序的运行。endl; 由于程序应该能够随时处理用户所提出的各种操作请求,所以在主函数中用一个while循环结构随时监控键盘的按键操作,遇到相应的按键就转到对应函数继续运行,运行完该函数继续监控键盘按键,如此往复,直到接到“退出”指令程序才能结束。部

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号