1学号1011200142数据结构课程设计设计说明书停车场管理系统起止日期:年月至年月日学生姓名班级成绩指导教师(签字)年月日2停车场管理系统一、引言........................................................................................................................3二、系统总体设计........................................................................................................31、设计思路..............................................................................................................32、系统总体框架图..................................................................................................53、系统流程图..........................................................................................................5三、详细设计................................................................................................................71、车辆停车函数及流程图......................................................................................72、车辆离开函数及流程图......................................................................................83、列表显示车场信息函数及流程图......................................................................94、列表显示便道信息..............................................................................................95列表显示菜单函数及流程图...............................................................................10四、总结......................................................................................................................12参考文献......................................................................................................................12五、附录......................................................................................................................133一、引言随着现代化信息技术的发展,人民生活水平快速提高,汽车的数量也飞速增长,于此同时,停车问题越来越受人们的关注,为了使停车场有效管理,停车场管理的信息化成为必然。我们可以利用所学的知识,编写一个停车场管理系统,以提高管理的效率,提升停车场的竞争力。本次课程设计,我运用C语言编写停车场管理系统,主要实现汽车停车,离开,收费,停车信息查询,显示等功能,主要实现方式是用栈和队列。下面对栈和队列进行一下简单介绍。栈(stack)是一种仅允许在一端进行插入和删除运算的线性表。栈中允许插入和删除的那一端,称为栈顶(top)。栈顶的第一个元素称为栈顶元素。栈中不可以插入和删除的那一端称为栈底。在一个栈中插入元素,即把新元素放到当前栈顶元素的上面,使其称为新的栈顶元素,即进栈(push)。从一个栈中删除一个元素,即把栈顶元素删除掉,使其下面的元素成为新的栈顶元素,称为出栈(pop)。栈遵循后进先出的原则,即后进栈的元素必先出栈。其中顺序栈是利用一组地址连续的存储单元依次存放从栈底到栈顶的元素。在C语言中,可以用一维数组描述顺序栈中数据元素的存储区域,并预设一个数组的最大空间。栈底设置在0下标端,栈顶随着插入和删除元素而变化,可以用一个整形变量top来指示栈顶的位置。队列是一种限定在表的一端进行插人而另一端进行删除的线性表,与栈相反,队列遵循先进先出的原则。允许删除的一端,称为队头(front)。允许插入的一端称为队尾(rear)。向队列中插入新的元素称为入队,新元素进队后就成为了新的队尾元素;从队列中删除元素,称为出队,元素离队后,其后继元素就成为了新的队头元素。其中链队列就是用链表表示的队列,需要两个分别指示队头和队尾的指针(分别称为头指针和尾指针)。为了操作方便,给链队列添加一个头结点,并令头指针指向头结点,尾指针指向队尾元素结点,判断队列为空的条件是头指针和尾指针均指向头结点。停车场的管理系统正好利用栈和队列的这些特点来实现模拟停车场和便道。停车场管理主要实现以下几个功能:(1)、停车场车位的划分。(2)、车辆进出管理及收费功能。(3)、停车场车辆信息查询功能。(4)、退出系统。二、系统总体设计1、设计思路停车场采用栈式结构,便道采用队列结构(即便道就是等候队列)。停车场的管理流程如下:4(1)当车辆要进入停车场时,检查停车场是否已满,如果未满则车辆进栈(车辆进入停车场);如果停车场已满,则车辆进入等候队列(车辆进入便道等待)。(2)当车辆要求出栈时,该车到栈顶的那些车先出栈(在它之后进入的车辆必须先退出车场为它让路),在让该车出栈,其他车辆再按原次序进栈(进入车场)。当车辆出栈完毕后,检查等候队列(便道)中是否有车,有车则从队头取出,压入栈中。用栈模拟停车场,用队列模拟便道,按照从终读入的输人数据序列的进行模拟管理,每一组输入数据包含三个数据项:汽车到达或汽车离去的信息,汽车车牌号以及汽车到达或离去的时刻。每次输完,进行输出操作:若是车辆到达,输出汽车在停车场内或者便道上停车的信息;若是车辆离去,输出停留时间和需缴纳的费用(在便道上停留的时间不收费),其中栈以顺序结构实现,队列以链表结构实现。52、系统总体框架图主函数流程图图1系统总体框图3、系统流程图实现对一级菜单:模拟停车场,便道,实现车辆停车、离开、列表显示停车场信息、退出系统功能的控制,调用各个子函数。程序流程图如图2所示。停车场管理系统车辆停车车辆离开退出系统列表显示停车场信息便道停车车库停车离开时刻停车位置应缴纳费用停车场信息便道信息返回主菜单车牌号停车位置车牌号到达时刻停车时刻停车时刻停车位置等待中的车牌号6图2主函数流程图开始读取头函数判断输入的数字是否为1执行第一种情况执行其他情况输入是否为4跳出头函数是否空结束NYNYYN7三、详细设计1、车辆停车函数及流程图车辆停车函数实现:记录停车信息包括车辆车牌号、停车时刻、停车车位等。其流程如图3所示图3车辆停车流程图N开始车辆停车,进入函数输入车牌号停车场车库不满输入车辆车牌号输出车辆停车位置车进便道结束Y82、车辆离开函数及流程图车辆离开函数主要实现:记录车辆离开的信息,以及便道上的车是否进入车库中。其流程如图4所示。图4车辆离开流程图开始停车场车有车1输入离开车的车位车辆离开输出该车信息便道上有车输入便道上的车进车库时间便道上车进停车库结束停车场没有车显示便道上没有车NNNYYY93、列表显示车场信息函数及流程图该函数主要判断停车场是否有车,如果有车就显示停车场车辆的信息,没车显示无车。其流程如图5所示。图5列表显示停车场信息流程图4、列表显示便道信息判断便道上是否有车,如果有车,输出车辆的车牌号,如果没有车,显示无车,其流程如图6所示开始停车场是否有车输出停车场中车辆的信息显示停车场没有车结束NY10图6列表显示便道信息5列表显示菜单函数及流程图示实现列表显示功能的控制,调用显示停车场信息、便道信息的函数,程序流程图如图7所示开始便道是否有车输出便道车辆的信息显示便道上没有车结束NY11图7列表显示菜单及流图开始Flag=1输出车场信息、便道信息、返回主菜单三个选项1执行第一种情况结束输入1-2-3选择的选项1执行其他情况跳出NNNYYY12四、总结通过本次课程设计,我对数据结构的理解进一步加深,我理解和掌握了每一段程序代码的功能及含义,并且能够实现模拟停车场管理的主要功能:利用栈实现车的入库问题,利用队列完成车在便道上停放的问题,主要是通过栈和队列的初始化,调用等函数来模拟停车问题。学习数据结构,我学会如何将所学的知识运用到实际中,解决一些实际的问题,这才是学习的根本。当然在实验中我也遇到了不少实际性的问题,比如车辆停车的时间hour限制在24小时,min限制在60分钟之内,如果加入日期计算就更好了;在便道上等待的车辆,车主不可能无限制的等待,应该编写一个便道上车辆离开的函数更合理些。编写的程度要与实际有联系,这就不能只依赖于课本,还要联系实际多多思考,重复调试,不断改进,才能编出一个符合实际的有价值的系统。参考文献[1]冯燕,陈越.数据结构课程设计[M].第一版.浙江大学出版社,2007[2]李春葆,尹为民,李蓉蓉.数据结构教程上机指导.第三版.清华大学出版社,200813五、附录#includestdio.h#includestdlib.h#includestring.h#defineMAX2//车库容量#defineprice0.2//停车收费按分计typedefstructtime{inthour;intmin;}Time;//时间结点typedefstructnode{charnum[10];Timereach;Timeleave;}CarNode;//车辆信息,包括车牌号,到达和离开时间typedefstructNODE{CarNode*stack[MAX+1];inttop;}SeqStackCar;//用栈模拟车库typedefstructcar{CarNode*data;structcar*next;}QueueNode;typedefstructNode{QueueNode*front;QueueNode*rear;}LinkQueueCar;//用队列模拟便道/*函数声明*/voidInitStack(SeqStackCar*);//初始化栈intInitQueue(LinkQueueCar*);//初始化便道intArrival(SeqStackCar*,LinkQueueCar*);//车辆停车voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);//车辆离开voidList(SeqStackCar,LinkQueueCar);//显示存车信息voidmain(){SeqStackCarEnter,Temp;LinkQueueCarWait;14intch;InitStack(&Enter);InitStack(&Temp);InitQueue(&Wait);while(1){printf(\n\n******************