停车场数据结构实验报告附代码Word文件下载.docx
- 文档编号:21129382
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:17
- 大小:73.07KB
停车场数据结构实验报告附代码Word文件下载.docx
《停车场数据结构实验报告附代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《停车场数据结构实验报告附代码Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
CARpavement[max_pavement];
//各汽车信息的存储空间
intfront,rear;
//用来指示队头和队尾位置的静态指针
}PAVEMENT;
三、【功能(函数)设计】
1、本程序从总体上分为四个大的功能模块:
分别为:
程序功能介绍和操作提示模块、汽车进入停车场车位的管理模块、汽车离开停车场车位的管理模块、查看停车位以及整个停车场停车状态的查询模块,具体功能描述如下:
1)程序功能介绍和操作提示模块:
此模块给出程序欢迎信息,介绍本程序的功能,并给出程序功能所对应的键盘操作的提示,具体屏幕显示如下所示:
·
欢迎使用本程序·
;
1有车来时;
2有车走时;
3显示某停车位上的汽车;
4显示该停车场的停车状况;
5退出系统;
请输入选择
函数原型voidmenu();
2)汽车进入停车场车位的管理模块:
此模块用来登记停车场的汽车的车牌号和对该车的调度过程并修改该车的状态,其中调度过程要以屏幕信息的形式反馈给用户来指导用户对车辆的调度。
例如,当前停车位上1、2、3车位分别停放着牌照为JF001、JF002、JF003的汽车,便道上无汽车,当牌照为JF004的汽车到来后屏幕应给出如下提示信息:
牌照为JF004的汽车停入停车位的4号车位!
此函数原型为intpush_stack(stack&
s,CAR&
c);
当停车位已满,再来新的车辆应提示该汽车停在了便道上,提示信息:
牌照为JF006的汽车停在了便道上。
此函数原型为intpush_queue(queue&
q,CAR&
再次显示菜单让用户选择功能
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&
s1,stack&
s2,queue&
q,char*c);
再次显示菜单供用户选择功能。
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位置
显示菜单让用户选择功能。
此函数原型为:
voidshow_parking(stack&
s,queue&
c);
查看某个停车位的停车状况:
在用户选择该功能并且输入4后,应显示:
4车位上停着车牌号为JF004的车
此函数原型为voidshow_stopping(inti,stack&
s);
2、以上四个总体功能模块要用到的栈和队列的基本操作所对应的主要函数如下表所示:
函数原型
函数功能
voidinit_stack(stack&
通过参数c来选择初始化“停车位栈”或“辅助栈”
voidinit_queue(queue&
初始化“便道队列”
intpush_stack(stack&
将车辆c压入停车位栈s中
intpush_queue(queue&
将车辆c压入便道q中
e);
打印停车位s和便道q上的车辆信息
voidshow_stopping(inti,stack&
打印停车位上的i车位的车辆信息
intcar_leave(stack&
先通过c查找出要开走的车辆在停车位的位置,先将其后方的车辆开到辅助栈中,等该车辆开走后,再把辅助栈中的车辆开回停车位,如便道有车,便把1位置的车开到停车位上
其他函数的定义和说明请参照源代码。
3、由于程序应该能够随时处理用户所提出的各种操作请求,所以在主函数中用一个DO_WHILE循环结构随时监控键盘的按键操作,遇到相应的按键就转到对应函数继续运行,运行完该函数继续监控键盘按键,如此往复,直到接到“退出”指令程序才能结束。
部分编码如下:
do{
menu();
cout<
<
"
请输入选择"
endl;
cin>
>
key;
while(key>
5||key<
1)
{
cout<
输入有误,请重新输入:
cin>
switch(key)
case1:
{
CARc;
cout<
请输入该车车牌号:
c.license=newchar[10];
cin>
c.license;
c.state='
i'
;
if(stopping.top!
=max_stopping-1)
push_stack(stopping,c);
else
push_queue(pavement,c);
break;
}
case2:
{
char*s;
请输入您要出站的汽车的车牌号:
s=newchar[10];
s;
car_leave(stopping,temp,pavement,s);
case3:
intlocation;
请输入车位:
location;
show_stopping(location,stopping);
case4:
show_parking(stopping,pavement);
break;
case5:
exit(0);
};
}while(key!
=5);
return1;
}
四、【界面设计】
本程序的界面力求简洁、友好,每一步需要用户操作的提示以及每一次用户操作产生的调度结果都以中文的形式显示在屏幕上,使用户对要做什么和已经做了什么一目了然。
文字表述精练,准确。
具体设计可参阅功能设计中的相关部分,这里就不再赘述。
五、【编码实现】
#include<
iostream.h>
#include"
string.h"
#definemax_stopping5//车库容量,可以根据实际情况改变
#definemax_pavement100
#include<
stdlib.h>
typedefstruct{
char*license;
//汽车牌照号码,定义为一个字符指针类型
//汽车当前状态,字符S表示停放在停车位上,
//字符p表示停放在便道上,每辆车的初始状态用字符i来表示
}CAR;
//用来指示栈顶位置的静态指针
CARcar[max_pavement];
}queue;
/*方法声明*/
//初始化栈
//初始化便道
//车辆离开
c)
for(inti=0;
i<
max_stopping;
i++)
c.car[i].license=NULL;
c.car[i].state='
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);
车牌号为"
c.license<
的车进入停车位的"
s.top+1<
车位上"
s.car[s.top].state='
s'
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'
的车进入便道"
return1;
q)
inti;
if(s.top==-1)
停车场上没有车"
return;
for(i=0;
=s.top;
s.car[i].license<
----停车位的"
i+1<
车位"
if(q.front==q.rear)
便道上没有车"
for(i=q.front+1;
=q.rear;
q.car[i].license<
----便道上的"
位置"
return;
s)
if(i>
max_stopping||i<
此停车场上没有该车位"
return;
if(s.car[i-1].license==NULL)
该车位没有汽车"
else
车位上停着车牌号为"
s.car[i-1].license<
的车"
q,char*c)
intlocation;
=s1.top;
if(strcmp(s1.car[i].license,c)==0)
location=i;
s1.top)
停车位上没有该车"
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;
s2.car[s2.top].license<
的车由停车位开到了辅助栈上"
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<
return1;
voidmenu()
·
"
1车辆到达;
2车辆离开;
5退出程序;
intmain()
intkey;
stackstopping,temp;
queuepavement;
init_stack(stopping);
init_stack(temp);
init_queue(pavement);
六、【运行与测试】
对于测试用例的设计注重所定义的数据结构的边界以及各种数据结构共存的可能性。
例如:
1、连续有7辆车到来,牌照号分别为JF001、JF002、JF003、JF004、、JF005、JF006、JF007,前5辆车应该进入停车位1-5车位,第6、7辆车应停入便道的1、2位置上。
2、1中的情况发生后,让牌照号为JF003的汽车从停车场开走,应显示JF005、JF004的让路动作和JF006从便道到停车位上的动作。
3、随时检查停车位和便道的状态,不应该出现停车位有空位而便道上还有车的情况。
4、其他正常操作的一般情况。
5、程序容错性的测试,当按键输入错误的时候是否有错误提示给用户指导用户正确操作,并作出相应处理保证程序健康的运行。
如输入数字选择功能时,如输入错误数据,要给出用户提醒让其重新输入,在用户要通过输入车牌号把该辆车开走时,如果没有该辆车,要做出提醒。
在用户通过输入停车位来了解该车位的汽车信息时,在其输入停车位不合法的情况下,要做出提醒。
经过反复的运行和测试,程序的容错性能良好,界面简洁友好,运行稳定可靠,符合实际操作规范,基本达到了模拟停车场管理的要求。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 数据结构 实验 报告 代码
![提示](https://static.bdocx.com/images/bang_tan.gif)