ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:116.71KB ,
资源ID:6770391      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6770391.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(停车场问题.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

停车场问题.docx

1、停车场问题实验三 停车场模拟管理程序的设计与实现本实验的目的是进一步理解栈和队列的逻辑结构和存储结构,进一步提高使用理论知识指导解决实际问题的能力。一、问题描述设停车场只有一个可停放几辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可进入;当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开入的车辆必须先退出车场为它让路,待该车辆开出大门,为它让路的车辆再按原次序进入车场。在这里假设汽车不能从便道上开走,试设计这样一个停车场模拟管理程序。为

2、了以下描述的方便,停车场用“停车位”进行叙述,停车场的便道用“便道”进行叙述。二、数据结构设计1为了便于区分每辆汽车并了解每辆车当前所处的位置,需要记录汽车的牌照号码和汽车的当前状态,所以为汽车定义一个新的类型CAR,具体定义如下:typedef struct char *license_plate; /汽车牌照号码,定义为一个字符指针类型 char state; /汽车当前状态,字符s表示停放在停车位上, /字符p表示停放在便道上,每辆车的初始状态用字符i来表示 CAR;2由于车位是一个狭长的通道,所以不允许两辆车同时出入停车位,当有车到来要进入停车位时也要顺次停放,当某辆车要离开时,比它后

3、到的车要先暂时离开停车位,而且越后到的车就越先离开停车位,显然这和栈的“后进先出”特点相吻合,所以可以使用一个栈来描述停车位。由于停车位只能停放有限的几辆车,而且为了便于停车场的管理,要为每个车位分配一个固定的编号,不妨设为1、2、3、4和5(可利用数组的下标),分别表示停车位的1车位、2车位、3车位、4车位和5车位,针对这种情况使用一个顺序栈比较方便,具体定义如下:#define MAX_STOP 5typedef struct CAR STOPMAX_STOP; /各汽车信息的存储空间 int top; /用来指示栈顶位置的静态指针STOPPING;3当停车场的停车位上都已经停满了汽车,又

4、有新的汽车到来时要把它调度到便道上,便道上的车辆要按照进入便道的先后顺序顺次存放在便道上,为便道上的每个位置也分配一个固定的编号,当有车从停车位上离开后,便道上的第一辆汽车就立即进入停车位上的某个车位,由于问题描述中限制了便道上的汽车不能从便道上开走,即便道上的汽车只有在停车位上停放过之后才能离开停车场,这样越早进入便道的汽车就越早进入停车位,而且每次进入停车位的汽车都是处于便道“最前面”的汽车,显然,这和队列的“先进先出”特点相吻合,所以,这里使用一个顺序队来描述便道,可以利用数组的下标表示便道的位置,具体定义如下:#define MAX_PAVE 100 /便道不限制停放车辆的数目,设为足

5、够大typedef struct CAR PAVEMAX_PAVE; /各汽车信息的存储空间 int front,rear; /用来指示队头和队尾位置的静态指针PAVEMENT;4当某辆车要离开停车场的时候,比它后进停车位的车要为它让路,而且当它开走之后让路的车还要按照原来的停放次序再次进入停车位的某个车位上,为了完成这项功能,再定义一个辅助栈,停车位中让路的车依次“压入”辅助栈,待提出开走请求的车开走后再从辅助栈的栈顶依次“弹出”到停车位中。对辅助栈也采用顺序栈,具体定义与停车位栈类似,如下:typedef struct CAR BUFFERMAX_STOP; /各汽车信息的存储空间 int

6、 top; /用来指示栈顶位置的静态指针BUFFER;当然,辅助栈直接利用在2中定义的类型STOPPING也是可以的。由于程序的各函数要对这些数据结构中的数据进行操作,而且每次操作的结果都要动态地反应到以上数据结构中,所以在程序设计时使用以上新类型定义的变量都采用全局变量的形式。三、功能(函数)设计1本程序从总体上分为4个大的功能模块,分别为程序功能介绍和操作提示模块、汽车进入停车位的管理模块、汽车离开停车位的管理模块和查看停车场停车状态的查询模块。具体功能描述如下:(1)程序功能介绍和操作提示模块:此模块给出程序欢迎信息,介绍本程序的功能,并给出程序功能所对应的键盘操作的提示,具体屏幕显示如

7、下所示: 欢迎使用本程序本程序为停车场的模拟管理程序,有车到来时请按【】键。然后根据屏幕提示进行相关操作,有车要走时请按【】键。然后根据屏幕提示进行相关操作,要退出程序请按【】键。 请选择您要做的操作!函数原型为:void welcome();(2)汽车进入停车位的管理模块:此模块用来登记停车场的汽车的车牌号和对该车的调度过程并修改该车的状态,其中调度过程要以屏幕信息的形式反馈给用户来指导用户对车辆的调度。例如,当前停车位上1、2、3车位分别停放着牌照为JF001、JF002、JF003的汽车,便道上无汽车,当牌照为JF004的汽车到来后屏幕应给出如下提示信息:牌照为JF004的汽车停入停车位

8、的4号车位!按【Enter】键继续程序的运行。函数原型为:void come();此函数还要调用其他对于栈和队列的基本操作。(3)汽车离开停车位的管理模块:此模块用来为提出离开停车场的车辆做调度处理,并修改相关车辆的状态,其中调度过程要以屏幕信息的形式反馈给用户来指导用户对车辆的调度,当有车离开停车场后应该立刻检查便道上是否有车,如果有车的话立即让便道上的第一辆汽车进入停车位。例如,当前停车位上1、2、3、4和5车位分别停放着牌照为JF001、JF002、JF003、JF004和JF005的汽车,便道上的1和2位置分别停放着牌照为JF006和JF007的汽车,当接收到JF003要离开的信息时,

9、屏幕应给出如下提示信息:牌照为JF005的汽车暂时退出停车位;牌照为JF004的汽车暂时退出停车位;牌照为JF003的汽车从停车场开走;牌照为JF004的汽车停回停车位的3车位;牌照为JF005的汽车停回停车位的4车位;牌照为JF006的汽车从便道上进入停车位的5车位;按【Enter】键继续程序的运行。函数原型为:void leave();此函数还要调用其他对于栈和队列的基本操作。(4)查看停车场停车状态的查询模块:此模块用来在屏幕上显示停车位和便道上各位置的状态,例如,当前停车位上1、2、3、4和5车位分别停放着牌照为JF001、JF002、JF003、JF004和JF005的汽车,便道上的

10、1和2位置分别停放着牌照为JF006和JF007的汽车,当接受到查看指令后,屏幕上应显示:停车位的 情况:1车位JF001;2车位JF002;3车位JF003;4车位JF004;5车位JF005;便道上的情况:1位置JF006;2位置JF007;按【Enter】键继续程序的运行。函数原型为:void display();此函数还要调用其他对于栈和队列的基本操作。2以上4个总体功能模块要用到的栈和队列的基本操作所对应的主要函数如表12-1所示。表12-1 栈和队列的基本操作所对应的主函数函 数 原 型函 数 功 能STOPPING *init_stopping()初始化“停车位栈”BUFFER

11、*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指定的汽车信息从“便道队列”移动到

12、“停车位栈”Int car_disp(int pos)将pos指定的汽车信息显示在屏幕上其他函数的定义和说明请参照源代码。3由于程序应该能够随时处理用户所提出的各种操作请求,所以在主函数中用一个dowhile循环结构随时监控键盘的按键操作,遇到相应的按键就转到对应函数继续运行,运行完该函数继续监控键盘按键,如此往复,直到接到“退出”指令程序才能结束。部分编码如下:welcome(); flushall(); do key=getchar(); if (key=C|key=c) come(); else if (key=L|key=l) leave(); else welcome(); whil

13、e(key!=Q)&(key!=q);四、界面设计本程序的界面力求简洁、友好,每一步需要用户操作的提示以及每一次用户操作产生的调度结果都以中文的形式显示在屏幕上,使用户对要做什么和已经做了什么一目了然。文字表述精练、准确。具体设计可参阅功能设计中的相关部分,这里就不再赘述。五、编码实现/ 停车场.cpp : Defines the entry point for the console application./ #include stdafx.h#include#define MAX_STOP 6 #define MAX_PAVE 100/1、汽车牌照号码和当前状态typedef struc

14、t char *license_plate;/汽车牌照号码,定义为一个字符指针类型 char state; /汽车当前状态,字符s表示停放在停车位上 /字符p表示停放在便道上,每辆车的初始状态用字符i来表示CAR;/2、用顺序栈来描述停车位 typedef struct CAR STOPMAX_STOP; /各汽车信息的存储空间 int top; /用来指示栈顶位置的静态指针STOPPING;/3、用队描述便道停车 typedef struct CAR PAVEMAX_STOP; int front,rear; /用来指示队头和队尾未知的静态指针PAVEMENT;/4、用栈来描述车离开车进去t

15、ypedef struct CAR BUFFMAX_STOP; /各汽车信息的存储空间 int top; /用来表示栈顶位置的静态指针BUFFER;/*定义停车位*/ STOPPING P; /*定义辅助栈*/ BUFFER R; /*定义便道*/ PAVEMENT Q; /功能设计/1、程序功能介绍和操作提示模块void welcome() cout 欢迎使用本程序 endl; cout本程序为停车场的模拟管理程序,有车到来时请按【C】键。endl; cout然后根据屏幕提示进行相关操作,有车要走时请按【L】键。endl; cout然后根据屏幕提示进行相关操作,要查看请按【S】键。endl;

16、 cout然后根据屏幕提示进行相关操作,要退出程序请按【Q】键。endl; cout请选择您要做的操作!endl;/2、汽车进入停车位的管理模块 void come(char *plate) if(P.top5) P.top+; P.STOPP.top.license_plate=plate; P.STOPP.top.state=s; cout车已停放在P.top号车位。endl; else Q.rear+; Q.PAVEQ.rear.license_plate=plate; Q.PAVEQ.rear.state=p; cout停车场车位已满,车已停放在便道的Q.rear-Q.front号车位

17、。endl; /3、汽车离开停车位的管理模块 /汽车进入辅助栈BUFFERvoid stop_to_buff() int dc; cout请输入要退出的车位号:dc; while(dcP.top) R.top+; R.BUFFR.top.license_plate=P.STOPP.top.license_plate; cout牌照号为P.STOPP.top.license_plate的汽车暂时退出停车位;endl; P.top-; if(dc=P.top) cout牌照号为P.STOPP.top.license_plate的汽车离开停车位;-1) P.top+; P.STOPP.top.lic

18、ense_plate=R.BUFFR.top.license_plate; P.STOPP.top.state=s; R.top-;cout牌照号为P.STOPP.top.license_plate的汽车放回到停车场的P.top号车位;endl; /汽车从便道进入停车位void pave_to_stop() Q.front+; P.top+; P.STOPP.top.license_plate=Q.PAVEQ.front.license_plate; P.STOPP.top.state=s; cout牌照号为Q.PAVEQ.front.license_plate的汽车从便道进入停车场停放在P.

19、top号车位;endl;/4、查看停车场停车状态的查询模块void display() int c=1; if(P.top!=0) cout停车场的停车情况:endl; while(cP.top+1) coutP.STOPc.license_plate停入c号车位。endl; c+; if(Q.frontQ.rear) int l=Q.front+1;int i=1; cout便道上的停车情况:endl; while(l=Q.rear) coutQ.PAVEl.license_plate停入便道的i号车位endl; i+;l+; else cout停车场上没有车!key; do if(key=

20、C|key=c) coutplate; come(plate);welcome(); else if(key=L|key=l) stop_to_buff(); buff_to_stop(); pave_to_stop(); welcome(); else if(key=S|key=s) display(); welcome(); else welcome(); cinkey; while(key!=Q) & (key!=q); cout*谢谢使用本程序!*endl; return 0;六、运行与测试对于测试用的设计注重所定义的数据结构的边界以及各种数据结构共存的可能性。例如:1连续有7辆车到来,牌照号分别为JF001、JF002、JF003、JF004、JF005、JF006和JF007,前4辆车应该进入停车位14车位,第5辆、第6辆和第7辆车应停入便道的1和2和3位置上。21中的情况发生后,让位置1的汽车从停车场开走,应显示JF004和JF003、 JF002的让路动作和JF005从便道到停车位上的动作。1中的情况发生后,让位置1的汽车从停车场开走,应显示JF005和JF004、 JF003的让路动作和JF006从便道到停车位上的动作。3检查停车位和便道的状态4又一次存入车辆,并查看检查停车位和便道的状态5又一次让汽车开走6.退出停车场系统

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1