-
#include
#include
using namespace std;
const int MAX_STOP=4;
//
定义停车场最大停车数
const int MAX_PLATE=10;
//
定义车牌号最大长度
//
数据结构定义
//
定义存储汽车信息的结构体
typedef struct
{
char license_plate[MAX_PLATE];//
汽车牌照号码,定义为一个字符指针类型
char state;
//
汽车当前状态,
字符
p
表示停放在停车位上,
字符
s
表示停放在便道上,
每辆车的初
始状态用字符
i
来进行表示
}CAR;
//
定义模拟停车场的栈结构
typedef struct
{
CAR STOP[MAX_STOP];
//
汽车信息的存储空间
int
top;
//
用来指示栈顶位置的静态指针
}SeqStack;
//
定义模拟便道的队列结构
typedef struct node
{
CAR W
AIT;
//
汽车信息的存储空问
struct node *next;
//
用来指示队列位置的动态指针
}QNode;
//
链队列节点的类型
//
定义链队列的收尾指针
typedef struct
{
QNode *front,*rear;
}LQueue;
//
将头尾指针封装在一起的链队
//
函数声明
int Empty_LQueue(LQueue *q);
//
判队空
int LeaveCheck(SeqStack parking,char
*license_plate);
//
检查离开的车是否在停车场中
int QueueLength(LQueue *q);
//
判队长度
int Out_LQueue(LQueue *&sidewalk,char
*license_plate);
//
出队操作
int StackEmpty(SeqStack parking);
//
判断栈是否为空
int StackFull(SeqStack parking);
//
判断栈是否为满
int StackPop(SeqStack &parking);
//
出栈操作
int StackTop(SeqStack parking, char
*license_plate); //
取栈项元素
void Car_come(SeqStack &parking,LQueue
*&sidewalk);
//
有车到来时的操作
void Car_leave(SeqStack &parking,LQueue
*&sidewalk);
//
有车离开的操作
void Display(SeqStack parking);
//
显示停车场内的所有信息调试时用
void InitStack(SeqStack &parking);
//
初始化栈
void InitList(LQueue *&sidewalk);
//
初始化队列
void In_LQueue(LQueue *&sidewalk, char
*license_plate); //
进队操作
void Input_Check(char *license_plate);
////
检验输入的车牌是否合法
void StackPush(SeqStack &parking,char
*license_plate); //
进栈操作
void main()
{
//
定义变量
SeqStack parking;
LQueue *sidewalk= NULL;
char *choice= new char;
int flag=1;
//
定义一个变量判断是否退出
//
初始化一个为空的停乍场
InitStack(parking);
//
初始化一个为空的便道
InitList(sidewalk);
//
运行界面及功能选择
while(flag)
{
cout<<
停车场模拟管理系统
cout<<
cou
t<<
有车到来时请按
[C]
键
cout<<
有车要走时请按
[l]
键
cou
t<<
查看停车场请按
[D]
键
cout<<
要退出系统请按
[Q]
键
cout<<
cou
t<<
请选择操作:
gets(choice);
if(1!=strlen(choice))
{
cout<<
请正确输入选项!
continue;
}
else
{
switch(*choice)
{
case 'c':
case 'C':
{
Car_come(parking,sidewalk);
break;
}
case'l' :
case'L':
{
Car_leave (parking,sidewalk);
break;
}
case'q':
case 'Q':
{
flag=0;
break;
}
case 'd':
case 'D':
{
Display(parking);break;
}
default:
cout<<
选择不正确!请重新选择
}
}
}
}
//
有车到来时的操作
void Car_come(SeqStack &parking, LQueue
*&sidewalk)
{
//
定义变量
char
license_plate[MAX_PLATE];
cout<<
请输入车辆的车牌号码:
Input_Check(license_plate);
//<
/p>
判断停车场是否已满,满则进入便道,不满进入停车场
if(StackFull(parking))
{
In_LQueue(sidewalk,license_plate);
//
进入便道
cout<<
停车场已满清在便道等候,您的位置为
}
else
{
StackPush(parking,license_plate);
//
进入停车场
cout<<
请进入停车场中的
号停车位
}
}
//
有车离开时的操作
void Car_leave(SeqStack &parking,
LQueue *&sidewalk)
{
//
定义变量
SeqStack tmpparking;
//
定义临时停车场
char leave_license_plate[MA
X_PLATE];//
要离开的车牌号
char
license_plate[MAX_PLATE];
//
存放从停车场中读出来的车牌信息
InitStack(tmpparking);
//
初始化临时停车场
//
判断停车场中是否有车
if(StackEmpty(parking))
{
<
/p>
cout<<
当前停车场中没有车
return;
//
退出子函数
}
cou
t<<
请输入要离开的车牌照:
Input_Check(leave_license_plate);
cout<<
当前停车场中有
辆车
if(LeaveCheck(parking
,leave_license_plate))//
判断车是否在停车场中
{
//
车在停车场中
cou
t<<
您
的
车
在
号
车
p>
位
上
while(StackTop(parking,license_plate)&&
(strcmp([].license_plate,
leave_license_plate)!=0))
{
strcpy([].license_plate,
license_plate);
cout<<
牌
照
为
的
车
暂
时
退
p>
出
停
车
场
号位
StackPush(tmpparking,license_plate);
p>
//
停车场中的车暂时退出进入临时停
车场
StackPop(parking);
//
出栈
}
cou
t<<
牌照为
的车离开停车场
号位
StackPop(parking);
//
出栈
//
将临时停车场巾的车停回停车场
while(StackEmpty(tmpparking)!=1)
{
StackTop(tmpparking, license_plate);
-
-
-
-
-
-
-
-
-
上一篇:华为三台堆叠-环形
下一篇:第一节无时限电流速断保护