1、停车场管理系统 实验报告 停车场管理系统 班级:A0712 学号:12 姓名: 成绩:_指导教师签名:_一、问题描述1.1题目:设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。若停车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该辆车开出大门后,其他车辆再按原次序返回车场。每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。1.2测试数据设n=2,输入数据为:(A,1
2、,5),(A,2,10),(D,1,15),(A,3,20),(A,4,25),(A,5,30),(D,2,35),(D,4,40),(B,0,0)。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,其中,A表示到达:D表示离去,E表示输入结束。1.3基本要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去:则输出汽车在停车场内停
3、留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实現,队列以链表实现。1.4设计要求:1模拟上述管理过程。要求以顺序栈模拟停车场,以链队列模拟便道。2从终端读入汽车到达或离去的数据,每组数据包括三项:(1)是“到达”还是“离开”;(2)汽车牌照号码;(3)“到达”或“离开”的时刻。3与每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用。1.5实现提示需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序,梭中每个元素表示一辆汽
4、车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。1.6开发环境与工具1.6.1Dev C+Dev-C+是一个C&C+开发工具,它是一款自由软件,遵守GPL协议。它集合了GCC、MinGW32等众多自由软件,并且可以从devpak.org上取得最新版本的各种工具支持,而这一切工作都是来自全球的狂热者所做的工作,并且你拥有对这一切工具自由使用的权利,包括取得源代码等,前提是你也必须遵守GNU协议。 AT&T发布的第一个Dev-C+编译系统实际上是一个预编译器(前端编译器),真正的Dev-C+程序是在1988年诞生的。 Dev-C+目前是NOI、NOIP等比赛的制定工具,唯一的缺点就是Debu
5、g功能过弱。Dev C+本身仅仅提供一个单纯的图形界面,它并不是一个完整的开发环境。如果要想在这一环境中开发软件则需要GCC在Windows或者Linux上的变种如mingw,cygwin,djgpp等。借助这些以GCC为基础的开发环境再加上DEV C+方可构成一个完整的开放式集成开发环境IDE。Dev C+需要和编译器一起才能成为完整的开发环境1.6.2Visual Studio 是一套完整的开发工具集,用于生成 ASP.NET Web 应用程序、XML Web Services、桌面应用程序和移动应用程序。Visual Basic、Visual C+、Visual C# 和 Visual
6、J# 全都使用相同的集成开发环境 (IDE),利用此 IDE 可以共享工具且有助于创建混合语言解决方案。另外,这些语言利用了 .NET Framework 的功能,通过此框架可使用简化 ASP Web 应用程序和 XML Web Services 开发的关键技术。 2、系统流程图停车场管理系统车辆到达退出系统列表显示车辆离开车牌号进入时间离开的位置离开的时间得到停车费用三、结构和函数说明1数据结构说明(1)用到两个堆栈:一个为车场栈;另一个为临时栈temptypedef struct NODE CarNode *stackMAX+1; int top;SeqStackCar; /*模拟车场*/
7、(2)一个队列结构,存储便道车辆信息: typedef struct Node QueueNode *head; QueueNode *rear; LinkQueueCar; /*模拟便道*/(3)时间节点typedef struct time int hour; int min;Time; /*时间结点*/(4)车辆信息节点typedef struct node char num10; Time reach; Time leave;CarNode; /*车辆信息结点*/3.1算法说明3.1.1功能模块说明:停车场管理系统含有三个模块,即:车辆到达、离开、列表显示 具体代码显示:车辆到达:in
8、t Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达*/ CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); flushall(); cout请输入车牌号(例:A1234):num); if(Enter-toptop+; cout车辆在车场第top 位置!endl; cout请输入到达时间:(小时:分钟)p-reach.hour; while(p-reach.hourreach.hour23) /控制时间格式正确 cout输入错误!endl; cout请重输入到达时间的
9、时(0-23)!p-reach.hour; cinp-reach.min; while(p-reach.minreach.min59) /控制分钟输入正确 cout输入错误!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 Leave(SeqStackCar *Enter,SeqStackCar
10、*Temp,LinkQueueCar *W) /*车辆离开*/ int room; CarNode *p; 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;
11、Enter-top-; 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; p=q-data; /*p指向链队头*/ Enter-top+; cout便道的num号车进入车
12、场第top位置!endl; cout请输入现在的时间如(小时:分钟):p-reach.hour; if(p-reach.hourreach.hour23) cout输入错误!endl; cout请重输入到达时间的时(0-23)!p-reach.hour; cinp-reach.min; if(p-reach.minreach.min59) cout输入错误!endl; cout请重输入到达时间的分(0-59)!p-reach.min; Enter-stackEnter-top=p; W-head-next=q-next; if(q=W-rear) W-rear=W-head; free(q);
13、 /*释放q地址*/ else cout便道里没有车!endl; /*便道没车*/ else cout车场里没有车!endl; /*车场没车*/列表显示void List1(SeqStackCar *S) /*列表显示车场信息*/ cout您选择的是车场停车情况!top0) /*判断车站内是否有车*/ cout 位置 到达时间 车牌号endl; for(i=1;itop;i+) cout i stacki-reach.hour:stacki-reach.min stacki-numendl; else cout车场里没有车!endl;模块图 图1 3.1.2以模块为单位分析算法 1、“到达”模
14、块:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便道等待。如图2。 图2 2.“离开”模块:离开时,当车库为空时,提示没有车,结束;否则车辆离开。如图3。 图33. “显示”模块:显示模块有两个显示选项,即:车场与便道。如图4。便道具体代码:void List(SeqStackCar S,LinkQueueCar W) /*列表界面*/ int flag,tag; flag=1; while(flag) /*列表显示循环控制*/ cout请选择您要显示信息! (1-3):endl; cout-1.车场-endl; cout-2.便道-endl; cout-3.返回-tag;
15、if(tag=1|tag=3) break; else cout输入错误!请选择 (1-3):endl; switch(tag) case 1:List1(&S);break; /*列表显示车场信息*/ case 2:List2(&W);break; /*列表显示便道信息*/ case 3:flag=0;break; default: break; 图4四、测试结果4.1界面显示界面清晰,干净,给人一种赏心悦目的感觉!4.2测试用例(说明:测试用例要合理并且足够,既要有正确用例,也要有错误用例,同时检验程序的正确性和强壮性)4.2.1第一组测试用例(1)测试输入:停车场的车辆离开,如下表:服务
16、选择车牌号/车位到达/离开时间1QH05815:251AB12318:451EA64223:15220:30210:65(错误) (2)测试目的:测试离开方法时间格式控制以及费用计算是否正确。(3)正确输出:第一次离开的是AB123,应交费3.45元。第二次时,当在输入65时,应该提示输入错误,重输。(4)实际输出: (5)错误原因:第一个错误是在计算时,一个数字错了;第二个是没有对时间格式控制。(6)当前状态:已改正4.2.2第二组测试用例(1)测试输入:连续6辆车到达,如下表: 服务选择 车牌号 到达时间1A8828 7:561S22968:251WW6668:451HK45615:501
17、GH99912:301DD55513:40(2)测试目的:测试到达方法与列表显示方法能否正确完成。(3)正确输出:先到达的五辆车先进入停车场,最后到达的一辆在便道等候。(4)实际输出:(5)错误原因:没有作出时间先后的判断,而是先输入先进入。(6)当前状态:待修改4.2.3第三组测试用例(1)测试输入:接上一步输入离开信息,下表:服务选择离开车位离开时间便道车进入时间2313:3013:40(2)测试目的:测试离开方法功能是否成功以及便道进入车场是否正确。(3)正确输出:输出3号车位的车辆离开信息清单,便道1号车进入停车场。(4)实际输出:错误原因:没有错误。 (6)当前状态:通过4.3代码强
18、壮性分析4.3.1代码强壮性体现1选择服务时,如果输入不是1-4的数值。系统会自动报错。提供了人性化的选择,也增加了代码的强壮型!4.3.2代码强壮性体现2若停车场车辆已满,系统会自动提示,请在便道等待!4.3.3代码强壮性体现3如输入的时间不正常,系统会自动提示输入错误,提示请重新输入!4.4测试结果分析 此停车管理系统基本可能实现一个小的停车场的管理,其“到达”与“离开”方法都相对比较完整,以及结算清单明了。尽管在时间先后上有出现混乱,但当其用到实际应用时,那个时间先后就可以避免了。但在输入数据时,要按照严格的格式输入,否则有可能出现死去或崩溃。若本系统能加上保存功能就更好了,因为一个系统
19、在使用过程中总会关机等,而此系统的缺点却是没有保存功能,关闭之后就要重新建立了,会慢慢完善。五、总结本系统是采用C+技术开发的,由于在这个阶段中,基本是处于边学习边实践的状态,基础知识还不是很牢靠,加之自身水平原因,程序还是有许多不足之处。,比如界面模块做的不够好、实现的功能不够完整、界面需要更精确的美化。经过这一段时间的努力,收获了很多,在收获的同时也发现了很多的不足,回首论文的写作过程,得到了许多人的帮助,尤其是我的实训老师,在我论文的完成过程中给予了我许多的帮助和鼓励。在系统开发的两个月里,我受到了指导老师的细心指导,老师老师严谨的指导态度与深厚的理论知识都让我受益非浅,让我学到了很多的
20、东西,无论是理论还是实践都使我的知识有很大的提高。通过本次实训,我掌握了C+编程技能,对C+有了较深的理解。比较全面的巩固了编程思想.也通过本次实训,使我懂得在在编程工作中,程序员的工作态度以及良好的习惯的重要性经过一学期的C+学习,对C+编程有了一定的认识,在做这个程序设计的时期,刚开始感觉自己无从下手,不知道该怎么开始,很茫然。之后我查阅各种资料,无论是书本上的,还是网上的,只要是我认为有价值的,我都认真看,分析。接着,我就在一张白纸上列出了自己的思路。终于在两周的时间内完成了学生信息管理系统这一项目。当程序运行结果看到自己所想达的要求界面时感到很欣慰,虽然只是一个小的项目,但是却是自己第
21、一次完成的一个完整项目,我也从中学到了很多书本知识不能体现的东西,对C+也有了更深一步的认识与了解。通过这次的程序设计,我发现自己平时对于编程实际操作的匮乏,没有把书本上的知识真正的掌握牢固,仍然有许多的问题考虑不全面。我相信,在今后的编程道路上,我一定会更加仔细认真,积累经验,成为一名合格的程序员。六、参考文献1钱能编著,c+程序设计教程,清华大学出版社,1999年。2谭浩强编著,c程序设计题解与上机指导,清华大学出版社,1992年。3吕凤煮著,C+语言基础教程,清华大学出版社,1999年。4RobertL.Kruse著,C+数据结构与程序设计,清华大学出版社,2004年。5宁正元著,数据结
22、构C语言版,中国水利水电出版社,1997年。七、附录:源代码/系统说明:本系统适应于小型停车场,且停车时间在一天之内的短期停放停车场。/在此系统中,车库容量设置为5,便于测试。在实际使用中可以对容量大小按实际情况设置。/系统说明:本系统适应于小型停车场,且停车时间在一天之内的短期停放停车场。/在此系统中,车库容量设置为5,便于测试。在实际使用中可以对容量大小按实际情况设置。#include#include#include#include#define MAX 5 /*车库容量,可以根据实际情况改变*/#define price 0.01 /*一辆车每分钟费用,可变*/using namespa
23、ce std; typedef struct time int hour; int min;Time; /*时间结点*/typedef struct node char num10; Time reach; Time leave;CarNode; /*车辆信息结点*/typedef struct NODE CarNode *stackMAX+1; int top;SeqStackCar; /*模拟停车场*/typedef struct car CarNode *data; struct car *next;QueueNode;typedef struct Node QueueNode *hea
24、d; QueueNode *rear;LinkQueueCar; /*模拟便道*/*方法声明*/void InitStack(SeqStackCar *); /*初始化栈*/ int InitQueue(LinkQueueCar *); /*初始化便道*/int Arrival(SeqStackCar *,LinkQueueCar *); /*车辆到达*/ void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*车辆离开*/void List(SeqStackCar,LinkQueueCar); /*显示信息*/ void PRINT
25、(CarNode *p,int room); /*输出离开车辆的信息清单*/int main() system(color F1); /*设置系统颜色,本系统为白底绿字f2*/ SeqStackCar Enter,Temp; LinkQueueCar Wait; int ch; InitStack(&Enter); /*初始化车站*/ InitStack(&Temp); /*初始化让路的临时栈*/ InitQueue(&Wait); /*初始化通道*/ while(1) cout 欢迎使用本停车管理系统 endl; cout*endl; cout - 1. 车辆到达 - endl; cout
26、- 2. 车辆离开 - endl; cout - 3. 列表显示 - endl; cout - 4. 退出系统 - endl; cout*endl; cout!说明:请注意正确输入时间,在输入“时”后,按“ENTER”或者“空格”,再输入“分”。不要为非数字!endl; cout请选择所需要的服务! (1-4).ch; if(ch=1&ch=4)break; else cout输入错误!请选择:(1-4).endl; switch(ch) case 1:Arrival(&Enter,&Wait);break; /*车辆到达*/ case 2:Leave(&Enter,&Temp,&Wait);break; /*车辆离开*/ case 3:List(Enter,Wait);break; /*列表显示信息*/ case 4:exit(0); /*退出主程序*/ default: break;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1