数据结构实践报告--停车场管理系统

上传人:jiups****uk12 文档编号:44292412 上传时间:2018-06-09 格式:DOC 页数:24 大小:247.61KB
返回 下载 相关 举报
数据结构实践报告--停车场管理系统_第1页
第1页 / 共24页
数据结构实践报告--停车场管理系统_第2页
第2页 / 共24页
数据结构实践报告--停车场管理系统_第3页
第3页 / 共24页
数据结构实践报告--停车场管理系统_第4页
第4页 / 共24页
数据结构实践报告--停车场管理系统_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《数据结构实践报告--停车场管理系统》由会员分享,可在线阅读,更多相关《数据结构实践报告--停车场管理系统(24页珍藏版)》请在金锄头文库上搜索。

1、1河河 南南 财财 经经 政政 法法 大大 学学集中实践报告院系:班级:指导老师:小组:小组成员:2目目 录录(一)设计目的(一)设计目的3 3(二)问题描述(二)问题描述3 3(三)(三)概要设计概要设计4 4(四)详细设计(四)详细设计8 8 (五)调试分析(五)调试分析9 9(六)测试分析(六)测试分析1010(七)心得体会(七)心得体会1111(八)附录(源代码)(八)附录(源代码)12123(一)(一) 设计目的设计目的1通过课程设计,了解并掌握数据结构的设计方法,具备初步的独立分析和设计能力;2通过课程设计,初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

2、3通过课程设计,提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4通过课程设计,训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。(二)问题描述及要求(二)问题描述及要求基本要求基本要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费) 。栈

3、以顺序结构实现,队列以链表结构实现。测试数据测试数据 设 n=2,输入数据为:(A,1,5),(A,2,10), (D,1,15),(A,3,20),(A,4,25),(A5,30),4(D,2,35),(D,4,40),(E,0,0)。其中:A表 示到达(arrival);D表示离去(departure);E表示输 出结束(end)。 实现提示实现提示需另设一个栈,临时停放为给要离去的汽车让路而从停车场退 出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时 刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌 照号码和进入停车场的时刻。此外还要实现: (1)两个栈共享空间,思考

4、应开辟数组的空间是多少?(2)汽车可有不同种类,则他们的占地面积不同,收费标准也不同, 如 1 辆客车和 1.5 辆小汽车的占地面积相同,1 辆十轮卡车占地面 积相当于 3 辆小汽车的占地面积。(3)汽车可以直接从便道上开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾。(三)(三) 概要设计概要设计1、设计思想此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个栈,其中一个栈用来模拟停车场,另一个栈用来模拟临时停车场,

5、5该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了。2、实现方法对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结

6、点而已。对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了。3、流程图分析流程图按块来分析,共分成整体系统,汽车到达系统,汽车离去系统,汽车显示系统。如图 1。(1 1)汽车整体系统汽车整体系统6停停 车车 场场 管管 理理 系系 统统车辆到达车辆离开车辆显示AD (2 2)以模块为单位分析算法)以模块为单位分析算法 1、 “到达”模块:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便道等待。如图 2。车辆到达停车场是否满结束进入停车场进入便道是否图 22.“离开”模块:离开时

7、,当车库为空时,提示没有车,结束;否则车辆离开。如图3。S图 17车辆离开停车场是否空结束车辆离开提示没有车是否否便道是否有车是车进入车场图 33. “显示”模块:显示模块有两个显示选项,即:车场与便道。如图 4。列表显示判断输入值结束显示车场列表显示便道列表S2.便道S1.车场图 48(四)详细设计(四)详细设计1. 此函数分为不同的函数,其中包含主函数,用此来调用其他子函数,其子函数包括车辆进车站、便道函数;车辆离开函数;车辆显示函数等。2. 函数的定义:typedef structint num; /*车牌号*/int arrtime; /*到达/离开时间*/char car;/*车的类

8、型*/ELEMTP; /*顺序栈的数据元素类型*/typedef structELEMTP elemN;int top;SqStack;/*顺序栈类型*/typedef struct nodeint num; /*车牌号/便道上的车辆数量*/struct node *next;9QNode; /*链队列的数据元素类型*/typedef structQNode *front, *rear;LQueue; /*链队列类型*/3. 主函数为 void main(),在此函数中用 switch()函数来调用子函数。其中车辆进入车站、便道的函数为 void Arrive (SqStack *s1, LQ

9、ueue *q,ELEMTP x);车辆离开函数为void Delive (SqStack *s1,SqStack *s2, LQueue *q,ELEMTP x);车辆显示函数为 void Display(SqStack *s1, LQueue *q)。( (五五) )调试分析调试分析由于此停车场管理系统是分模块设计的,而且在程序的实现过程中又使用了清屏函数,所以,运行时用户选择任务并且执行完任务结构清晰,使用方便。本程序的调试运行,总体上情况良好,但中间也出现了一些小问题。如当删除第 3 个元素时,出现了错误。10明明有 4 号车,却出现了提示错误,后经过调试,发现了问题,原来 if (y

10、.num=x.numnum; /*/*车牌号车牌号*/*/intint arrtime;arrtime; /*/*到达到达/ /离开时间离开时间*/*/charchar car;/*car;/*车的类型车的类型*/*/ELEMTP;ELEMTP; /*/*顺序栈的数据元素类型顺序栈的数据元素类型*/*/typedeftypedef structstructELEMTPELEMTP elemN;elemN;intint top;top;SqStack;/*SqStack;/*顺序栈类型顺序栈类型*/*/typedeftypedef structstruct nodenodeintint num;

11、num; /*/*车牌号车牌号/ /便道上的车辆数量便道上的车辆数量*/*/structstruct nodenode *next;*next;QNode;QNode; /*/*链队列的数据元素类型链队列的数据元素类型*/*/14typedeftypedef structstructQNodeQNode *front,*front, *rear;*rear;LQueue;LQueue; /*/*链队列类型链队列类型*/*/voidvoid InitStack_SqInitStack_Sq (SqStack(SqStack *s);*s); /*/*初始化栈初始化栈*/*/intint Push

12、_Sq(SqStackPush_Sq(SqStack *s,ELEMTP*s,ELEMTP x);x); /*/*入栈入栈*/*/ELEMTPELEMTP Pop_Sq(SqStackPop_Sq(SqStack *s);*s); /*/*出栈出栈*/*/voidvoid InitQueue_L(LQueueInitQueue_L(LQueue *q);*q); /*/*初始化队列初始化队列*/*/voidvoid EnQueue_LEnQueue_L (LQueue(LQueue *q,int*q,int num1);num1); /*/*入队列入队列*/*/intint DelQueue_

13、L(LQueueDelQueue_L(LQueue *q);*q); /*/*出队列出队列*/*/voidvoid ArriveArrive (SqStack(SqStack *s1,*s1, LQueueLQueue *q,ELEMTP*q,ELEMTP x)x)/*/*车辆车辆 x x 进入停车场进入停车场*/*/intint f;f;f=Push_Sq(s1,x);f=Push_Sq(s1,x);ifif (f=False)(f=False) /*/*停车场栈停车场栈 s1s1 已满入便道已满入便道 q q */*/EnQueue_L(q,x.num);EnQueue_L(q,x.num

14、);printf(“printf(“第第%d%d 号车停在便道第号车停在便道第%d%d 车位上车位上n“,x.num,q-n“,x.num,q-front-num);front-num); elseelse printf(“printf(“第第%d%d 号车停在停车场第号车停在停车场第%d%d 车位上车位上15n“,x.num,s1-top);n“,x.num,s1-top);/*/* ArriveArrive */*/voidvoid DeliveDelive (SqStack(SqStack *s1,SqStack*s1,SqStack *s2,*s2, LQueueLQueue *q,E

15、LEMTP*q,ELEMTP x)x)/*/*车辆车辆 x x 离开停车场离开停车场*/*/intint n,f=False;n,f=False;ELEMTPELEMTP y;y; QNodeQNode *p;*p;whilewhile (s1-top0)(s1-top0) y=Pop_Sq(s1);ifif (y.num!=x.num)(y.num!=x.num) n=Push_Sq(s2,y);n=Push_Sq(s2,y);elseelse f=True;f=True; ifif (y.num=x.num)(y.num=x.num) /*/*寻找到车辆寻找到车辆 x*/x*/if(A=x.car)if(A=x.car)printf(“printf(“第第%d%d 号车应收费号车应收费%d%d 元元n“,y.num,(x.arrtime-n“,y.num,(x.arrtime-y.arrtime)*M);y.arrtime)*M);elseelseif(B=x.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号