停车场管理系统Word格式文档下载.docx
- 文档编号:21779723
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:11
- 大小:193.88KB
停车场管理系统Word格式文档下载.docx
《停车场管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《停车场管理系统Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
编制一程序模拟该停车场的管理。
2基本要求:
要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场应交纳的费用和它在停车场内停留的时间。
3测试数据:
汽车的模拟输入信息格式可以是:
(到达/离去,汽车牌照号码,到达/离去的时刻)。
例如,(‘A’,1,5)表示1号牌照车在5这个时刻到达,而(‘D’,5,20)表示5号牌照车在20这个时刻离去。
整个程序可以在输入信息为(‘E’,0,0)时结束。
二、概要设计
1、设计思想
此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。
至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。
当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了。
2、栈的抽象数据类型定义
ADTStack{
数据对象:
D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}
数据关系:
R1={<
ai-1,ai>
|ai-1,ai∈D,i=2,...,n}
约定an端为栈顶,a1端为栈底。
基本操作:
InitStack(&
S)
操作结果:
构造一个空栈S。
DestroyStack(&
初始条件:
栈S已存在。
栈S被销毁。
ClearStack(&
将栈S清为空栈。
StackEmpty(S)
若栈S为空栈,则返回TRUE,否则FALSE。
StackLength(s)
初始条件:
返回S的元素个数,既栈的长度。
GetTop(S,&
e)
栈S已存在且非空。
用e返回S的栈顶元素。
Push(&
S,e)
插入元素e为新的栈顶元素。
Pop(&
S,&
删除S的栈顶元素,并用e返回其值。
StackTraverse(S,visit())
从栈底到栈顶依次对S的每个数据元素调用函数visit()。
一旦visit()失败,则操作失效。
}ADTStack
3、队列的抽象数据类型定义
ADTQueue{
D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}
|ai-1,ai∈D,i=2,...,n}
约定其中a1端为队列头,an为队列尾。
InitQueue(&
Q)
构造一个空队列Q。
DestroyQueue(&
队列Q已存在。
队列Q被销毁,不再存在。
ClearQueue(&
将Q清为空队列。
QueueEmpty(Q)
若Q为空队列,则返回TRUE,否则FALSE。
QueueLength(Q)
返回Q的元素个数,即队列的长度。
GetHead(Q,&
Q为非空队列。
用e返回的队头元素。
EnQueue(&
Q,e)
插入元素e为Q的新的队尾元素。
DeQueue(&
Q,&
删除Q的队头元素,并用e返回其值。
QueueTraverse(Q,visit())
Q已存在且非空。
从队头到队尾,依次对Q的每个数据元素调用函数visit()。
一旦visit()
失败,则操作失败。
}ADTQueue
4、出现的调用的函数为:
voidInitStack(SeqStackCar*s);
intInitQueue(LinkQueueCar*Q);
intArrival(SeqStackCar*Enter,LinkQueueCar*W);
voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W);
voidPRINT(CarNode*p);
voidList(SeqStackCarS,LinkQueueCarW);
voidList1(SeqStackCar*S);
voidList2(LinkQueueCar*W);
5、模块间关系
三、详细设计
1、结构的定义
typedefstructnode
{intnum;
intreachtime;
intleavetime;
}CarNode;
/*车辆信息结点*/
typedefstructNODE
{CarNode*stack[MAX+1];
inttop;
}SeqStackCar;
/*模拟车站*/
typedefstructcar
{CarNode*data;
structcar*next;
}QueueNode;
typedefstructNode
{QueueNode*head;
QueueNode*rear;
}LinkQueueCar;
/*模拟通道*/
2、主菜单
voidmain()
·
while
(1)
printf("
\n\n\t\t\t1.车辆到达请选择1"
);
\n\n\t\t\t2.车辆离开请选择2"
\n\n\t\t\t3.车辆信息请选择3"
\n\n\t\t\t4.退出程序请选择4"
\n\n\t\t\t现在请选择以上信息:
"
switch(ch)
case1:
Arrival(&
Enter,&
Wait);
break;
/*车辆到达*/
case2:
Leave(&
Temp,&
/*车辆离开*/
case3:
List(Enter,Wait);
/*列表打印信息*/
case4:
exit(0);
/*退出主程序*/
default:
}
3、车辆到达
车辆到达时首先判断车场内是否有车满,如果没有车满则车辆进入车场,如果车满则车辆进入便道。
intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*车辆到达*/
if(Enter->
top<
MAX)/*车场未满,车进车场*/
else/*车场已满,车进便道*/
\n\t\t\t停车场已满该车辆需在便道上等待!
"
4、车辆离开
首先,判断车场内是否有车。
如果车场内有车则输入要离开车的位置并调用一个PRINT(p)函数用于打印离开车辆的信息。
之后便道的第一辆车进入车场并要输入现在的时间用于离开时计算价格,如果便道没有车则显示便道上没有车辆。
如果车场内没有车则显示车场里没有车。
VoidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)/*车辆离开*/
top>
0)/*有车*/
while(Enter->
room)/*车辆离开*/
/*判断通道上是否有车及车站是否已满*/
if((W->
head!
=W->
rear)&
&
Enter->
MAX)/*便道的车辆进入车场*/
else
\n\n\t\t\t便道里没有车.\n"
\n\n\t\t\t车场里没有车."
/*没车*/
5、列表信息
列表显示信息中共调用2个函数,一个函数用于判断车场里是否有车,如果有车则显示车辆信息,如果没有则显示车场里没有车;
另一个函数用于判断便道里是否有车,如果有车则显示车辆信息,如果没有则显示便道里没有车。
voidList1(SeqStackCar*S)/*列表显示车场信息*/
if(S->
0)/*判断车站内是否有车*/
\n\t\t\t车场里没有车"
voidList2(LinkQueueCar*W)/*列表显示便道信息*/
if(W->
rear)/*判断通道上是否有车*/
\n\t\t\t便道里没有车."
voidList(SeqStackCarS,LinkQueueCarW)
while(flag)
\n\t\t\t请选择1|2|3:
\n\n\t\t\t1.车场\n\n\t\t\t2.便道\n\n\t\t\t3.返回\n\n\t\t\t"
switch(tag)
List1(&
S);
break;
/*列表显示车场信息*/
List2(&
W);
/*列表显示便道信息*/
flag=0;
四、调试分析
(1)调试过程中的主要问题
由于此停车场管理系统是分模块设计的,而且在程序的实现过程中又使用了清屏函数,所以,运行时用户选择任务并且执行完任务后,又会回到供用户选择功能的主界面,因此整个程序从整体上来讲结构清晰,使用方便。
本程序的调试运行,总体上情况良好,但中间也出现了一些小问题。
其中比较有代表性的主要问题有:
当停车场已经达到最大容量,但仍有车辆进入停车场的时候,运行界面上没有出现或者说出现了但又跳掉了“停车场已满,该车辆需在便道上等待!
”的提示信息。
我们经过反复商量讨论,并且在查阅了多种资料后,在那一个printf语句后加了一个getch(),此时,程序运行结果就符合要求了。
五、测试结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 管理 系统