停车场管理_数据结构c++课程设计

上传人:wt****50 文档编号:37826657 上传时间:2018-04-23 格式:PDF 页数:16 大小:755.91KB
返回 下载 相关 举报
停车场管理_数据结构c++课程设计_第1页
第1页 / 共16页
停车场管理_数据结构c++课程设计_第2页
第2页 / 共16页
停车场管理_数据结构c++课程设计_第3页
第3页 / 共16页
停车场管理_数据结构c++课程设计_第4页
第4页 / 共16页
停车场管理_数据结构c++课程设计_第5页
第5页 / 共16页
点击查看更多>>
资源描述

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

1、 数据结构数据结构 C+课程设计课程设计 题题 目目: : 停车场管理停车场管理 学生姓名:学生姓名: 学学 号:号: 院院 系:系: 专业年级:专业年级: 计算机科学与技术计算机科学与技术 20092009 级级 20201111 年年 7 7 月月 1 1 日日 2 一、设计题目一、设计题目 (一)实验目的: (1)熟练掌握栈顺存和链存两种存储方式。 (2)掌握栈的基本操作及应用。 (3)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。 (二)实验内容: 【问题描述】 设停车场是一个可停放 n 辆汽车的 长通道,且只有一个大门可供汽车进出。 汽车在停车场内

2、按车辆到达时间的先后顺序, 依次由北向南排列(大门在最南端,最先到达的第一辆车信放在车场的最北端) , 若车场内已停满 n 辆汽车,则后来的汽车只能在门外的便道上等候, 一旦有车开走,则排在便道上的第一辆车即可开入; 当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路, 待该辆车开出大门外,其他车辆再按原次序进入车场院, 每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。 试为停车场编制按上述要求进行管理的模拟程序。 【基本要求】 以栈模拟停车场,以队列模拟车场外的便道, 按照从终端读入的输入数据序列进行模拟管理。 每一组输入数据包括三个数据项: 汽车“到达”或

3、“离去”信息、汽车牌照号码以及到达或离去的时刻。 对每一组输入数据进行操作后的输出信息为: 若是车辆到达,则输出 汽车在停车场内或便道上的停车位置; 若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费) 。 栈以顺序结构实现,队列以链表结构实现。 【实现提示】 需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。 输入数据按到达或离去的时刻有序。 栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。 二、小组成员分工说明二、小组成员分工说明 无 三、需求分析三、需求分析 1)运行环境)运行环境 (软、

4、硬件环境)(软、硬件环境) Microsoft Visual C+ 6.0 (如右图) 2)输入的形式)输入的形式 和输入值的范围和输入值的范围 第一个数据:车辆是到达(A) ,离开(D) ,还是退出系统(E) ,为字符类型 第二个数据:车牌号,为整型,0 的数据 第三个数据:驶入时刻,为 double 类型,0 的数据 3 3)输出的形式描述)输出的形式描述 若是车辆到达,则输出 汽车在停车场内或便道上的停车位置; 若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费) 。 4)功能描述)功能描述 设停车场是一个可停放 n 辆汽车的 长通道,且只有一个大门可供

5、汽车进出。 汽车在停车场内按车辆到达时间的先后顺序, 依次由北向南排列(大门在最南端,最先到达的第一辆车信放在车场的最北端) , 若车场内已停满 n 辆汽车,则后来的汽车只能在门外的便道上等候, 一旦有车开走,则排在便道上的第一辆车即可开入; 当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路, 待该辆车开出大门外,其他车辆再按原次序进入车场院, 每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。 5)测试数据)测试数据 设 n=2,输入数据为:(A,1,5), (A,2,15) , (A,3,20) , (A,4,25) , (A,5,30) , (D,2,3

6、5) , (D,4,40) , (E,0,0) 。 其中:A 表示到达(Arrival) ;D 表示离去(Departure) ;E 表示输入结束(End) 。 四、概要设计四、概要设计 1)抽象数据类型定义描述(对各类的成员及成员函数进行抽象描述,参见书或)抽象数据类型定义描述(对各类的成员及成员函数进行抽象描述,参见书或 ppt 及及实验)实验) const int Max=2; /车库最大容量 const double price=5; /每小时的费用 class car /车的信息类车的信息类 public: double time; /计费时间 int number; /车牌号 ca

7、r *next; /存放 car 类型元素的数组初始地址 ; class carstack /栈(停车场)的类栈(停车场)的类 friend class parkingmanagement; /parkingmanagement 能访问 carstack 类中所有成员 public: carstack(); /构造函数,栈的初始化 int empty(); /判断栈是否为空 int full(); /判断栈是否为满 car *s; /存放 car 类型栈元素的数组初始地址 int top; /栈顶指针 ; class carqueue /队列(队列(便道)的类便道)的类 friend clas

8、s parkingmanagement; /parkingmanagement 能访问 carqueue 类中所有成员 public: carqueue(); /构造函数,队列的初始化 int full(); /判断队列是否为满 car *front,*rear; /存放 car 类型队列元素的数组初始地址 ; 4 class parkingmanagement public: int pushstack(carstack /入栈入栈,cs 栈内进行调整,返回栈内位置返回栈内位置 void popstack(carstack /出栈出栈,cs 栈内进行调整, /根据车牌号把车弹出栈,将出栈 c

9、ar 的 number 赋值给 int popstacknumber /将出栈 car 的 time 赋值给 double popstacktime,无返回值!无返回值! int pushqueue(carqueue /入入队队,队内进行调整,返回队内位置返回队内位置 int popqueue(carqueue /出队出队,队内进行调整,返回汽车车牌号返回汽车车牌号 void arrival(carstack /车辆到达车辆到达, /根据输入的车牌号、到达时间,变更函数参数;并 cout 车位信息车位信息 void leave(carstack /车辆离开车辆离开, /根据输入的车牌号找到汽车

10、,并进行出栈操作、出队操作和入栈操作; /并并 cout 停留时间和收费情况停留时间和收费情况 void deletequeue(carqueue /删除 cq 过道中第 i 辆车 int popstacknumber; /专门存放出栈的时候返回的车牌号专门存放出栈的时候返回的车牌号 double popstacktime; /专门存放出栈的时候返回的时刻专门存放出栈的时候返回的时刻 ; 2)功能模块设计)功能模块设计 (如右图) 3)模块层次调用关系图)模块层次调用关系图 主程序模块主程序模块 菜单选择模块菜单选择模块 车辆到达操作模块车辆到达操作模块 void arrival (carst

11、ack 车辆离开操作模块车辆离开操作模块 void leave (carstack 退出系统模块退出系统模块 入栈操作模块入栈操作模块 int pushstack (carstack 入队操作模块入队操作模块 int pushqueue (carqueue 出队操作模块出队操作模块 int popqueue (carqueue 便道车辆便道车辆 离开操作模块离开操作模块 void deletequeue (carqueue 5 五、详细设计五、详细设计 /*类的实现类的实现* carstack:carstack()/构造函数,栈的初始化构造函数,栈的初始化 top=-1; s=new carM

12、ax;/创建 car 类型栈元素的数组 if(s=NULL) couti) stemp.s+(stemp.top)=cs.s(cs.top)-;/出栈的元素数组逐个赋给临时栈出栈的元素数组逐个赋给临时栈 popstacknumber=p.number; /将这个车牌号信息传给 int popstacknumber() popstacktime=p.time; /将该车的时间信息传给 double popstacktime() cs.top-; /栈顶指针回到原来位置 while(stemp.top=0) cs.s+(cs.top)=stemp.s(stemp.top)-; /临时栈出栈的元素逐

13、个赋给原栈,完成先退再进的工作临时栈出栈的元素逐个赋给原栈,完成先退再进的工作 6 int parkingmanagement:pushqueue(carqueue int count(1); /count 用于记录车在过道上的位置信息,因队列为链式的,所以进行循环累加 p=new car; /创建一个 car 类型的指针 p-number=cnum; p-time=ctime; p-next=NULL; /首先将指向存放 car 类型元素的数组初始地址置空 if (cq.front=NULL) /第一次入队要判断头结点是否为空第一次入队要判断头结点是否为空 cq.front=cq.rear=

14、p; else /尾插法插入元素 p-next =(cq.rear)-next; (cq.rear)-next =p; cq.rear =(cq.rear)-next; countp=(cq.front)-next; while(countp!=NULL) count+; countp=countp-next; /count 即车在过道上的位置, 【从 1 开始计! ! ! 】 return count; int parkingmanagement:popqueue(carqueue p.number=( (cq.front)-next )-number; /cq 队里,从 cq.front 开始指向下一个元素的车牌号赋给 car 类型的车信息 p.time=( (cq.front)-next )-time; /cq 队里,从 cq.front 开始指向下一个元素的时刻赋给 car 类型的车信息 p.next=( (cq.front)-next )-next; /cq 队里,从 cq.front 开始指向下一个元素的指针赋给 car 类型的车信息的下一个元素的指针 return p.number; cq.front

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

当前位置:首页 > 建筑/环境 > 建筑资料

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