成绩评定表学生姓名曹杰班级学号13090101026专业信息与计算科学课程设计题目停车场管理系统评语组长签字:成绩日期20年月日课程设计任务书学院理学院专业信息与计算科学学生姓名曹杰班级学号1309010126课程设计题目停车场管理系统实践教学要求与任务:要求:通过集中性的编程训练,使学生系统的掌握如何将客观实际问题与计算机的算法对应起来,如何将客观信息与数据的逻辑结构和存储结构对应起来,将理论概念的学习转变成能够使用计算机高级语言解决实际问题的方法。任务:以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若使车辆离去,则输出汽车在停车场内停留的时间和应缴纳费用(在便道上的停留时间不收费)。栈以顺序结构实现,队列以列表结构实现。工作计划与进度安排:第一、二天查阅资料、程序设计;第三、四天程序调试与测试;第五天、答辩指导教师:201年月日专业负责人:201年月日学院教学副院长:201年月日摘要本停车管理系统利用C语言结合数据结构建立而成。实现停车管理的车辆入库、车辆出库登记、所在车库车辆的信息显示、以及停车的收费功能。设计目的为如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。栈以顺序结构实现,队列以列表结构实现。利用了栈和队列的五项基本知识,实现插入、删除、查询、判断队列和栈是否为空来实现功能。关键词:停车场管理、线性表、栈、队列目录1.题目概述(内容及要求)............................................11.1设计内容.....................................................12.功能分析..........................................................12.1功能模块.....................................................12.2程序流程图...................................................23.设计..............................................................33.1结构描述.....................................................33.2栈描述......................................................43.3函数描述....................................................44.运行与测试........................................................44.1主菜单.......................................................44.2车辆到达登记.................................................54.3车辆离开登记.................................................54.4车辆列表显示.................................................64.5退出系统.....................................................65.总结..............................................................7参考文献............................................................811.题目概述(内容及要求)1.1设计内容(1)问题描述:设有一个可以停放n辆汽车的停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制一程序模拟该停车场的管理。(2)基本要求:要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场应交纳的费用和它在停车场内停留的时间。实现提示:汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去的时刻)。例如,(‘A’,1,5)表示1号牌照车在5这个时刻到达,而(‘D’,5,20)表示5号牌照车在20这个时刻离去。整个程序可以在输入信息为(‘E’,0,0)时结束。本题可用栈和队列来实现1.2设计目的(1)栈以顺序结构实现,队列以列表结构实现。(2)队列的五种要求置空队列、进队、出队、取队头元素、判断空队列。(3)栈的五种要求清空堆栈、压栈、弹出、取栈顶元素、判断栈空。2.功能分析2.1功能模块主菜单车辆到达登记车辆离开登记车辆列表显示退出系统22.2程序流程图开始初始化两个栈Enter和Temp及一个队列Wait。进入主菜单车到达车离开退出Room前车辆进临时栈对room计费便道车信息车场内信息判便道是否有车车场是否为空列表显示栈Enter元素出栈队列中元素进栈队列Wait中元素出队元素进栈Enter便道车进车场元素进队列Wait判断栈是否为满结束退出列表显示是否否是否是33.设计程序用了一个类,五个结构,两个栈(其中一个为临时栈),除主函数外用了八个函数;3.1结构描述结构:Time-建立时间结点CarNode-建立车辆信息结点SeqStackCar-模拟车站QueueNode-建立数据链结点LinkQueueCar-模拟便道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*head;QueueNode*rear;}LinkQueueCar;43.2栈描述(1)、在SeqStackCar中定义创建一个栈CarNode*stack[MAX+1];inttop;(2)、SeqStackCarEnter,TempInitStack(&Temp)在车辆离开时,应用temp临时把将要离开的车辆后续车辆压入,等车辆离开后压回原栈stackvoidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)3.3函数描述函数:(1)intArrival(SeqStackCar*Enter,LinkQueueCar*W)//定义车辆到达函数(2)intInitQueue(LinkQueueCar*Q)//定义车辆通道队列函数(3)voidInitStack(SeqStackCar*s)//定义车辆位置栈函数(4)voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)//定义车辆离开函数,调用栈和队列(5)voidList(SeqStackCarS,LinkQueueCarW)//定义车辆栈、队列函数(6)voidList1(SeqStackCar*S)//定义车辆位置村粗栈函数(7)voidList2(LinkQueueCar*W)//定义车辆通道队列函数(8)voidPRINT(CarNode*p,introom)//定义车辆收费函数4.运行与测试4.1主菜单主菜单包括(图4.1):选择:1:车辆到达登记,2:车辆离开登记3:车辆列表显示,4:退出系统。5图4.14.2车辆到达登记选择1进入“车辆到达登记”输入车牌号;系统自动分配车辆位置;输入到达时间(图4.2)。图4.24.3车辆离开登记选择功能:2车辆离开登记输入离开时间;车辆系统自动输出所缴纳费用(图4.3)6图4.34.4车辆列表显示车辆列表显示功能,选择1:车场列表;2:便道列表;3:返回主菜单;输入1:显示车场位置到达时间和车牌号;输入2:显示车道车辆和车牌号。(图4.4)图4.44.5退出系统功能选择:4:退出系统。(图4.5)图4.575.总结通过这一次的课程设计,加深了我对《数据结构》这门课程所学内容的进一步的理解与掌握,对C语言也更深的熟悉和应用;同时,通过对停车场管理系统的开发,使得我将以前课程所学知识与实际问题很好地相联接在了一起。在这次课程设计中,培养了我开发一个中小型程序的能力。在这次课程设计中,使得我很好地了解了在开发程序重要性。在这次课程设计中,我所开发的停车场管理系统,基本上可以完成每一项功能。汽车进入停车场的信息、离开停车场的信息以及通道上的信息都可以在程序上一一实现。但是,该程序也有不足的地方。这个程序中,为了简便起见,直接运用链表存储数据,没有使用C语言中的文本文档存入数据,这一点不符合实际应用的情况,这是该程序的主要缺点;所以,在这方面还是有待改进的。总之,在这次的课程设计中,我以及我的收获还是挺大的,对于专业课有了更好的认识。8参考文献【1】《数据结构与算法》严蔚敏清华大学出版社,2010【2】谭浩强.C语言程序设计(第三版)[M].北京:清华大学出版社,2005【3】《数据结构案例分析与习题解答》李筠、姜学军清华大学出版社,20139附页:源代码#includestdio.h#includestdlib.h#includestring.h#defineMAX200#defineprice0.05typedefstructtime{//定义时间结点inthour;intmin;}Time;typedefstructnode{//定义车辆信息结点charnum[10];Timereach;Timeleave;}CarNode;typedefstructNODE{//定义车站结点CarNode*stack[MAX+1];inttop;}SeqStackCar;typedefstructcar{//定义数据链结点CarNode*data;structcar*next;}QueueNode;typedefstructNode{//定义便道结点QueueNode*head;QueueNode*rear;}LinkQueueCar;10voidInitStack(SeqStackCar*);/