?? 停車場.cpp
字號:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream.h>
#define Max 4//車庫容量
#define price 0.05
typedef struct time{
int hour;
int min;
}Time;//時間接點
typedef struct node{
char num[10];
Time reach;
Time leave;
}CarNode;//車輛信息結點
typedef struct NODE{
CarNode *stack[Max+1];
int top;
}seqstackcar;//模擬車站
typedef struct car{
CarNode *data;
struct car*next;
}QueueNode;
typedef struct Node{
QueueNode *head;
QueueNode *rear;
}LinkQueueCar;//模擬便道
void InitStack(seqstackcar*);//初始化棧
int InitQueue(LinkQueueCar*);//初始化便道
int Arrival(seqstackcar*,LinkQueueCar*);//車輛到達處理
void Leave(seqstackcar*,seqstackcar*,LinkQueueCar*);//車輛離開處理
void List(seqstackcar,LinkQueueCar);//顯示車輛的存儲信息
void main()
{
seqstackcar Enter,Temp;
LinkQueueCar wait;
int ch;
InitStack(&Enter);//初始化車站
InitStack(&Temp);//初始化讓路的臨時棧
InitQueue(&wait);//初始化通道
cout<<"***************************歡迎進入停車場模擬系統*******************************"<<endl;
while(1)
{
cout<<"1車輛到達 2車輛離開 3列表顯示 4退出系統"<<endl;
while(1)
{
cin>>ch;
if(ch>=1&&ch<=4) break;
else
{
cout<<"請選擇1|2|3|4"<<endl;
break;
}
}
switch(ch)
{
case 1:Arrival(&Enter,&wait);break;//車輛到達
case 2:Leave(&Enter,&Temp,&wait);break;//車輛離開
case 3:List(Enter,wait);break;//顯示列表信息
case 4:cout<<"**********************************模擬結束!*************************************"<<endl;
exit(0);
default :break;
}
}
}
void InitStack(seqstackcar*s)//初始化棧
{
int i;
s->top=0;
for(i=0;i<=Max;i++)
s->stack[s->top]=NULL;
}
int InitQueue(LinkQueueCar*Q)//初始化便道
{
Q->head=(QueueNode*)malloc(sizeof(QueueNode));
if(Q->head!=NULL)
{
Q->head->next=NULL;
Q->rear=Q->head;
return 1;
}
else return -1;
}
void PRINT(CarNode*p,int room)//打印出站的信息
{
int A1,A2,B1,B2;
cout<<"請輸入離開時間"<<endl;
cin>>p->leave.hour>>p->leave.min;
cout<<"離開車的車牌號為:"<<p->num<<endl;
cout<<"離開時間為"<<p->leave.hour<<":"<<p->leave.min;
A1=p->reach.hour;
A2=p->reach.min;
B1=p->leave.hour;
B2=p->leave.min;
cout<<"應該交的費用:"<<((B1-A1)*60+(B2-A2))*price;
free(p);
}
int Arrival(seqstackcar *Enter,LinkQueueCar *w)//車輛到達
{
CarNode *p;
QueueNode *t;
p=(CarNode*)malloc(sizeof(CarNode));//建立結點
cout<<"請輸入車牌號"<<endl;
cin>>p->num;
if(Enter->top<Max)
{
Enter->top++;
cout<<"車輛在第"<<Enter->top<<"的位置"<<endl;
cout<<"請輸入到達時間"<<endl;
cin>>p->reach.hour>>p->reach.min;
Enter->stack[Enter->top]=p;
return(1);
}
else
{
cout<<"該車須在便道等待:"<<endl;
t=(QueueNode*)malloc(sizeof(QueueNode));
t->data=p;
t->next=NULL;
w->rear->next=t;
w->rear=t;
return(1);
}
}
void Leave(seqstackcar*Enter,seqstackcar*Temp,LinkQueueCar*w)//車輛離開
{
int room;
CarNode *p,*t;
QueueNode*q;
//判斷車場內是否有車
if(Enter->top>0)
{
cout<<"要離開的車在車場的位置"<<endl;
cin>>room;
}
else cout<<"車場里沒車"<<endl;
while(Enter->top > room)//車輛離開,在這輛車后面的所有車要先進臨時棧
{
Temp->top++;
Temp->stack[Temp->top]=Enter->stack[Enter->top];//先把最后近來的進棧
Enter->stack[Enter->top]=NULL;
Enter->top--;
}
p=Enter->stack[Enter->top];//此時top為要出站的車輛
Enter->stack[Enter->top]=NULL;
Enter->top--;
while(Temp->top>=1)//把進入臨時棧的車輛出棧
{
Enter->top++;
Enter->stack[Enter->top]=Temp->stack[Temp->top];
Temp->stack[Temp->top]=NULL;
Temp->top--;
}
PRINT(p,room);
//判斷通道上是否有車及車站是否已滿
if((w->head!=w->rear)&&Enter->top<Max)//便道的車進入車場
{
q=w->head->next;
t=q->data;
Enter->top++;
cout<<"便道的"<<t->num<<"號車進入車場"<<Enter->top<<"位"<<endl;
cout<<" 請輸入現在的時間"<<endl;
cin>>t->reach.hour>>t->reach.min;
w->head->next=q->next;
if(q==w->rear) w->rear=w->head;
Enter->stack[Enter->top]=t;
free(q);
}
else cout<<"便道里無車"<<endl;
}
void List1( seqstackcar * s)//列表顯示車場信息
{
int i;
if(s->top>0)//判斷車場內是否有車
{
cout<<"車場位置 到達時間 車牌號"<<endl;
for (i=1;i<=s->top;i++)
{
cout<<" "<<i<<" "<<s->stack[i]->reach.hour<<":"<<s->stack[i]->reach.min<<" ";
cout<<s->stack[i]->num<<endl;
}
}
else cout<<"車場里沒有車"<<endl;
}
void List2(LinkQueueCar*w)//列表顯示便道信息
{
QueueNode *p;
p=w->head->next;
if(w->head!=w->rear)//判斷有無車
{
cout<<"等待車輛的號碼為:";
while (p!=NULL)
{
cout<<p->data->num<<endl;
p=p->next;
}
}
else cout<<"便道里無車"<<endl;
}
void List(seqstackcar s,LinkQueueCar w)
{
int f,l;
f=1;
while (f)
{
cout<<"選擇1,2,3"<<endl;
cout<<"1車場 2便道 3返回"<<endl;
while(1)
{
cin>>l;
if(l>=1||l<=3)break;
else cout<<"請選擇1|2|3";
}
switch(l)
{
case 1:List1(&s);break;//顯示車場信息
case 2:List2(&w);break;//顯示便道信息
case 3:f=0;break;
default:break;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -