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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构课程设计《停车场管理系统》.docx

1、数据结构课程设计停车场管理系统数据结构与算法课程设计任务书题目: 停车场管理系统 学生姓名: 李雷正 学号: 班级: 物联网工程二班 题目类型:停车场管理系统 指导教师: 一题目简介该设计要求学生以停车场管理业务为背景,设计出一个简单的能够实现停车场管理功能的系统。通过该题目的设计过程,可以加深理解线性表的逻辑结构、存储结构,掌握栈、队列上基本运算的实现,进一步理解和熟练掌握课本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题,培养学生的动手能力。二主要任务第一部分:基本算法实现1、线性结构基本算法实现(指导老师根据题目指定);2、树型结构基本算法实现(指导老师根据题目指定);3、图

2、型结构基本算法实现(指导老师根据题目指定);4、查找基本算法实现(指导老师根据题目指定);5、排序基本算法实现(指导老师根据题目指定);第二部分:指定题目的设计与实现1、查阅文献资料,一般在3篇以上;2、建立数据的逻辑结构和物理结构;3、完成相应算法的设计;4、完成测试工作;5、撰写设计说明书;6、做好答辩工作。三主要内容、功能及技术指标(1)使用链表或顺序表实现数据的录入(顺序表或链表的创建)、查找、修改、插入、追加、删除、排序、统计、输出等功能;(2) 建立一个测试的数据表,至少要有20个测试数据,算法对于这些合法的输入数据都能产生满足规格说明要求的结果;(3)算法对于精心选择的典型、苛刻

3、而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;对算法实现过程中的异常情况能给出有效信息;(4)车辆基本情况包括的数据项有:汽车到达或离开的信息、汽车牌照号码、到达或离去的时刻等;(5)要求:若车辆到达,则输出汽车在停车场内或便道上的停车位置;若车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用。四提交的成果1. 设计说明书一份,内容包括:1) 中文摘要100字;关键词3-5个;2) 序言;3)采用类c语言定义相关的数据类型4)各模块的伪码算法5)函数的调用关系图6)调试分析a、调试中遇到的问题及对问题的解决方法;b、算法的时间复杂度和空间复杂度。7)测试结果8)源程序(带注释)

4、9) 设计总结、参考文献、致谢等。2. 刻制光盘一张。五主要参考文献1 严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社.2 严蔚敏,吴伟民.数据结构题集(C语言版).清华大学出版社.3 DATA STRUCTURE WITH C+. William Ford,William Topp .清华大学出版社(影印版). 4 谭浩强.c语言程序设计. 清华大学出版社. 5数据结构与算法分析(Java版) , A Practical Introduction to Data Structures and Algorithm Analysis Java Edition Clifford A. Sha

5、ffer , 张铭,刘晓丹译电子工业出版社 2001 年1月.六各阶段时间安排(共3周)周次日期内容地点第1周星期一教师讲解设计要求,准备参考资料教室、图书馆星期二三分析设计要求,进行数据结构及算法设计教室星期四五算法设计,编程实现 教室第2周星期一三编程上机实现、测试程序教室星期四五检查程序,答辩教室2018年6月25日 摘 要伴随着科技的飞速发展,交通工具的越来越普及,汽车作为人类社会中一个最主要的交通工具之一,在人类生活当中起着不可或缺的作用,所以每个人都梦想着拥有一辆属于自己的汽车,随着人们生活水平的提高,每个人的梦想都快速的实现,并且汽车的数量直线上升,进而引发出一系列的问题。例如,

6、停车场的智能化管理问题成为一个普遍的问题。智能化停车场管理不仅可以减少管理人员的开支,而且可以减少由操作人员失误造成损失,从而大大提高了管理效率,降低了管理成本。关键字:停车场;栈;线性表;队列1.序言 在竞争激烈的现代市场中,随处都可用到系统,程序。可见,一套完整的系统对人们的生活显得尤为重要。当然,这些最主要的还是应用于与人们息息相关的停车场管理情况当中。尤其是上下班之间,人们出行的机率在日益升高。为此,设计一套完整的停车场管理系统对实现停车场的系统管理显得尤为重要。 随着我国经济的迅速发展,人们的生活水平有了显著提高,假日旅行车流量特别大。同时,随着经济的发展,车辆越来越多,为了能更好的

7、管理停车场的车辆是停车场管理员必须面临的问题。对停车场的运行状况起决定作用的是车辆管理效率。如何利用先进的管理手段,提高停车场的管理水平,已成为停车场的当务之急。面对信息时代的机遇和挑战,利用科技手段提高企业管理无疑是一条行之有效的途径。可以最大限度地发挥准确、快捷、高效等作用,对停车场管理提供强有力的支持。因此,采用全新的计算机网络和宾馆管理系统,已成为提高停车场的管理效率、改善服务水准的重要手段之一。在某种意义上,停车场内车辆管理方面的信息化已成为现代化停车场的重要标志。1.1设计任务 根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。当有车辆从停车场离开时,等待的车辆按顺序进

8、入停车场停放。实现停车场的调度功能。用顺序栈来表示停车场,链队表示停车场外的便道。程序执行的命令为:车辆进入停车场 车辆离开停车场 显示停车场的信息。1.2设计思想 由于停车场是一个狭窄通道,而且只有一个大门可供汽车进出,问题要求汽车停车场内按车辆到达时间的先后顺序,依次由北向南排列。由此很容易联想到数据结构中的堆栈模型,因此可首先设计一个堆栈,以堆栈来模拟停车场。再设计一个队列来模拟便道,队列中的数据元素设计成汽车的车牌号,并以链表的形式存储。另外,停车场根据汽车在停车场内停放的总时长来收费的,在便道上的时间不计费,因此必须记录车辆进入停车场时的时间和车辆离开停车场时的时间,然后计算、显示费

9、用情况。2.采取c语言定义相关的数据类型2.1相关数据类型的定义2.1.1栈的抽象数据类型定义AST Stack数据对象:D=ai|aiElemSet,i=1,2,.,n, n0数据关系:R1=|ai-1,aiD,i=2,.,n约定an端为栈顶,a1端为栈底。基本操作:InitStack(&S)操作结果:构造一个空栈S。DestroyStack(&S)初始条件:栈S已存在。操作结果:栈S被销毁。ClearStack(&S)初始条件:栈S已存在。操作结果:将栈S清为空栈。StackEmpty(S)初始条件:栈S已存在。操作结果:若栈S为空栈,则返回TRUE,否则FALSE。StackLength

10、(s)初始条件:栈S已存在。操作结果:返回S的元素个数,既栈的长度。GetTop(S,&e)初始条件:栈S已存在且非空。操作结果:用e返回S的栈顶元素。Push(&S,e)初始条件:栈S已存在。操作结果:插入元素e为新的栈顶元素。Pop(&S,&e)初始条件:栈S已存在且非空。操作结果:删除S的栈顶元素,并用e返回其值。StackTraverse(S,visit()初始条件:栈S已存在且非空。操作结果:从栈底到栈顶依次对S的每个数据元素调用函数visit()。一旦visit()失败,则操作失效。ADT Stack2.1.2队列的抽象数据类型定义ADT Queue数据对象:D=ai|aiElem

11、Set,i=1,2,.,n,n0数据关系:R1=|ai-1,aiD,i=2,.,n约定其中a1端为队列头,an为队列尾。基本操作:InitQueue(&Q)操作结果:构造一个空队列Q。DestroyQueue(&Q)初始条件:队列Q已存在。操作结果:队列Q被销毁,不再存在。ClearQueue(&Q)初始条件:队列Q已存在。操作结果:将Q清为空队列。QueueEmpty(Q)初始条件:队列Q已存在。操作结果:若Q为空队列,则返回TRUE,否则FALSE。QueueLength(Q)初始条件:队列Q已存在。操作结果:返回Q的元素个数,即队列的长度。GetHead(Q,&e)初始条件:Q为非空队列

12、。操作结果:用e返回的队头元素。EnQueue(&Q,e)初始条件:队列Q已存在。操作结果:插入元素e为Q的新的队尾元素。DeQueue(&Q,&e)初始条件:Q为非空队列。操作结果:删除Q的队头元素,并用e返回其值。QueueTraverse(Q,visit()初始条件:Q已存在且非空。操作结果:从队头到队尾,依次对Q的每个数据元素调用函数visit()。一旦visit()失败,则操作失败。ADT Queue 2.2详细数据类型的定义int MAX; /*定义一个全局变量用来存储车库最大容量*/ float price;/* 定义一个全局变量用来存储每车每小时的费用*/ typedef st

13、ruct time int hour; int min; Time; /*时间结点*/ typedef struct node char num10; Time reach; Time leave; Car; /*车辆信息结点*/ typedef struct NODE Car *stack100; int top; SqStack; /*停车站*/ typedef struct car Car *data; struct car *next; QNode; typedef struct Node QNode *head; QNode *rear; LinkQueue; /*通道*/ 3.各模

14、块的伪码算法31模块划分3.1.1主程序模块void main() 初始化停车站;初始化让路的临时栈;初始化通道;输出主菜单:车辆到达、车辆离开与计费、查看停车场信息;3.1.2入场模块int arrive(SqStack *In,LinkQueue *W)车辆进入停车场;计算停车费用3.1.3出场模块void leave(SqStack *In,SqStack *Out,LinkQueue *W)车辆离开停车场;3.1.4输出模块void info(SqStack S,LinkQueue W) 输出停车场信息; 3.1.5栈模块实现栈的抽象数据类型3.1.6队列模块实现队列的抽象数据类型3.

15、2主要模块的算法描述3.2.1主函数void main() SqStack In,Out; LinkQueue Wait; int ch; InitStack(&In); /*初始化停车站*/ InitStack(&Out); /*初始化让路的临时栈*/ InitQueue(&Wait); /*初始化通道*/ while(1) printf(-欢迎使用停车场管理系统-n); printf(t本系统由5011工作室开发,作者:邓春国、段庆龙、梁伟明、丁磊。nn); printf(请输入停车场的容量:); scanf(%d,&MAX); printf(请输入停车场的收费标准(元/小时):); sc

16、anf(%f,&price); printf(您输入的停车场容量为%d位,费用为%2.1f元/小时。n,MAX,price); printf(n(1)车辆到达n(2)车辆离开n(3)停车场信息n(4)退出系统n请选择n); while(1) ch=getch(); switch(ch) case 49:arrive(&In,&Wait);break; /*车辆到达*/ case 50:leave(&In,&Out,&Wait);break; /*车辆离开*/ case 51:info(In,Wait);break; /*输出车站信息*/ case 52:printf(谢谢使用!);exit(0

17、); /*退出主程序*/ default:printf(n按键无效,请重新按键选择!); /*49-52分别表示“1”-“4”这四个按键的键值*/ system(CLS); printf(-欢迎使用停车场管理系统-n); printf(t本系统由CG工作室开发,作者:邓春国、段庆龙、梁伟明、丁磊。nnn); printf(您输入的停车场容量为%d位,费用为%2.1f元/小时。n,MAX,price); printf(n(1)车辆到达n(2)车辆离开n(3)停车场信息n(4)退出系统n请选择n); 3.2.2 车辆到达模块 void jinru(stackhead &st,linkqueue &

18、q) /对进入停车场的汽车的处理; int number,time_a;/*开始定义一个整型变量number,用来给到达的车辆编号,定义一个时间a,用来记录车辆到达的时间*/ Printf(车牌为:); Scanf(“%d”,& number); Printf(进场的时刻:); Scanf(“%d”,&time_a);/*对到达车辆的车牌号、到达时间 信息的录入*/ if(st.stacksize_currennum,In-top); /*判断停车场是否已满,如果有停车位将录入的信息存储,并且显示车辆的位置*/ else enqueue(q,number,time_a); printf(n停车

19、场已满,该车进入车场第%d号停车位。,In-top); /*如果停车场已满,系统将提示把车停在便道上的第N个位置*/3.2.3车辆离开模块void leave(SqStack *In,SqStack *Out,LinkQueue *W) /*车辆离开*/ int room; Car *p,*t;QNode *q;/*开始定义一个整型变量room,用来记录要离开的车辆在停车场的位置,定义车辆结点指针p和t和队列结点指针q。*/ if(In-top0) /*有车*/ while(1) printf(n请输入车在停车场的位置(1-%d):,In-top); scanf(%d,&room); if(r

20、oom=1&roomtop) break; /*判断停车场内是否有车,如果有车,就输入要离开的车辆在停车场的位置,否则就提示停车场没车。这里用了while循环语句,如果输入的车辆位置超出范围,就要重新输入。*/ while(In-toproom) /*车辆离开*/ Out-top+; Out-stackOut-top=In-stackIn-top; In-stackIn-top=NULL;In-top-; /*如果栈顶位置In-top大于要离开的车位置room(即要离开的车不在停车场的门口)的话,在要离开的车辆前面的车就要先离开,开到临时停车场,即临时栈中,因此Out所表示的临时栈的栈顶top

21、加1,用来表示临时停车场增加1辆车;接着把该车的信息拷贝到栈Out中,然后删除栈In的栈顶(即这辆车开走)。*/ p=In-stackIn-top; In-stackIn-top=NULL;In-top-; while(Out-top=1) In-top+;In-stackIn-top=Out-stackOut-top; Out-stackOut-top=NULL; Out-top-; /*直到要离开的车辆前面的车都开到临时停车场之后,该车才离开,离开之后,该车的信息结点In-stackIn-top置空,然后栈顶In-top减1。之后就判断临时停车场是否有车,有车就一辆一辆的开回停车场里面,因

22、此停车场的栈顶In-top 加1,然后就把临时停车场的车结点的信息拷贝到停车场的车结点上,接着删除临时停车场车的结点 (即Out-stackOut-top=NULL;Out-top-;)。*/ PRINT(p,room); if(W-head!=W-rear)&In-tophead-next;t=q-data;In-top+; printf(n便道的%s号车进入车场第%d号停车位。,t-num,In-top); printf(n请输入现在的时间(格式“*:*”):); scanf(%d:%d,&(t-reach.hour),&(t-reach.min); W-head-next=q-next;

23、 if(q=W-rear) W-rear=W-head; In-stackIn-top=t; free(q); /*判断(W-head!=W-rear)&In-toptop 加1以便增加新的车辆,接着输入队头的车辆信息,即要进去停车场的车的信息,然后便道队列的头结点指向q(即刚进入停车场的车的结点)的后继结点,即原队列中第二辆车的结点,接着判断刚离开的车是否是最后一辆车,如果是,就把队列置空,即队头等于队尾;之后就把结点t(即要进入停车场的车)的信息拷贝到停车场栈顶的车中,最后释放p的空间,即原队头结点。*/ else printf(n停车场里没有车n); /*没车*/ printf(请按任意

24、键返回); getch();4.函数的调用关系图及流程图4.1函数调用关系图EnqueuePopqueuePushPop 4.2程序运行流程图4.3车辆到达流程图进站判断是否有车位 输出:停车位已满登记车辆信息车辆离开输出:停站信息 4.4车辆离开程序运行流程图是5.调试程序中遇到的问题与解决方法 首先,在程序运行当中遇到的问题有很多,对于程序运行当中的第一个问题就是变量的错误定义,导致程序运行当中出现了问题,经过我坚持不懈的改进,最终将程序运行出来了。从中我懂得了做每件事需要有不达目的不罢休精神。第二个问题就是在做函数调用关系图的过程当中出现了做的关系图保存不了,做完就出现遗失调用关系图的情

25、况。通过跟同学的商讨跟请教,原来问题是出在了没建立画布,最终我建立画布,重新做完了函数调用关系图及程序运行流程图。在这当中我学到了很多新的技能,还深刻的体会到了学以致用的难度。6.测试分析6.1主界面6.2车辆进站信息界面:6.3完成车辆停放界面6.4车辆离站界面6.5 收据界面6.6 退出程序界面7.源程序#include#include #include#include#include#define size 1 /停车场位置数/模拟停车场的堆栈的性质;typedef struct zanlind int number; /汽车车号 int ar_time; /汽车到达时间zanInode

26、;typedef struct zanInode *base; /停车场的堆栈底 zanInode *top; /停车场的堆栈顶 int stacksize_curren;stackhead;/堆栈的基本操作;void initstack(stackhead &L) /构造一个空栈 L.base=(zanInode*)malloc(size*sizeof(zanlind); if(!L.base) exit(0); L.top=L.base; L.stacksize_curren=0;void push(stackhead &L,zanInode e) /把元素e压入s栈 *L.top+=e;

27、 L.stacksize_curren+;void pop(stackhead &L,zanInode &e) /把元素e弹出s栈 if(L.top=L.base) cout停车场为空 !; return; e=*-L.top; L.stacksize_curren-;/模拟便道的队列的性质;typedef struct duilie int number; /汽车车号 int ar_time; /汽车到达时间 struct duilie *next;*queueptr;typedef struct queueptr front; /便道的队列的对头 queueptr rear; /便道的队列的队尾 int length;linkqueue;/队列的基本操作;void initqueue(linkqueue &q) /构造一个空队列 q.front=q.rear=(queueptr)malloc(sizeof(duilie);

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

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