版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 数据结构课程设计班 级 网络营销 指导老师 吕向阳 学 号 1040412123 姓 名 华 二012 年 1 月 7 日一 课程设计题目某停车场只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆汽车停放在最北端),若停车场已经停满n辆车,则后来的汽车只能在门外的便道即候车场上等候,一旦有车开走,则排在便道上的第一辆车即可开入。 当停车场某辆车要离开时。在它之后进入的车辆必须先退出车场为它让路,该车辆开出大门外,其它车辆再按原次序进入停车场, 每辆停放在车场的车在它离开停车场时必须按它停留的时间
2、长短交纳费用。试为该停车场编制按上述要求进行管理的模拟程序。二 流程与图示 停车 显示信息 离开 收费系统 查询 显示信息 退出a 1a 2a 3a n停车场(栈1)栈2 通道(队列)三、程序运行与截图 1.开始界面 首先是登陆界面,只要用户名跟密码一样就可以登陆,输入正确后,有一个延迟程序,让使用者感觉更真实 如果输入错误了,就是直接退出了2.主界面 登录成功后,则是如下的功能界面:3 . 停车场管理系统 你可以选择停车,离开,或者查看,当操作完了,可以直接选择退出。 当你输入 1 后,会提示你输入停车的车号: 在这里输入你想要停车的车号,然后会提示你停车的时间: 输入停车时间后,则会显示你
3、刚停车的详细的信息: 4.离开 输入 2,则会提示你要离开的车号: 然后输入离开的车号后,会提示你输入该车离开的时间,输入离开的时间,则 会出现如下界面: 5 停车场管理系统 系统则会把你刚离开的车俩的详细信息给你打印出来:拉开的车号,所用时间 以与应收的费用。这个时间管理员,可以对照表收费了。 6.查看 当你要查看停车场所停车的信息时,你可以选择 3。同样,选择 3 确定后会提 示你要查看的车号,然后则会把信息打印在界面上: 系统会告诉你这俩停在停车场里面的那个位置上。7.退出 当你一切操作完了后,就可以选择退出了,输入 4 停车场管理系统 随便按个键就退出该系统了。四、程序代码#inclu
4、de<iostream> #include<conio.h> #include<iomanip>#include<fstream>#include<string> #include <stdlib.h> #include <windows.h> using namespace std; #define Max_Size 2/停车的最大容量 #define HourFare 2 /每小时的停车费用 int CountForStack=0; /栈里现有的车数 int CountForQueue=0; /排队等候的车
5、数 typedef struct char Condition;/到达或者离开的状态 int Arrivetime;/到达时间,默认为-1,表示没有到达 int Leavetime;/离开时间,默认为-1,表示没有离开 int License;/车牌号 CarNode;/保存每辆车的信息 typedef struct/栈的定义 CarNode *base;/栈底指针 CarNode *top;/栈顶指针 int Stacksize;/栈的最大容量 CarStack; typedef struct QNodechar Condition;/到达或者离开的状态 int Arrivetime;/到达
6、时间,默认为-1,表示没有到达 int Leavetime;/离开时间,默认为-1,表示没有离开 int License;/车牌号 QNode *next; QNode; typedef struct/队列的定义 QNode *front;/对头指针 QNode * rear;/队尾指针 Queue; bool InitStack(CarStack &S1)/初始化栈 S1 S1.base=(CarNode*)malloc(Max_Size*sizeof(CarNode); if(!S1.base) cout<<"栈 S1 存分配失败"<<e
7、ndl; return false; S1.top=S1.base; S1.Stacksize=Max_Size; return true; bool InitQueue(Queue &Q) Q.front=(QNode*)malloc(sizeof(QNode); if(!Q.front) cout<<"队列 Q 存分配失败!"<<endl; return false; Q.rear=Q.front; Q.front->next=NULL; return true; bool EnQueue(Queue &Q,QNode &a
8、mp;e)/插入元素 e 为 Q 的新的队尾元素 QNode *p=(QNode *)malloc(sizeof(QNode); if(!p) cout<<"p 存分配失败"<<endl; return false; p->Arrivetime=e.Arrivetime; p->Leavetime=e.Leavetime; p->Condition=e.Condition; p->License=e.License;/将 e 赋给 P p->next=NULL; Q.rear->next=p; Q.rear=p;
9、return true; bool DeQueue(Queue &Q,QNode &t)/出队列函数 if(Q.front=Q.rear) cout<<"队列为空!"<<endl; return false; QNode *p=Q.front->next; t.Arrivetime=p->Arrivetime; t.Condition=p->Condition; t.Leavetime=p->Leavetime; t.License=p->License; Q.front->next=p->n
10、ext; if(Q.rear=p) Q.rear=Q.front; free(p); return true; void InitCarNode(CarNode &C,char condition,int arrivetime,int leavetime,int license) C.Arrivetime=arrivetime; C.Condition=condition;C.Leavetime=leavetime; C.License=license; bool Push(CarStack &S1,CarNode &car)/插入新的元素 car 为的栈顶元素 if(
11、S1.top-S1.base>=S1.Stacksize) cout<<"此栈已满,不能压入新的信息"<<endl; return false; (*S1.top).Arrivetime=car.Arrivetime; (*S1.top).Condition=car.Condition; (*S1.top).Leavetime=car.Leavetime; (*S1.top).License=car.License; +S1.top;/栈顶指针上移 return true; bool Pop(CarStack &S1,CarNode &
12、amp;t)/出栈操作 if(S1.top=S1.base) cout<<"栈 S1 为空,不能执行出栈操作"<<endl; return false; -S1.top;/栈顶指针下移 t.Arrivetime=(*S1.top).Arrivetime; t.Condition=(*S1.top).Condition; t.Leavetime=(*S1.top).Leavetime; t.License=(*S1.top).License; return true; bool IsStackFull(CarStack &S1)/判断 S1 栈
13、是否已满 if(S1.top-S1.base>=S1.Stacksize) return true; else return false; bool IsStackEmpty(CarStack &S1)/判断 S1 栈是否已空 if(S1.top=S1.base) return true; else return false; bool IsQueueEmpty(Queue &Q)/判断队列是否为空 if(Q.front=Q.rear) return true; else return false; bool SearchInStack(CarStack &S1,
14、int a)/a 表示要查找的车牌号,如果在停车场里 面,就返回 true bool tag=false; if(!IsStackEmpty(S1)/如果栈 S1 非空 CarNode *p=S1.top-1; while(p!=S1.base) if(*p).License=a) tag=true; -p; if(*p).License=a) tag=true; return tag; bool SearchInQueue(Queue &Q,int a)/a 表示要查找的车牌号,如果在通道里面,就 返回 true bool tag=false; if(!IsQueueEmpty(Q)
15、/如果队列非空 QNode *p=Q.front->next; while(p!=Q.rear) if(*p).License =a) tag=true; p=p->next; /退出此 while 循环时 p 指向最后一个元素 if(*p).License =a) tag=true; return tag; void InCar(CarStack &S1,Queue &Q,int a1,int a2)/表示进入车辆,a1 表示到达时 间,a2 表示车牌 if(SearchInStack(S1,a2) cout<<"车号"<&l
16、t;a2<<"已经存在于停车场,输入有误"<<endl; return; if(SearchInQueue(Q,a2) cout<<"车号"<<a2<<"已经存在于通道,输入有误"<<endl; return; if(IsStackFull(S1)/如果堆栈已满,说明停车场已满,需要停车在通道里面 QNode qnode; qnode.Arrivetime=-1;/在通道里面不收费,所以不计时 qnode.Condition='A' qnode.L
17、eavetime=-1;/定义为-1,说明还没有开始离开 qnode.License=a2; EnQueue(Q,qnode);/停在通道上 +CountForQueue; cout<<"车号:"<<qnode.License<<"停在通道的第"<<CountForQueue<<"号 位置"<<endl; else CarNode carnode; carnode.Arrivetime=a1; carnode.Condition='A' carno
18、de.Leavetime=-1; carnode.License=a2; Push(S1,carnode); +CountForStack;cout<<"车号: "<<carnode.License<<", 到达时间:"<<carnode.Arrivetime<<" 点,停在停车场的第"<<CountForStack<<"号位置"<<endl; void Sreach(CarStack &S1,Queue &am
19、p;Q,int a) if(SearchInStack(S1,a) cout<<"车号:"<<a<<"已存在停车场里面的第"<<CountForStack<<"号位 置"<<endl; return; if(SearchInQueue(Q,a) cout<<"停车场已满,车号"<<a<<"存在于通道里面的第 "<<CountForQueue<<"号位置,在
20、次等候"<<endl; return; else cout<<"对不起!你查找的车号不在停车场里面"<<endl; return; void OutCar(CarStack &S1,Queue &Q,int a1,int a2)/出车函数,a1 表示离开时间, a2 表示车牌 if(SearchInQueue(Q,a2) cout<<"车号"<<a2<<"存在于通道里面,还没有进入停车场,不能离开 "<<endl; retur
21、n; if(!SearchInStack(S1,a2) cout<<"车号"<<a2<<"该车不在停车场"<<endl; return; CarStack tempstack; InitStack(tempstack);/新建一个栈,存放让路的汽车 bool tag1=false;/标志这个停车场出车以前是否已满,默认为没有满 tag1=IsStackFull(S1); bool tag2=true;/标志通道是否有汽车在等待,默认为通道为空 tag2=IsQueueEmpty(Q); CarNode te
22、mp;/用来保存暂时取出的汽车 bool tag3=false; while(1) Pop(S1,temp); if(temp.License=a2) if(a1<temp.Arrivetime) cout<<"离开失败!"<<endl; tag3=true; Push(tempstack,temp); else cout<<"车号:"<<a2<<"现在离开停车场,所用时间为: "<<a1-temp.Arrivetime<<"小时,应收
23、 RMB 为: "<<(a1-temp.Arrivetime)*HourFare<<"元"<<endl; break; else Push(tempstack,temp);/进入暂存栈 则把前面倒出的车再次放 while(!IsStackEmpty(tempstack)/如果临时栈不空, 入停车场 Pop(tempstack,temp); Push(S1,temp); QNode tempqnode;/用来暂时保存从通道出来的汽车 if(tag1=true&&tag2=false&&tag3=fa
24、lse)/如果出车前停车场已满,并且通 道不为空,并且离开没有失败 DeQueue(Q,tempqnode); -CountForQueue; temp.Arrivetime=a1; temp.Condition=tempqnode.Condition; temp.Leavetime=tempqnode.Leavetime; temp.License=tempqnode.License; Push(S1,temp); if(tag3=false)/如果停车通道是空的,停车场没有满,并且离开成功 -CountForStack; void showmenu(CarStack &S1,Que
25、ue &Q) cout<<"*选择菜单 *"<<endl; cout<<" 1: 停车"<<endl; cout<<" 2: 离开停车场"<<endl; cout<<" 3: 查看车辆信息"<<endl; cout<<" 4: 退出系统"<<endl; cout<<"*请按键选择*"<<endl; int tag; cin&g
26、t;>tag; while(tag!=1&&tag!=2&&tag!=3&&tag!=4) cin>>tag; int a1; unsigned int a2; switch(tag) case 1: cout<<"请输入到达的车号:"<<endl; cin>>a1; cout<<"请输入到达的时间:"<<endl; cin>>a2; InCar(S1,Q,a2,a1); Sreach(S1,Q,a1); break;
27、 case 2: cout<<"请输入离开的车号:"<<endl; cin>>a1; cout<<"请输入离开的时间:"<<endl; cin>>a2; OutCar(S1,Q,a2,a1); break; case 3: cout<<"请输入你要查看的车号:"<<endl; cin>>a1; Sreach(S1,Q,a1); break; case 4: return; break;showmenu(S1,Q); void l
28、oging(CarStack &S1,Queue &Q) char Administrator15,password15; int a; printf("t*n"); printf("t*n"); printf("t* *n"); printf("t* 欢迎使用停车场管理系统 *n"); printf("t* *n"); printf("t* *n"); printf("t*n"); printf("t*n"); printf("nt(提示:账号跟密码一样就行)"); printf("nnnnt 请输入管理员:"); fflush(stdin); gets(A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年产3200吨稀土氧化物生产线项目可行性研究报告写作模板-拿地申报
- 价值链分析与管理会计
- 素质测评技术与方法
- 中移铁通有限公司介绍
- 母婴衣物知识培训课件
- 初三春季开学第一课主题班会
- 公共财政转型与政府卫生筹资责任的回归
- 2025版气候变化应对项目捐赠协议书范本3篇
- 蜜雪冰城品牌介绍
- 临床医院感染管理办法
- 2024秋期国家开放大学《建筑工程项目管理》一平台在线形考(作业1至4)试题及答案
- 临床5A护理模式
- 2025届高考英语一轮复习读后续写说课课件
- 洁柔形象升级与整合内容营销方案
- 2025届高考数学一轮复习建议 概率与统计专题讲座
- 广东省公务员考试笔试真题及答案
- 吸入疗法在呼吸康复应用中的中国专家共识2022版
- 风险分级管控和隐患排查治理体系培训考试题参考答案
- 部编版二年级下册语文第四单元教学设计含语文园地四
- 江西省第一届职业技能大赛分赛场项目技术文件(世赛选拔)网络安全
- GB/T 18029.22-2024轮椅车第22部分:调节程序
评论
0/150
提交评论