版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 实验二 停车场管理 班级:A0712 学号:12 姓名:冷清淼 成绩:_指导教师签名:_一、问题描述设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。若停车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该辆车开出大门后,其他车辆再按原次序返回车场。每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。设计要求:1模拟上述管理过程。要求以顺序栈模拟停车场,以链队列模拟便道
2、。2从终端读入汽车到达或离去的数据,每组数据包括三项:(1)是“到达”还是“离开”;(2)汽车牌照号码;(3)“到达”或“离开”的时刻。3与每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用。二、算法说明1数据结构说明(1)用到两个堆栈:一个为车场栈;另一个为临时栈temptypedef struct NODE CarNode *stackMAX+1; int top;SeqStackCar; /*模拟车场*/(2) 一个队列结构,存储便道车辆信息: typedef struct Node QueueNo
3、de *head; QueueNode *rear; LinkQueueCar; /*模拟便道*/2算法说明(1) 功能模块说明:停车场管理系统含有三个模块,即:车辆到达、离开、列表显示 图1 (2)以模块为单位分析算法 1、“到达”模块:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便道等待。如图2。 图2 2.“离开”模块:离开时,当车库为空时,提示没有车,结束;否则车辆离开。如图3。 图3 3. “显示”模块:显示模块有两个显示选项,即:车场与便道。如图4。图4三、测试结果(一)测试用例(说明:测试用例要合理并且足够,既要有正确用例,也要有错误用例,同时检验程序的正确性和
4、强壮性)1第一组测试用例(1)测试输入:停车场的车辆离开,如下表:服务选择车牌号/车位到达/离开时间1QH05815:251AB12318:451EA64223:15220:30210:65(错误) (2)测试目的:测试离开方法时间格式控制以及费用计算是否正确。(3)正确输出:第一次离开的是AB123,应交费3.45元。第二次时,当在输入65时,应该提示输入错误,重输。(4)实际输出: (5)错误原因:第一个错误是在计算时,一个数字错了;第二个是没有对时间格式控制。(6)当前状态:已改正2第二组测试用例(1)测试输入:连续6辆车到达,如下表: 服务选择 车牌号 到达时间1A8828 7:561
5、S22968:251WW6668:451HK45615:501GH99912:301DD55513:40(2) 测试目的:测试到达方法与列表显示方法能否正确完成。(3)正确输出:先到达的五辆车先进入停车场,最后到达的一辆在便道等候。(4)实际输出:(5)错误原因:没有作出时间先后的判断,而是先输入先进入。(6)当前状态:待修改3第三组测试用例(1)测试输入:接上一步输入离开信息,下表:服务选择离开车位离开时间便道车进入时间2313:3013:40(2)测试目的:测试离开方法功能是否成功以及便道进入车场是否正确。(3)正确输出:输出3号车位的车辆离开信息清单,便道1号车进入停车场。(4)实际输出
6、:(5) 错误原因:没有错误。 (6)当前状态:通过(二)测试结果分析 此停车管理系统基本可能实现一个小的停车场的管理,其“到达”与“离开”方法都相对比较完整,以及结算清单明了。尽管在时间先后上有出现混乱,但当其用到实际应用时,那个时间先后就可以避免了。但在输入数据时,要按照严格的格式输入,否则有可能出现死去或崩溃。若本系统能加上保存功能就更好了,因为一个系统在使用过程中总会关机等,而此系统的缺点却是没有保存功能,关闭之后就要重新建立了。会慢慢完善。附录:源代码/系统说明:本系统适应于小型停车场,且停车时间在一天之内的短期停放停车场。/在此系统中,车库容量设置为5,便于测试。在实际使用中可以对
7、容量大小按实际情况设置。#include<iostream.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 5 /*车库容量,可以根据实际情况改变*/#define price 0.01 /*一辆车每分钟费用,可变*/typedef struct timeint hour; int min;Time; /*时间结点*/typedef struct node char num10; Time reach; Time leave;CarNode; /*车辆信息结点*
8、/typedef struct NODE CarNode *stackMAX+1; int top;SeqStackCar; /*模拟停车场*/typedef struct car CarNode *data; struct car *next;QueueNode;typedef struct Node QueueNode *head; QueueNode *rear;LinkQueueCar; /*模拟便道*/*方法声明*/void InitStack(SeqStackCar *); /*初始化栈*/ int InitQueue(LinkQueueCar *); /*初始化便道*/int A
9、rrival(SeqStackCar *,LinkQueueCar *); /*车辆到达*/ void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*车辆离开*/void List(SeqStackCar,LinkQueueCar); /*显示信息*/ void PRINT(CarNode *p,int room); /*输出离开车辆的信息清单*/void main()system("color F2"); /*设置系统颜色,本系统为白底绿字f2*/SeqStackCar Enter,Temp; LinkQueue
10、Car Wait; int ch; InitStack(&Enter); /*初始化车站*/ InitStack(&Temp); /*初始化让路的临时栈*/ InitQueue(&Wait); /*初始化通道*/ while(1) cout<<" 欢迎使用本停车管理系统 "<<endl;cout<<"*"<<endl;cout<<" - 1. 车辆到达 - "<<endl; cout<<" - 2. 车辆离开 - &q
11、uot;<<endl; cout<<" - 3. 列表显示 - "<<endl; cout<<" - 4. 退出系统 - "<<endl; cout<<"*"<<endl;cout<<"!说明:请注意正确输入时间,在输入“时”后,按“ENTER”或者“空格”,再输入“分”。不要为非数字!"<<endl;cout<<"请选择所需要的服务! (1-4)."<<endl;
12、 while(1) cin>>ch; if(ch>=1&&ch<=4)break; else cout<<"输入错误!请选择:(1-4)."<<endl; switch(ch) case 1:Arrival(&Enter,&Wait);break; /*车辆到达*/ case 2:Leave(&Enter,&Temp,&Wait);break; /*车辆离开*/ case 3:List(Enter,Wait);break; /*列表显示信息*/ case 4:exit(0
13、); /*退出主程序*/ default: break;void InitStack(SeqStackCar *s) /*初始化栈*/ int i; s->top=0; for(i=0;i<=MAX;i+) s->stacks->top=NULL;int InitQueue(LinkQueueCar *Q) /*初始化便道*/Q->head=(QueueNode *)malloc(sizeof(QueueNode); if(Q->head!=NULL)Q->head->next=NULL; Q->rear=Q->head; retur
14、n(1); else return(-1);int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达*/ CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); flushall(); cout<<"请输入车牌号(例:A1234):"<<endl; gets(p->num); if(Enter->top<MAX) /*车场未满,车进车场*/Enter->top+; cout<<"车辆在
15、车场第"<<Enter->top <<"位置!"<<endl; cout<<"请输入到达时间:(小时:分钟)"<<endl; cin>>p->reach.hour; while(p->reach.hour<0|p->reach.hour>23) /控制时间格式正确 cout<<"输入错误!"<<endl; cout<<"请重输入到达时间的时(0-23)!"<
16、<endl; cin>>p->reach.hour;cin>>p->reach.min; while(p->reach.min<0|p->reach.min>59) /控制分钟输入正确 cout<<"输入错误!"<<endl; cout<<"请重输入到达时间的分(0-59)!"<<endl; cin>>p->reach.min; Enter->stackEnter->top=p; return(1); else
17、/*车场已满,车进便道*/ cout<<"车场已满,请在便道等待!"<<endl; t=(QueueNode *)malloc(sizeof(QueueNode); t->data=p; t->next=NULL; W->rear->next=t; W->rear=t; return(1); void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /*车辆离开*/ int room; CarNode *p; QueueNode *q; /*判断车场
18、内是否有车*/ if(Enter->top>0) /*有车*/ while(1) /*输入离开车辆的信息*/ cout<<"请输入车在车场的位置1-"<<Enter->top<<":"cin>>room; if(room>=1&&room<=Enter->top) break; while(Enter->top>room) /*车辆离开*/Temp->top+; /*临时通道栈顶指针*/ Temp->stackTemp->to
19、p=Enter->stackEnter->top; Enter->stackEnter->top=NULL; Enter->top-; p=Enter->stackEnter->top; Enter->stackEnter->top=NULL; Enter->top-; while(Temp->top>=1) /*判断临时通道上是否有车*/Enter->top+; Enter->stackEnter->top=Temp->stackTemp->top; Temp->stackTemp-&
20、gt;top=NULL; Temp->top-; PRINT(p,room); if(W->head!=W->rear)&&Enter->top<MAX) /*车站是未满*/ /*便道的车辆进入车场*/q=W->head->next; p=q->data; /*p指向链队头*/ Enter->top+; cout<<"便道的"<<p->num<<"号车进入车场第"<<Enter->top<<"位置!&qu
21、ot;<<endl; cout<<"请输入现在的时间如(小时:分钟):"<<endl;cin>>p->reach.hour; if(p->reach.hour<0|p->reach.hour>23) cout<<"输入错误!"<<endl; cout<<"请重输入到达时间的时(0-23)!"<<endl; cin>>p->reach.hour; cin>>p->reach.m
22、in; if(p->reach.min<0|p->reach.min>59) cout<<"输入错误!"<<endl; cout<<"请重输入到达时间的分(0-59)!"<<endl; cin>>p->reach.min; Enter->stackEnter->top=p; W->head->next=q->next; if(q=W->rear) W->rear=W->head; free(q); /*释放q地址*/
23、else cout<<"便道里没有车!"<<endl; /*便道没车*/ else cout<<"车场里没有车!"<<endl; /*车场没车*/void PRINT(CarNode *p,int room) /*输出离开车辆的信息清单*/ int A1,A2,B1,B2; cout<<"请输入离开的时间:(小时:分钟)"<<endl; cin>>p->leave.hour; while(p->leave.hour<0|p->l
24、eave.hour>23)cout<<"输入错误!"<<endl; cout<<"请重输入离开的时间的时(0-23)"<<endl; cin>>p->leave.hour;B1=p->leave.hour; cin>>p->leave.min;if(p->leave.min<0|p->leave.min>59) cout<<"输入错误!"<<endl; cout<<"请重
25、输入到达时间的分(0-59)!"<<endl; cin>>p->leave.min; cout<<endl<<"离开车辆的车牌号为:"<<endl; puts(p->num); cout<<"其到达时间为: "<<p->reach.hour<<":"<<p->reach.min<<endl; cout<<"离开时间为: "<<p->l
26、eave.hour<<":"<<p->leave.min<<endl; A1=p->reach.hour; A2=p->reach.min; B1=p->leave.hour; B2=p->leave.min;cout<<"应交费用为: "<<(B1-A1)*60+(B2-A2)+1440)%1440*price<<"元!"<<endl; free(p);void List1(SeqStackCar *S) /*列表显示车
27、场信息*/ cout<<"您选择的是车场停车情况!"<<endl;int i; if(S->top>0) /*判断车站内是否有车*/ cout<<" 位置 到达时间 车牌号"<<endl; for(i=1;i<=S->top;i+)cout<<" "<<i<<" "<<S->stacki->reach.hour<<":"<<S->stacki->reach.min<<" "<<S->stacki->num<<endl; else cout<<"车场里没有车!"<<endl;void List2(LinkQueueCar *W) /*列
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健身房设备融资租赁合同
- 农产品运输司机劳动合同
- 儿童教育培训师招聘意向书合同
- 知识产权与保密条款补充协议
- 科教园区租赁合同
- 设备租赁合同:广告制作
- 公园绿地伸缩缝施工协议
- 婚礼场地租赁合同样本
- 办公楼建设钢筋施工协议
- 基坑支护施工合同:仓储物流篇
- 气管插管操作规范(完整版)课件
- 电磁波法探测技术—地质雷达综述
- 齐鲁工业大学2022年上期末药物分离工程期末考试复习资料
- 《药疹(Drug Eruption)》PPT课件
- 建筑门窗检测试题(共10页)
- 彩盒产品不良缺陷的识别
- 泥浆材料及处理剂大全
- 售后服务部工作流程图
- 洪价经字【2011】43号南昌市机动车停放保管服务各类收费标准
- 13学校学生食堂“三防”制度
- 管理评审输入材料()
评论
0/150
提交评论