《停车场管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《停车场管理系统实验报告.docx(20页珍藏版)》请在第壹文秘上搜索。
1、停车场管理系统实验报告一、需求分析1程序的功能:设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。(1)建立静态数组栈作为模拟停车场,动态链表栈作为模拟便道。(2)车辆到达,停入
2、停车场或者便道,记录车牌号,到达时间。(3)车辆离开,记录离开时间,输出停车时间和收费。将便道内车停入停车场,记录进入时间。(4)列表显示停车场,便道内车辆情况。(5)列表显示历史记录(已经离开车的车牌号,到达离开时间,收费)。2 .输入输出的要求:(1)输入:字符串车牌号,到达时间,离开时间(2)输出:停车时间和收费,停车场和便道的停车情况,历史记录。3 .测试数据:1停车场:车牌号苏Allll到达时间12:20离开时间13:002停车场:车牌号苏Allll到达时间12:20离开时间13:00;车牌号苏A2222到达时间13:00离开时间14:00选择停车场内1号位离开,再选择停车场内2号位
3、离开3停车场:车牌号苏AlIIl到达时间12:20离开时间13:00;车牌号苏A2222到达时间13:00离开时间14:00便道:车牌号苏A3333到达时间12:30离开时间13:00;车牌号苏A4444到达时间13:00离开时间15:00选择停车场内2号位离开,再选择选择停车场内2号位离开4停车场:车牌号苏AllII到达时间12:20离开时间13:00;车牌号苏A2222到达时间13:00高开时间14:00便道:车牌号苏A3333到达时间12:30离开时间13:00;车牌号苏A4444到达时间13:00离开时间15:00输出停车场内和便道的停车情况5停车场:车牌号苏AllII到达时间12:2
4、0离开时间13:00;车牌号苏A2222到达时间13:00高开时间14:00便道:车牌号苏A3333到达时间12:30离开时间13:00;车牌号苏A4444到达时间13:00离开时间15:00让苏AIlII和苏A2222高开后,再输出停车场内和便道的停车情况,以及历史记录6选择4退出系统二.概要设计4.本程序所用的抽象数据类型的定义ADTStack数据对象:D=aiai为ElemSe3i为正整数数据关系:Rl=ail,ai都属于D,i为正整数基本操作:InitStack(&S)栈SDestroyStack(&S)StackLength(三)元素个数,即栈的长度。StackEmpty(三)空栈,
5、则返回TRUE,否则FALEoGetTop(S,&e)S的栈顶元素ClearStack(&S)构建一个空/S被销毁返回S的若栈S为用e返回将S清为空栈PUSh(&S, e)入元素e为新的栈顶元素。Pop(&S,&e)/删除S的栈顶元素,并用e返回其值2.主程序的流程及各程序模块之间的层次关系(1)流程:输出菜单“1.车辆达到2.车辆离开3.列表显示4.退出系统”。0先选择1,输入车牌号,输出车在停车场的位置,再输入到达时间。随意选择123,4。若选1,停车场满后停在便道上,输入车牌号。选择2,输入要离开的车辆在停车场的位置和离开时间。输出停车时间和费用。若便道上有车,将一辆车移到停车场,输入现
6、在时间。选择3,输出菜单“L停车场2.便道3.历史记录4.返回”。选择1,23分别显示停车场,便道,历史记录的情况。选择4返回到开始菜单。最后选择4结束程序。二、详细设计1.采用c语言定义相关的数据类型(1) typedefstructtimeinthour;intmin;Time;/*时间结点*/(2) typedefstructnode(charnum10;Timereach;Timeleave;inttime;车停在停车场的总时间CarNode;/*车辆信息结点*/(3) typedefstructNODECarNodestackMAX+l;inttop;SeqStackCar;/*模拟
7、车站*/(4) typedefstructcar(CarNodedata;structcar*next;JQueueNode;(5) typedefstructNodeQueueNode*head;QueueNode*rear;LinkQueueCar;*模拟通道*/2.写出各模块的伪码算法(1)主函数voidmain()SeqStackCarEnter,Temp;1.inkQueueCarWait9Leavecar;intch;InitStaCk(&Enter);*初始化车站*/InitStaCk(&Temp);*初始化让路的临时栈*/InitQUeUe(&Wait);/*初始化通道*/In
8、itQUeUe(&Leavecar);/*初始化离开的车*/while(l)pt11*1*5C5C5Cjc5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C*,)printf(nl.车辆到达)printf(2.车辆离开”);printf(3.列表显示);printf(4.退出系统n”);printf(*n)while(l)scanf(%dch);if(ch=1&chtop=0;)(3)初始化便道intInitQueue(LinkQueueCar*carwait)/*初始化便道*/(carwait-head=carwait-r
9、ear=(QueueNode*)malloc(sizeof(QueueNode);if(!carwait-head)exit(OVERFLOW);CarWait-head-next=NULL;/队列初始化为NULLreturnOK;)(4)车辆到达,登记车牌号和到达时间intArrival(SeqStackCar*enter9LinkQueueCar*wait)/*车辆到达*/(if(enter-topMAX)车辆停入停车场并且登记车牌和到达时间PrintfC请输入车牌号:”);scanf(%s,enter-stackenter-top.num);PrintfC该车在停车场第d个位置nu,(e
10、nter-top)+1);Printf(请输入该车的到达时间例如:12:00:”);scanf(n%d:%dH,&(enter-stackenter-top.reach.hour),&(enter-stackenter-top.reach.min);(enter-top)+;returnOK;)else车辆停在便道上并且登记车牌和到达时间EnQueue(Wait);PrintfC请输入车牌号:”);scanf(,%s,wait-rear-data.num);Printf(该车停在便道上等待n”);returnOK;)(5)插入新的链表尾voidEnQueue(LinkQueueCar*wait
11、)/*插入新的队尾*/QueueNode*p=wait-rear;wait-rear=(QueueNode*)malloc(sizeof(QueueNode);if(!wait-rear)exit(OVERFLOW);p-next=wait-rear;wait-rear-next=NULL;)(6)车辆离开,登记离开时间,输出停车时间和收费。将便道内车辆intLeave(SeqStackCar*enter,SeqStackCar*temp9LinkQueueCar*wait,LinkQueueCar*leavecar)inti,j=enter-top;QueueNode*q=NULL;if(!
12、enter-top)若停车场内没有车则返回(Printfe停车场内没有车内returnERROR;)Printf(”请输入车在停车场中的位序(l-%d):,j);scanf(n%di);while(ienter-top)Printf(输入错误,请重新输入(l-%d):,j);scanf(,%di);)while(temp-top+istack(temp-top)+=enter-stack-(enter-top);fee(enter,leavecar);while(temp-top)将临时存放的车再停回停车场enter-stack(enter-top)+=temp-stack-(temp-top
13、);if(wait-head!=wait-rear)将便道里的一辆车停入停车场(q=wait-head-next;Printf(便道里的s车进入停车场第d个位置n,q-data.num,MAX);enter-stack(enter-top)+=q-data;PrintfC请输入现在时间:“);scanf(u%d:%d,&(enter-stackenter-top-l.reach.hour),&(enter-stackenter-top-l.reach.min);wait-head-next=q-next;if(!q-next)wait-rear=wait-head;free(q);)returnOK;)(7)计算收费,将离开车辆的信息登记入历史记录voidfee(SeqStackCar*enter,LinkQueueCar*leavecar