




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
停车场模拟管理程序的设计与实现一、问题描述:设停车厂只有一个可停放几辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可进入;当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门后,为它让路的车辆再按原次序进入车场。在这里假设汽车不能从便道上开走。二、数据结构设计 1、为了便于区分每辆汽车,需要记录汽车的车牌号码,所以为汽车定义一个新的类型CAR,具体定义如下: typedef structchar license_plate9;/汽车牌照号码,定义为一个字符串型CAR; 2、由于车位是一个狭长的通道,所以不允许两辆车同时出入停车位,当有车到来要进入停车位时也要顺次停放,当某辆车要离开时,比它后到的车要先暂时离开停车位,而且越后到的车越先离开停车位,显然这和栈的“后进先出”特点相吻合,所以可以使用一个栈来描述停车位。由于停车位只能停放有限的几辆车,而且为了便于停车场的管理,要为每个车位分配一个固定的编号,不妨设为0,1,2,3和4(可利用数组下标),分别表示停车位的0车位,1车位,2车位,3车位和4车位,针对这种情况使用一个顺序栈比较方便,具体定义如下:typedef structCAR STOPMAX_STOP;/各汽车信息的存储空间int top; /用来指示栈顶位置的静态指针STOPPING;3、当停车场的停车位上都已经停满了汽车,又有新的汽车到来时要把它调度到便道上,便到上的车辆要按照进入便道的先后顺序顺次存放在便道上,为便道上的每个位置也分配一个固定的编号,当有车从停车位上离开后,便道上的第一辆汽车就立即进入停车位上的某个车位,由于问题描述中限制了便道上的汽车不能从便道上开走,即便道上的汽车只有在停车位上停放过后才能离开停车场,这样越早进人便道的汽车就越早进人停车位,而且每次进入停车位的汽车都是处于便道“最前面”的汽车,显然,这和队列的“先进先出”特点相吻合,所以,这里使用一个顺序队来描述便道,可以利用数组的下标表示便道的位置,具体定义如下:#define MAX_PAVE 100 /便道不限制停放车辆的数目,设为足够大typedef struct CAR PAVEMAX_PAVE;/各汽车信息的存储空间int front,rear; /用来指示对头和队尾位置的静态指针int num;PAVEMENT;4、当某辆车要离开停车场的时候,比它后进停车位的车要为它让路,而且当它开走之后让路的车辆还要按照原来的停放次序再次进入停车位的某个位置上,为了完成这项功能,再定义一个辅助栈,停车位中让路的车依次“压入”辅助栈,待提出开走请求的车开走后,再从辅助栈的栈顶依次“弹出”到停车位中。对辅助栈也采用顺序栈,具体定义与停车栈类似,如下:typedef structCAR BUFFERMAX_STOP;/各汽车信息的存储空间int top; /用来指示栈顶位置的静态指针BUFFER;三、功能函数设计本程序从总体上分为4个大的功能模块,分别为程序功能介绍和操作提示模块,汽车进入车位的管理模块,汽车离开停车位的管理模块和查看停车场停车状态的查询模块。具体功能描述如下:1、程序功能介绍和操作提示模块:此模块给出程序的功能,并给出程序功能所对应的键盘操作的提示,具体屏幕显示如下所示:欢迎使用本程序本程序为停车场的模拟管理程序,有车到来时请按【C】键。然后根据屏幕提示进行相关操作,有车要走时请按【L】键。然后根据屏幕提示进行相关操作,显示停车情况请按【D】键。然后根据屏幕提示进行相关操作,要退出程序请按【Q】键。请选择您要做的操作!函数原型为:void welcome() cout欢迎使用本程序endl;coutendl;cout本程序为停车场的模拟管理程序,有车到来时请按【C】键。endl;cout然后根据屏幕提示进行相关操作,有车要走时请按【L】键。endl; cout然后根据屏幕提示进行相关操作,显示停车情况请按【D】键。endl;cout然后根据屏幕提示进行相关操作,要退出程序请按【Q】键。endl;cout请选择您要做的操作!endl;2、汽车进入停车位的管理模块:此模块用来登记停车场的汽车车牌号和对该车的调度。其中,调度过程要以屏幕信息的形式反馈给用户来指导用户对车辆进行调度。例如,调度过程要以屏幕信息的形式反馈给用户来指导用户对车辆的调度。例如,当期车位上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(int 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、汽车离开停车场车位的车辆做调度处理。其中调度过程要以屏幕信息的形式反馈给用户来指导用户对车辆的调度,当有车辆离开停车场后应该立刻检查便道上是否有车,如果有,则立即让便道上的第一辆汽车进入停车位。例如,当前停车位上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牌照为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-front=(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键继续程序的运行。d;switch(d)case C: come( s, l, q);break;case L: leave( s, l, q);break;case D: display( s, q); break;case Q:return 0;cinm;四、界面设计本程序的界面力求简洁、友好,每一步需要用户操作的提示以及每一次用户操作产生的调度结果都以中文的形式显示在屏幕上,使用户对要做什么和已经做了什么一目了然。五、编码实现#include stdafx.h#include#includeusing namespace std;#define MAX_STOP 5#define MAX_PAVE 100 /便道不限制停放车辆的数目,设为足够大typedef structchar 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() cout欢迎使用本程序endl;coutendl;cout本程序为停车场的模拟管理程序,有车到来时请按【C】键。endl;cout然后根据屏幕提示进行相关操作,有车要走时请按【L】键。endl; cout然后根据屏幕提示进行相关操作,显示停车情况请按【D】键。endl;cout然后根据屏幕提示进行相关操作,要退出程序请按【Q】键。endl;cout请选择您要做的操作!endl;void come(STOPPING *s,BUFFER * l,PAVEMENT * q)CAR x;char b9;coutb;for(int 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;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牌照为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-front=(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键继续程序的运行。top=-1;/建立停车场栈并初始化 BUFFER *l;l=new BUFFER;if(!l)return NULL;else l-top=-1;/建立临时停车栈并初始化PAVEMENT * q;q=new PAVEMENT;q-front=q-rear=-1;q-num=0;/建立队列并初始化char m=A;while( m=A) welcome();char d;cind;switch(d)case C: come( s, l, q);break;case L: leave( s, l, q);break;case D: display( s, q); break;case Q:return 0;cinm; return 0;六、运行与测试1、连续有7辆车到来,牌照分别为JF001,JF002,JF003,JF004,JF005,JF006,和JF007,前五辆车应该停入车位04车位,第6辆和第7辆车应停入便道1和2位置上。正常输入如上图显示停车场内停车情况2、1中情况下让牌照为JF003的汽车从停车场开走3、当停车场内无此车时,取车会显示错误4、当n4或n0时,会提示让从新输入七、实验总结此次实验主要是让我们更熟练的掌握栈和队列,入栈出栈,入队出队,通过这次实验,我更深刻的理解到了栈和队列运用的灵活与方便。虽然过程中遇到许多困难,但在老师和同学的帮助下,终于将停车场实现出来,从中将自己掌握不好的知识点又巩固了,这次实验受益颇多。袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中化学 第2章 化学反应的方向、限度与速率 第4节 化学反应条件的优化说课稿 鲁科版选修4
- Unit1 Reading 1 说课稿 2024-2025学年译林版(2024)七年级英语下册
- 2.1两条直线的位置关系(一)说课稿 2025-2026学年北师大版七年级数学上册
- 蔬菜合作社专业知识培训课件
- 2025年中考数学总复习《角、相交线和平行线》专项检测卷(附答案)
- 地产公司工业化建造体系薄砌薄抹应用技术指引
- 综合复习与测试教学设计-2025-2026学年高中数学人教B版2019必修第一册-人教B版2019
- 2025年中考化学试题分类汇编:化学与社会(第2期)原卷版
- 蓄禽养殖小知识培训总结课件
- 13.2画轴对称图形 说课稿 2024-2025学年人教版数学八年级上册
- 工作证明(常见模板10套)
- 考研英语单词的前缀后缀
- 2025年度古董古玩展览策划与买卖合同
- 牢记教师初心不忘育人使命作新时代合格人民教师课件
- 勾股定理的实际应用课件
- 人教版(2024)七年级下册英语期末复习:完形填空 专题练习题(含答案)
- 急性上呼吸道感染的护理
- 二年级体育上册 体育与健康室内课教案
- GB 44263-2024电动汽车传导充电系统安全要求
- 项目资金融资合同范本
- YDT 4484-2023物联网云平台技术要求
评论
0/150
提交评论