#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 3
#define price 0.05
typedef struct Time //时间结构体
{
int hour;
int min;
}Time;
typedef struct CarNode //汽车结构体
{
char num[10];
Time reach;
Time leave;
}CarNode;
typedef struct StackCar //存储汽车的栈结构
{
CarNode *stack[MAX+1];
int top;
}StackCar;
typedef struct QueueCarNode //存储汽车的队列结构
{
CarNode *data;
struct QueueCarNode *next;
}QueueCarNode;
typedef struct LinkQueueCar //定义队列结构指针
{
QueueCarNode *head;
QueueCarNode *rear;
}LinkQueueCar;
void InitStack(StackCar *);
int InitQueue(LinkQueueCar *);
int Arrival(StackCar *,LinkQueueCar *);
void Leave(StackCar *,StackCar *,LinkQueueCar *);
void List(StackCar,LinkQueueCar);
void main()
{
StackCar Enter,Temp;
LinkQueueCar Wait;
int a;
int b=1;
InitStack(&Enter);
InitStack(&Temp); //汽车出站时,暂时按次序存放汽车的栈结构
InitQueue(&Wait);
while(b)
{
cout<<"\n1. 汽车进站登记";
cout<<" 2. 汽车出站登记";
cout<<" 3. 车位状态显示";
cout<<" 4. 退出系统\n";
cin>>a;
while(b)
{
if(a==1||a==2||a==3||a==4) break;
else
{
cout<<"\n错误! 退出系统\n";
b=0;
break;
}
}
switch(a)
{
case 1:Arrival(&Enter,&Wait);break;
case 2:Leave(&Enter,&Temp,&Wait);break;
case 3:List(Enter,Wait);break;
case 4:exit(0);
default: break;
}
}
}
void InitStack(StackCar *s) //初始化栈
{
int i;
s->top=0;
for(i=0;i<=MAX;i++)
s->stack[s->top]=NULL;
}
int InitQueue(LinkQueueCar *Q) //初始化队列
{
Q->head=(QueueCarNode *)malloc(sizeof(QueueCarNode));
if(Q->head!=NULL)
{
Q->head->next=NULL;
Q->rear=Q->head;
return(1);
}
else return(-1);
}
int Arrival(StackCar *Enter,LinkQueueCar *W) //进站登记
{
CarNode *p;
QueueCarNode *t;
p=(CarNode *)malloc(sizeof(CarNode));
cout<<"\n请输入车牌号:";
cin>>p->num ;
if(Enter->top<MAX) //有空车位
{
Enter->top++;
cout<<"\n车辆在车场第 "<<Enter->top<<" 号车位";
cout<<"\n车辆到达时间(时):";
cin>>p->reach.hour;
cout<<"\n车辆到达时间(分):";
cin>>p->reach.min;
Enter->stack[Enter->top]=p;
return(1);
}
else //没有空车位
{
cout<<"\n该车须在便道等待!有车位时进入车场";
t=(QueueCarNode *)malloc(sizeof(QueueCarNode));
t->data=p;
t->next=NULL;
W->rear->next=t;
W->rear=t;
return(1);
}
}
void PRINT(CarNode *p,int room) //汽车离站时缴费显示
{
cout<<"\n车辆离开的时间(时):";
cin>>p->leave.hour;
cout<<"\n车辆离开的时间(分):";
cin>>p->leave.min;
printf("\n离开车辆的车牌号为:");
cout<<p->num;
cout<<"\n其到达时间为: "<<p->reach.hour<<" 时 "<<p->reach.min<<" 分";
cout<<"\n离开时间为: "<<p->leave.hour<<" 时 "<<p->leave.min<<" 分";
cout<<"\n应交费用为: "<<((p->leave.hour - p->reach.hour)*60+(p->leave.min - p->reach.min))*price<<" 元";
free(p);
}
void Leave(StackCar *Enter,StackCar *Temp,LinkQueueCar *W) //出站登记
{
int room;
CarNode *p,*t;
QueueCarNode *q;
if(Enter->top>0) //车站有车时
{
while(1)
{
cout<<"\n请输入车在车场的位置:";
cin>>room;
if(room>=1&&room<=Enter->top) break;
}
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];
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<<"\n便道的"<<t->num<<"号车进入车场第"<<Enter->top<<"号车位.";
cout<<"\n请输入"<<t->num<<"号车进入车场的时间(时):";
cin>>t->reach.hour;
cout<<"\n请输入"<<t->num<<"号车进入车场的时间(分):";
cin>>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<<"\n便道里没有车.\n";
}
else cout<<"\n车场里没有车.";
}
void List1(StackCar *S) //车场车位显示
{
int i;
if(S->top>0)
{
cout<<"\n车场车位状态:";
cout<<"\n车位号\t"<<" 到达时间 \t"<<"车牌号\n";
for(i=1;i<=S->top;i++)
{
cout<<" "<<i<<"\t ";
cout<<S->stack[i]->reach.hour<<"时"<<S->stack[i]->reach.min<<"分";
cout<<"\t "<<S->stack[i]->num<<"\n";
}
}
else cout<<"\n车场里没有车";
}
void List2(LinkQueueCar *W) //便道车位显示
{
QueueCarNode *p;
p=W->head->next;
if(W->head!=W->rear)
{
cout<<"\n便道内车队依次为:";
cout<<"\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n";
while(p!=NULL)
{
cout<<p->data->num<<"\t";
p=p->next;
}
cout<<"\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<";
}
else cout<<"\n便道里没有车.";
}
void List(StackCar S,LinkQueueCar W) //查询车位状态
{
int flag,choice;
flag=1;
while(flag)
{
cout<<"\n请选择 :";
cout<<"\n\t\t1. 车场列表\n\t\t2. 便道列表\n\t\t3. 返回主菜单\n";
while(1)
{
cin>>choice;
if(choice>=1||choice<=3) break;
else cout<<"选择错误,请重新选择!\n";
}
switch(choice)
{
case 1:
List1(&S);
break;
case 2:
List2(&W);
break;
case 3:
flag=0;
break;
default:
break;
}
}
}
能够运行就行,基本结构不变
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 3
#define price 0.05
typedef struct Time //时间结构体
{
int hour;
int min;
}Time;
typedef struct CarNode //汽车结构体
{
char num[10];
Time reach;
Time leave;
}CarNode;
typedef struct StackCar //存储汽车的栈结构
{
CarNode *stack[MAX+1];
int top;
}StackCar;
typedef struct QueueCarNode //存储汽车的队列结构
{
CarNode *data;
struct QueueCarNode *next;
}QueueCarNode;
typedef struct LinkQueueCar //定义队列结构指针
{
QueueCarNode *head;
QueueCarNode *rear;
}LinkQueueCar;
void InitStack(StackCar *);
int InitQueue(LinkQueueCar *);
int Arrival(StackCar *,LinkQueueCar *);
void Leave(StackCar *,StackCar *,LinkQueueCar *);
void List(StackCar,LinkQueueCar);
void main()
{
StackCar Enter,Temp;
LinkQueueCar Wait;
int a;
int b=1;
InitStack(&Enter);
InitStack(&Temp); //汽车出站时,暂时按次序存放汽车的栈结构
InitQueue(&Wait);
while(b)
{
cout<<"\n1. 汽车进站登记";
cout<<" 2. 汽车出站登记";
cout<<" 3. 车位状态显示";
cout<<" 4. 退出系统\n";
cin>>a;
while(b)
{
if(a==1||a==2||a==3||a==4) break;
else
{
cout<<"\n错误! 退出系统\n";
b=0;
break;
}
}
switch(a)
{
case 1:Arrival(&Enter,&Wait);break;
case 2:Leave(&Enter,&Temp,&Wait);break;
case 3:List(Enter,Wait);break;
case 4:exit(0);
default: break;
}
}
}
void InitStack(StackCar *s) //初始化栈
{
int i;
s->top=0;
for(i=0;i<=MAX;i++)
s->stack[s->top]=NULL;
}
int InitQueue(LinkQueueCar *Q) //初始化队列
{
Q->head=(QueueCarNode *)malloc(sizeof(QueueCarNode));
if(Q->head!=NULL)
{
Q->head->next=NULL;
Q->rear=Q->head;
return(1);
}
else return(-1);
}
int Arrival(StackCar *Enter,LinkQueueCar *W) //进站登记
{
CarNode *p;
QueueCarNode *t;
p=(CarNode *)malloc(sizeof(CarNode));
cout<<"\n请输入车牌号:";
cin>>p->num ;
if(Enter->top<MAX) //有空车位
{
Enter->top++;
cout<<"\n车辆在车场第 "<<Enter->top<<" 号车位";
cout<<"\n车辆到达时间(时):";
cin>>p->reach.hour;
cout<<"\n车辆到达时间(分):";
cin>>p->reach.min;
Enter->stack[Enter->top]=p;
return(1);
}
else //没有空车位
{
cout<<"\n该车须在便道等待!有车位时进入车场";
t=(QueueCarNode *)malloc(sizeof(QueueCarNode));
t->data=p;
t->next=NULL;
W->rear->next=t;
W->rear=t;
return(1);
}
}
void PRINT(CarNode *p,int room) //汽车离站时缴费显示
{
cout<<"\n车辆离开的时间(时):";
cin>>p->leave.hour;
cout<<"\n车辆离开的时间(分):";
cin>>p->leave.min;
printf("\n离开车辆的车牌号为:");
cout<<p->num;
cout<<"\n其到达时间为: "<<p->reach.hour<<" 时 "<<p->reach.min<<" 分";
cout<<"\n离开时间为: "<<p->leave.hour<<" 时 "<<p->leave.min<<" 分";
cout<<"\n应交费用为: "<<((p->leave.hour - p->reach.hour)*60+(p->leave.min - p->reach.min))*price<<" 元";
free(p);
}
void Leave(StackCar *Enter,StackCar *Temp,LinkQueueCar *W) //出站登记
{
int room;
CarNode *p,*t;
QueueCarNode *q;
if(Enter->top>0) //车站有车时
{
while(1)
{
cout<<"\n请输入车在车场的位置:";
cin>>room;
if(room>=1&&room<=Enter->top) break;
}
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];
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<<"\n便道的"<<t->num<<"号车进入车场第"<<Enter->top<<"号车位.";
cout<<"\n请输入"<<t->num<<"号车进入车场的时间(时):";
cin>>t->reach.hour;
cout<<"\n请输入"<<t->num<<"号车进入车场的时间(分):";
cin>>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<<"\n便道里没有车.\n";
}
else cout<<"\n车场里没有车.";
}
void List1(StackCar *S) //车场车位显示
{
int i;
if(S->top>0)
{
cout<<"\n车场车位状态:";
cout<<"\n车位号\t"<<" 到达时间 \t"<<"车牌号\n";
for(i=1;i<=S->top;i++)
{
cout<<" "<<i<<"\t ";
cout<<S->stack[i]->reach.hour<<"时"<<S->stack[i]->reach.min<<"分";
cout<<"\t "<<S->stack[i]->num<<"\n";
}
}
else cout<<"\n车场里没有车";
}
void List2(LinkQueueCar *W) //便道车位显示
{
QueueCarNode *p;
p=W->head->next;
if(W->head!=W->rear)
{
cout<<"\n便道内车队依次为:";
cout<<"\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n";
while(p!=NULL)
{
cout<<p->data->num<<"\t";
p=p->next;
}
cout<<"\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<";
}
else cout<<"\n便道里没有车.";
}
void List(StackCar S,LinkQueueCar W) //查询车位状态
{
int flag,choice;
flag=1;
while(flag)
{
cout<<"\n请选择 :";
cout<<"\n\t\t1. 车场列表\n\t\t2. 便道列表\n\t\t3. 返回主菜单\n";
while(1)
{
cin>>choice;
if(choice>=1||choice<=3) break;
else cout<<"选择错误,请重新选择!\n";
}
switch(choice)
{
case 1:
List1(&S);
break;
case 2:
List2(&W);
break;
case 3:
flag=0;
break;
default:
break;
}
}
}
能够运行就行,基本结构不变
