德州学院2012级信息管理学院计算机科学与技术数据结构课程设计1停车场管理系统1实习目的通过本次课程设计,了解并初步掌握设计、实现系统的完整过程,包括系统分析、编码设计、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。2问题描述停车场是一条可以停放n辆车的狭窄通道,且只有一个大门汽车停放安到达时间的先后依次由北向南排列(大门在最南端,最先到达的第一辆车停在最北端)若停车场已经停满n辆车,后来的汽车在便道上等候,一旦有车开走,排在便道上的第一辆车可以开入;当停车场的某辆车要离开时,停在他后面的车要先后退为他让路,等它开出后其他车在按照原次序开入车场,每两停在车场的车要安时间长短缴费。基本要求(1)以栈模拟停车场,以队列车场外的便道,按照从终端输入的数据序列进行模拟管理。每一组数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码、以及到达或离去的时刻。对每一组数据进行操作后的信息为:若是车辆到达,则输出汽车在停车场的内或便道上的位置:若是车辆离去则输出汽车在停车场内的停留时间和应缴纳的费用(在便道上的停留时间不收费)。栈以顺序结构实现,队列以链表结构实现。(2)友好性:界面要友好,输入有提示,尽量展示人性化。(3)可读性:源程序代码清晰、有层次,必要时给出注释。(4)健壮性:用户输入非法数据时,系统要及时给出警告信息。(5)测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明。3需求分析停车场是一条可以停放n辆车的狭窄通道,且只有一个大门。汽车停放按到达时间的先后排列。若停车场已经停满n辆车,后来的汽车在便道上等候。一旦有车开走,排在便道上的第一辆车可以开入;当停车场的某辆车要离开时,停在他后面的车要先后退为他让路。等它开出后,其他车再按照原次序开入车场,每辆停在车场的车要按时间长短缴费。3.1设计基本要求(1)以栈模拟停车场,以队列模拟车场外的便道,按照从终端输入的数据序列进行德州学院2012级信息管理学院计算机科学与技术数据结构课程设计2模拟管理。每一组数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码、以及到达或离去的时刻。对每一组数据进行操作后的信息为:若是车辆到达,则输出汽车在停车场的内或便道上的位置:若是车辆离去则输出汽车在停车场内的停留时间和应缴纳的费用(在便道上的停留时间不收费)。栈以顺序结构实现,队列以链表结构实现。(2)友好性:界面要友好,输入有提示,尽量展示人性化。(3)可读性:源程序代码清晰、有层次,必要时给出注释。(4)健壮性:用户输入非法数据时,系统要及时给出警告信息。(5)测试数据:要求使用全部合法数据、整体非法数据、局部非法数据进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明。3.2停车场管理系统的主要功能(1)根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。(2)该程序设计能够通过车牌号查到该车辆在停车场或便道中的位置。(3)当有车辆从停车场离开时,等待的车辆按顺序进入停车场停放。实现停车场的调度功能。该程序设计可以完整的模拟停车场的管理过程。4详细设计4.1数据结构的设计程序中使用了一个类,五个结构体,两个栈(模拟停车场,其中一个为临时栈),一个队列(模拟便道)。(1)车辆信息的表示车辆可看成是一个节点,设计成一个结构体,车辆信息包括:车牌号码,车辆的进站时间和离开停车场的时间,定义如下:typedefstructnode{charnum[10];//车牌号码Timereach;//到站时间Timeleave;//离开时间}CarNode;(2)时间、栈和队列的定义时间是由小时和分钟表示的,有两部分数据,设计两个变量分别存储小时和分钟,定义如下:typedefstructtime{德州学院2012级信息管理学院计算机科学与技术数据结构课程设计3inthour;intmin;}Time;停车场内用栈表示:typedefstructNODE{CarNode*stack[MAX+1];//栈用顺序表示inttop;}SeqStackCar;SeqStackCarEnter,Temp;InitStack(&Temp)在车辆离开时,应用temp临时栈把将要离开的车辆后续车辆压入,等车辆离开后压回原栈stack。便道上的车辆表示:typedefstructcar{CarNode*data;//便道上的车用链表表示structcar*next;}QueueNode;typedefstructNode{QueueNode*head;//设置头指针、尾指针QueueNode*rear;}LinkQueueCar;4.2算法的设计思想及流程图4.2.1主要函数的功能说明(1)voidInitStack(SeqStackCar*);//车辆节点进栈。即当栈未满时,就把到达的车辆进栈。(2)intInitQueue(LinkQueueCar*);//车辆节点进队列。即当栈已满时,车辆就进入便道上的队列中(3)intArrival(SeqStackCar*,LinkQueueCar*);//车辆到达登记。即车辆到达时,先登记车辆车牌号码。然后再判断停车场有没有停满,没停满就进栈,停满了就停在便道上,即进队列。(4)voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);//车辆离开处理。即通过输入离开车辆的位置处理,然后调用PRINT(CarNode*p,introom);函数进行收费。然后再判断便道上有没有车,如果有,就把便道上的车进停车场内。德州学院2012级信息管理学院计算机科学与技术数据结构课程设计4(5)voidList(SeqStackCar,LinkQueueCar);//显示车场内和便道上的车辆情况。利用switch();函数选择显示车场内或是便道上的车辆情况,包括对下面两个子函数的调用:voidList1(SeqStackCar*S);voidList2(LinkQueueCar*W);//分别用来显示车场和便道上的车辆情况(6)voidPRINT(CarNode*p,introom);//车辆离开时的收费。即这个函数由车辆离开的函数调用,以分钟计时算费,但只能计算当天之内的费用,如果第二天的话会导致计费为负或减少。即只能当天停,当天开走。4.2.2停车场管理系统流程图经过对车辆的进出分析以及对该系统的详细设计,绘制停车场管理系统流程图如图1.德州学院2012级信息管理学院计算机科学与技术数据结构课程设计5图1停车场管理系统流程图德州学院2012级信息管理学院计算机科学与技术数据结构课程设计64.2.3主要模块算法描述本程序最主要的算法就是车辆到达登记的和车辆离开时的登记。(1)车辆到达:intArrival(SeqStackCar*Enter,LinkQueueCar*W)//首先定义一个栈和队列的结构体指针为:*p,*t。然后申请一个车辆信息的内存空间,并把它赋给栈指针。车辆到达时就输入车牌号,并通过if(Enter-topMAX)来判断该车是进车场内还是进便道上,如果是进车场内就把top加1,显示在车场内的位置,还要输入进车场的时间,然后把该节点进栈。如果是else就显示该车要停在便道上,并进行进队列的操作。(2)车辆离开:voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)//定义一个整型变量room记录要离开车辆的位置,定义两个栈指针和一个队列指针,用个if(Enter-top0)确保栈不空,然后用个while(1)确保输入的车辆离开位置的合法性。如果不合法,显示输入有误,要重新输入。通过while(Enter-toproom)判断离开车辆的位置,如果是中间位置,就要再用一个临时栈放置前面临时开出来的车,等要开出的车开出后,再把临时栈内的车开进停车场内,并调用PRINT(p,room);这个函数计算显示费用。然后还要用if((W-head!=W-rear)&&Enter-topMAX)语句判断便道上有没有车,如果有车就要显示进停车场的车的车牌号,并登记进入时间。并要进行相应的出队列和进栈操作。5测试分析5.1测试用例说明:测试用例要合理并且足够,既要有正确用例,也要有错误用例,同时检验程序的正确性和强壮性。5.1.1第一组测试用例(1)测试输入:停车场的车辆离开,如表1所示:德州学院2012级信息管理学院计算机科学与技术数据结构课程设计7表1:车辆离开测试服务选择车牌号/车位到达/离开时间1京A121212:121津S121212:131鲁D121212:142114:122125:65(错误)(2)测试目的:测试离开方法时间格式控制以及费用计算是否正确。(3)正确输出:第一次离开的是京A1212,应交费2.4元。第二次时,当在输入65时,应该提示输入错误,重输。(4)实际输出:图2测试离开方式时间格式及费用计算图图3测试车辆离开错误图(5)错误原因:第一个正确,第二个错误,原因是没有对时间格式控制。(6)当前状态:已改正德州学院2012级信息管理学院计算机科学与技术数据结构课程设计85.1.2第二组测试用例(1)测试输入:连续5辆车到达,如表2所示:表2:连续5辆车到达测试服务选择车牌号/车位到达时间1京A121212:121津S121212:131鲁D121212:141豫F121212:151沪G121212:162114:12(2)测试目的:测试到达方法与列表显示方法能否正确完成。(3)正确输出:先到达的三辆车先进入停车场,最后到达的两辆在便道等候。(4)实际输出:表4车辆到达方式测试德州学院2012级信息管理学院计算机科学与技术数据结构课程设计9图5车辆进入提示图(5)错误原因:没有错误。(6)当前状态:通过。5.1.3第三组测试用例(1)测试输入:接上一步输入离开信息,如表3所示:表3:接上一步离开信息测试服务选择离开车位离开时间便道车进入时间2114:1214:13(2)测试目的:测试离开方法功能是否成功以及便道进入车场是否正确。(3)正确输出:输出1号车位的车辆离开信息清单,便道1号车进入停车场。(4)实际输出:德州学院2012级信息管理学院计算机科学与技术数据结构课程设计10图6测试离开方法功能是否成功图(5)错误原因:没有错误。(6)当前状态:通过5.2测试结果分析经过我们小组一天的调试,我们终于把各模块整合起来了。在这过程中,我们遇到了很多问题,像数据不匹配、括号不配对、赋值重复等。因为C语言的语法限制不太严格,对变量的类型约束不严格,对数组下标越界不做检查等原因,所以,我们的修改工作难度加大。但经过我们这小组共同的努力。此停车管理系统可以基本实现一个小的停车场的管理,其“到达”与“离开”方法都相对比较完整,费用结算清单直观。在输入数据时,要按照严格的格式输入,否则有可能出现死去或崩溃。若本系统能加上保存功能就更好了,因为一个系统在使用过程中总会关机等,而此系统的缺点却是没有保存功能,关闭之后数据丢失。现受限于各种条件,又因为要求中并未提及,所以本程序暂时没有加入保存功能。德州学院2012级信息管理学院计算机科学与技术数据结构课程设计116使用说明(1)运行程序,首先出现主界面。主界面包括四个选项:选项1:车辆到达登记,选择该项可进行车辆到达停车场情况登记;选项2:车辆离开登记,选择该项可进行车辆离开停车场情况登记;选项3:车辆列表显示,选择该项可查看车辆列表显示的所有信息,包括停车场列表和便道列表的全部信息;选项4:退出系统,选择该项将退出程序。图7程序初始界面图(2)车辆列表显示界面包括3个选项:选项1:停车场列表,选择该项可以查看停车场列表的所有车辆的全部信息;选项2:便道列表,选择该项可以查看便道列表显示的全部信息;选项3:返回主菜