《数据结构课程设计——停车场管理系统讲解》由会员分享,可在线阅读,更多相关《数据结构课程设计——停车场管理系统讲解(17页珍藏版)》请在金锄头文库上搜索。
1、 学号: 0121210340426课 程 设 计课程名称数据结构设计题目停车场管理 学院/专业计算机学院计算机班 级计科1204班姓 名 何铮杰指导教师 杜海涛日 期2014年6月12日实践教学任务书学生姓名: 何铮杰 专业班级: 1204 班 指导教师: 杜海涛 工作单位: 计算机科学系 题 目: 停车场管理 初始条件: 设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上 等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让
2、路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 测试用例自己设计;要求完成的主要任务: (包括实践教学工作量及其技术要求,以及说明书撰写等具体要求)实践教学报告按学校规定格式用A4纸打印(书写),并应包含如下内容: 1、 问题描述简述题目要解决的问题是什么。2、 设计存储结构设计、主要算法设计(用类C语言或用框图描述)、测试用例设计 ;3、 调试报告调试过程中遇到的问题是如何解决的;对设计和编码的讨论和分析。4、 经验和体会(包括对算法改进的设想)5、 附源程序清单和运行结果。源
3、程序要加注释。如果题目规定了测试数据,则运行结果要包含这些测试数据和运行输出,6、 设计报告、程序不得相互抄袭和拷贝;若有雷同,则所有雷同者成绩均为0分。时间安排:1、第17周完成。2、6月13 日14:00到计算中心检查程序、交实践教学报告、源程序(CD盘)。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日 正文一、问题描述设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上 等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须
4、先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。二、课程设计内容1.设计思路以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括两个数据项:汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:进入的车辆输出停车的位置,离开的车辆输出在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。当车辆要进入停车场时,检查停车场是否已满,如果未满则车辆进入停车场;如果停车场已满,则车辆进入便道等候。
5、当车辆要求出栈时,先让在它之后进入停车场的车辆退出停车场为它让路,再让该车退出停车场,让路的所有车辆再按其原来进入停车场的次序进入停车场。之后,再检查在便道上是否有车等候,有车则让最先等待的那辆车进入停车场。栈,队列都以顺序结构实现。2.存储结构设计Car类class CarPublic: void createArriveCar();/构建进入停车场车辆信息 void createLeaveCar();/构建离开停车场车辆信息 void print();/打印车辆信息 string carNumber;/车牌号 int hour; int minute;/到达的时间 bool status
6、= false;/true代表进入停车场,false代表处停车场;栈template class Stackpublic: Stack();/构造空栈 Stack()delete stack; bool isEmpty()/判断栈是否为空 bool isFull()/判断栈是否满 T getTop()/返回栈顶元素 Stack&push(T &x)/入栈 Stack&pop(T &x)/出栈private: int top;/栈顶 int maxTop;/最大栈顶值 T*stack;/动态数组存储元素;循环队列:templateclass Queue/循环队列 public: Queue()/
7、构造空队列 Queue()delete queue; bool isEmpty()/判断队列是否为空 bool isFull()/判断队列是否满 T first()/返回对首元素 T last()/返回队尾元素 Queue&push(T &x)/入队 Queue&pop(T &x)/出队 private: int front;/队首 int rear;/队尾 int maxSize;/队列大小 T*queue;3.算法设计(程序框图)(1)主流程:开始输出提示信息选择功能1. 车辆到达,2. 车辆离开,3. 列表显示,4.退出系统选其他选4选3选2选1输出命令错误车离开停车场进入停车功能退出系
8、统列表显示停车场内车辆信息(2)进入停车场开始输入进入车辆信息是是通道是否满栈是否满否否输出停车场和通道中都没有位置车入队列车入栈输出车在停车场中的位置输出车在通道中的位置(3)离开停车场开始输入离开车辆信息否是否存在这辆车输出停车场中不存在这辆车是车出栈输出车停留的时间和收费是栈是否满结束操作否通道是否为空结束操作否通道中的车入栈4.测试用例设计假定停车场和通道的容量都为5,现有车牌分别为he123,he124,he125,he126,he128,he129,依次进入停车场,然后车牌为he125的车离开停车场。三、调试报告1.主程序switch语句,忘记在每个case里加上break,导致无
9、限循环输出。2.构建Car类,原本有一个构造函数,但由于在栈中用到了这个,每次构建栈,先要构建一个Car的数组,就会调用Car类的构造函数进行输入,与目的不符,于是删去构造函数,改为createArriveCar()和createLeaveCar()。3.对于列表输出,当有车位没有车时,不会输出车的信息,一开始会输出一串乱码,于是加上一个status标志,初始为false,一旦入栈,则改为true。4.当位于栈中的车辆要出栈,其之前的元素要先出栈,用一个临时的栈temporaryStack来保存出栈的车辆,等需要出栈的车辆出栈后,再将这个临时栈中的元素依次入栈。四、经验和体会通过这次数据结构课
10、程设计,我认识到从课本上学到的知识是远远不够的。本次设计使我深入的了解了栈与队列的建立、插入、删除和在实际问题下灵活运用它们,另一方面使我对栈和队列的抽象数据类型有了进一步的认识。虽然经过努力终于把该系统完成,可是该系统还是不完善,程序中的一些算法还不是很清楚,只不过把简单的功能实现了出来,这些缺憾归根结底都是因为我的C+语言和数据结构的水平还不是很高,还需要经过不懈的努力才能做出比较完善的系统。这次课程设计让我明白要真正的掌握一门编程语言需要的不仅仅是课本上的东西,还要在实际的编程过程中慢慢的掌握其中的奥妙。同时我明白了,要成为一名优秀的编程人员所要具备的各种条件,坚实的编程语言基础、熟练的
11、调试程序的技能、重要的是要有耐心、同时细心也是不可缺少的。所以为了自己的梦想,在以后的学习过程中,我要不断的充实自己,努力的学习。通过这次课程设计,对数据结构的特点以及存储表示方式的认识有了明显的提高,同时还对在具体应用中选择合适的数据结构和存储结构的能力有了进一步的提升。熟悉了软件开发的基本过程;初步掌握了软件开发过程的问题分析、系统设计、程序编码、测试等阶段的基本任务和技能方法;培养了我的算法设计和算法分析的能力;提高了综合运用所学的理论知识和方法以及独立分析和解决问题的能力。通过课程设计,我明白,数据结构就是要培养我们的数据抽象能力,它用规范的数学语言来描述数据结构的定义,以突出这门课程
12、的特性。总之,数据结构是计算机专业的一门不可缺少的专业课。虽然课程设计的过程是艰辛的,但是当看着自己的程序能够运行的瞬间,无限的满足感会让自己感到从未有过的兴奋五、源程序#include using namespace std;const int MAX_PARKING_SIZE=5;const int MAX_PASS_SIZE = 5;class Carpublic: /*Car() int x; coutcarNumber; coutx; status = x; couthourminute; */ void createArriveCar() int x; coutcarNumber; status = true; couthourminute; void createLeaveCar() coutcarNumber; status = false; couthourminute;