1、停车场管理的模拟系统解读广东海洋大学信息学院课程设计报告设计题目停车场管理的模拟系统课程名称数据结构姓名(学号)联系电话专业名称计算机科学与技术所在班级计科1112指导教师谢仕义 教师职称教授起止时间2011 年12月26日至 2012年1月6日评定成绩一、 课程设计的主要内容熟悉理解栈和队列的逻辑结构和存储结构,设计实现停车场管理的模拟系统,其主要内容如下:设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出,其模型如下图1所示。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆汽车停放在车场的最北端),若车场内已停满n辆车,那么后来的汽
2、车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆汽车要离开时,在它之后进入的车辆必须先退出停车场按顺序开入临时停放道为其让路,待其开出大门外后,再按原次序进入车场,每辆停放在停车场的汽车在它离开停车场时必须按其停留的时间长短缴纳费用(从进入停车场开始计费)。二、 功能和结构设计.主界面 为实现各项功能,首先设计一个汉多个功能的主控菜单子程序,已连接系统各项功能,方便用户使用。系统主控菜单界面如下:,系统的主要要求:1.以栈模拟停车场,以队列模拟停车场外的便道,同时用另一个栈模拟为离去车辆让路而从停车场退出来的车辆的临时停放道。2.每一组输入数据包括三个数据
3、项:车辆“到达”或“离去”信息、车辆牌照号码、车辆到达或离去的时刻。3对每一组输入数据进行操作后的输出信息为:每当有车辆到达或离去时,动态输出停车场内、便道上以及临时停放道的车辆排队情况,若是车辆离去,还应输出汽车在停车场内停留的时间和应缴纳的费用(在便道上停车不收费)。.记录到达车辆:.程序原定车位5个,当停车场车位已满时,到达车辆进入便道等候,当停车场有车离开时,在便道上的车自动进入停车场,并且以此时的时间来计算从便道进入停车场的车时间,离开的车要按停放的时间收取费用:.查询功能,可以选择查询停车场里的停放的车,或者是查询便道上等候的车辆:三、 流程图和算法设计.Judge_Output算
4、法流程图.A_cars算法流程图.D_cars流程图四、 源程序代码#include#include#include#define MAX 5 /车库容量#define price 0.01 /每分钟费用typedef struct time int hour;int min;Time;/时间结点typedef struct nodechar num10;Time reach;Time leave; CarNode;/车辆结点typedef struct NODECarNode *stackMAX+1;int top; SeqStackCar;/模拟车站typedef struct carCa
5、rNode *data;struct car *next;QueueNode;typedef struct Node QueueNode *head;QueueNode *rear;LinkQueueCar;/模拟通道void InitStack(SeqStackCar *);/初始化栈int InitQueue(LinkQueueCar *);/初始化便道int Arrival(SeqStackCar *,LinkQueueCar *);/车辆到达void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *);/车辆离开void List(Seq
6、StackCar,LinkQueueCar);/显示存车信息void main()system(color 00f);SeqStackCar Enter,Temp;LinkQueueCar Wait;int ch;InitStack(&Enter);/初始化车站InitStack(&Temp);/初始化让路的临时栈InitQueue(&Wait);/初始化便道while(1)cout欢迎光临endl;cout*endl;cout1.车辆到达endl;cout2.车辆离开endl;cout3.列表显示endl;cout4.退出系统endl;cout*endl;cout请选择所需要的服务!endl
7、;cout请注意正确输入时间,不要为非数字!ch;if(ch=1&ch=4)break;else cout请选择:1 | 2 | 3 | 4.top=0;for(i=0;istacks-top=NULL;int InitQueue(LinkQueueCar *Q)/初始化便道Q-head=(QueueNode *)malloc(sizeof(QueueNode);if(Q-head!=NULL) Q-head-next=NULL;Q-rear=Q-head;return(1);else return (-1);void PRINT(CarNode *p,int room)/打印出站车的信息in
8、t A1,A2,B1,B2;cout请输入离开的时间:/*:*/p-leave.hour;while(p-leave.hourreach.hour|p-leave.hour23)couterror!endl;cout请输入离开的时间的时(reach.hour-23)p-leave.hour;B1=p-leave.hour;cout : p-leave.min;coutendl离开车辆的车牌号是:num);cout其到达时间为:reach.hour : reach.minendl;cout离开时间为:leave.hour :leave.minreach.hour;A2=p-reach.min;B
9、1=p-leave.hour;B2=p-leave.min;cout应交费用为:(B1-A1)*60+(B2-A2)*price元!endl;free(p);int Arrival(SeqStackCar *Enter,LinkQueueCar *W)/车辆到达CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode);flushall();cout请输入车牌号(例:A1234):num);if(Enter-top top+;cout车辆在车场第top位置!endl;cout请输入到达时间的时:/*:*/p-reach.hour;wh
10、ile(p-reach.hourreach.hour23)couterror!endl;cout请输入到达时间的时(0-23)!p-reach.hour;cout到达时间的分: p-reach.min;while(p-reach.minreach.min59)couterror!endl;cout请输入到达时间的分(0-59)!p-reach.min;Enter-stackEnter-top=p;return (1);else/车辆已满,车进入便道cout该车在便道等待!data=p;t-next=NULL;W-rear-next=t;W-rear=t;return (1);void Leav
11、e(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)/车辆离开int room;CarNode *p,*t;QueueNode *q;/判断车场内是否有车if(Enter-top0)/有车while(1)/输入离开车辆的信息cout请输入车在车场的位置1-toproom;if(room=1 & roomtop) break;while(Enter-toproom)/车辆离开Temp-top+;Temp-stackTemp-top=Enter-stackEnter-top;Enter-stackEnter-top=NULL;Enter-t
12、op-;p=Enter-stackEnter-top;Enter-stackEnter-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-tophead-next;t=q-data;Enter-top+;cout便道的num号车进入车场第top位置!endl;cout请输入现在的时间如/* :
13、 */reach.hourreach.hour23)couterror!endl;cout请输入到达时间的时(0-23)!p-reach.hour;cout : p-reach.min;if(p-reach.minreach.min59)couterror!endl;cout请输入到达时间的分(0-59)!p-reach.min;W-head-next=q-next;if(q=W-rear) W-rear=W-head;Enter-stackEnter-top=t;free(q);elsecout便道里没有车!endl;else cout车场里没有车!top0) /判断车场内是否有车cout车
14、场:endl;cout 位置 到达时间 车牌号endl;for(i=1;itop;i+) cout i stacki-reach.hour : stacki-reach.min stacki-numendl;else cout车场里没有车!head-next;if(W-head!=W-rear) /判断通道上是否有车cout等待车辆的号码为:data-num);p=p-next;else cout便道里没有车!;void List(SeqStackCar S,LinkQueueCar W)int flag,tag;flag=1;while(flag)cout请选择 1 | 2 | 3 :end
15、l;cout1.车场2.便道3.返回tag;if(tag=1 | tag=3) break;else cout请选择 1 | 2 | 3 : endl;switch(tag)case 1:List1(&S); break; /列表显示车场信息case 2:List2(&W); break; /列表显示便道信息case 3:flag=0; break;default: break;五、 课程设计总结通过这次C+课程设计,我认识到课本上学到的远远不够。本次设计使我深入的了解了C+编程的实际问题下的灵活运用,并对C+有了更深一步的认识。 虽然经过努力终于把系统完成,可是系统还是不完善,程序中的一些算
16、法还不是很清楚,只不过把一些简单的功能实现了出来,这些缺陷归根到底都是我的C+语言和数据结构水平还不是很高,好需要经过不懈的努力才能做出比较完善的系统。这次课程设计让我明白到要真正掌握一门汇编语言需要的不仅仅是课本上的东西,还要在实际的编程过程中慢慢掌握其中的奥妙。同时我明白了,要成为一名优秀的编程人员必须具备坚实的编程语言基础,熟练的调试程序的技能,耐心也很重要,同时细心也是不可或缺的。所以为了自己的梦想,在以后的学习过程中,我要不断的充实自己,努力地学习。通过本次的课程设计让我熟悉了软件开发的基本过程,初步掌握了了软件开发过程的问题分析,系统设计,程序编码,测试等阶段的基本任务和技能方法,培养了我的算法设计和算法分析的能力,提高了综合运用所学的理论知识和方法以及独立分析问题的能力。六、 参考资料
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1