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

下载本文档

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

文档简介

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

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

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

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

5、verse(void (*Visit)(const ElemType &) const;/ 遍历栈Status Push(const ElemType &e,const ElemType &t);/ 入栈Status Top(ElemType &e,ElemType &t) const;/ 取顶元素Status Pop(ElemType &e,ElemType &e);/ 出栈SqStack(const SqStack<ElemType> &copy);/ 复制构造函数SqStack<ElemType> &

6、amp;operator =(const SqStack<ElemType> &copy); / 赋值语句重载链式队列:public:LinkQueue();/ 无参数的构造函数virtual LinkQueue();/ 析构函数int Length() const;/ 求队列长度 bool Empty() const;/ 判断队列是否为空void Clear();/ 将队列清空void Traverse(void (*Visit)(const ElemType &) const ;/ 遍历队列Status DelQueue(ElemType &e,Elem

7、Type &t);/ 出队操作Status GetHead(ElemType &e,ElemType &t) const;/ 取队头操作Status EnQueue(const ElemType &e,const ElemType &t);/ 入队操作LinkQueue(const LinkQueue<ElemType> &copy);/ 复制构造函数LinkQueue<ElemType> &operator =(const LinkQueue<ElemType> &copy);/ 赋值语句重载

8、(2) 辅助函数 当车辆离开时,输入车牌号与离开时间,如果该车辆在停车场中,则在其之后的车辆需要暂时离开停车场为其让路,返回其进入停车场的时间,并判别为真;如果该车辆不存在停车场中,则判别为假。int depart(const int &a,const int &n,SqStack<int> &p,bool &dans) /返回进入时间 SqStack<int> park1(n); /建立一个临时栈int tmpn,tmpt,count=0,atime,i; dop.Pop(tmpn,tmpt); park1.Push(tmpn,tmpt

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

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

11、emsPos.num); cout<<"到达时间:"(*Visit)(elemsPos.time); cout<<endl; (3)主程序#include"assistance.h"#include"sq_stack.h"#include"lk_queue.h"int depart(const int &a,const int &n,SqStack<int> &p,bool &dans) SqStack<int> park1(n);in

12、t 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 dans=0; atime=tmpt; for(int i=0;i<count;i+) park1.Pop(tmpn,tmpt); p.Push(tmpn,tmpt); return atime; int main() int n=0,time,num,t

13、mp,oldtime; double prix; /停车单价 bool si; /判别车辆是否存在 char jug='P' cout<<"欢 迎 使 用 停 车 场 管 理 系 统"<<endl; while(n<1) cout<<"请输入停车场的车位数:"<<endl; cin>>n; LinkQueue<int> hallway; SqStack<int> park(n); cout<<"请输入每分钟停车费:"&

14、lt;<endl; cin>>prix; while(jug!='E') /选择界面 cout<<"A.车辆到达"<<endl; cout<<"D.车辆离开"<<endl; cout<<"L.查看停车场情况"<<endl; /遍历停车场情况 cout<<"E.退出程序"<<endl; cin>>jug; switch(jug) case 'A': /进入 co

15、ut<<"请输入车牌号与达到时间: "<<endl; cin>>num>>time; if(park.Length()!=n) /停车场没满 park.Push(num,time); cout<<"车牌号为 "<<num<<" 的车辆进入停车场时间:"<<time<<"分钟,位置:"<<park.Length()<<endl; /进入停车场Else /停车场满 hallway.EnQu

16、eue(num,time);cout<<"停车场已满,车牌号为 "<<num<<" 的车辆进入停车场外便道时间:"<<time<<"分钟,位置:"<<hallway.Length()<<endl; /进入便道排队continue; case 'D': /离开 if(!park.Empty() /停车场有车辆 cout<<"请输入车牌号与离开时间: "<<endl; cin>>num

17、>>time; oldtime=depart(num,n,park,si); /记录进入时间,判定其存在 if(si) /存在则输出 cout<<"车牌号为 "<<num<<" 的车辆进入停车场时间:"<<oldtime<<",离开时间为:"<<time<<"停留时间:"<<time-oldtime<<"分钟,费用:"<<(time-oldtime)*prix<

18、;<endl; if(!hallway.Empty() /如果有车辆在便道内等候 hallway.DelQueue(num,tmp); park.Push(num,time); cout<<"车牌号为 "<<num<<" 的车辆进入停车场时间:"<<time<<"分钟,位置:"<<park.Length()<<endl; /队列的队首进入栈,并输出相关信息 else cout<<"停车场内没有该车辆"<<

19、;endl; /输入的车牌号不存在于栈内 else cout<<"停车场内没有任何车辆"<<end /栈为空时,不用输入离开车辆的信息 continue; case 'L': cout<<"停车场出入口(南)"<<endl; park.Traverse(Write<int>); /遍历停车场占用的车位 cout<<endl; continue; cout<<"再 见"<<endl; /程序结束 system("pause"); return 0;停车场管理数据测试次数输入输出车位数单价到达离去信息时刻车牌号位置停留时间费用125 A 51车位1 A 102车位2 D 1511050 A 203车位2 A 254便道位1 A 305便道位2 D 35225125 D 404525 E 00220.5 A 51车位1 A 102车位2 A 153便道位1 A 204便道位2 A 255便道位3 D 3022010 A 356便道位3 D 403105 D 4514020 E 00315 A 51车位1 A 102便道位1 D 152 A 153便道位2 D 25120100 D

温馨提示

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

评论

0/150

提交评论