版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.模拟停车场管理班级:物联网姓名: XXX学号: XXXXXXX日期: 4 月 9 日一、需求分析1 、程序的功能描述按照从终端输入的数据序列进行模拟管理。1 )狭道停车用栈来实现,并且用的顺序栈,等车位的便道用队列来实现,并用链式存储。2)每一组输入信息包含三个数据项,汽车的“到达”和“离去”的信息,汽车牌照号码,汽车“到达”或“离去”的时刻。3 )对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出车辆在停车场内或便道上的停车位置;若是车子离去,则输出车辆在停车场内停留的时间和缴纳的费用。(假设在便道等车的时间不收费)4 )选作内容:( 1)便道也是要收费的,仅仅比狭道收费便宜点。
2、( 2)狭道上的车可以直接开走。2、输入 / 输出的要求首先选择操作的模块,根据提示输入车牌和到达时间,程序会告知是否停满或者停车车位。车牌为10 个字符以内的字符串,时间的输入中间有冒号把时分隔开。3、测试数据1苏 D5431:101苏 Q1231 :201苏 D1451 :30二、概要设计1 、本程序所用的抽象数据类型的定义 typedef struct NODECarNode *stackMAX+1;int top;SeqStackCar;/ 狭道的堆栈顺序存储1/15.typedef struct carCarNode *data;struct car *next;QueueNode;
3、/ 队列的链式存储typedef struct NodeQueueNode *head;QueueNode *rear;LinkQueueCar;/ 便道上等候的队列定义2、主模块的流程及各子模块的主要功能1 车辆到达: int Arrival(SeqStackCar *Enter,LinkQueueCar *W)首先定义一个栈和队列的结构体指针为:*p ,*t。然后申请一个车辆信息的内存空间,并把它赋给栈指针。车辆到达时就输入车牌号,并通过if(Enter-toptop0)确保栈不空,然后用个while(1)确保输入的车辆离开位置的合法性。如果不和法,显示输入有误,要重新输入。通过while
4、(Enter-toproom)判断离开车辆的位置,如果是中间位置,就要再用一个栈前面临时开出来的车,等要开出的车开出后,再把临时栈的车看进车场内,并要调用PRINT(p,room);这个函数计算显示费用。然后还要用if(W-head!=W-rear)&Enter-topleave.hour),&(p-leave.min);printf(n离开车辆的车牌号为 :);puts(p-num);printf(n其到达停车位时间);printf(n离开停车位时间为:);A1=p-reach.hour;A2=p-reach.min;B1=p-leave.hour;B2=p-leave.min;printf
5、(n应交费用为 : %2.1f元,(B1-A1)*60+(B2-A2)*price+PRINTE(p,room);free(p);4/15.int Arrival(SeqStackCar *Enter,LinkQueueCar *W)/进入便道或者狭道CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode);flushall();printf(n请输入车牌号 ( 例 : 豫 B1234):);gets(p-num);if(Enter-toptop+;printf(n车辆在车场第%d位置 .,Enter-top);printf(n车辆
6、到达时间:);scanf(%d:%d,&(p-reach.hour),&(p-reach.min);Enter-stacktop=p;return(1);elseprintf(n该车须在便道等待! 有车位时进入车场);t=(QueueNode *)malloc(sizeof(QueueNode);进入队列,调整指针;printf(请输入进入便道的时间);scanf(%d:%d,&(p-reach.hour),&(p-reach.min);return(1);void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)/车辆的离
7、开int room;CarNode *p,*t;QueueNode *q;if(Enter-top0)/判断车场是否为空while(1)printf(n请输入车在车场的位置/1-%d/ : ,Enter-top);scanf(%d,&room);if(room=1&roomtop) break;else printf(n输入有误 , 请重输 : );5/15.while(Enter-toproom)/把要删除的车辆的前面的车开出来,进临时栈。Temp-top+;Temp-stackTemp-top=Enter-stackEnter-top;Enter-stackEnter-top=NULL;E
8、nter-top-;p=Enter-stackEnter-top;/把要删除的车辆节点赋给p。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;t=q-data;Enter-top+;scanf(%d:%d,&(t-
9、reach.hour),&(t-reach.min);/ t-leave .hour =t-reach.hour;/t-leave .min =t-reach.min;W-head-next=q-next;if(q=W-rear) W-rear=W-head;Enter-stackEnter-top=t;PRINTE(t,room);free(q);else printf(n便道里没有车 .n);else printf(n车场里没有车.);6/15.3、画出函数的调用关系图|-到达函数 -|-离开函数 -停车费用主函数 -显示车场里的情况|-显示便道里的情况四、调试分析1 、调试中遇到的问题及
10、对问题的解决方法因为时间结构体里的小时,分钟都是用的是整型,所以如果出现1: 01 这个时间的话,会导致显示列表是1: 1;这样的话会造成人的误解,同时会导致程序对停车缴纳的费用计算错误。解决方法1:可以用数组和或者字符串来表示时间,但是问题来了,要是用字符串的话,算停车费有点问题,要废上一段时间的,会提高复杂度。解决方案2:将输出用右对齐方式,缺位的用0 补齐,这样最快捷啦!2、算法的时间复杂度和空间复杂度由于没有进行循环嵌套之类的运算,只有简单的循环语句,所以时间复杂度T( O)=O( n), 在数据的存储方面,除了车牌号用的是数组以外,便道用的是顺序栈,这些是提前要申请一定的存储空间的,
11、这样非动态分配的存储空间,在某些时候是会导致空间的浪费,增加其空间复杂度。其余的都是结构体和链式存储的队列属于动态存储。当停车场的规模较小时,空间复杂度较小,随着规模的增加,动态存储的扩充,空间复杂度也随之增加。五、 使用说明及测试结果(给出程序的使用说明、注意事项及不同情况的测试结果)时间以 24 进制计算, 停车时间不能跨越24 进制。车牌号是 10 个字符串以内, 不可溢出。7/15.第一个应缴费用是在便道中的费用,第二个费用是总费用。六、源程序 (要求程序简洁、清晰、主要语句带注释)代码非本人写,对其进行改进而已#include#include8/15.#include#define
12、MAX 3/停车场最大容量为3 辆,便于观察#define price 0.05#define pricee 0.02typedef struct time/定义时间结构体int hour;int min;Time;typedef struct node/定义车辆信息结构体char num10;Time reach;Time leave;CarNode;typedef struct NODECarNode *stackMAX+1;int top;SeqStackCar;typedef struct carCarNode *data;struct car *next;QueueNode;type
13、def 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 main()SeqStackCar Enter,Temp;LinkQueueCar
14、Wait;int ch;system(color 4A);InitStack(&Enter);InitStack(&Temp);9/15.InitQueue(&Wait);while(1)printf(n欢迎使用停车场系统. tnn);printf(nt# 1.车辆到达登记.#tn);printf(nt# 2.车辆离开登记.#tn);printf(nt# 3.车辆列表显示.#tn);printf(nt# 4.退出系统 .#tnn);while(1)printf(请选择 : );scanf(%d,&ch);if(ch=1&chtop=0;for(i=0;istacks-top=NULL;int
15、InitQueue(LinkQueueCar *Q)/队列的初始化Q-head=(QueueNode *)malloc(sizeof(QueueNode);if(Q-head!=NULL)Q-head-next=NULL;10/15.Q-rear=Q-head;return(1);else return(-1);float PRINTE(CarNode *p,int room)/车辆收费int A1,A2,B1,B2;printf(n车辆离开便道的时间:);scanf(%d:%d,&(p-leave.hour),&(p-leave.min);printf(n离开车辆的车牌号为:);puts(p
16、-num);printf(n其到达便道时间为: %d:%d,p-reach.hour,p-reach.min);printf(n 离开便道时间为 : %d:%d,p-leave.hour,p-leave.min); A1=p-reach.hour;A2=p-reach.min;B1=p-leave.hour;B2=p-leave.min;printf(n 应交费用为 : %2.1f 元,(B1-A1)*60+(B2-A2)*pricee); return(B1-A1)*60+(B2-A2)*pricee);free(p);void PRINT(CarNode *p,int room)/车辆收费
17、int A1,A2,B1,B2;printf(n车辆离开的时间:);scanf(%d:%d,&(p-leave.hour),&(p-leave.min);printf(n离开车辆的车牌号为:);puts(p-num);printf(n其到达停车位时间为: %d:%d,p-reach.hour,p-reach.min);printf(n离开停车位时间为: %d:%d,p-leave.hour,p-leave.min);A1=p-reach.hour;A2=p-reach.min;B1=p-leave.hour;B2=p-leave.min;printf(n应交费用为 : %2.1f元,(B1-A
18、1)*60+(B2-A2)*price+PRINTE(p,room);free(p);/ 车辆的到达登记11/15.int Arrival(SeqStackCar *Enter,LinkQueueCar *W)CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode);flushall();printf(n请输入车牌号 ( 例 : 豫 B1234):);gets(p-num);if(Enter-toptop+;printf(n车辆在车场第%d位置 .,Enter-top);printf(n车辆到达时间:);scanf(%d:%d,&(
19、p-reach.hour),&(p-reach.min);Enter-stackEnter-top=p;return(1);elseprintf(n该车须在便道等待! 有车位时进入车场);t=(QueueNode *)malloc(sizeof(QueueNode);t-data=p;t-next=NULL;W-rear-next=t;W-rear=t;printf(请输入进入便道的时间);scanf(%d:%d,&(p-reach.hour),&(p-reach.min);return(1);void Leave(SeqStackCar *Enter,SeqStackCar *Temp,Li
20、nkQueueCar *W)/车辆的离开int room;CarNode *p,*t;QueueNode *q;if(Enter-top0)/判断车场是否为空while(1)printf(n请输入车在车场的位置/1-%d/ : ,Enter-top);12/15.scanf(%d,&room);if(room=1&roomtop) break;else printf(n输入有误 , 请重输 : );while(Enter-toproom)/把要删除的车辆的前面的车开出来,进临时栈。Temp-top+;Temp-stackTemp-top=Enter-stackEnter-top;Enter-s
21、tackEnter-top=NULL;Enter-top-;p=Enter-stackEnter-top;/把要删除的车辆节点赋给p。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;t=q-data;Enter-t
22、op+;printf(n便道的 %s号车进入车场第%d位置 .,t-num,Enter-top);printf(n 请输入 %s号车进入车场的时间 :,t-num); scanf(%d:%d,&(t-reach.hour),&(t-reach.min);/ t-leave .hour =t-reach.hour;/t-leave .min =t-reach.min;W-head-next=q-next;if(q=W-rear) W-rear=W-head;Enter-stackEnter-top=t;PRINTE(t,room);free(q);else printf(n便道里没有车 .n);else printf(n车场里没有车.);13/15.void List1(SeqStackCar *S)/显示车场里
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 对外经贸大学国际工商管理学院HR培训课件
- 《建筑装修施工图》课件
- 防冰冻雨雪路滑安全教育
- 人生感悟和人生规划
- 市政工程招投标资格预审要点
- 森林防火期树木采伐规定
- 体育检测服务招标管理办法
- 养殖场供电系统工程协议
- 项目测试与质量控制
- 旅游行业法律顾问作用
- 小米物联网业务布局研究报告
- 2022更新国家开放大学电大专科《个人理财》2023-2024期末试题及答案(试卷代号:3963)
- GB 11372-1989 防锈术语-行业标准
- 城市住房建设规划编制导则
- [英语]初中英语八大时态复习
- 企业信息服务平台建设项目可行性研究报告
- 2010版GMP附录:计算机化系统整体及条款解读(完整精华版)
- 医院矛盾纠纷排查总结的个附表
- ISO2372设备振动标准
- 电脑绣花机安全操作规程.doc
- 【定岗定编】企业定岗定编中出现的问题及改进
评论
0/150
提交评论