《数据构造课程设计停车场管理系统.docx》由会员分享,可在线阅读,更多相关《数据构造课程设计停车场管理系统.docx(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据构造课程设计停车场管理系统实验二停车场管理班级:A0712学号:12姓名:冷清淼成绩:_指导老师签名:_一、问题描绘设停车场是一个可停放n辆车的狭长通道,且只要一个大门可供汽车进出。在停车场内,汽车按到达的先后次序,由北向南依次排列假设大门在最南端。若停车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该辆车开出大门后,其他车辆再按原次序返回车场。每辆车离开停车场时,应按其停留时间的长短交费在便道上停留的时间不收费。设计要求:1模拟上述管理经过。要求以顺序栈模拟停车场,以链队
2、列模拟便道。2从终端读入汽车到达或离去的数据,每组数据包括三项:1是“到达还是“离开;2汽车牌照号码;3“到达或“离开的时刻。3与每组输入信息相应的输出信息为:假如是到达的车辆,则输出其在停车场中或便道上的位置;假如是离去的车辆,则输出其在停车场中停留的时间和应交的费用。二、算法讲明1数据构造讲明1用到两个堆栈:一个为车场栈;另一个为临时栈temptypedefstructNODECarNode*stackMAX+1;inttop;SeqStackCar;/*模拟车场*/2一个队列构造,存储便道车辆信息:typedefstructNodeQueueNode*head;QueueNode*rea
3、r;LinkQueueCar;/*模拟便道*/2算法讲明(1)功能模块讲明:停车场管理系统含有三个模块,即:车辆到达、离开、列表显示停车场系统车辆到达车辆离开列表显示321图12以模块为单位分析算法1、“到达模块:到达时有两种情况,即车场能否满,未满则直接进入停车场;满时,到便道等待。如图2。车辆到达停车场能否满结束进入停车场进入便道是否图22.“离开模块:离开时,当车库为空时,提示没有车,结束;否则车辆离开。如图3。车辆离开停车场能否空结束车辆离开提示没有车是否否便道能否有车是车进入车场图33.“显示模块:显示模块有两个显示选项,即:车场与便道。如图4。列表显示判定输入值结束显示车场列表显示
4、便道列表2.便道1.车场图4三、测试结果一测试用例讲明:测试用例要合理并且足够,既要有正确用例,也要有错误用例,同时检验程序的正确性和强壮性1第一组测试用例1测试输入:停车场的车辆离开,如下表:服务选择车牌号/车位到达/离开时间1QH05815:251AB12318:451EA64223:15220:30210:65错误2测试目的:测试离开方法时间格式控制以及费用计算能否正确。3正确输出:第一次离开的是AB123,应交费3.45元。第二次时,当在输入65时,应该提示输入错误,重输。4实际输出:5错误原因:第一个错误是在计算时,一个数字错了;第二个是没有对时间格式控制。6当前状态:已改正2第二组
5、测试用例1测试输入:连续6辆车到达,如下表:服务选择车牌号到达时间1A88287:561S22968:251WW6668:451HK45615:501GH99912:301DD55513:402测试目的:测试到达方法与列表显示方法能否正确完成。3正确输出:先到达的五辆车先进入停车场,最后到达的一辆在便道等候。4实际输出:5错误原因:没有作出时间先后的判定,而是先输入先进入。6当前状态:待修改3第三组测试用例1测试输入:接上一步输入离开信息,下表:服务选择离开车位离开时间便道车进入时间2313:3013:402测试目的:测试离开方法功能能否成功以及便道进入车场能否正确。3正确输出:输出3号车位的
6、车辆离开信息清单,便道1号车进入停车场。4实际输出:5错误原因:没有错误。6当前状态:通过二测试结果分析此停车管理系统基本可能实现一个小的停车场的管理,其“到达与“离开方法都相比照较完好,以及结算清单明了。尽管在时间先后上有出现混乱,但当其用到实际应用时,那个时间先后就能够避免了。但在输入数据时,要根据严格的格式输入,否则有可能出现死去或崩溃。若本系统能加上保存功能就更好了,由于一个系统在使用经过中总会关机等,而此系统的缺点却是没有保存功能,关闭之后就要重新建立了。会渐渐完善。附录:源代码/系统讲明:本系统适应于小型停车场,且停车时间在一天之内的短期停放停车场。/在此系统中,车库容量设置为5,
7、便于测试。在实际使用中能够对容量大小按实际情况设置。#include#include#include#include#defineMAX5/*车库容量,能够根据实际情况改变*/#defineprice0.01/*一辆车每分钟费用,可变*/typedefstructtimeinthour;intmin;Time;/*时间结点*/typedefstructnodecharnum10;Timereach;Timeleave;CarNode;/*车辆信息结点*/typedefstructNODECarNode*stackMAX+1;inttop;SeqStackCar;/*模拟停车场*/typedef
8、structcarCarNode*data;structcar*next;QueueNode;typedefstructNodeQueueNode*head;QueueNode*rear;LinkQueueCar;/*模拟便道*/*方法声明*/voidInitStack(SeqStackCar*);/*初始化栈*/intInitQueue(LinkQueueCar*);/*初始化便道*/intArrival(SeqStackCar*,LinkQueueCar*);/*车辆到达*/voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);/*车辆离开*
9、/voidList(SeqStackCar,LinkQueueCar);/*显示信息*/voidPRINT(CarNode*p,introom);/*输出离开车辆的信息清单*/voidmain()system(colorF2);/*设置系统颜色,本系统为白底绿字f2*/SeqStackCarEnter,Temp;LinkQueueCarWait;intch;InitStack(/*初始化车站*/InitStack(/*初始化让路的临时栈*/InitQueue(/*初始化通道*/while(1)coutch;if(ch=1&chtop=0;for(i=0;is-stacks-top=NULL;i
10、ntInitQueue(LinkQueueCar*Q)/*初始化便道*/Q-head=(QueueNode*)malloc(sizeof(QueueNode);if(Q-head!=NULL)Q-head-next=NULL;Q-rear=Q-head;return(1);elsereturn(-1);intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*车辆到达*/CarNode*p;QueueNode*t;p=(CarNode*)malloc(sizeof(CarNode);flushall();coutnum);if(Enter-toptop+;co
11、uttopp-reach.hour;while(p-reach.hourreach.hour23)/控制时间格式正确coutp-reach.hour;cinp-reach.min;while(p-reach.minreach.min59)/控制分钟输入正确coutp-reach.min;Enter-stackEnter-top=p;return(1);else/*车场已满,车进便道*/coutdata=p;t-next=NULL;W-rear-next=t;W-rear=t;return(1);voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQ
12、ueueCar*W)/*车辆离开*/introom;CarNode*p;QueueNode*q;/*判定车场内能否有车*/if(Enter-top0)/*有车*/while(1)/*输入离开车辆的信息*/couttoproom;if(room=1&roomtop)break;while(Enter-toproom)/*车辆离开*/Temp-top+;/*临时通道栈顶指针*/Temp-stackTemp-top=Enter-stackEnter-top;Enter-stackEnter-top=NULL;Enter-top-;p=Enter-stackEnter-top;Enter-stackE
13、nter-top=NULL;Enter-top-;while(Temp-top=1)/*判定临时通道上能否有车*/Enter-top+;Enter-stackEnter-top=Temp-stackTemp-top;Temp-stackTemp-top=NULL;Temp-top-;PRINT(p,room);if(W-head!=W-rear)&Enter-topq=W-head-next;p=q-data;/*p指向链队头*/Enter-top+;couttopp-reach.hour;if(p-reach.hourreach.hour23)coutp-reach.hour;cinp-reach.min;if(p-reach.minreach.min59)coutp-reach.min;Enter-stackEnter-top=p;W-head-next=q-next;if(q=W-rear)W-rear=W-head;free(q);/*释放q地址*/elsecoutp-leave.hour;while(p-leave.hourleave.hour23)coutp-leave.hour;B1=p-leave.hour;
限制150内