数据结构课程设计 停车场管理系统

上传人:第*** 文档编号:78872289 上传时间:2019-02-15 格式:DOC 页数:28 大小:447.51KB
返回 下载 相关 举报
数据结构课程设计   停车场管理系统_第1页
第1页 / 共28页
数据结构课程设计   停车场管理系统_第2页
第2页 / 共28页
数据结构课程设计   停车场管理系统_第3页
第3页 / 共28页
数据结构课程设计   停车场管理系统_第4页
第4页 / 共28页
数据结构课程设计   停车场管理系统_第5页
第5页 / 共28页
点击查看更多>>
资源描述

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

1、德州学院 信息管理学院 2013级 计科(软件外包)专业 数据结构课程设计 目 录1 实习目的12 问题描述13 需求分析23.1设计思想23.2实现方法24 概要设计34.1数据结构设计34.4函数及功能要求35 总体设计45.1总体设计图45.2.1车辆成批入站65.2.2车站内信息显示76 详细设计86.1 采用结构体定义的相关数据类型86.2 功能函数设计97 系统测试及其结果147.1 程序调试中的问题147.2 结果截图167.2.1车辆成批入站167.2.2车辆出站188 心得体会19参考文献21附录22停车场管理系统1 实习目的通过实习,了解并初步掌握设计、实现较大系统的完整过

2、程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。2 问题描述停车场是一条可以停放n辆车的狭窄通道,且只有一个大门汽车停放安到达时间的先后依次由北向南排列(大门在最南端,最先到达的第一辆车停在最北端)若停车场已经停满n辆车,后来的汽车在便道上等候,一旦有车开走,排在便道上的第一辆车可以开入;当停车场的某辆车要离开时,停在他后面的车要先后退为他让路,等它开出后其他车在按照原次序开入车场,每两停在车场的车要安时间长短缴费。3 需求分析3.1设计思想此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并

3、且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。至于当停车场已满时,需要停放车辆的通道可以用一个循环队列来实现。当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的循环队列的头结点连到原来的第二辆车上就可以了。这个程序的关

4、键是车辆的进站和出站操作,以及车场和通道之间的相互关系。由于车站是一个很窄的、一边开口的车道,先进后出,类似数据结构中的栈结构,故车场用栈这种数据结构来描述。外面的狭长的通道,先进先出,故可用队列结构来描述。考虑到车场和通道在整个程序中都要用到。故把这两个变量定义成全局变量。本程序中的数据对象是汽车,可以认为车牌号是每个元素的关键项,不能重复,和现实中一样,另外加了车主姓名这一数据项,为表简洁,其他相关信息如入场时间,车的类型,收取费率等,都不再考虑,具体应用的时候可以方便地修改得到。3.2实现方法对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停

5、车的临时停放地点。至于通道上车辆的停放则用一个循环队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此循环队列上的结点而已。4 概要设计4.1数据结构设计第一个定义汽车的信息:车牌号num10和车主姓名name10:typedef struct carchar num10;char name10;Car;第二个定义汽车场的结构,在这里我把它看成是一个栈,在这里定义栈的容量等信息:typedef struct Car datamaxsize; int n;/栈容量设定 int top;Stack;/顺序栈 用来存放汽车场内的车辆信息第三个定义通道的结构,在这里我把它看成是一个循环队列,在这

6、里定义队列胡容量等信息:typedef struct Car datamaxsize; int n;/队列容量设定 int num;/当前通道上的车辆数 int front,rear;Queue;/循环队列 用来存放通道内的车辆信息4.4函数及功能要求1. int Push(Stack *S,Car x):创建入栈的操作,以实现车辆进入停车场的操作2. int Pop(Stack *S,Car *px):创建出栈的操作,以实现车辆离开停车场的操作3. int InsertQueue(Queue *Q,Car x):创建入队的操作,以实现进入临时停车场的操作4. int DeleteQueue(

7、Queue *Q,Car *x):创建出队的操作,以实现离开临时停车场的操作5. void ShowCar(void):创建显示车站内信息的子程序。6. void InitCarpark(void):创建车辆成批入站的子程序。7. void InsertCar(void):创建单个车辆入站的子程序。8. void ExitCar(void):创建车辆出站的子程序。9. Pop(SCar,&x);:提供指定车辆出站的功能。10. void SetCar(void):提供车站模拟系统相关功能设定的功能。11. void carmenu(void):显示出车站管理系统主菜单。12. void mai

8、n(void):此为主函数,调用其他子程序。5 总体设计5.1总体设计图停车场车辆管理 系统车辆出站显示车站内汽车信息车站管理系统主菜单 函 数退出 系统车辆成批入站单个车辆入站图2.1 功能模块图 运行程序到系统界面,接着系统界面就会出现让你能选择的功能:【1】车辆成批入站【2】单个车辆入站【3】车辆出站【4】车站内信息实时显示【5】相关功能设定【0】退出本系统5.2模块流程图5.2.1车辆成批入站开 始输入汽车的车牌号还有车主姓名strcpy(pcar.num,pnum);strcpy(pcar.name,pname);Push(SCar,pcar)=-1InsertQueue(QCar,

9、pcar)=-1车站已满!车辆已经入通道!通道已满,进入通道失败!while(strcmp(pnum,#)!=0)结 束这批汽车已经成功进入停车场nynyny图2.2车辆成批入站流程图5.2.2车站内信息显示开 始SCar-top=-1i=0itop+1printf(%-13s,SCar-datai.num);printf(%18sn,SCar-datai.name);i+QCar-rear!=QCar-frontwhile(front!=rear)printf(%-13s,SCar-datai.num);printf(%18sn,SCar-datai.name);front=(front+1

10、)%QCar-n结 束ynnyyn图2.3停车场内信息显示流程图6 详细设计6.1 采用结构体定义的相关数据类型前面提到,要用到栈和队列的操作。这里,由于一个车场的最大容量是一定的,且车场最多执行的操作是插入和删除操作,所以用顺序储存结构可以带来更大益处。为了防止队列中出现“假溢出”现象,这里采用了循环队列。在模拟汽车这个对象时,进行了简化处理,只取得最核心的两个数据项:车牌号和车主姓名。具体数据结构定义如下:首先定义maxsize为20:#define maxsize 20第二个再定义汽车的信息:车牌号num10和车主姓名name10:typedef struct carchar num10

11、;char name10;Car;第三个定义汽车场的结构,在这里我把它看成是一个栈,在这里定义栈的容量等信息:typedef struct Car datamaxsize; int n;/栈容量设定 int top;Stack;/顺序栈 用来存放汽车场内的车辆信息第四个定义通道的结构,在这里我把它看成是一个循环队列,在这里定义队列胡容量等信息:typedef struct Car datamaxsize; int n;/队列容量设定 int num;/当前通道上的车辆数 int front,rear;Queue;/循环队列 用来存放通道内的车辆信息6.2 功能函数设计(1)车辆成批入站void

12、 InitCarpark(void)/车辆成批入站此函数也可以作为初始化车场的函数,因为一个车场刚开始投入运行的时候会有很多的车进来,这也是设计此函数最重要的一个原因。每行输入一个汽车信息,最后结束的时候输入“# #”即可。汽车信息中前面表示汽车的车牌号,后面表示车主姓名,中间用空格隔开。当输入汽车的数目超过规定的最大容量的时候(如果开始不设置最大容量,默认值为系统申请的最大值maxsize=20),自动检测条件,给出相关提示信息。程序如下:void InitCarpark(void)/车辆成批入站char num8,*pnum,name10,*pname;Car pcar;pnum=num;

13、pname=name;printf(nn请输入车子的信息(包括车牌号和车主姓名(两者之间用空格隔开)(以# #这个符号结束):n);scanf(%s%s,pnum,pname);while(strcmp(pnum,#)!=0)strcpy(pcar.num,pnum);strcpy(pcar.name,pname);if(Push(SCar,pcar)=-1) printf(n车站已满!车辆已经入通道!n);if(InsertQueue(QCar,pcar)=-1)printf(n通道已满,进入通道失败!n);scanf(%s%s,pnum,pname);printf(这批汽车已经成功进入停车

14、场n);getch();carmenu();(2)单个车辆入站void InsertCar(void)/单个车辆入站当系统正常投入运行后,会有零散的车辆进进出出,如还用成批输入方式的话,将会带来一定的麻烦。此函数具有函数InitCarpark()几乎所有的功能,程序跟InitCarpark()这个差不多,同样先输入,然后再判断停车场是否满了,通道是否满了,最后执行结果,程序如下:void InsertCar(void)/单个车辆入站char num10,*pnum,name10,*pname;Car pcar;pnum=num;pname=name;printf(nn请输入车子的信息(包括车牌号和车主姓名(两者之间用空格隔开):n);scanf(%s%s,pnum,pname);strcpy(pcar.num,pnum);strcpy(pcar.name,pname);if(Push(SCar,pcar)=-1)printf(n车站已满!车辆已经入通道!n);if(InsertQueue(Q

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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