停车场模拟管理程序设计与实现_第1页
停车场模拟管理程序设计与实现_第2页
停车场模拟管理程序设计与实现_第3页
停车场模拟管理程序设计与实现_第4页
停车场模拟管理程序设计与实现_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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;cout<<endl;cout<<"本程序为停车场的模拟管理程序,有车到来时请按【C】键。"<<endl;cout<<"然后根据屏幕提示进行相关操作,有车要走时请按【L】键。"<<endl; co

7、ut<<"然后根据屏幕提示进行相关操作,显示停车情况请按【D】键。"<<endl;cout<<"然后根据屏幕提示进行相关操作,要退出程序请按【Q】键。"<<endl;cout<<"请选择您要做的操作!"<<endl;2、汽车进入停车位的管理模块:此模块用来登记停车场的汽车车牌号和对该车的调度。其中,调度过程要以屏幕信息的形式反馈给用户来指导用户对车辆进行调度。例如,调度过程要以屏幕信息的形式反馈给用户来指导用户对车辆的调度。例如,当期车位上0、1、2、3车位分别停

8、放着牌照为JF001、JF002、JF003、JF004的汽车,便道上无汽车,当牌照为JF005的汽车到来后屏幕应给出如下提示信息:牌照为JF005的汽车停入停车位的5号车位!按A键继续程序的运行。函数原型为:void come(STOPPING *s,BUFFER * l,PAVEMENT * q)CAR x;char b9;cout<<"欢迎停车,请输入车牌号(最多位):"cin>>b;for(int i=0;i<9;i+)x.license_platei=bi;/将车辆车牌号存入类型CAR的中if(s->top=MAX_STOP-1

9、) cout<<"车位已满,请进入便道上等候!"<<endl; q->rear=(q->rear+1)%MAX_PAVE;/若停车场内车位已满,将车辆信息存入队列中 q->PAVEq->rear=x; q->num+;elses->top+;s->STOPs->top=x; /若停车场内车位未满,将车辆信息存入栈中cout<<"牌照为"<<s->STOPs->top.license_plate<<"的汽车停入停车位的"

10、;<<s->top<<"号车位!"<<endl;cout<<"按A键继续进行程序"<<endl;3、汽车离开停车场车位的车辆做调度处理。其中调度过程要以屏幕信息的形式反馈给用户来指导用户对车辆的调度,当有车辆离开停车场后应该立刻检查便道上是否有车,如果有,则立即让便道上的第一辆汽车进入停车位。例如,当前停车位上0、1、2、3、4车位分别停放着牌照为JF001、JF002、JF003、JF004、JF005的汽车,便道上的1和2位置上分别停放着牌照为JF006和JF007的汽车,当接收到JF

11、003要离开的信息时,屏幕应给出如下提示信息:函数原型为:void leave(STOPPING *s,BUFFER * l,PAVEMENT * q)cout<<"欢迎取车,请输入您的车所停在的车位号:"int n;cin>>n;while(n<0|n>4)cout<<"输入错误,请重新输入!"cin>>n;if(n>s->top)cout<<"无此车!"<<endl;cout<<"按A键继续进行程序"&l

12、t;<endl;return ;if(n<s->top)while(n!=s->top)cout<<"牌照为"<<s->STOPs->top.license_plate<<"的汽车暂时退出停车位!"<<endl;l->top+;l->BUFFERl->top=s->STOPs->top; /将停在要开走的汽车前面的汽车暂时退出停车场,存入临时栈中s->top-;if(n=s->top)cout<<"牌照为&q

13、uot;<<s->STOPs->top.license_plate<<"的汽车从停车场开走;"<<endl;/汽车开走s->top-;while(l->top!=-1) s->top+;s->STOPs->top=l->BUFFERl->top; l->top-;cout<<"牌照为"<<s->STOPs->top.license_plate<<"的汽车停入停车位的"<<s->

14、;top<<"号车位!"<<endl;/将临时栈中的汽车再次存入停车场while(s->top<MAX_STOP-1&&q->num!=0)if(q->num=0)break;elseq->front=(q->front+1)%MAX_PAVE;s->top+;s->STOPs->top=q->PAVEq->front;/停车场未满,便道有车,此时存入停车场q->num-;cout<<"牌照为"<<s->STOPs

15、->top.license_plate<<"的汽车停入停车位的"<<s->top<<"号车位!"<<endl;cout<<"按A键继续程序的运行。"<<endl;4、查看停车场停车状态的查询模块:此模块用来在屏幕上显示停车位和便道上各位置的状态,例如,当前车位上1、2、3、4和5车位分别停放着牌照为JF001、JF002、JF003、JF004和JF005的汽车,便道上的1和2位置上分别停放着牌照为JF006和JF007的汽车,当接收查看指令后,屏幕上

16、应显示:函数原型为:void display(STOPPING *s,PAVEMENT * q)int topp;topp=-1;if(s->top=-1)cout<<"停车场内无车!"<<endl;elsecout<<"停车场内的情况:"<<endl;while(topp!=s->top)topp+;cout<<topp<<"车位-"<<s->STOPtopp.license_plate<<endl;/将停车场栈内的车辆

17、信息输出if(q->num!=0)cout<<"便道上的情况:"<<endl;int frontt=q->front;int m=q->num;int i=0;while(m!=0)i+;m-;cout<<i<<"车位-"<<q->PAVEfrontt+1.license_plate<<endl;/输出便道上的车辆信息情况frontt+;cout<<"按A键继续程序的运行。"<<endl; 由于程序应该能够随时处理用

18、户所提出的各种操作请求,所以在主函数中用一个while循环结构随时监控键盘的按键操作,遇到相应的按键就转到对应函数继续运行,运行完该函数继续监控键盘按键,如此往复,直到接到“退出”指令程序才能结束。部分代码如下:char m='A'while( m='A') welcome();char d;cin>>d;switch(d)case 'C': come( s, l, q);break;case 'L': leave( s, l, q);break;case 'D': display( s, q); br

19、eak;case 'Q':return 0;cin>>m;四、界面设计本程序的界面力求简洁、友好,每一步需要用户操作的提示以及每一次用户操作产生的调度结果都以中文的形式显示在屏幕上,使用户对要做什么和已经做了什么一目了然。五、编码实现#include "stdafx.h"#include<iostream>#include<string.h>using namespace std;#define MAX_STOP 5#define MAX_PAVE 100 /便道不限制停放车辆的数目,设为足够大typedef struct

20、char license_plate9;/汽车牌照号码,定义为一个字符数组类型CAR;typedef structCAR STOPMAX_STOP;/各汽车信息的存储空间int top; /用来指示栈顶位置的静态指针STOPPING;typedef struct CAR PAVEMAX_PAVE;/各汽车信息的存储空间int front,rear; /用来指示对头和队尾位置的静态指针int num;PAVEMENT;typedef structCAR BUFFERMAX_STOP;/各汽车信息的存储空间int top; /用来指示栈顶位置的静态指针BUFFER;void welcome() c

21、out<<"欢迎使用本程序"<<endl;cout<<endl;cout<<"本程序为停车场的模拟管理程序,有车到来时请按【C】键。"<<endl;cout<<"然后根据屏幕提示进行相关操作,有车要走时请按【L】键。"<<endl; cout<<"然后根据屏幕提示进行相关操作,显示停车情况请按【D】键。"<<endl;cout<<"然后根据屏幕提示进行相关操作,要退出程序请按【Q】键。&

22、quot;<<endl;cout<<"请选择您要做的操作!"<<endl;void come(STOPPING *s,BUFFER * l,PAVEMENT * q)CAR x;char b9;cout<<"欢迎停车,请输入车牌号(最多位):"cin>>b;for(int i=0;i<9;i+)x.license_platei=bi;/将车辆车牌号存入类型CAR的中if(s->top=MAX_STOP-1) cout<<"车位已满,请进入便道上等候!"

23、<<endl; q->rear=(q->rear+1)%MAX_PAVE;/若停车场内车位已满,将车辆信息存入队列中 q->PAVEq->rear=x; q->num+;elses->top+;s->STOPs->top=x; /若停车场内车位未满,将车辆信息存入栈中cout<<"牌照为"<<s->STOPs->top.license_plate<<"的汽车停入停车位的"<<s->top<<"号车位!&quo

24、t;<<endl;cout<<"按A键继续进行程序"<<endl;void leave(STOPPING *s,BUFFER * l,PAVEMENT * q)cout<<"欢迎取车,请输入您的车所停在的车位号:"int n;cin>>n;while(n<0|n>4)cout<<"输入错误,请重新输入!"cin>>n;if(n>s->top)cout<<"无此车!"<<endl;cou

25、t<<"按A键继续进行程序"<<endl;return ;if(n<s->top)while(n!=s->top)cout<<"牌照为"<<s->STOPs->top.license_plate<<"的汽车暂时退出停车位!"<<endl;l->top+;l->BUFFERl->top=s->STOPs->top; /将停在要开走的汽车前面的汽车暂时退出停车场,存入临时栈中s->top-;if(n=s

26、->top)cout<<"牌照为"<<s->STOPs->top.license_plate<<"的汽车从停车场开走;"<<endl;/汽车开走s->top-;while(l->top!=-1) s->top+;s->STOPs->top=l->BUFFERl->top; l->top-;cout<<"牌照为"<<s->STOPs->top.license_plate<<&q

27、uot;的汽车停入停车位的"<<s->top<<"号车位!"<<endl;/将临时栈中的汽车再次存入停车场while(s->top<MAX_STOP-1&&q->num!=0)if(q->num=0)break;elseq->front=(q->front+1)%MAX_PAVE;s->top+;s->STOPs->top=q->PAVEq->front;/停车场未满,便道有车,此时存入停车场q->num-;cout<<&q

28、uot;牌照为"<<s->STOPs->top.license_plate<<"的汽车停入停车位的"<<s->top<<"号车位!"<<endl;cout<<"按A键继续程序的运行。"<<endl;void display(STOPPING *s,PAVEMENT * q)int topp;topp=-1;if(s->top=-1)cout<<"停车场内无车!"<<endl;elsecout<<"停车场内的情况:"<<endl;while(topp!=s->top)topp+;cout<<topp<<"车位-"<<s->STOPtopp.license_plate<<endl;/将停车场栈内的车辆信息输出if(q->num!=0)cout<<"便道上的情况:"<<endl;int frontt=q->front;int m=q->num;int i=0;whil

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论