数据结构实验报告模拟停车场管理(含代码).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数据结构实验报告模拟停车场管理(含代码).doc》由会员分享,可在线阅读,更多相关《数据结构实验报告模拟停车场管理(含代码).doc(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、模拟停车场管理班级:物联网 姓名:XXX 学号:XXXXXXX 日期:4月9日一、需求分析 1、程序的功能描述 按照从终端输入的数据序列进行模拟管理。 1)狭道停车用栈来实现,并且用的顺序栈,等车位的便道用队列来实现,并用链 式存储。 2)每一组输入信息包含三个数据项,汽车的“到达和“离去的信息,汽车牌 照号码,汽车“到达”或“离去的时刻。 3)对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出车辆在停车场内或便道上的停车位置;若是车子离去,则输出车辆在停车场内停留的时间和缴纳的费用。(假设在便道等车的时间不收费) 4)选作内容:(1)便道也是要收费的,仅仅比狭道收费便宜点。 (2)
2、狭道上的车可以直接开走. 2、 输入/输出的要求 首先选择操作的模块,根据提示输入车牌和到达时间,程序会告知是否停满或者停车车位。车牌为10个字符以内的字符串,时间的输入中间有冒号把时分隔开.3、 测试数据 1 苏D543 1:10 1 苏Q123 1:20 1 苏D145 1:30二、概要设计 1、本程序所用的抽象数据类型的定义 typedef struct NODECarNode stackMAX+1; int top;SeqStackCar;/狭道的堆栈顺序存储typedef struct carCarNode *data; struct car *next;QueueNode;/队列的
3、链式存储typedef struct NodeQueueNode head; QueueNode rear;LinkQueueCar;/便道上等候的队列定义2、 主模块的流程及各子模块的主要功能 车辆到达:int Arrival(SeqStackCar *Enter,LinkQueueCar W)首先定义一个栈和队列的结构体指针为:*p , *t 。然后申请一个车辆信息的内存空间,并把它赋给栈指针。 车辆到达时就输入车牌号,并通过if(EntertopMAX)来判断该车是进车场内还是进便道上,如果是进车场内就把top 加1,显示 在车场内的位置,还要输入进车场的时间,然后把该节点进栈。如果是e
4、lse 就显示该车要停在便道上,并进行进队列的操作。 车辆离开: void Leave(SeqStackCar Enter,SeqStackCar Temp,LinkQueueCar W) 定义一个整型变量room 记录要离开车辆的位置,定义两个栈指针和一个队列指针, 用个if(Entertop0) 确保栈不空,然后用个while(1) 确保输入的车辆离开位置的合法 性.如果不和法,显示输入有误,要重新输入.通过while(Enter-toproom) 判断离开车辆的位置,如果是中间位置,就要再用一个栈前面临时开出来的车,等要开出的车开出后,再把临时栈的车看进 车场内,并要调用PRINT(p,
5、room); 这个函数计算显示费用。然后还要用 if((Whead!=W-rear)&Enter-topnum); printf(n其到达停车位时间); printf(”n离开停车位时间为:); A1=p-reach.hour; A2=preach。min; B1=pleave.hour; B2=pleave。min; printf(”n应交费用为: %2。1f元”,(B1A1)60+(B2A2)*price+PRINTE(p,room);free(p);int Arrival(SeqStackCar Enter,LinkQueueCar W)/进入便道或者狭道 CarNode *p; Que
6、ueNode t; p=(CarNode *)malloc(sizeof(CarNode)); flushall(); printf(”n请输入车牌号(例:豫B1234):”); gets(pnum);if(Entertopreach。hour),(preach。min); return(1);void Leave(SeqStackCar Enter,SeqStackCar *Temp,LinkQueueCar W) /车辆的离开int room; CarNode *p,t; QueueNode q;if(Entertop0) / 判断车场是否为空 while(1) printf(”n请输入车
7、在车场的位置/1-d/:”,Entertop); scanf(”%d”,&room); if(room=1&roomstackEntertop; EnterstackEnter-top=NULL; Entertop-; p=EnterstackEnter-top; /把要删除的车辆节点赋给p。 EnterstackEntertop=NULL; Entertop-;while(Temptop=1) / 再把临时栈里德车辆进停车场Entertop+; EnterstackEntertop=Temp-stackTemptop; TempstackTemp-top=NULL; Temp-top-;PR
8、INT(p,room); / 调用计费函数计费。if((Whead!=W-rear)Entertopheadnext; t=qdata; Enter-top+; scanf(”d:%d”,(treach.hour),(treach。min); / tleave 。hour =treach.hour; /t-leave .min =treach.min; W-head-next=qnext;if(q=Wrear) W-rear=Whead;EnterstackEntertop=t;PRINTE(t,room); free(q);else printf(”n便道里没有车。n”);else prin
9、tf(”n车场里没有车.); 3、画出函数的调用关系图 -到达函数-| |-离开函数-停车费用主函数-显示车场里的情况 -显示便道里的情况四、调试分析 1、调试中遇到的问题及对问题的解决方法 因为时间结构体里的小时,分钟都是用的是整型,所以如果出现1:01这个时间的话,会导致显示列表是1:1;这样的话会造成人的误解,同时会导致程序对停车缴纳的费用计算错误。解决方法1:可以用数组和或者字符串来表示时间,但是问题来了,要是用字符串的话,算停车费有点问题,要废上一段时间的,会提高复杂度。解决方案2:将输出用右对齐方式,缺位的用0补齐,这样最快捷啦!2、 算法的时间复杂度和空间复杂度 由于没有进行循环
10、嵌套之类的运算,只有简单的循环语句,所以时间复杂度T(O)=O(n),在数据的存储方面,除了车牌号用的是数组以外,便道用的是顺序栈,这些是提前要申请一定的存储空间的,这样非动态分配的存储空间,在某些时候是会导致空间的浪费,增加其空间复杂度。其余的都是结构体和链式存储的队列属于动态存储.当停车场的规模较小时,空间复杂度较小,随着规模的增加,动态存储的扩充,空间复杂度也随之增加.五、 使用说明及测试结果(给出程序的使用说明、注意事项及不同情况的测试结果) 时间以24进制计算,停车时间不能跨越24进制。车牌号是10个字符串以内,不可溢出.第一个应缴费用是在便道中的费用,第二个费用是总费用。六、源程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告 模拟 停车场 管理 代码
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内