ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:61.96KB ,
资源ID:7491129      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7491129.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实践报告停车场管理系统.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、数据结构实践报告停车场管理系统河 南 财 经 政 法 大 学集中实践报告院系: 班级: 指导老师: 小组: 小组成员: 目 录(一)设计目的3(二)问题描述3(三)概要设计4(四)详细设计8 (五)调试分析9(六)测试分析10(七)心得体会11(八)附录(源代码)12(一) 设计目的1通过课程设计,了解并掌握数据结构的设计方法,具备初步的独立分析和设计能力;2通过课程设计,初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3通过课程设计,提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4通过课程设计,训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作

2、者所应具备的科学的工作方法和作风。(二)问题描述及要求基本要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。测试数据设n=2,输入数据为:(A,1,5),(A,2,10),(D,1,15),(A,3,20),(A,4,25),(A5,30),(D,2,

3、35),(D,4,40),(E,0,0)。其中:A表示到达(arrival);D表示离去(departure);E表示输出结束(end)。实现提示需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。 此外还要实现:(1)两个栈共享空间,思考应开辟数组的空间是多少?(2)汽车可有不同种类,则他们的占地面积不同,收费标准也不同,如1辆客车和1.5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。(3)汽车可以直接从便道上开走,此时排在

4、它前面的汽车要先开走让路,然后再依次排到队尾。(三) 概要设计1、设计思想此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个栈,其中一个栈用来模拟停车场,另一个栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停

5、车场这个栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了。2、实现方法对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已。对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了。 3、流程图分析 流程图按块来分析,共分成整体系统,汽车到达系统,汽车离去系统,汽车显示

6、系统。如图1。(1) 汽车整体系统图1SD (2)以模块为单位分析算法1、“到达”模块:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便道等待。如图2。 图2 2.“离开”模块:离开时,当车库为空时,提示没有车,结束;否则车辆离开。如图3。 图3 3. “显示”模块:显示模块有两个显示选项,即:车场与便道。如图4。图4(四)详细设计1. 此函数分为不同的函数,其中包含主函数,用此来调用其他子函数,其子函数包括车辆进车站、便道函数;车辆离开函数;车辆显示函数等。2. 函数的定义: typedef struct int num; /*车牌号*/ int arrtime; /*到达/

7、离开时间*/ char car;/*车的类型*/ELEMTP; /*顺序栈的数据元素类型*/typedef struct ELEMTP elemN; int top;SqStack;/*顺序栈类型*/typedef struct node int num; /*车牌号/便道上的车辆数量*/ struct node *next;QNode; /*链队列的数据元素类型*/typedef struct QNode *front, *rear;LQueue; /*链队列类型*/3. 主函数为void main(),在此函数中用switch()函数来调用子函数。其中车辆进入车站、便道的函数为void A

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

9、来if (y.num=x.num&y.car=x.car),这个判定限制了太多,当把其改为if (y.num=x.num),便不会再次出现此问题。(六)测试分析 1.主界面 2.车辆到达3.车辆离开4.显示车辆信息5.程序结束(七)心得体会 (1) 该实验涉及到顺序栈的建立、插入、删除等操作,涉及到了链队列的建立、插入、删除等操作。 做这个实验,加深了我对以上知识点的认识和理解。 (2) 在这一周中,我们提高了 C 语言编程的能力。在程序设计过程中,需要经过反复地编写,调试,运行,发现问题并解决问题,在这次实验的设计中,我加深对程序的了解,提高自己的实际动手能力和独立思考的能力同时我也学会了综

10、合以前学到的基本知识来解决较大问题的方法。(3)在这一周中,我们通过小组中的团结合作,解决了程序中一个又一个问题。在这个过程中,我们更加了解彼此,更加明白合作的重要性。这次集中实践,不但学会了知识,还明白了团结的重要性,可谓收获良多。(八)附录(源代码) #include stdio.h#include stdlib.h#define N 2 /*停车场容量*/#define M 10#define True 1#define False 0typedef struct int num; /*车牌号*/ int arrtime; /*到达/离开时间*/ char car;/*车的类型*/ELE

11、MTP; /*顺序栈的数据元素类型*/typedef struct ELEMTP elemN; int top;SqStack;/*顺序栈类型*/typedef struct node int num; /*车牌号/便道上的车辆数量*/ struct node *next;QNode; /*链队列的数据元素类型*/typedef struct QNode *front, *rear;LQueue; /*链队列类型*/void InitStack_Sq (SqStack *s); /*初始化栈*/int Push_Sq(SqStack *s,ELEMTP x); /*入栈*/ELEMTP Pop

12、_Sq(SqStack *s); /*出栈*/void InitQueue_L(LQueue *q); /*初始化队列*/void EnQueue_L (LQueue *q,int num1); /*入队列*/int DelQueue_L(LQueue *q); /*出队列*/void Arrive (SqStack *s1, LQueue *q,ELEMTP x) /*车辆x进入停车场*/ int f; f=Push_Sq(s1,x); if (f=False) /*停车场栈s1已满入便道q */ EnQueue_L(q,x.num); printf(第%d号车停在便道第%d车位上n,x.n

13、um,q-front-num); else printf(第%d号车停在停车场第%d车位上n,x.num,s1-top);/* Arrive */void Delive (SqStack *s1,SqStack *s2, LQueue *q,ELEMTP x) /*车辆x离开停车场*/ int n,f=False; ELEMTP y; QNode *p; while (s1-top0) & (f!=True) /*在栈s1中寻找车辆x */ y=Pop_Sq(s1); if (y.num!=x.num) n=Push_Sq(s2,y); else f=True; if (y.num=x.num

14、) /*寻找到车辆x*/ if(A=x.car) printf(第%d号车应收费%d元n,y.num,(x.arrtime-y.arrtime)*M); else if(B=x.car) printf(第%d号车应收费%d元n,y.num,(x.arrtime-y.arrtime)*M*2); else printf(第%d号车应收费%d元n,y.num,(x.arrtime-y.arrtime)*M*3); while (s2-top0) /*将栈s2中的车辆倒回到栈s1中*/ y=Pop_Sq(s2); f=Push_Sq(s1,y); n=DelQueue_L(q); if (n!=NU

15、LL) /*便道q上的第一辆车入栈s1*/ y.num=n; y.arrtime=x.arrtime; f=Push_Sq(s1,y); printf(第%d号车停在停车场第%d号车位上n,y.num,s1-top); else /*栈s1中未找到车辆x*/ while (s2-top0) /*将栈s2中的车辆倒回到栈s1中*/ y=Pop_Sq(s2); f=Push_Sq(s1,y); p=q-front; /*在便道q上找到车辆x*/ f=False; while (f=False & p-next!=NULL) if (p-next-num!=x.num) p=p-next; else

16、 p-next=p-next-next; q-front-num-; if (p-next=NULL) q-rear=q-front; printf(第%d号车离开便道n,x.num); f=True; if (f=False) printf(输入数据错误,停车场和便道上均无%d号车n,x.num); /* Delive */void Display(SqStack *s1, LQueue *q) /*显示停车场的状况*/ int k; QNode *p; printf(停车场状况:n); if(s1-top!=0) printf(车道 车号n); for(k=0;ktop;k+) print

17、f(%d %dn,k+1,s1-elemk.num); else printf(停车场没有车辆n); printf(便道状况:n); if(q-front-num) printf(车道 车号n); for(k=1,p=q-front-next;p;p=p-next) printf(%d %dn,k+,p-num); else printf(便道没有车辆n);/* Display */void main() char ch1,ch2; SqStack *s1,*s2; LQueue *q; ELEMTP x; int flag; s1=(SqStack *) malloc (sizeof(SqS

18、tack); s2=(SqStack *) malloc (sizeof(SqStack); q=(LQueue *) malloc (sizeof (LQueue); InitStack_Sq(s1); InitStack_Sq(s2); InitQueue_L (q); flag=True; while(flag) printf(n *n); printf( *欢迎进入停车场管理系统 *n); printf( *); printf(n); printf(n 请输入您的选择n); printf(n); printf( S-显示停车场状况n); printf(n); printf( A-车辆到

19、达n); printf(n); printf( D-车辆离开n); printf(n); printf( E-程序结束n); printf(n); ch1=getchar(); switch (ch1) case S: Display(s1,q);break; case A: printf(输入数据:车牌号,到达时间,车辆类型(A代表小汽车,B代表客车,C代表卡车):); scanf(%d,%d,%c,&x.num,&x.arrtime,&x.car); Arrive(s1,q,x);break; case D: printf(输入数据:车牌号,离开时间,车辆类型(A代表小汽车,B代表客车,C

20、代表卡车):); scanf(%d,%d,%c,&x.num,&x.arrtime,&x.car); Delive(s1,s2,q,x);break; case E: flag=False; printf(程序正常结束n); break; default: printf(输入数据错误,重新输入n);break; getchar(); void InitStack_Sq (SqStack *s) s-top=0;int Push_Sq(SqStack *s,ELEMTP x) if (s-top=N) return (False); else s-elems-top=x;s-top+; retu

21、rn(True); ELEMTP Pop_Sq(SqStack *s) ELEMTP x; if (s-top=0) x.num=NULL; x.arrtime=NULL; return(x); else s-top-; return (s-elems-top); void InitQueue_L(LQueue *q) q-front=(QNode *)malloc(sizeof(QNode); q-rear=q-front; q-front-next=NULL; q-front-num=0;void EnQueue_L (LQueue *q,int num1) QNode *p; p=(QNode *)malloc(sizeof(QNode); p-num=num1; p-next=NULL; q-rear-next=p; q-rear=p; q-front-num+;int DelQueue_L(LQueue *q) QNode *p; int n; if (q-front=q-rear) return (NULL); else p=q-front-next; q-front-next=p-next; if (p-next=NULL) q-rear=q-front; n=p-num; free(p); q-front-num-; return(n);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1