#include
#include
#include
#include
#include//getch
void main()
#define MAX 2 //停车场容量
#define price 0.05; //每车每分钟费用
using namespace std;
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 List1(SeqStackCar *S);
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<<"\n请输入离开停车场的时间:/**:**/";
scanf("%d:%d",&(p->leave.hour),&(p->leave.min));
cout<<"\n车牌号为:";
cout<<p->num;
cout<<"\n到达时间为: "<<p->reach.hour<<":"<<p->reach.min;
//printf("the depart time: %d:%d",p->leave.hour,p->leave.min);
A1=p->reach.hour;
A2=p->reach.min;
B1=p->leave.hour;
B2=p->leave.min;
cout<<"\n停车费为:"<<((B1-A1)*60+(B2-A2))*price<<"元";
free(p);
getch();
}
int Arrival(SeqStackCar Enter,LinkQueueCar *W){ //车辆到达
CarNode *p;
QueueNode *t;
p=(CarNode *)malloc(sizeof(CarNode));
void tcc();
cout<<"\n请输入车牌号(例:辽A12345):";
//gets(p->num);
cin>>p->num;
if(Enter->top
Enter->top++;
cout<<"\n车辆位置:"<top;
cout<<"\n车辆进入时间:/*:**/";
scanf("%d:%d",&(p->reach.hour),&(p->reach.min));
Enter->stack[Enter->top]=p;
return(1);
}
else{//车场已满,车进便道
cout<<"\n该车须在便道等待!";
t=(QueueNode )malloc(sizeof(QueueNode));
t->data=p;
t->next=NULL;
W->rear->next=t;
W->rear=t;
getch();
return(1);
}
}
void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W){ //车辆离开
int i, room;
CarNode *p,*t;
QueueNode *q;
//判断车场内是否有车
if(Enter->top>0){ //有车
while(1){ //输入离开车辆的信息
List1(Enter);
cout<<"\n请输入车在车场的位置(1--"<top<<")"<
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
q=W->head->next;
t=q->data;
Enter->top++;
cout<<"\n便道的"<num<<"号车进入车场第"<top<<"位置."<<endl;
cout<<"\n请输入现在的时间/*:**/:";
scanf("%d:%d",&(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<<"\n便道里没有车.\n";
getch();
}
else
cout<<"\n停车场里没有车."; //没车
getch();
}
void List1(SeqStackCar *S){ //列表显示听车场信息
int i;
if(S->top>0){ //判断车站内是否有车
cout<<"\n停车场:";
cout<<"\n位置 车牌号 到达时间\n";
for(i=1;i<=S->top;i++){
cout<stack[i]->num<<" "<stack[i]->reach.hour<<":"<stack[i]->reach.min<
}
}
else
printf("\n停车场里没有车");
getch();
}
void List2(LinkQueueCar *W){ //列表显示便道信息
QueueNode *p;
p=W->head->next;
if(W->head!=W->rear){ //判断通道上是否有车
printf("\n等待车辆的号码为:");
while(p!=NULL){
cout<data->num<
p=p->next;
}
}
else
cout<<"\n便道里没有车.";
getch();
}
void List(SeqStackCar S,LinkQueueCar W){
int flag,tag;
flag=1;
while(flag){
system("cls");
cout<<"\n请选择 :";
cout<<"\n1.车场\n2.便道\n3.返回\n";
while(1){
cin>>tag;
if(tag>=1||tag<=3)
break;
else
printf("\n请选择 :");
}
switch(tag){
case 1:
List1(&S);
break; //列表显示停车场信息
case 2:
List2(&W);
break; //列表显示便道信息
case 3:
flag=0;
break;
default:
break;
}
}
}