数据结构实验二:停车场管理问题_第1页
数据结构实验二:停车场管理问题_第2页
数据结构实验二:停车场管理问题_第3页
数据结构实验二:停车场管理问题_第4页
数据结构实验二:停车场管理问题_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、HUNAN UNIVERSITY课程实习报告题 目: 停车场管理问题学生姓名 学生学号专业班级指导老师李晓鸿完 成 日 期2 0 1 5年 11 月 25日1、 需求分析1. 输入的形式的输入的范围:选择功能:1停车 2离开停车场 3离开过道若输入1(停车),输入当前车牌号和当前的时间;若输入2(离开停车场),输入车票号和当前时间;若输入3(离开过道),输入车牌号.2. 输出的形式:提示选择功能“1。停车 2离开停车场 3离开过道。若输入1(停车),并且输入当前车牌号和当前的时间后,若停车场未满,输出“成功 停入停车场,停车场内有n辆车,过道上有m辆车等候”;若停车场满,输出 “停 车场已满,

2、请在过道等候”. 若输入2(离开停车场),输入车票号和当前时间,输出“存车总计时间,收费q元, 停车场内有n辆车,过道上有m辆车等候”;如果进停车场和出停车场时间错误,输 出“时间输入有误,请重新输入”;如果停车场没有此车,输出“车牌号有误,请重新 输入”.若输入3(离开过道),输入车牌号,输出“此车已成功离开过道;若无此车,输出 “停车过道为空”.若输入其他,则提示选择功能“1.停车 2离开停车场 3离开过道。3. 程序所能达到的功能:有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最

3、里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序.4. 测试数据:正常的进入停车场,出停车场,离开过道的模拟输入11(车牌)1(当前时间)输入 12(车牌)2(当前时间)输入22(车牌)3(当前时间)输入13(车牌)4(当前时间)

4、输入14(车牌)5(当前时间)输入34(车牌)停车场里没有车出停车场的模拟输入21(车牌)过道没车出过道的模拟输入31(车牌)进入停车场时间与出停车场时间的模拟输入11(车牌)1(进停车场的时间)输入21(车牌)0(出停车场的时间)停车场模拟系统功能输入错误输入4二。概要设计抽象数据类型:由于该停车场只有一个门供出入,并且最先进的停在停车场的最末,最先进的车辆要出停车场需要之后进入的车先出,满足先进后出的结构,其限制是仅允许在表的一端进行插入和删除运算,所以用栈来模拟停车场。由于这是一个模拟的车库,车辆出停车场,后面车辆不得不被动跟着出停车场,我们需要对这些车辆进行管理,将第一辆被动出停车场的

5、放置到一个队伍的前端,接下来被动出停车场的车辆依次放到第一辆车之后,当需要离开的车出栈后,对被动出停车场的车辆进行管理,又队伍的前端依次进入停车场,由于满足只允许在表的前端进行删除操作,而在表的后端进行插入操作,所以用队列来模拟被动出停车场车辆的管理.基本思想1。给定一个size为停车场的容量.2。每一辆车进栈前,储存车辆编号和进栈的时间.3.对于栈满的情况,再来的车辆不进栈,只记录编号。4.对于出栈的车辆,先将出栈车辆之前的停车场内车辆由后往前依次进入队列中,将进栈和出栈时间相比较算出需要付的金额,之后再将队列中的元素由前往后依次进栈。程序的流程程序由三个模块组成:输入模块:按照提示输入计算

6、模块:计算(出栈时间进栈时间)每小时金额。输出模块:首先提示 ”请选择:1、停车;2、离开停车场;3、离开过道;” 选择1。2提示 ”请输入车牌号和现在的时间:” 选择3提示“请输入车牌号”基本ADT栈空判别算法int Empty_SeqStack(queue s) if (stop = 1)return 0;elsereturn 1;入栈算法void Push_SeqStack(queue *s, Datatype x) stop+;sdata1stop = x;return;出栈算法void Pop_SeqStack(queue *s, Datatype *x) *x = sdata1s-

7、top;s-top-;return;列队初始化C_SeQueue Init_SeQueue() C_SeQueue q;q = new C_SeQueue;q-front = q-rear = MAXSIZE 1;qnum = 0;return q;入队算法void In_SeQueue(C_SeQueue *q, Datatype x) q-rear = (q-rear + 1) MAXSIZE;qdata2qrear = x;q-num+;return;出队算法void Out_SeQueue(C_SeQueue q, Datatype *x)q-front = (qfront + 1)

8、% MAXSIZE;x = qdata2qfront;qnum-;return;算法流程图(进入车库和出车库)3 详细设计1. 数据类型用Int型整数储存车辆的信息。车辆进出时间.收取的费用2.算法的具体步骤车进入停车场的基本操作void Arrive(queue s, C_SeQueue q, int x, double t) int y;int a = stop;while (a != 1) /判断将要存的车是否已存在于停车场,防止出现有相同车牌号的车出现在停车场内;if (sdata1a = x)cout 此车已存在停车场内! endl;return;elsea;if (Push_Seq

9、Stack1(s, x, t))cout ”此车已成功存入停车场。 endl;elsecout 停车场已满,后来车辆请在便道等候。 data1stop != x&!Empty_SeqStack(s)Pop_SeqStack(s, &y);Push_SeqStack(s1, y);if (sdata1s-top = x) while (i)if (t = 1 & t = 24 & tstimestop)d = t - s-timestop;Pop_SeqStack(s, y);cout ”存车时间总计:” d ”小时” endl 收费为:” d 元” endl;i = 0;elsecout ”时

10、间输入有误,请重新输入。” t;elsecout 车牌号有误,停车场中无此车.” num != 0 s-top != MINSIZE - 1)Out_SeQueue(q, y);Push_SeqStack1(s, y, t);show(s, q);return;离开过道的基本操作void Leave1(queue *s, C_SeQueue q, int x) if (q-num = 0)cout ”停车过道为空。” data2a != x (a + MAXSIZE) MAXSIZE != q-front)a-;if (q-data2(a + MAXSIZE) MAXSIZE = x)whil

11、e (a + MAXSIZE) MAXSIZE != qrear - 1)qdata2a = q-data2a + 1;a+;qnum-;cout ”此车已成功离开过道。 endl;elsecout ”此车不在过道中。” usingnamespace std;defineMAXSIZE 10defineMINSIZE 2typedefintDatatype;typedefstructDatatype data1MINSIZE;int top;double timeMINSIZE;queue;queue *Init_SeqStack() /栈的初始化;queue s;s = newqueue;i

12、f (!s)cout top = 1;return s;int Empty_SeqStack(queue s) /栈空判别算法;if (stop = 1)return 0;elsereturn 1;void Push_SeqStack(queue *s, Datatypex) /入栈算法;stop+;sdata1stop = x;return;int Push_SeqStack1(queue s, Datatypex, doublet) /入栈算法1;if (stop = MINSIZE - 1)return 0;elsestop+;sdata1s-top = x;stimestop = t;

13、return 1;void Pop_SeqStack(queue s, Datatype x) /出栈算法;x = sdata1s-top;s-top-;return;typedefstructDatatype data2MAXSIZE;int rear, front;int num;C_SeQueue;C_SeQueue Init_SeQueue() /列队初始化;C_SeQueue *q;q = newC_SeQueue;qfront = qrear = MAXSIZE - 1;qnum = 0;return q;void In_SeQueue(C_SeQueue q, Datatypex

14、) /入队算法;q-rear = (q-rear + 1) % MAXSIZE;qdata2qrear = x;qnum+;return;void Out_SeQueue(C_SeQueue *q, Datatype x)/出队算法;qfront = (q-front + 1) % MAXSIZE;*x = qdata2qfront;qnum-;return;void show(queue s, C_SeQueue *q) /显示停车情况;cout 停车场内有” s-top + 1 辆车。” endl;cout ”通道上有” qnum ”辆车在等候。” endl;void Arrive(que

15、ue s, C_SeQueue q, intx, doublet) /停车;int y;int a = stop;while (a != 1) /判断将要存的车是否已存在于停车场,防止出现有相同车牌号的车出现在停车场内;if (sdata1a = x)cout ”成功停入车场” endl;return;elsea-;if (Push_SeqStack1(s, x, t))cout 成功停入车场。” endl;elsecout data1s-top != x&!Empty_SeqStack(s) Pop_SeqStack(s, y);Push_SeqStack(s1, y);if (sdata1

16、stop = x) while (i)if (t = 1 & t = 24 ts-times-top)d = t - stimestop;Pop_SeqStack(s, &y);cout ”存车时间总计:” d 小时” endl 收费为:” d 元” endl;i = 0;elsecout 时间输入有误,请重新输入。” t;elsecout 车牌号有误,停车场中无此车。” top != MINSIZE - 1)Out_SeQueue(q, y);Push_SeqStack1(s, y, t);show(s, q);return;void Leave1(queue s, C_SeQueue q,

17、 intx) /离开过道;if (qnum = 0)cout ”停车过道为空。” data2a != x (a + MAXSIZE) % MAXSIZE != qfront) a;if (qdata2(a + MAXSIZE) MAXSIZE = x)while (a + MAXSIZE) % MAXSIZE != qrear 1)qdata2a = q-data2a + 1;a+;qnum;cout ”此车已成功离开过道。” endl;elsecout 此车不在过道中。 endl;show(s, q);void main()double time;int x, a;queue s;C_SeQueue q;s

温馨提示

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

评论

0/150

提交评论