停车场管理系统的设计与实现Word下载.docx
- 文档编号:7112993
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:10
- 大小:238.85KB
停车场管理系统的设计与实现Word下载.docx
《停车场管理系统的设计与实现Word下载.docx》由会员分享,可在线阅读,更多相关《停车场管理系统的设计与实现Word下载.docx(10页珍藏版)》请在冰点文库上搜索。
2.基本要求:
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入数据的序列进行模拟管理。
每一组输入数据包括三个数据项:
汽车的“到达”(‘A’表示)或“离去”(‘D’表示)信息、汽车标识(牌照号)以及到达或离去的时刻。
对每一组输入数据进行操作后的输出信息为:
若是车辆到达,则输出汽车在停车场内或者便道上的停车位置;
若是车辆离去,则输出汽车在停车场停留的时间和应缴纳的费用(便道上停留的时间不收费)。
栈以顺序结构实现,队列以链表结构实现。
(1).程序所能达到的基本可能:
程序以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入数据的序列进行模拟管理。
同时另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车。
输入数据按到达或离去的时刻有序。
当输入数据包括数据项为汽车的“到达”(‘A’表示)信息,汽车标识(牌照号)以及到达时刻时,应输出汽车在停车场内或者便道上的停车位置;
当输入数据包括数据项为汽车的“离去”(‘D’表示)信息,汽车标识(牌照号)以及离去时刻时,应输出汽车在停车场停留的时间和应缴纳的费用(便道上停留的时间不收费);
当输入数据项为(‘P’,0,0)时,应输出停车场的车数;
当输入数据项为(‘W’,0,0)时,应输出候车场车数;
当输入数据项为(‘E’,0,0),退出程序;
(2).输入输出形式及输入值范围:
程序运行后进入循环,显示提示信息:
“请输入停车场最大容量n=:
”,提示用户输入停车场最大容量,输入后显示提示信息:
请输入车辆信息,提示用户输入车辆信息(“到达”或者“离开”,车牌编号,到达或者离开的时间)。
若车辆信息为“到达A”,车辆信息开始进栈(模拟停车场),当栈满,车辆会进队列(模拟停车场旁便道),若车辆信息为“离开D”,会显示该车进入停车场的时间以及相应的停车费用,若该车较部分车早进停车场,这部分车需先退出停车场,暂时进入一个新栈为其让道,当待离开车离开停车场后,这部分车会重新进入停车场,同时便道上的第一辆车进入停车场;
若输入(‘P’,0,0),会显示停车场的车数;
若输入(‘W’,0,0),会显示便道上的车数;
若输入(‘E’,0,0),程序会跳出循环,同时程序结束。
用户每输入一组数据,程序就会根据相应输入给出输出。
输入值第一个必须为字母,后两个为数字,中间用逗号隔开
二.概要设计
1.所用到得数据结构及其ADT
为了实现上述功能,该程序以顺序栈模拟停车场以及临时停放为给要离去的汽车让路而从停车场退出来的汽车的场地,以链表队列模拟车场外的便道,因此需要栈和队列这两个抽象数据类型。
顺序栈数据类型定义
typedefstructStack
{
structNodedata[MaxSize];
inttop;
intnum;
}SqStack;
基本操作:
SqStack*Init_SeqStack()表队列数据类型定义
QNODE实现每个操作的伪码
1)主程序模块
intmain()
{
SqStack*parkstack;
O!
=ime;
s->
top--;
num--;
while(ISEmpty_SeqStack(p)==0)
{
Push_SeqStack(s,p->
data[p->
top]);
p->
}
returnt;
}
10)出队模块
structNodeOut_LQueue(LinkQueue*q)设计与调试过程中遇到的问题分析、体会
1)编写代码时,由于对栈和队列不熟悉,经常会一些问题,该程序定义了车辆信息,停车场的顺序栈,便道上的链表队列,所以在函数代值时会出现代值的问题,例如在出栈的程序POP_SeqStack(SqStack*s,structNodecar)中一开始在s->
data[s->
top].NO!
=这句话中我编的代码是s->
!
='
程序报错.NO'
:
leftoperandpointsto'
struct'
use'
->
'
,这就是因为定义的太多了,忘记了当初定义的停车场栈是:
structNodedata[MaxSize];
就是像程序中s->
top].time这样的定义因为太长了经常会搞混,再次像IN_Lqueue(parkqueue,car);
,Push_SeqStack(parkstack,car);
这种涉及函数调用的尤其要注意代的应该是什么。
2.主要算法的时间复杂度分析
主函数中对每次输入的车辆信息只选择其中一个执行,时间复杂度O
(1);
空间复杂度O
(1);
入栈入队列函数根据判断条件将数据入栈或入队列,时间复杂度O
(1);
出栈数据不在最顶端需将n个数据先出该栈,再入新栈,再回旧栈,时间复杂度O(n);
3.测试数据.
设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),(‘E’,0,0)。
汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,其中,‘A’表示到达;
‘D’表示离去,‘E’表示输入结束。
其中:
(‘A’,1,5)表示1号牌照车在5这个时刻到达,而(‘D’,1,15)表示1号牌照车在15这个时刻离去。
4.测试结果
五.总结
在这个程序中还有一个问题,就是定义的结构体数组有些多,容易混乱,所以我选择每定义一个结构体都将其画出一个图,这样编写的时候就不至于太混乱。
这个停车管理系统的设计过程,还是慢慢在适应模块化程序的编写,但有的程序还是喜欢写在一起,使得一个子程序会很长,这个问题希望在之后的问题再继续慢慢改进
六.附录:
源程序清单
#include<
>
#include<
;
else
e=*;
returnOK;
StatusInitQueue(Shortcut&
S){;
w=>
next;
next=>
next->
StatusArrival(Park&
P,Shortcut&
S){n"
;
EnQueue(S,number,ar_time);
printf("
停车场已满,请暂时停在便道的第%d个位置.\n"
StatusLeave(Park&
P,Park&
P1,Shortcut&
S){//对离站车辆的处理
intnumber,le_time,flag=1,money,ar_time;
请输入车牌号:
"
);
scanf("
%d"
&
number);
出场的时刻:
le_time);
CarNodee,m;
CarPtrw;
while
Pop(P,e);
if==number)
flag=0;
money=*2;
ar_time=;
break;
Push(P1,e);
Pop(P1,e);
Push(P,e);
//车从停车场中出
if(flag==0)
if!
=0)
DeQueue(S,w);
=le_time;
=w->
number;
Push(P,m);
free(w);
车牌号为%d的车已由便道进入停车场\n"
停车费为%d,占用车位数为%d\n"
money,;
停车场不存在牌号为%d的车\n"
number);
intm=1;
charflag;
//选项
ParkP,Q;
ShortcutS;
InitStack(P);
InitStack(Q);
InitQueue(S);
while(m)
\n停车场管理程序\n"
\n"
请选择(A,D,E):
"
%c"
flag);
switch(flag)
case'
A'
:
a'
Arrival(P,S);
//车进入停车场
D'
d'
Leave(P,Q,S);
//车离开停车场
E'
e'
m=0;
default:
Inputerror!
while(flag!
='
\n'
)
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 管理 系统 设计 实现