?? 實(shí)訓(xùn)課實(shí)驗(yàn)三:停車場(chǎng)管理.cpp
字號(hào):
#include<iostream.h>
#define TingCheWei 10
#define BianDaoWei 5
typedef struct//車的信息
{
int PaiHao;
int ArriveTime,LeaveTime;
}CarType;
typedef struct//模擬停車位和臨時(shí)棧
{
CarType data[TingCheWei];
int YNum;//已停車的數(shù)量
}Stack1;
typedef struct//便道(循環(huán)隊(duì)列)
{
int front,rear,count;
CarType data[BianDaoWei];
}CirQueue;
void InputCarMessage(CarType *c,int f);//輸入車的信息
void Arrive(Stack1 *s1,CirQueue *q1,CarType c);//車輛c到達(dá)
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);//進(jìn)棧
CarType Pop(Stack1 *s1);//出棧
int ShouFei(CarType c,CarType cc);//收費(fèi)
void InitQueue(CirQueue *q1);//初始隊(duì)列
int QueueEmpty(CirQueue *q1);//判隊(duì)空
void EnQueue(CirQueue *q1,CarType c);//入隊(duì)
CarType DeQueue(CirQueue *q1);//出隊(duì)
void main()
{
int flag;//標(biāo)記
Stack1 s1;//停車場(chǎng)的棧
InitStack(&s1);
CirQueue q1;//便道隊(duì)列
InitQueue(&q1);
Stack1 s2;//臨時(shí)棧
InitStack(&s2);
CarType c;//車信息
while(flag!=0)
{
cout<<"\n1. 到達(dá) 2.離去 0.退出\n";
cout<<"請(qǐng)選擇:";
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<<"請(qǐng)輸入車牌號(hào):";
cin>>p;
c->PaiHao=p;
if(f==1)//當(dāng)標(biāo)記為1時(shí)
{
cout<<"請(qǐng)輸入到達(dá)時(shí)間:";
cin>>a;
c->ArriveTime=a;
}
else
{
cout<<"請(qǐng)輸入離開時(shí)間:";
cin>>l;
c->LeaveTime=l;
}
}
void Arrive(Stack1 *s1,CirQueue *q1,CarType c)
//車輛c到達(dá)
{
if(s1->YNum<TingCheWei-1)
{
s1->data[++s1->YNum]=c;
}
else
{
if(q1->count==BianDaoWei)
cout<<"對(duì)不起,沒(méi)有車位給您停放!";
else
{
cout<<"停車場(chǎng)已滿,請(qǐng)到便車道等候!";
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;//車輛滯留時(shí)間
if (StackEmpty(s1))
{
cout<<"對(duì)不起,您所查找的車不存在!";
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<<"您已在停車場(chǎng)停留:"<<z<<"小時(shí)!"<<"您應(yīng)付款:"<<z*10<<"元";
else
cout<<"您已在停車場(chǎng)停留:"<<z+24<<"小時(shí)!"<<"您應(yīng)付款:"<<(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<<"對(duì)不起,您所查找的車不存在";
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)//進(jìn)棧
{
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)//收費(fèi)
{
if(c.ArriveTime>0 && cc.LeaveTime>0)
return cc.LeaveTime-c.ArriveTime;
else
return -1;
}
void InitQueue(CirQueue *q1)//初始隊(duì)列
{
q1->front=q1->rear=0;
q1->count=0;
}
int QueueEmpty(CirQueue *q1)//判隊(duì)空
{
return q1->count==0;
}
void EnQueue(CirQueue *q1,CarType c)//入隊(duì)
{
if(q1->count==BianDaoWei)
{
cout<<"error";
return;
}
q1->count++;
q1->data[q1->rear]=c;
q1->rear=(q1->rear+1)%BianDaoWei;
}
CarType DeQueue(CirQueue *q1)//出隊(duì)
{
CarType temp;
if(QueueEmpty(q1))
{
cout<<"Error";
}
temp=q1->data[q1->front];
q1->count--;
q1->front=(q1->front+1)%BianDaoWei;
return temp;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -