停车场管理课程设计报告Word文档下载推荐.docx
- 文档编号:16528477
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:17
- 大小:114.86KB
停车场管理课程设计报告Word文档下载推荐.docx
《停车场管理课程设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《停车场管理课程设计报告Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
1.3模块描述
主要分为下面的模块:
定义用来模拟停车场的栈以及用来模拟便道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。
在主函数中首先调用print()函数,出现欢迎用户使用的主界面,然后提示用户进入此停车场管理系统后,再出现一个供用户选择的界面,在用户的选择过程中,程序又分别调用车辆的到达、车辆的离开以及退出程序这三个函数模块。
第2章概要设计
2.1设计思想
此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。
至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。
当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了。
2.2实现方法
对于此停车场管理系统的实现,就是用两个栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。
至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已。
当汽车要进入停车场前,先要检查停车场内是否还有空余的车位,如果还有空余的车位则车辆进入停车场;
如果停车场已经满了,那么车辆进入停车场外的便道的等待队列。
当汽车要离开停车场,在他之后的停的车都必须退出停车场为它让路,然后这辆车再出栈,退出的车辆再按原来的顺序进入停车场。
检查停车场外的便道上是否有等待的车辆,如果有,则在队首的车辆进入停车场。
1.用栈模拟停车场,用队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
2.每一组输入数据包括三个数据项:
汽车到达或离去的信息,汽车牌照号码以及到达或离去的时刻。
3.每次输入完进行输出操作:
若是车辆到达,输出汽车在停车场内或便道上的停车位置;
若是车辆离去,对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了。
(在便道上停留的时间不收费)。
2.3程序中的函数
1.定义栈(停车场)structstack
初始化栈voidinitstack(stack*s)
元素进栈intpush(stack*s,cinfox)
元素出栈cinfopop(stack*s)
2.定义队列(车场外的便道)structqueue
初始化队列voidinitqueue(queue*q)
元素进队列voidinqueue(queue*q,intnum1)
元素出队列intoutqueue(queue*q)
3.处理车辆到达的情况voidcarrival(stack*s,queue*q,cinfox)
处理车辆离开voidcarleave(stack*s1,stack*s2,queue*q,cinfox)
4.主窗口voidprint()
5.主程序voidmain()
第3章详细设计
#include<
iostream.h>
stdlib.h>
intN;
constintrate=10;
//M为单元时间的收费值
structcinfo//定义栈中元素的类型
{
intcnum;
intatime;
};
structstack//定义栈
{
cinfocstack[3000];
//这里随便定义一个数字表示数组的长度,因为后
inttop;
//面会根据用户输入的N值作为停车场能够停车的
intsize;
//栈的大小
structnode//定义队列节点的类型
node*next;
intnnum;
structqueue//定义队列
node*front,*rear;
voidinitstack(stack*s)//初始化栈
s->
top=-1;
}
intpush(stack*s,cinfox)//元素进栈
{//int元素进栈n;
if(s->
top==N-1)
{
cout<
<
"
栈满!
endl;
return0;
}
else
{
s->
cstack[++s->
top]=x;
return1;
}
cinfopop(stack*s)//元素出栈
{
cinfoy;
top<
0)
um=NULL;
y.atime=NULL;
returny;
}
s->
top--;
returns->
cstack[s->
top+1];
voidinitqueue(queue*q)//初始化队列
q->
front=newnode;
rear=q->
front;
front->
next=NULL;
nnum=0;
voidinqueue(queue*q,intnum1)//元素进队列
node*p;
p=newnode;
p->
nnum=num1;
rear->
next=p;
rear=p;
nnum++;
intoutqueue(queue*q)//元素出队列
intn;
if(q->
front==q->
rear)return0;
p=q->
next;
q->
next=p->
if(p->
next==NULL)
n=p->
nnum;
deletep;
nnum--;
returnn;
voidcarrival(stack*s,queue*q,cinfox)//处理车辆到达的情况
intf;
f=push(s,x);
if(f==0)
inqueue(q,um);
//进入队列
cout<
车号为"
um;
的车停在第"
q->
个便道的位置"
else//进入栈
s->
top+1;
个车位"
voidcarleave(stack*s1,stack*s2,queue*q,cinfox)//处理车辆离开
inta,n=0;
while((s1->
top>
-1)&
&
(n==0))
y=pop(s1);
if(um!
=um)
a=push(s2,y);
else
n=1;
if(um==um)//查找要离开的车辆
要离开,应收费"
"
(x.atime-y.atime)*rate;
元。
while(s2->
-1)
y=pop(s2);
n=push(s1,y);
a=outqueue(q);
if(a!
=0)
um=a;
y.atime=x.atime;
的车辆将要进入第"
s1->
个车位。
n=0;
while(p->
next!
=NULL&
n==0)
if(p->
next->
nnum!
=um)
p=p->
else
{
p->
q->
if(p->
next=NULL)
cout<
的车辆要离开便道。
n=1;
}
if(n==0)
您输入了错误的数据!
退出程序"
exit(0);
voidprint()//主窗口
cout<
************************"
*停车请选择1*"
*出车请选择2*"
*退出程序请选择0*"
voidmain()//主程序
N=100;
//停车场内停车位的多少
intz;
charch1,c;
stack*s1,*s2;
queue*q;
cinfox;
intflag;
s1=newstack;
s2=newstack;
q=newqueue;
initstack(s1);
initstack(s2);
initqueue(q);
star:
print();
cin>
>
z;
system("
cls"
);
//清屏函数
for(;
;
)
{
switch(z)//实现主窗口的选择
case0:
exit(0);
break;
case1:
cout<
请输入信息:
'
A'
/'
D'
;
请输入车号"
请输入车辆到达/离开的时间."
返回主窗口请输入R11"
退出,请输入E00"
cin>
ch1>
um>
x.atime;
switch(ch1)
{
case'
:
a'
carrival(s1,q,x);
cout<
返回主窗口请输入h"
cin>
c;
switch(c)
{
case'
h'
H'
system("
gotostar;
break;
default:
cout<
输入错误!
exit(0);
}
break;
d'
carleave(s1,s2,q,x);
E'
e'
R'
r'
gotostar;
default:
exit(0);
}
case2:
请输入车辆离开时间."
default:
输入错误"
}
}
}//主函数结束
第4章调试分析
由于此停车场管理系统是分模块设计的,而且在程序的实现过程中又使用了清屏函数system("
),在运行子模块的时候不会出现主窗口。
运行时用户选择任务并且执行完任务后,使用GOTO语句又会回到供用户选择功能的主界面,因此方便用户的使用。
4.1主窗口界面
图4-1主窗口界面
4.2停车界面
图4-2停车界面
4.3出车界面
图4-3出车界面
4.4退出程序界面
图4-4退出程序界面
第5章课设总结
5.1收获:
通过《停车场管理》的课程设计中,我更加深入的理解了栈的先进后出和队列的先进先出的原理,并且学习了用其去解决实际问题的思想和方法。
5.2问题:
1.在汽车离开停车场的过程中,如果要离开的车后面还有车辆,那么后面的车辆都要先退出停车场为它让路,那些车辆以怎样的形式退出停车场,才能以原来进入停车场的次序,再次进入停车场。
如果直接进入便道上的队列,将要使原有队列向后移动;
如果从队尾进入,则会与提出问题不符合。
如果新建一个临时栈,将在停车场内要让车的车辆,从栈顶开始进入临时栈,当要离开的车,离开后,车辆从临时栈里出来,重新进入停车场的栈内。
2.怎样从分级模块中回到主窗口?
利用循环语句,在switch语句中,我无法进行嵌套。
把主窗口从主函数里取出,然后顺序执行程序,后来能够出现主窗口,却不能选择其中的功能。
利用循环,在循环体内部加上主窗口函数,循环的是输入数据,或输出数据,无法运行到主窗口的那个函数。
利用GOTO语句跳出循环,回到开始的主窗口界面,实现调用后回到主菜单的功能。
3.在这几周课程设计中,我所开发的停车场管理系统,基本上可以完成每一项功能。
汽车进入停车场的信息、离开停车场的信息以及通道上的信息都可以在程序上一一实现。
但是,该程序也有不足的地方。
主要表现在车辆的车牌号上,现实中的车牌号是一串字符,可是,在这个程序中,为了简便起见,我们就车牌号定义为了整型,这个与现实是有些不符的。
还有一个可以改进的地方就是记录车辆进入停车场以及离开停车场的时间,应该精确到小时以及分钟的,可是在程序中,为了简便起见,我只是设置成了一个时刻,所以,在这方面还是有待改进的。
改进的程序中,还应该增加时间的判断功能,即停车场内有可能有车辆停放的时间超过一天。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 管理 课程设计 报告