实验报告停车场管理_第1页
实验报告停车场管理_第2页
实验报告停车场管理_第3页
实验报告停车场管理_第4页
实验报告停车场管理_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验 停车场管理班级:信息 1 班实验时间:第 5 周姓名:曹国君 梁辰 唐琪皓 黄悦 学号:09125676 09125675 09125672 091256731. 问题描述设停车场内只有一个可停放 n 辆汽车的狭长通道,且只有一个大门可供 汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列 (大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停 满 n 辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在 便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入得车 辆必须先退出车场为它让路,待该车辆开出大门外,其他车辆再按原次序进入 车

2、场,每辆停放在车场的车在它离开停车场时必须按照它停留的时间长短交纳 费用。试为停车场编制按上述要求进行管理的模拟程序。2. 数据结构设计由于停车场的停车位有限,只有一个入口,且通道狭长,当停车场内某 辆车要离开时,在它之后开入得车辆必须先退出车场为它让路,顺序栈的结构 符合停车场的需求。 若车场内已停满,车辆再外排队等候,队伍不限长度,可以使用链式队列进行 模拟。输入:停车位数,停车费单价,进入或离去,车牌号,进入或离去时间 输出:进入:输出停在停车场或者便道上的位置离去:输出停留在停车场上的时间(离开时间 - 进入停车场的时间)及费用 为了满足以上的要求,至少需要记录进入时间以及车牌号tem

3、plateclass SqStack protected:/ 顺序栈的数据成员 :top;int/栈顶指针int maxSize;struct Set/ 定义一个结构体,可以存放两个数据/ 栈ElemType num; ElemType time; ;最大容量Set *elems;template struct Node/ 数据成员 :ElemType data1,data2;Node *next; / 构造函数 : Node();/ 两个数据域/ 指针域/ 无参数的构造函数Node(ElemType item1,ElemTypeitem2 ,Node *linkNULL); / 已知数数据元

4、素值和指针建立结构;3. 程序设计(1) 头文件由于数据域的改变,创建,插入,删除等函数都需要增加一个数据域的处理 顺序栈:public:/ 抽象数据类型方法声明及重载编译系统默认方法声明 :SqStack(int size = DEFAULT_SIZE);/ 构造函数virtual SqStack(); / 析构函 数int Length() const; / 求 栈 长 度boolconst; 为空Empty()/ 判断栈是否void/ 将Clear(); 栈清空void Traverse(void (*Visit)(const ElemType &) const;/遍历栈Status P

5、ush(const ElemType &e,constElemType&t);/ 入栈Status Top(ElemType &e,ElemType &t)const;/ 取顶元素Status Pop(ElemType&e,ElemType&e);/ 出栈SqStack(const SqStack ©);/ 复制构造函数SqStack &operator =(const SqStack ©); / 赋值语句重载 链式队列: public:LinkQueue();/ 无参数的构造函数virtualLinkQueue();/ 析构函数intLength()const;/ 求队 列

6、长度boolEmpty()const;/ 判断队列是否为空voidClear();/ 将队列清空voidTraverse(void(*Visit)(constElemType &)const ;/遍历队列StatusDelQueue(ElemType&e,ElemType&t);/出队操作StatusGetHead(ElemType &e,ElemType &t)const;/取队头操作Status EnQueue(const ElemType &e,const ElemType &t); / 入队操作LinkQueue(const LinkQueue ©); / 复制 构造函数Lin

7、kQueue &operator =(const LinkQueue ©);/ 赋值语句重载(2)辅助函数 当车辆离开时,输入车牌号与离开时间,如果该车辆在停车场中,则在 其之后的车辆需要暂时离开停车场为其让路,返回其进入停车场的时间,并判 别为真;如果该车辆不存在停车场中,则判别为假。int depart(const int &a,const &dans) / 返回进入时间 SqStack park1(n);时栈int tmpn,tmpt,count=0,atime,i; dop.Pop(tmpn,tmpt);park1.Push(tmpn,tmpt);count+;让开的车数whi

8、le(tmpn!=a&!p.Empty();而且栈不为空,把栈顶元素弹出后放入临时栈中 if(tmpn=a) dans=1; park1.Pop(tmpn,tmpt); count-; else dans=0; 车,则判别为假atime=tmpt;for(int i=0;icount;i+)车场 park1.Pop(tmpn,tmpt); p.Push(tmpn,tmpt); return atime;int &n,SqStack &p,bool/ 建立一个临/ 计数器用来记录/ 如果栈顶车牌不符合条件,/ 如果找到了该车/ 判别为真/ 该车辆离开/ 如果遍历仍找不到/ 让路的车重新返回停/

9、返回进入时间为了避免输入重复的车牌号,输入的离开时间小于进入时间,设计了遍历功能 供使用者参考template void SqStack:Traverse(void (*Visit)(const ElemType &) const/ 操作结果:从栈顶到栈底依次对栈的每个元素调用函数 (*visit)for (int Pos = top-1; Pos =0 ; Pos-)/ 从栈底到栈顶对栈的每个元素调用函数 (*visit)cout 车牌 :; (*Visit)(elemsPos.num); cout 到达时间 :; (*Visit)(elemsPos.time); coutendl;( 3)

10、主程序#includeassistance.h #includesq_stack.h #includelk_queue.hint depart(const int &a,const int &n,SqStack &p,bool &dans)SqStack park1(n);int tmpn,tmpt,count=0,atime,i; dop.Pop(tmpn,tmpt);park1.Push(tmpn,tmpt); count+; while(tmpn!=a&!p.Empty();if(tmpn=a) dans=1; park1.Pop(tmpn,tmpt); count-; else dan

11、s=0; atime=tmpt;for(int i=0;icount;i+) park1.Pop(tmpn,tmpt);p.Push(tmpn,tmpt);return atime;int main()int n=0,time,num,tmp,oldtime;double prix; / 停车单价bool si; / 判别车辆 是否存在char jug=P;cout 欢 迎 使 用 停 车 场 管 理 系 统 endl;while(n1)cout 请输入停车场的车位数: n;LinkQueue hallway;SqStack park(n);cout 请输入每分钟停车费: prix;/ 选择界

12、面/ 遍历停车场情况while(jug!=E)coutA. 车辆到达 endl; coutD. 车辆离开 endl;coutL. 查看停车场情况 endl; coutE. 退出程序 jug;switch(jug)case A: / 进入 cout 请输入车牌号与达到时间 : numtime;if(park.Length()!=n)park.Push(num,time);cout 车牌号为 num 的车辆进入停车场时间: time 分钟, 位置: park.Length()endl; / 进入停车场Else / 停车场满 hallway.EnQueue(num,time);cout 停 车 场

13、已 满 , 车 牌 号 为 num 的 车 辆 进 入 停 车 场 外 便 道 时 间 : time 分 钟 , 位 置 : hallway.Length()endl;/ 进入便道 排队 continue;case D: / 离开 if(!park.Empty() / 停车场有车辆cout 请输入车牌号与离开时间 : numtime;oldtime=depart(num,n,park,si); / 记录进入时间,判 定其存在if(si) / 存在则输出 cout 车 牌 号 为 num 的 车 辆 进 入 停 车 场 时 间 : oldtime ,离开时间为: time 停留时间: time-

14、oldtime 分 钟,费用: (time-oldtime)*prixendl;if(!hallway.Empty() / 如果有车辆在 便道内等候 hallway.DelQueue(num,tmp);park.Push(num,time);cout 车牌号为 num 的车辆进入停车场时间: time 分钟 , 位 置: park.Length()endl; / 队列的队首进入栈,并输出相关 信息/输入的车牌号不存在于else coutvv 停车场内没有该车辆 e ndl; 栈内else coutvv停车场内没有任何车辆end/栈为空时,不用输入离开车辆的信息con ti nu e;case L:coutvv停车场出入口(南)endl;park.Traverse(Write);/ 遍历停车场占用的车位coute ndl;con t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论