数据结构作业停车场管理系统
- 格式:doc
- 大小:516.00 KB
- 文档页数:15
~
一.课程设计题目
某停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆汽车停放在最北端),若停车场内已经停满n辆车,则后来的汽车只能在门外的便道即候车场上等候,一旦有车开走,则排在便道上的第一辆车即可开入。当停车场内某辆车要离开时。在它之后进入的车辆必须先退出车场为它让路,该车辆开出大门外,其它车辆再按原次序进入停车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为该停车场编制按上述要求进行管理的模拟程序。
二.流程及图示
停车场(栈1)
栈2
通道(队列)
三、程序运行及截图
1.开始界面
首先是登陆界面,只要用户名跟密码一样就可以登陆,输入正确后,有一个延迟程序,让使用者感觉更真实
a 1 a 2 a 3
……… a n
如果输入错误了,就是直接退出了
2.主界面登录成功后,则是如下的功能界面:
3 . 停车场管理系统你可以选择停车,离开,或者查看,当操作完了,可以直接选择退出。当你输入 1 后,会提示你输入停车的车号:在这里输入你想要停车的车号,然后会提示你停车的时间:输入停车时间后,则会显示你刚停车的详细的信息:
4.离开输入2,则会提示你要离开的车号:然后输入离开的车号后,会提示你输入该车离
开的时间,输入离开的时间,则会出现如下界面:
5 停车场管理系统系统则会把你刚离开的车俩的详细信息给你打印出来:拉开的车号,所用时间以及应收的费用。这个时间管理员,可以对照表收费了。
6.查看当你要查看停车场所停车的信息时,你可以选择3。同样,选择3 确定后会提示你要查看的车号,然后则会把信息打印在界面上:系统会告诉你这俩停在停车场里面的那个位置上。
7.退出当你一切操作完了后,就可以选择退出了,输入4 停车场管理系统随便按个键就退出该系统了。
四、程序代码
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define Max_Size 2//停车的最大容量
#define HourFare 2 //每小时的停车费用
int CountForStack=0; //栈里现有的车数
int CountForQueue=0; //排队等候的车数
typedef struct
{
char Condition;//到达或者离开的状态
int Arrivetime;//到达时间,默认为-1,表示没有到达int Leavetime;//离开时间,默认为-1,表示没有离开int License;//车牌号
}
CarNode;//保存每辆车的信息
typedef struct//栈的定义
{
CarNode *base;//栈底指针
CarNode *top;//栈顶指针
int Stacksize;//栈的最大容量
}
CarStack;
typedef struct QNode
{
char Condition;//到达或者离开的状态
int Arrivetime;//到达时间,默认为-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 内存分配失败"< 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 内存分配失败!"< return false; } Q.rear=Q.front; Q.front->next=NULL; return true; } bool EnQueue(Queue &Q,QNode &e)//插入元素e 为Q 的新的队尾元素 { QNode *p=(QNode *)malloc(sizeof(QNode)); if(!p) { cout<<"p 内存分配失败"< 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; return true; } bool DeQueue(Queue &Q,QNode &t)//出队列函数 { if(Q.front==Q.rear) { cout<<"队列为空!"< 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->next; if(Q.rear==p) { Q.rear=Q.front; } free(p); return true;