数据结构课程设计 停车场模拟管理系统报告(含源码)
- 格式:doc
- 大小:200.00 KB
- 文档页数:18
《数据结构课程设计》报告专业:软件工程班级: T1123-03学号:姓名: XXX课设题目:停车场模拟管理系统指导教师:马春江成绩:2013-07-03目录一、设计题目 (1)二、设计目的 (1)三、总体设计 (1)(一)问题描述 (1)(二)设计要求 (1)(三)数据结构 (1)四、详细设计 (2)(一)分析与实现 (2)(二)系统模块设计 (2)(三)界面设计 (3)五、设计结果与分析 (4)六、总结(收获和不足) (5)(一)课设的不足 (5)(二)课设的收获 (5)附录程序源码 (5)参考文献: (16)指导教师意见 (16)一、设计题目停车场模拟管理系统。
二、设计目的利用所学的知识,模拟设计一个停车场管理系统。
通过程序设计,了解停车场的工作情况以及是怎么实现停车的,模拟车辆的进入停车场、离开停车场的情况,和收费情况。
三、总体设计(一)问题描述假设停车场可以停放n辆车的狭长通道,而且只有一个入口出口,汽车进入停车场的停放按照先进先放的顺序,依次排满车道。
当停车场已经停满时(已存放了n辆汽车),想进入停车场的车就只能在便道上等待,等到停车有车离开时,便道上的第一辆车进入停车场。
当停车场内的某辆车要离开时,在它后面的车必须离开让出一条道路来,待车开走后,让路的车依次进入停车场,车辆离开时,按时间缴纳费用。
(二)设计要求用栈模拟停车场,用队列模拟停车场外面的等车便道,按照终端输入数据的方式进行模拟管理。
输入1,表示车辆到达;输入2,表示车辆离开;输入3,表示列表显示停车场内外情况;输入4,表示系统帮助;输入5,表示查询车辆;输入0,表示退出程序。
车辆进入停车时,要输入车牌号码和到达时间;车辆离开时,要输入停车场车位号和离开时间,并显示应收费额;车辆查询时,要输入车牌号码;系统帮助,则是一些关于本系统的操作介绍。
(三)数据结构本课程设计使用的数据结构有:顺序栈和链式队列。
四、详细设计(一)分析与实现1、模拟停车场的车辆进出需要输入车辆的信息,比如车辆的车牌号码、到达时间、离开时间,因此,可以定义一个车辆信息结点类型和一个时间节点类型,在顺序栈和链式队列中定义结点类型为车辆信息结点类型。
2、车辆离开时,需要打印输出车辆的车位号、到达时间、离开时间以及应缴纳的费用。
定义print()函数实现。
3、车辆到达时要输入车辆的信息,并以此存放在停车场内;没进入一辆车,要判断停车场(顺序栈)是否已经停满,若已满,则提示该车要在便道上等待;若未满,则进行进栈操作。
4、车辆的离开,要另外设计一个栈,当一辆汽车要离开时,在其后的车辆要给其让路,让路的汽车就暂时停放在这个栈中。
车辆离开后,要判断便道上是否有车辆在等待,若有则进行入栈操作,即将车辆的信息结点进行入栈操作,这时要输入当前时间,今儿进行出队操作,表示车辆已经离开便道进入停车场。
5、系统帮助则只需设计一个函数instruct(),将要说明的东西写进去,可以直接调用。
6、车辆的查询,既可以查询停车场内的车辆,也可以查询便道上等待的车辆,查询时要输入正确的车牌号码,并显示车辆的当前情况。
(二)系统模块设计(三)界面设计1、主菜单界面图 12、车辆到达界面图 23、车辆离开界面图 34、列表显示界面图 4 列表显示菜单图 5 停车场情况图 6 便道等待情况5、车辆查询界面图7五、设计结果与分析测试结果已达到我预期的结果,可以模拟实现车辆的进入、离开停车场,可以大体上让人了解到停车场的工作情况。
六、总结(收获和不足)(一)课设的不足本次课程设计完成的系统,只能简单的模拟停车场的车辆进出、收费情况和查询功能,没有将进入停车场的车辆信息进行存盘保存。
而且功能单一,有车离开时,还有可能要其他的车退出停车场让车(不够人性化);模拟的停车场只是一个狭长的通道,存放的车辆只能是一种类型的,即占地面积是一样的;按道理停车场可以存放各种类型的车,各种车的收费标准也应该不一样,这都应该是要完善的。
(二)课设的收获历时四天,终于把数据结构课程设计做完了!本次课设,我还是挑了比较简单的题目(停车场模拟管理系统)来做,在这个题目里,只用到了两个数据结构:顺序栈和链式队列。
顺序栈模拟停车场,队列模拟便道。
通过这次课设,确实对自己的水平提高了很多,至少再次熟悉了本学期所学的栈和队列的使用和应用。
记得在刚开始的时候,看到课设指导书上面的题目,感觉自己什么都做不出来,所以迟迟不敢动手。
当时间一天天逼近时,不能再拖了,就只能开工了。
抱着试一试的心态,我参考着资料上面的指示,一步一步地做,居然做出了一个简单的系统;最后通过请教XX同学,对系统做了些完善(虽然还不是很完善),在此对他表示感谢!通过这次课设,我再次强烈的感受到:只要敢于尝试,很多我们自己认为做不到的事情都是可能做到的。
勇于尝试,定有收获!附录程序源码#include <iostream.h>#include <fstream.h>#include <iomanip.h>#include <windows.h>#include <stdio.h>#include <math.h>#define maxnum 5#define price 0.5enum returninfo{ok,error};typedef struct time//时间结构体{int hour;int minute;}TIME;typedef struct nodea//汽车结构体{char number[10];TIME reach;TIME leave;}CARNODE;typedef struct nodeb//停车场{CARNODE *stack[maxnum+1];int top;}SEQSTACKCAR;typedef struct car//车场中已停有的车链表结点{CARNODE * data;struct car * next;}QUEUENODE;class LINKQUEUECAR//链表,存放等待进入停车场的车{public:QUEUENODE * head;QUEUENODE * rear;LINKQUEUECAR(){head=rear=NULL;};};void stackpark(SEQSTACKCAR * s){int i;s->top=0;for(i=0;i<=maxnum;i++)s->stack[i]=NULL;}int queuehall(LINKQUEUECAR * q)//{if (q->head==NULL){q->head=(QUEUENODE *)malloc(sizeof(QUEUENODE));q->head->next=NULL;q->rear=q->head;return ok;}elsereturn error;}void print(CARNODE * p,int room)//已选中的停车场中的车,确定其离开的时间,并显示计费{int a1,a2,b1,b2;double Price;cout<<"请输入车辆离开的时间(时和分用空格隔开):";cin>>p->leave.hour>>p->leave.minute;while(p->leave.hour<0||p->leave.hour>24||p->leave.minute<0||p->leave.minute>60){cout<<"时间输入有错,请重新输入:";cin>>p->leave.hour>>p->leave.minute;}cout<<"\n离开车辆的车牌号码:";cout<<p->number;cout<<"\n该车辆到达的时间为:";if(p->reach.hour<10)cout<<"0"<<p->reach.hour<<":";elsecout<<p->reach.hour<<":";if(p->reach.minute<10)cout<<"0"<<p->reach.minute<<endl;elsecout<<p->reach.minute<<endl;cout<<"离开时间为:";if(p->leave.hour<10)cout<<"0"<<p->leave.hour<<":";elsecout<<p->leave.hour<<":";if(p->leave.minute<10)cout<<"0"<<p->leave.minute<<endl;elsecout<<p->leave.minute<<endl;a1=p->reach.hour;a2=p->reach.minute;b1=p->leave.hour;b2=p->leave.minute;Price=((b1-a1)*60+(b2-a2))*price;if(Price<1)Price=1;cout<<"\n该车应交费用为:"<<setprecision(2)<<setiosflags(ios::fixed)<<Price<<"元"<<endl;free(p);}int Arrive(SEQSTACKCAR * enter,LINKQUEUECAR *w)//车进入停车场{CARNODE * p;QUEUENODE * t;p=(CARNODE *)malloc(sizeof(CARNODE));cout<<"请输入车牌号码(鄂C12345):";cin>>p->number;if(enter->top<maxnum){enter->top++;cout<<"\n车辆在停车场的第"<<enter->top<<"个位置。