数据结构课程设计停车场管理系统

上传人:s****a 文档编号:129315877 上传时间:2022-08-02 格式:DOCX 页数:14 大小:304.81KB
返回 下载 相关 举报
数据结构课程设计停车场管理系统_第1页
第1页 / 共14页
数据结构课程设计停车场管理系统_第2页
第2页 / 共14页
数据结构课程设计停车场管理系统_第3页
第3页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
实验二停车场管理班级:A0712 学号:12 姓名:冷清淼 成绩:指导教师签名:一、问题描述设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。 在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。 若停车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时, 便道上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后进入的车辆 必须先退出停车场为它让路,待该辆车开出大门后,其他车辆再按原次序返回车 场。每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不 收费)。设计要求:1. 模拟上述管理过程。要求以顺序栈模拟停车场,以链队列模拟便道。2. 从终端读入汽车到达或离去的数据,每组数据包括三项:(1) 是“到达”还是“离开”;(2) 汽车牌照号码;(3) “到达”或“离开”的时刻。3. 与每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停 车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和 应交的费用。二、算法说明1 .数据结构说明(1) 用到两个堆栈:一个为车场栈;另一个为临时栈temptypedef struct NODE(CarNode *stackMAX+1;int top;SeqStackCar; /*模拟车场 */(2) 一个队列结构,存储便道车辆信息:typedef struct Node(QueueNode *head;QueueNode *rear;LinkQueueCar; /* 模拟便道*/2.算法说明(1) 功能模块说明:停车场管理系统含有三个模块,即:车辆到达、离开、列表显示(2) 以模块为单位分析算法1、“到达”模块:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,2. “离开”模块:离开时,当车库为空时,提示没有车,结束;否则车辆离开。如图3。3,“显示”模块:显示模块有两个显示选项,即:车场与便道。如图4。列表显示)3判断输入真:2便道1.车场显示车场列表显示便道列表4V 结束 :图4三、测试结果(一)测试用例(说明:测试用例要合理并且足够,既要有正确用例,也要有错误用例, 同时检验程序的正确性和强壮性)1. 第一组测试用例(1)测试输入:停车场的车辆离开,如下表:服务选择车牌号/车位到达/离开时间1QH05815: 251AB12318: 451EA64223: 15220: 30210: 65 (错误)(2) 测试目的:测试离开方法时间格式控制以及费用计算是否正确。(3) 正确输出:第一次离开的是AB123,应交费3.45元。第二次时,当在输入65时, 应该提示输入错误,重输。(4) 实际输出:如耽课程学习集、程序避计实习、停车场何题.(5) 错误原因:第一个错误是在计算时,一个数字错了;第二个是没有对时间格式控 制。(6) 当前状态:已改正2. 第二组测试用例(1)测试输入:连续6辆车到达,如下表:服务选择车牌号到达时间1A88287: 561S22968: 251WW6668: 451HK45615: 501GH99912: 301DD55513: 40(2) 测试目的:测试到达方法与列表显示方法能否正确完成。(3) 正确输出:先到达的五辆车先进入停车场,最后到达的一辆在便道等候。(4) 实际输出:D八课程学习集、程序设计实习、停车场问题,代码夫七单代码夹De.(5) 错误原因:没有作出时间先后的判断,而是先输入先进入。(6) 当前状态:待修改3. 第三组测试用例(1)测试输入:接上一步输入离开信息,下表:服务选择离开车位离开时间便道车进入时间2313: 3013: 40(2)测试目的:测试离开方法功能是否成功以及便道进入车场是否正确。(3)正确输出:输出3号车位的车辆离开信息清单,便道1号车进入停车场。(4)实际输出:-Df课程学习集程序设计实习停车场问煎代码夹单代码夹Debug、(5)错误原因:没有错误。(6)当前状态:通过(二)测试结果分析此停车管理系统基本可能实现一个小的停车场的管理,其“到达”与“离开”方法 都相对比较完整,以及结算清单明了。尽管在时间先后上有出现混乱,但当其用到实际应用 时,那个时间先后就可以避免了。但在输入数据时,要按照严格的格式输入,否则有可能出 现死去或崩溃。若本系统能加上保存功能就更好了,因为一个系统在使用过程中总会关机等, 而此系统的缺点却是没有保存功能,关闭之后就要重新建立了。会慢慢完善。附录:源代码/系统说明:本系统适应于小型停车场,且停车时间在一天之内的短期停放停车场。/在此系统中,车库容量设置为5,便于测试。在实际使用中可以对容量大小按实际情况设 置。#include#include#include#include#define MAX 5 /*车库容量,可以根据实际情况改变*/#define price 0.01 /* 一辆车每分钟费用,可变*/typedef struct timeint hour;int min;Time; /*时间结点*/typedef struct nodechar num10;Time reach;Time leave;CarNode; /*车辆信息结点*/typedef struct NODECarNode *stackMAX+1;int top;SeqStackCar; /* 模拟停车场 */typedef struct carCarNode *data;struct car *next;QueueNode;typedef struct NodeQueueNode *head;QueueNode *rear;LinkQueueCar; /* 模拟便道*/*方法声明*/void InitStack(SeqStackCar *); /*初始化栈 */int InitQueue(LinkQueueCar *); /*初始化便道*/int Arrival(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;LinkQueueCar Wait;int ch;InitStack(&Enter); /*初始化车站*/InitStack(&Temp); /*初始化让路的临时栈*/InitQueue(&Wait); /*初始化通道*/ while(1)cout浓欢迎使用本停车管理系统浓endl;cout“ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ f f11*个*个*endl;cout- 1.车辆到达 浓-浓endl;cout- 2.车辆离开浓-浓endl;cout- 3.列表显示浓-浓endl;cout-4.退出系统-浓endl;1 . _ f f “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ f f11cout*endl;cout!说明:请注意正确输入时间,在输入“时”后,按“ENTER”或者“空格”,再 输入“分”。不要为非数字!endl;cout”请选择所需要的服务!(1-4).”ch;if(ch=1&ch=4)break;else cout输入错误!请选择:(1-4).”top=0;for(i=0;istacks-top=NULL;int InitQueue(LinkQueueCar *Q) /*初始化便道*/Q-head=(QueueNode *)malloc(sizeof(QueueNode);if(Q-head!=NULL)Q-head-next=NULL;Q-rear=Q-head;return(1);else return(-1);int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达*/CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode);flushall();cout请输入车牌号(例:A1234):num);if(Enter-toptop+;cout车辆在车场第top 位置!”endl;coutvv”请输入到达时间:(小时:分钟)”p-reach.hour;while(p-reach.hourreach.hour23) /控制时间格式正确coutvv”输入错误!endl;coutvv”请重输入到达时间的时(0-23)!”p-reach.hour;cinp-reach.min;while(p-reach.minreach.min59) /控制分钟输入正确coutvv输入错误!endl;coutvv请重输入到达时间的分(0-59)!”p-reach.min;Enter-stackEnter-top=p;return(1);else /*车场已满,车进便道*/cout车场已满,请在便道等待!”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;/*判断车场内是否有车*/if(Enter-top0) /*有车*/while(1) /*输入离开车辆的信息*/cout请输入车在车场的位置1-toproom;if(room=1&roomtop) break;while(Enter-toproom) /*车辆离开*/Temp-top+; /*临时通道栈顶指针*/Temp-stackTemp-top=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-top=NULL;Temp-top-;PRINT(p,room);if(W-head!=W-rear)&Enter-tophead-next;p=q-data; /*p指向链队头*/Enter-top+;cout便道的num号车进入车场第top”位 置! endl;cout请输入现在的时间如(小时:分钟):p-reach.hour;if(p-reach.hourreach.hour23)cout输入错误!endl;cout请重输入到达时间的时(0-23)!”p-reach.hour;cinp-reach.min;if(p-reach.minreach.min59)cout输入错误!endl;cout请重输入到达时间的分(0-59)!”p-reach.min;Enter-stackEnter-top=p;W-head-next=q-next;if(q=W-rear) W-rear=W-head;free(q); /*释放 q 地址*/else cout便道里没有车!”endl;/*便道没车*/else cout车场里没有车!”endl; /*车场没车*/void PRINT(CarNode *p,int room) /*输出离开车辆的信息清单*/int A1,A2,B1,B2;cout请输入离开的时间:(小时:分钟)”p-leave.hour;while(p-leave.hourleave.hour23)cout输入错误!”endl;cout请重输入离开的时间的时(0-23)p-leave.hour;B1=p-leave.hour;cinp-leave.min;if(p-leave.minleave.min59) cout输入错误!endl;cout请重输入到达时间的分(0-59)!”p-leave.min;coutendl离开车辆的车牌号为:num);cout其到达时间为:reach.hour:reach.minendl;cout离开时间为:leave.hour:leave.minreach.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) /*列表显示车场信息*/cout您选择的是车场停车情况!”top0) /*判断车站内是否有车*/cout位置到达时间车牌号endl; for(i=1;itop;i+) coutistacki-reach.hour:stacki-reach.minstacki-numendl; else cout车场里没有车!endl;void List2(LinkQueueCar *W) /* 列表显示便道信息 */couthead-next;if(W-head!=W-rear) /*判断通道上是否有车*/cout等待车辆的车牌号码为:vvendl; while(p!=NULL)/coutdata-num);coutj data-numnext;j+; 开始时显示不正确,没有按照正常输出else cout便道里没有车!;void List(SeqStackCar S,LinkQueueCar W) /*列表界面 */int flag,tag;flag=1;while(flag) /*列表显示循环控制*/cout请选择您要显示信息! (1-3):endl;cout浓-1.车场-endl;cout浓-2.便道-endl;cout浓-3.返回-浓tag;if(tag=1lltag=3) break;else cout输入错误!请选择(1-3):endl;switch(tag)case 1:List1(&S);break;/* 列表显示车场信息 */case 2:List2(&W);break;/* 列表显示便道信息 */case 3:flag=0;break;default: break;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!