停车管理文档格式.docx
- 文档编号:18156901
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:18
- 大小:103.75KB
停车管理文档格式.docx
《停车管理文档格式.docx》由会员分享,可在线阅读,更多相关《停车管理文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
由于车位是一个狭长的通道,所以不允许两辆车同时出入停车位,当有车到来要进入停车位的时候也要顺次停放,当某辆车要离开时,比它后到的车要先暂时离开停车位,而且越后到的车就越先离开停车位,显然这和栈的“后进先出”特点相吻合,所以可以使用一个栈来描述停车位。
由于停车位只能停放有限的几辆车,而且为了便于停车厂的管理,为每个车位要分配一个固定的编号,不妨设为1、2、3、4、5(可利用数组的下标),分别表示停车位的1车位、2车位、3车位、4车位。
5车位,针对这种情况使用一个顺序栈比较方便。
当某辆车要离开停车厂的时候,比它后进停车位的车要为它让路,而且当它开走之后让路的车还要按照原来的停放次序再次进入停车位的某个车位上,为了完成这项功能,再定义一个辅助栈,停车位中让路的车依次“压入”辅助栈,待提出开走请求的车开走后再从辅助栈的栈顶依次“弹出”到停车位中。
对辅助栈也采用顺序栈。
该栈的具体定义如下:
typedefstruct//辅助栈,用来把便道上和停车场的车弹栈和压栈
CARcar[max_stopping];
inttop;
}stack;
(3)当停车场的停车位上都已经停满了汽车,又有新的汽车到来时要把它调度到便道上,便道上的车辆要按照进入便道的先后顺序顺次存放在便道上,为便道上的每个位置也分配一个固定的编号,当有车从停车位上离开后,便道上的第一辆汽车就立即进入停车位上的某个车位,由于问题描述中限制了便道上的汽车不能从便道上开走,即便道上的汽车只有在停车位上停放过之后才能离开停车厂,这样越早进入便道的汽车就越早进入停车位,而且每次进入停车位的汽车都是处于便道“最前面”的汽车,显然,这和队列的先进先出特点相吻合,所以,这里使用一个顺序队来描述便道,可以利用数组的下标表示便道的位置,具体定义如下:
typedefstruct//便道上的车的顺序列队
CARcar[max_pavement];
//便道不限制停放车辆的数目,设为足够大max_pavement=1000
intfront;
//各汽车信息的存储空间
intrear;
//用来指示队头和队尾位置的静态指针
}queue;
2、功能(函数)设计
函数原型
函数功能
voidinit_stack(stack&
c);
通过参数c来选择初始化“停车位栈”或“辅助栈”
voidinit_queue(queue&
初始化“便道队列”
intpush_stack(stack&
s,CAR&
将车辆c压入停车位栈s中
intpush_queue(queue&
q,CAR&
将车辆c压入便道q中
voidshow_parking(stack&
s,queue&
e);
打印停车位s和便道q上的车辆信息
voidshow_stopping(inti,stack&
s);
打印停车位上的i车位的车辆信息
intcar_leave(stack&
s1,stack&
s2,queue&
q,char*c);
先通过c查找出要开走的车辆在停车位的位置,先将其后方的车辆开到辅助栈中,等该车辆开走后,再把辅助栈中的车辆开回停车位,如便道有车,便把1位置的车开到停车位上
voidjiange()
分开与上一次的结果
本程序从总体上分为四个大的功能模块:
分别为:
程序功能介绍和操作提示模块、汽车进入停车厂车位的管理模块、汽车离开停车厂车位的管理模块、查看停车位以及整个停车厂停车状态的查询模块,具体功能描述如下:
1)程序功能介绍和操作提示模块:
此模块给出程序欢迎信息,介绍本程序的功能,并给出程序功能所对应的键盘操作的提示,具体屏幕显示如下所示:
●欢迎使用本程序●
有汽车进站登记请按1键
有汽车出站登记请按2键
显示某停车位上的汽车请按3键
显示该停车场的停车状况请按4键
退出系统请按5键
2)汽车进入停车厂车位的管理模块:
此模块用来登记停车厂的汽车的车牌号和对该车的调度过程并修改该车的状态,其中调度过程要以屏幕信息的形式反馈给用户来指导用户对车辆的调度。
例如,当前停车位上1、2、3车位分别停放着牌照为JF001、JF002、JF003的汽车,便道上无汽车,当牌照为JF004的汽车到来后屏幕应给出如下提示信息:
牌照为JF004的汽车停入停车位的4号车位!
此函数原型为intpush_stack(stack&
c);
当停车位已满,再来新的车辆应提示该汽车停在了便道上,提示信息:
牌照为JF006的汽车停在了便道上。
此函数原型为intpush_queue(queue&
再次显示菜单让用户选择功能
3)汽车离开停车厂停车位的管理模块:
此模块用来为提出离开停车厂的车辆做调度处理,并修改相关车辆的状态,其中调度过程要以屏幕信息的形式反馈给用户来指导用户对车辆的调度,当有车离开停车厂后应该立刻检查便道上是否有车,如果有车的话立即让便道上的第一辆汽车停入停车位。
例如,当前停车位上1,2,3,4,5车位分别停放着牌照为JF001、JF002、JF003、JF004、JF005的汽车,便道上的1,2位置分别停放着牌照为JF006、JF007的汽车,当接收到JF003要离开的信息时,屏幕应给出如下提示信息:
车牌号为JF005的车由停车位开到了辅助栈上
车牌号为JF004的车由停车位开到了辅助栈上
车牌号为JF003的车开走了
车牌号为JF004的车由辅助栈开到了停车位的3的车位上
车牌号为JF005的车由辅助栈开到了停车位的4的车位上
便道上的JF006的停在了5车位上
函数原型为intcar_leave(stack&
再次显示菜单供用户选择功能。
4)
查看停车厂停车状态的查询模块:
此模块用来在屏幕上显示停车位和便道上各位置的状态,例如,当前停车位上1,2,3,4,5车位分别停放着牌照为JF001、JF002、JF004、JF005、JF006的汽车,便道上的1,2位置分别停放着牌照为JF006、JF007的汽车,当接受到查看指令后,屏幕上应显示:
JF001----停车位的1车位
JF002----停车位的2车位
JF003----停车位的3车位
JF004----停车位的4车位
JF005----停车位的5车位
JF006----便道上的1位置
JF007----便道上的2位置
显示菜单让用户选择功能。
此函数原型为:
查看某个停车位的停车状况:
在用户选择该功能并且输入4后,应显示:
4车位上停着车牌号为JF004的车
此函数原型为voidshow_stopping(inti,stack&
四、实验结果(程序)及分析
1、实验主要代码
#include<
iostream.h>
stdlib.h>
string.h>
#definemax_stopping5
#definemax_pavement1000
//通过参数c来选择初始化“停车位栈”或“辅助栈”
//初始化“便道队列”
//将车辆c压入停车位栈s中
//将车辆c压入便道q中
//打印停车位s和便道q上的车辆信息
//打印停车位上的i车位的车辆信息
/*通过c查找出要开走的车辆在停车位的位置,将其后方的车辆开到辅助栈中,
车辆开走后,再把辅助栈中的车辆开回停车位,如便道有车,便把1位置的车开到停车位上*/
voidjiange();
//分开与上面的结果
c)
for(inti=0;
i<
max_stopping;
i++)
{
c.car[i].license=NULL;
c.car[i].state='
i'
;
}
c.top=-1;
}
max_pavement;
c.front=c.rear=-1;
if(s.top!
=max_stopping)
s.top++;
s.car[s.top].license=newchar[strlen(c.license)+1];
strcpy(s.car[s.top].license,c.license);
cout<
<
"
\t\t\t"
车牌号为"
c.license<
的车进入停车位的"
s.top+1<
车位上"
endl;
jiange();
s.car[s.top].state='
s'
return1;
}
else
return0;
if(q.rear!
=max_pavement)
q.rear++;
q.car[q.rear].license=newchar[strlen(c.license)+1];
strcpy(q.car[q.rear].license,c.license);
q.car[q.rear].state='
q'
的车进入便道"
q)
inti;
if(s.top==-1)
停车场上没有车"
for(i=0;
=s.top;
cout<
s.car[i].license<
----停车位的"
i+1<
车位"
if(q.front==q.rear)
便道上没有车"
for(i=q.front+1;
=q.rear;
q.car[i].license<
----便道上的"
位置"
s)
if(i>
max_stopping||i<
1)
此停车场上没有该车位"
queuea;
if(a.car[i-1].license==NULL)
该车位没有汽车"
车位上停着车牌号为"
s.car[i-1].license<
的车"
jiange();
q,char*c)
intlocation;
=s1.top;
if(strcmp(s1.car[i].license,c)==0)
{
location=i;
break;
}
s1.top)
停车位上没有该车"
return0;
while(s1.top>
location)
s2.top++;
s2.car[s2.top].license=newchar[strlen(s1.car[s1.top].license)+1];
strcpy(s2.car[s2.top].license,s1.car[s1.top].license);
s1.car[s1.top].license=NULL;
cout<
s2.car[s2.top].license<
的车由停车位开到了辅助栈上"
jiange();
s1.top--;
}
s1.car[location].license<
的车开走了"
s1.car[location].license=NULL;
s1.top--;
while(s2.top>
=0)
s1.top++;
s1.car[s1.top].license=newchar[strlen(s2.car[s2.top].license)+1];
strcpy(s1.car[s1.top].license,s2.car[s2.top].license);
s1.car[s1.top].license<
的车由辅助栈开到了停车位的"
s1.top+1<
的车位上"
s2.car[s2.top].license=NULL;
s2.top--;
if(q.front!
=q.rear)
q.front++;
s1.car[s1.top].license=newchar[strlen(q.car[q.front].license)+1];
strcpy(s1.car[s1.top].license,q.car[q.front].license);
q.car[q.front].license=NULL;
便道上的"
的停在了"
max_stopping<
voidclear()
{
25;
i++)
\n"
for(inti=0;
80;
*"
voidmenu()
\n\n\n\n\n\n\t\t"
●欢迎使用本程序●\n\n"
有汽车进站登记请按1键"
有汽车出站登记请按2键"
显示某停车位上的汽车请按3键"
显示该停车场的停车状况请按4键"
退出系统请按5键"
intmain()
intkey;
stackstopping,temp;
queuepavement;
init_stack(stopping);
init_stack(temp);
init_queue(pavement);
do
menu();
请选择您要做的操作:
cin>
>
key;
while(key>
5||key<
输入有误,请重新输入:
cin>
switch(key)
case1:
{
CARc;
cout<
请输入该车车牌号:
c.license=newchar[10];
cin>
c.license;
c.state='
if(stopping.top!
=max_stopping-1)
push_stack(stopping,c);
else
push_queue(pavement,c);
break;
}
case2:
char*s;
请输入您要出站的汽车的车牌号:
s=newchar[10];
s;
jiange();
car_leave(stopping,temp,pavement,s);
case3:
intlocation;
请输入车位:
location;
show_stopping(location,stopping);
case4:
show_parking(stopping,pavement);
case5:
exit(0);
while(key!
=5);
return1;
2、测试数据与输出
有车进入且有停车位时:
有车进入无停车位时:
有车要离开时:
查看某车位上的车时:
查看停车场内所有的车的状态:
停车场内无车时:
3、调试过程中出现的问题以及解决策略
由于程序应该能够随时处理用户所提出的各种操作请求,所以在主函数中用一个DO_WHILE循环结构随时监控键盘的按键操作,遇到相应的按键就转到对应函数继续运行,运行完该函数继续监控键盘按键,如此往复,直到接到“退出”指令程序才能结束。
部分编码如下:
do
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车 管理