📄 实训课实验三:停车场管理.cpp
字号:
#include<iostream.h>
#define TingCheWei 10
#define BianDaoWei 5
typedef struct//车的信息
{
int PaiHao;
int ArriveTime,LeaveTime;
}CarType;
typedef struct//模拟停车位和临时栈
{
CarType data[TingCheWei];
int YNum;//已停车的数量
}Stack1;
typedef struct//便道(循环队列)
{
int front,rear,count;
CarType data[BianDaoWei];
}CirQueue;
void InputCarMessage(CarType *c,int f);//输入车的信息
void Arrive(Stack1 *s1,CirQueue *q1,CarType c);//车辆c到达
void Leave(Stack1 *s1,CirQueue *q1,Stack1 *s2,CarType c);//车辆c离开
void InitStack(Stack1 *s1);//初始栈
int StackEmpty(Stack1 *s1);//判栈空
void Push(Stack1 *s1,CarType c);//进栈
CarType Pop(Stack1 *s1);//出栈
int ShouFei(CarType c,CarType cc);//收费
void InitQueue(CirQueue *q1);//初始队列
int QueueEmpty(CirQueue *q1);//判队空
void EnQueue(CirQueue *q1,CarType c);//入队
CarType DeQueue(CirQueue *q1);//出队
void main()
{
int flag;//标记
Stack1 s1;//停车场的栈
InitStack(&s1);
CirQueue q1;//便道队列
InitQueue(&q1);
Stack1 s2;//临时栈
InitStack(&s2);
CarType c;//车信息
while(flag!=0)
{
cout<<"\n1. 到达 2.离去 0.退出\n";
cout<<"请选择:";
cin>>flag;
switch(flag)
{
case 1: InputCarMessage(&c,1);
Arrive(&s1,&q1,c);
break;
case 2: InputCarMessage(&c,2);
Leave(&s1,&q1,&s2,c);
break;
}
}
}
void InputCarMessage(CarType *c,int f)
//输入车的信息
{
int p,a,l;
cout<<"请输入车牌号:";
cin>>p;
c->PaiHao=p;
if(f==1)//当标记为1时
{
cout<<"请输入到达时间:";
cin>>a;
c->ArriveTime=a;
}
else
{
cout<<"请输入离开时间:";
cin>>l;
c->LeaveTime=l;
}
}
void Arrive(Stack1 *s1,CirQueue *q1,CarType c)
//车辆c到达
{
if(s1->YNum<TingCheWei-1)
{
s1->data[++s1->YNum]=c;
}
else
{
if(q1->count==BianDaoWei)
cout<<"对不起,没有车位给您停放!";
else
{
cout<<"停车场已满,请到便车道等候!";
q1->count++;
q1->data[q1->rear]=c;
q1->rear=(q1->rear+1)%BianDaoWei;
}
}
}
void Leave(Stack1 *s1,CirQueue *q1,Stack1 *s2,CarType c)
//车辆c离开
{
CarType cc;
int z;//车辆滞留时间
if (StackEmpty(s1))
{
cout<<"对不起,您所查找的车不存在!";
return;
}
cc=Pop(s1);
while(!StackEmpty(s1) && cc.PaiHao!=c.PaiHao)
{
Push(s2,cc);
cc=Pop(s1);
}
if(cc.PaiHao==c.PaiHao)
{
z=ShouFei(cc,c);
if(z>0)
cout<<"您已在停车场停留:"<<z<<"小时!"<<"您应付款:"<<z*10<<"元";
else
cout<<"您已在停车场停留:"<<z+24<<"小时!"<<"您应付款:"<<(z+24)*10<<"元";
while(!StackEmpty(s2))
{
Push(s1,Pop(s2));
}
if(!QueueEmpty(q1))
{
Push(s1,DeQueue(q1));
}
}
else if (StackEmpty(s1))
{
Push(s2,cc);
cout<<"对不起,您所查找的车不存在";
while(!StackEmpty(s2))
{
Push(s1,Pop(s2));
}
}
}
void InitStack(Stack1 *s1)//初始栈
{
s1->YNum=-1;
}
int StackEmpty(Stack1 *s1)//判栈空
{
return s1->YNum==-1;
}
void Push(Stack1 *s1,CarType c)//进栈
{
if(s1->YNum==TingCheWei-1)
{
cout<<"error!";
return;
}
s1->data[++s1->YNum]=c;
}
CarType Pop(Stack1 *s1)//出栈
{
if(StackEmpty(s1))
{
cout<<"Error!";
}
return s1->data[s1->YNum--];
}
int ShouFei(CarType c,CarType cc)//收费
{
if(c.ArriveTime>0 && cc.LeaveTime>0)
return cc.LeaveTime-c.ArriveTime;
else
return -1;
}
void InitQueue(CirQueue *q1)//初始队列
{
q1->front=q1->rear=0;
q1->count=0;
}
int QueueEmpty(CirQueue *q1)//判队空
{
return q1->count==0;
}
void EnQueue(CirQueue *q1,CarType c)//入队
{
if(q1->count==BianDaoWei)
{
cout<<"error";
return;
}
q1->count++;
q1->data[q1->rear]=c;
q1->rear=(q1->rear+1)%BianDaoWei;
}
CarType DeQueue(CirQueue *q1)//出队
{
CarType temp;
if(QueueEmpty(q1))
{
cout<<"Error";
}
temp=q1->data[q1->front];
q1->count--;
q1->front=(q1->front+1)%BianDaoWei;
return temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -