停车场管理系统 实验报告.docx

上传人:b****8 文档编号:10931667 上传时间:2023-02-23 格式:DOCX 页数:31 大小:477.44KB
下载 相关 举报
停车场管理系统 实验报告.docx_第1页
第1页 / 共31页
停车场管理系统 实验报告.docx_第2页
第2页 / 共31页
停车场管理系统 实验报告.docx_第3页
第3页 / 共31页
停车场管理系统 实验报告.docx_第4页
第4页 / 共31页
停车场管理系统 实验报告.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

停车场管理系统 实验报告.docx

《停车场管理系统 实验报告.docx》由会员分享,可在线阅读,更多相关《停车场管理系统 实验报告.docx(31页珍藏版)》请在冰豆网上搜索。

停车场管理系统 实验报告.docx

停车场管理系统实验报告

停车场管理系统

班级:

A0712学号:

12姓名:

成绩:

__________

指导教师签名:

__________

一、问题描述

1.1题目:

设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。

在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。

若停车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。

当停车场内某辆车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该辆车开出大门后,其他车辆再按原次序返回车场。

每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。

1.2测试数据

设n=2,输入数据为:

(‘A',1,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基本要求

以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。

每一组输入数据包括三个数据项:

汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:

若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去:

则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。

栈以顺序结构实現,队列以链表实现。

1.4设计要求:

1.模拟上述管理过程。

要求以顺序栈模拟停车场,以链队列模拟便道。

2.从终端读入汽车到达或离去的数据,每组数据包括三项:

(1)是“到达”还是“离开”;

(2)汽车牌照号码;

(3)“到达”或“离开”的时刻。

3.与每组输入信息相应的输出信息为:

如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用。

1.5实现提示

需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。

输入数据按到达或离去的时刻有序,梭中每个元素表示一辆汽车,包含两个数据项:

汽车的牌照号码和进入停车场的时刻。

1.6开发环境与工具

1.6.1DevC++

Dev-C++是一个C&C++开发工具,它是一款自由软件,遵守GPL协议。

它集合了GCC、MinGW32等众多自由软件,并且可以从devpak.org上取得最新版本的各种工具支持,而这一切工作都是来自全球的狂热者所做的工作,并且你拥有对这一切工具自由使用的权利,包括取得源代码等,前提是你也必须遵守GNU协议。

AT&T发布的第一个Dev-C++编译系统实际上是一个预编译器(前端编译器),真正的Dev-C++程序是在1988年诞生的。

 Dev-C++目前是NOI、NOIP等比赛的制定工具,唯一的缺点就是Debug功能过弱。

DevC++本身仅仅提供一个单纯的图形界面,它并不是一个完整的开发环境。

如果要想在这一环境中开发软件则需要GCC在Windows或者Linux上的变种如mingw,cygwin,djgpp等。

借助这些以GCC为基础的开发环境再加上DEVC++方可构成一个完整的开放式集成开发环境IDE。

DevC++需要和编译器一起才能成为完整的开发环境

1.6.2VisualStudio

是一套完整的开发工具集,用于生成ASP.NETWeb应用程序、XMLWebServices、桌面应用程序和移动应用程序。

VisualBasic、VisualC++、VisualC#和VisualJ#全都使用相同的集成开发环境(IDE),利用此IDE可以共享工具且有助于创建混合语言解决方案。

另外,这些语言利用了.NETFramework的功能,通过此框架可使用简化ASPWeb应用程序和XMLWebServices开发的关键技术。

 

2、系统流程图

停车场管理系统

车辆

到达

退出

系统

列表

显示

车辆

离开

车牌号

进入时间

离开的位置

离开的时间

得到停车费用

 

三、结构和函数说明

1.数据结构说明

(1)用到两个堆栈:

一个为车场栈;另一个为临时栈temp

typedefstructNODE{

CarNode*stack[MAX+1];

inttop;

}SeqStackCar;/*模拟车场*/

(2)一个队列结构,存储便道车辆信息:

typedefstructNode{

QueueNode*head;

QueueNode*rear;

}LinkQueueCar;/*模拟便道*/

(3)时间节点

typedefstructtime

{

inthour;

intmin;

}Time;/*时间结点*/

(4)车辆信息节点

typedefstructnode

{

charnum[10];

Timereach;

Timeleave;

}CarNode;/*车辆信息结点*/

 

3.1算法说明

3.1.1功能模块说明:

停车场管理系统含有三个模块,即:

车辆到达、离开、列表显示

具体代码显示:

车辆到达:

intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*车辆到达*/

{

CarNode*p;

QueueNode*t;

p=(CarNode*)malloc(sizeof(CarNode));

flushall();

cout<<"请输入车牌号(例:

A1234):

"<

gets(p->num);

if(Enter->top

{

Enter->top++;

cout<<"车辆在车场第"<top<<"位置!

"<

cout<<"请输入到达时间:

(小时:

分钟)"<

cin>>p->reach.hour;

while(p->reach.hour<0||p->reach.hour>23)//控制时间格式正确

{

cout<<"输入错误!

"<

cout<<"请重输入到达时间的时(0-23)!

"<

cin>>p->reach.hour;

}

cin>>p->reach.min;

while(p->reach.min<0||p->reach.min>59)//控制分钟输入正确

{

cout<<"输入错误!

"<

cout<<"请重输入到达时间的分(0-59)!

"<

cin>>p->reach.min;

}

Enter->stack[Enter->top]=p;

return

(1);

}

else/*车场已满,车进便道*/

{

cout<<"车场已满,请在便道等待!

"<

t=(QueueNode*)malloc(sizeof(QueueNode));

t->data=p;

t->next=NULL;

W->rear->next=t;

W->rear=t;

return

(1);

}

}

车辆离开

voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)/*车辆离开*/

{

introom;

CarNode*p;

QueueNode*q;

/*判断车场内是否有车*/

if(Enter->top>0)/*有车*/

{

while

(1)/*输入离开车辆的信息*/

{

cout<<"请输入车在车场的位置1--"<top<<":

";

cin>>room;

if(room>=1&&room<=Enter->top)break;

}

while(Enter->top>room)/*车辆离开*/

{

Temp->top++;/*临时通道栈顶指针*/

Temp->stack[Temp->top]=Enter->stack[Enter->top];

Enter->stack[Enter->top]=NULL;

Enter->top--;

}

p=Enter->stack[Enter->top];

Enter->stack[Enter->top]=NULL;

Enter->top--;

while(Temp->top>=1)/*判断临时通道上是否有车*/

{

Enter->top++;

Enter->stack[Enter->top]=Temp->stack[Temp->top];

Temp->stack[Temp->top]=NULL;

Temp->top--;}

PRINT(p,room);

if((W->head!

=W->rear)&&Enter->top

{/*便道的车辆进入车场*/

q=W->head->next;

p=q->data;/*p指向链队头*/

Enter->top++;

cout<<"便道的"<num<<"号车进入车场第"<top<<"位置!

"<

cout<<"请输入现在的时间如(小时:

分钟):

"<

cin>>p->reach.hour;

if(p->reach.hour<0||p->reach.hour>23)

{

cout<<"输入错误!

"<

cout<<"请重输入到达时间的时(0-23)!

"<

cin>>p->reach.hour;

}

cin>>p->reach.min;

if(p->reach.min<0||p->reach.min>59)

{

cout<<"输入错误!

"<

cout<<"请重输入到达时间的分(0-59)!

"<

cin>>p->reach.min;

}

Enter->stack[Enter->top]=p;

W->head->next=q->next;

if(q==W->rear)W->rear=W->head;

free(q);/*释放q地址*/

}

elsecout<<"便道里没有车!

"<

}

elsecout<<"车场里没有车!

"<

}

列表显示

voidList1(SeqStackCar*S)/*列表显示车场信息*/

{

cout<<"您选择的是车场停车情况!

"<

inti;

if(S->top>0)/*判断车站内是否有车*/

{

cout<<"位置到达时间车牌号"<

for(i=1;i<=S->top;i++)

{

cout<<""<stack[i]->reach.hour<<":

"<stack[i]->reach.min<<""<stack[i]->num<

}

}

elsecout<<"车场里没有车!

"<

}

模块图

图1

3.1.2以模块为单位分析算法

1、“到达”模块:

到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便道等待。

如图2。

图2

2.“离开”模块:

离开时,当车库为空时,提示没有车,结束;否则车辆离开。

如图3。

图3

3.“显示”模块:

显示模块有两个显示选项,即:

车场与便道。

如图4。

便道具体代码:

voidList(SeqStackCarS,LinkQueueCarW)/*列表界面*/

{

intflag,tag;

flag=1;

while(flag)/*列表显示循环控制*/

{

cout<<"请选择您要显示信息!

(1-3):

"<

cout<<"※--1.车场--※"<

cout<<"※--2.便道--※"<

cout<<"※--3.返回--※"<

while

(1)

{

cin>>tag;

if(tag>=1||tag<=3)break;

elsecout<<"输入错误!

请选择(1-3):

"<

}

switch(tag)

{

case1:

List1(&S);break;/*列表显示车场信息*/

case2:

List2(&W);break;/*列表显示便道信息*/

case3:

flag=0;break;

default:

break;

}

}

}

图4

 

四、测试结果

4.1界面显示

界面清晰,干净,给人一种赏心悦目的感觉!

4.2测试用例

(说明:

测试用例要合理并且足够,既要有正确用例,也要有错误用例,同时检验程序的正确性和强壮性)

4.2.1第一组测试用例

(1)测试输入:

停车场的车辆离开,如下表:

服务选择

车牌号/车位

到达/离开时间

1

QH058

15:

25

1

AB123

18:

45

1

EA642

23:

15

2

2

0:

30

2

1

0:

65(错误)

(2)测试目的:

测试离开方法时间格式控制以及费用计算是否正确。

(3)正确输出:

第一次离开的是AB123,应交费3.45元。

第二次时,当在输入65时,应该提示输入错误,重输。

(4)实际输出:

(5)错误原因:

第一个错误是在计算时,一个数字错了;第二个是没有对时间格式控制。

(6)当前状态:

已改正

4.2.2第二组测试用例

(1)测试输入:

连续6辆车到达,如下表:

服务选择

车牌号

到达时间

1

A8828

7:

56

1

S2296

8:

25

1

WW666

8:

45

1

HK456

15:

50

1

GH999

12:

30

1

DD555

13:

40

(2)测试目的:

测试到达方法与列表显示方法能否正确完成。

(3)正确输出:

先到达的五辆车先进入停车场,最后到达的一辆在便道等候。

(4)实际输出:

(5)错误原因:

没有作出时间先后的判断,而是先输入先进入。

(6)当前状态:

待修改

4.2.3第三组测试用例

(1)测试输入:

接上一步输入离开信息,下表:

服务选择

离开车位

离开时间

便道车进入时间

2

3

13:

30

13:

40

(2)测试目的:

测试离开方法功能是否成功以及便道进入车场是否正确。

(3)正确输出:

输出3号车位的车辆离开信息清单,便道1号车进入停车场。

(4)实际输出:

错误原因:

没有错误。

(6)当前状态:

通过

4.3代码强壮性分析

4.3.1代码强壮性体现1

选择服务时,如果输入不是1-4的数值。

系统会自动报错。

提供了人性化的选择,也增加了代码的强壮型!

 

4.3.2代码强壮性体现2

若停车场车辆已满,系统会自动提示,请在便道等待!

4.3.3代码强壮性体现3

如输入的时间不正常,系统会自动提示输入错误,提示请重新输入!

4.4测试结果分析

此停车管理系统基本可能实现一个小的停车场的管理,其“到达”与“离开”方法都相对比较完整,以及结算清单明了。

尽管在时间先后上有出现混乱,但当其用到实际应用时,那个时间先后就可以避免了。

但在输入数据时,要按照严格的格式输入,否则有可能出现死去或崩溃。

若本系统能加上保存功能就更好了,因为一个系统在使用过程中总会关机等,而此系统的缺点却是没有保存功能,关闭之后就要重新建立了,会慢慢完善。

五、总结

本系统是采用C++技术开发的,由于在这个阶段中,基本是处于边学习边实践的状态,基础知识还不是很牢靠,加之自身水平原因,程序还是有许多不足之处。

,比如界面模块做的不够好、实现的功能不够完整、界面需要更精确的美化。

经过这一段时间的努力,收获了很多,在收获的同时也发现了很多的不足,回首论文的写作过程,得到了许多人的帮助,尤其是我的实训老师,在我论文的完成过程中给予了我许多的帮助和鼓励。

在系统开发的两个月里,我受到了指导老师的细心指导,老师老师严谨的指导态度与深厚的理论知识都让我受益非浅,让我学到了很多的东西,无论是理论还是实践都使我的知识有很大的提高。

通过本次实训,我掌握了C++编程技能,对C++有了较深的理解。

比较全面的巩固了编程思想.也通过本次实训,使我懂得在在编程工作中,程序员的工作态度以及良好的习惯的重要性

经过一学期的C++学习,对C++编程有了一定的认识,在做这个程序设计的时期,刚开始感觉自己无从下手,不知道该怎么开始,很茫然。

之后我查阅各种资料,无论是书本上的,还是网上的,只要是我认为有价值的,我都认真看,分析。

接着,我就在一张白纸上列出了自己的思路。

终于在两周的时间内完成了学生信息管理系统这一项目。

当程序运行结果看到自己所想达的要求界面时感到很欣慰,虽然只是一个小的项目,但是却是自己第一次完成的一个完整项目,我也从中学到了很多书本知识不能体现的东西,对C++也有了更深一步的认识与了解。

通过这次的程序设计,我发现自己平时对于编程实际操作的匮乏,没有把书本上的知识真正的掌握牢固,仍然有许多的问题考虑不全面。

我相信,在今后的编程道路上,我一定会更加仔细认真,积累经验,成为一名合格的程序员。

 

六、参考文献

[1]钱能编著,《c++程序设计教程》,清华大学出版社,1999年。

[2]谭浩强编著,《c程序设计题解与上机指导》,清华大学出版社,1992年。

[3]吕凤煮著,《C++语言基础教程》,清华大学出版社,1999年。

[4] Robert L.Kruse著,《C++数据结构与程序设计》,清华大学出版社,2004年。

[5] 宁正元著,《数据结构—C语言版》,中国水利水电出版社,1997年。

七、附录:

源代码

///系统说明:

本系统适应于小型停车场,且停车时间在一天之内的短期停放停车场。

//在此系统中,车库容量设置为5,便于测试。

在实际使用中可以对容量大小按实际情况设置。

//系统说明:

本系统适应于小型停车场,且停车时间在一天之内的短期停放停车场。

//在此系统中,车库容量设置为5,便于测试。

在实际使用中可以对容量大小按实际情况设置。

#include

#include

#include

#include

#defineMAX5/*车库容量,可以根据实际情况改变*/

#defineprice0.01/*一辆车每分钟费用,可变*/

usingnamespacestd;

typedefstructtime

{

inthour;

intmin;

}Time;/*时间结点*/

typedefstructnode

{

charnum[10];

Timereach;

Timeleave;

}CarNode;/*车辆信息结点*/

typedefstructNODE

{

CarNode*stack[MAX+1];

inttop;

}SeqStackCar;/*模拟停车场*/

typedefstructcar

{

CarNode*data;

structcar*next;

}QueueNode;

typedefstructNode

{

QueueNode*head;

QueueNode*rear;

}LinkQueueCar;/*模拟便道*/

/*方法声明*/

voidInitStack(SeqStackCar*);/*初始化栈*/

intInitQueue(LinkQueueCar*);/*初始化便道*/

intArrival(SeqStackCar*,LinkQueueCar*);/*车辆到达*/

voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);/*车辆离开*/

voidList(SeqStackCar,LinkQueueCar);/*显示信息*/

voidPRINT(CarNode*p,introom);/*输出离开车辆的信息清单*/

intmain()

{

system("colorF1");/*设置系统颜色,本系统为白底绿字f2*/

SeqStackCarEnter,Temp;

LinkQueueCarWait;

intch;

InitStack(&Enter);/*初始化车站*/

InitStack(&Temp);/*初始化让路的临时栈*/

InitQueue(&Wait);/*初始化通道*/

while

(1)

{

cout<<"※※※※@欢迎使用本停车管理系统@※※※※"<

cout<<"********************************************************"<

cout<<"※--※1.车辆到达※--※"<

cout<<"※--※2.车辆离开※--※"<

cout<<"※--※3.列表显示※--※"<

cout<<"※--※4.退出系统※--※"<

cout<<"********************************************************"<

cout<<"!

说明:

请注意正确输入时间,在输入“时”后,按“ENTER”或者“空格”,再输入“分”。

不要为非数字!

"<

cout<<"请选择所需要的服务!

(1-4)."<

while

(1)

{

cin>>ch;

if(ch>=1&&ch<=4)break;

elsecout<<"输入错误!

请选择:

(1-4)."<

}

switch(ch)

{

case1:

Arrival(&Enter,&Wait);break;/*车辆到达*/

case2:

Leave(&Enter,&Temp,&Wait);break;/*车辆离开*/

case3:

List(Enter,Wait);break;/*列表显示信息*/

case4:

exit(0);/*退出主程序*/

default:

break;

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1