《停车场管理系统设计报告.doc》由会员分享,可在线阅读,更多相关《停车场管理系统设计报告.doc(11页珍藏版)》请在三一办公上搜索。
1、课序号 091001-06 程序设计实验报告 题目:关于停车场管理系统的报告 姓 名 贾雨飞 学 号 2010434096 年级专业 10数电类(四班) 指导教师 王苗 2011年10月13日一:需求分析1、主菜单中已给出程序功能所对应的键盘操作的提示,用户可以根据提示选择操作,有车到来、有车离开、查询、操作结束。车辆到来和离开操作中,会提示用户输入相应的车牌号信息,车辆离开中输入应缴纳停车费的金额才缴费,然后离开,便道中的车辆就会自动移动到停车场内。查询功能中,不需再输入和选择信息,直接输出目前停车场内的车辆信息和便道上的车辆信息。2、输入功能中只需要按照提示输入即可,输出功能中会按照其需要
2、输出相应的车辆信息、停车场信息、和提示信息等。3、当停车场容量为2时,(A、“F001”、5),(A、“A002”、10),(B、“F001”、15),(A、“F003”、20),(A、“C004”、25),(A、“B005”、30),(B、“A002”、35),(B、“C004”、40),(D、0、0)。当停车场容量为5时,连续有7辆车到来,牌照号分别为F001、F002、F003、F004、F005、F006、F007,前5辆车应该进入停车位15车位,第6、7辆车应停入便道的1、2位置上。牌照号为F003的汽车从停车厂开走,应显示F005、F004的让路动作和F006从便道到停车位上的动作
3、。(到达和离开时间请自行设定)二、 整体设计1、typedef structchar license_plate6 ;/*汽车牌照号码,定义为一个字符指针类型*/ float time; /*汽车进入停车场的时刻*/ char state; /*汽车当前状态,字符p表示停放在停车位上,字符q表示停放在便道上*/Car; typedef struct /停车场的顺序栈Car PackMAX_PARK; /*各汽车信息的存储空间*/ int top; /*用来指示栈顶位置的指针*/ParkStack;typedef struct qnode /便道队列Car data; /*各汽车信息的存储空间*
4、/ struct qnode *next;Qnode;typedef structQnode *front, *rear; /*用来指示队头和队尾位置的指针*/RoadQueue;typedef struct /辅助栈Car BUFERMAX_PARK;/*各汽车信息的存储空间*/ int top; /*用来指示栈顶位置的静态指针*/BUFFER; 2、主菜单中可选择车辆到来、车辆离开、查询、输入结束等操作指令,车辆到来和离开功能中,会提示用户输入车牌号和到来或离开时间,输入后即可按照执行操作。车辆到来操作中,输入车牌号和到达的时间后,车辆会停入相应的位置,停车场内有空位置则停在停车场内,否则
5、会停在便道中去。而离开的车辆输入车牌号和离开时间后还要输入缴费金额来完成缴费后离开,此时如果便道上有等候的车辆则把第一个转入停车场内。关于查询函数,首先查找停车场内的信息,并输出各车位上的车辆信息,然后查找便道上的车辆信息并且输出。3、主模块中,已经申请好了停车场、便道及辅助栈的空间,车辆到来的时候,把停车场空间和便道空间地址分别代入到函数中,则车会停在相应的位置上。车辆离开的时候则将停车场、辅助栈及便道空间地址代入,然后根据车辆进出的规则让车辆离开停车场并缴纳停车费。查询模块中只需将停车场和便道地址代入,逐个查找并输出车辆信息即可。三、 详细设计1、 数据类型的自定义类型已经在整体设计中给出
6、,数据类型的定义在需要的时候自行定义即可。 2、 主模块: void main()do coutendl;cout *endl;cout *_欢迎使用停车场管理系统_*endl; cout *endl; cout A:车辆到达 B:车辆离开 C:场内及便道状态查询 D:输入结束endl;cout (注意:区分大小写)endlendl;couta;while(!(a=A&a=D)cout指令输入错误,请重新输入!a;switch(a) case A: Q=arrival(&P,&Q); break; case B: Q=depart(&P,&Q,&F); break;case C: search
7、(&P,&Q); break;case D: return;while(1); 车辆到来模块:RoadQueue arrival(ParkStack *P,RoadQueue *Q)cind.license_plate;cind.time;if(P-top=(MAX_PARK-1)int i=0; /记录汽车在便道上的位置temp=new Qnode;temp-next=NULL;temp-data=d;temp-data.state=q;Q-rear-next=temp;Q-rear=Q-rear-next;n=Q-front;while(n!=Q-rear)n=n-next;i+;retu
8、rn *Q;elseP-PackP-top+1=d; P-top+;P-PackP-top.state=p;return *Q;车辆离开模块: RoadQueue depart(ParkStack *P,RoadQueue *Q,BUFFER *F)cina;for(int i=0;itop;i+)if(strcmp(a,P-Packi.license_plate)=0) for(int j=P-top;ji;j-)F-top+;F-BUFERF-top=P-Packj;P-top-;cinl;w=price*(l-P-Packi.time);cout您的停车费用为wPacki;P-top-;
9、while(F-top!=-1)P-Packi=F-BUFERF-top;i+;P-top+;F-top-;if(Q-front-next=NULL)coutfront=Q-front-next;P-Pack+P-top=Q-front-data;P-PackP-top.state=p;return *Q;return *Q; 查询模块: void search(ParkStack *P,RoadQueue *Q) Qnode *b;if(P-top=(MAX_PARK-1)cout停车场内已经没有车位了,谢谢endl;for(int i=0;i=MAX_PARK-1;i+)cout第i+1个
10、车位,车牌号:Packi.license_plate;cout停车时间为:Packi.timeendl;elsecout停车场内还有top个车位,;for(int i=0;itop;i+)cout第i+1个车位,车牌号:Packi.license_plate;cout停车时间为:Packi.timefront-next;if(b=NULL)cout便道上没有车辆等候,谢谢!;elsewhile(b)k+;cout便道第k的位置,车牌号:data.license_plate;b=b-next;3、 函数的调用很简单,只需要在主函数中调用车辆到来、车辆离开、查询函数即可。四、 调试分析1、刚开始测
11、试时候,查询函数中,会输出便道上车辆数为一个随机数字,于是知道肯定是记录车辆数的变量k的原因,查找k的变化过程,原来刚开始定义k的时候未对k进行赋值。对k赋值0以后问题自然解决了。2、时间复杂度为O(n),空间复杂度也为O(n)。五、 使用说明及测试结果本系统的使用只需根据提示信息输入即可,停车场内无空位的时候车辆自动停到便道上,停车场内有车辆离开后,便道上第一位置上的车辆自动停进停车场内。车辆离开的时候会有缴纳停车费的操作,只需按照提示输入要缴纳的金额即可缴费成功并离开。查询功能,只需选择查询功能,自动查找停车场内和便道上的车辆情况,不需要再进行其他操作。输入结束后,选择D即可退出系统。当停
12、车场容量为2时,(A、“F001”、5),(A、“A002”、10),(B、“F001”、15),(A、“F003”、20),(A、“C004”、25),(A、“B005”、30),(B、“A002”、35),(B、“C004”、40),(D、0、0)。下面是调试的部分截图: F001和A002都停入了停车场。下图:F001成功离开停车场。B005停入停车场。 C004成功离开!当停车场容量为5时,连续有7辆车到来,牌照号分别为F001、F002、F003、F004、F005、F006、F007,前5辆车应该进入停车位15车位,第6、7辆车应停入便道的1、2位置上。牌照号为F003的汽车从停车厂开走,应显示F005、F004的让路动作和F006从便道到停车位上的动作。(到达和离开时间请自行设定)调试部分截图如下:如下图:牌照号分别为F001、F002、F003、F004、F005、F006、F007的5辆车进入停车位15车位,第6、7辆车停入了便道的1、2位置上。牌照号为F003的汽车从停车场开走,显示出F005、F004为其让路,F006从便道进入停车场内。