该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define MAXNUM 2
#define price 0.05
typedef struct time
{
int hour;
int min;
}Time
typedef struct node
{
char num[10];
int Time reach;
int Time leave;
}CarNode;
typedef struct NODE
{
int CarNode*stack[MAXNUM+1];
int top;
}SeqStackCar;
typedef struct car
{
int CarNode*data:;
struct car*next;
}QueueNode;
typedef struct Node
{
int QueueNode*head;
int QueueNode*rear;
} LinkQueueCar;
void StackInit(SeqStackcar*s)
{
int i;
s->top=0;
for(i=0;i<=MAXNUM;i++)
s->stack[s->p]=NULL;
}
int QueueInit(LinkQueueCar*Q)
{Q->head=(QueueNode*)malloc(sizeof(Queue));
if(Q->head!=NULL)
{Q->head->next=NULL;
q->rear=q->head;
return OK;
}
else
return ERROR;
}
void print(CarNode*p,int room)
{int A1,A2,B1,B2;
printf("\n请输入离开的时间:/**:**/");
scanf("%d:%d",&(p->leave.hour),&(p->leave.min));
printf("\n离开车牌号为:");
puts(p->num);
printf("\n其到达时间为:%d:%d",p->reach.hour,p->reach.min);
printf("离开时间为:%d:%d",p->leave.hhour,p->leave.min);
A1=p->reach.hour;
A2=p->reach.min;
B1=p->leave.hour;
B2=p->laeve.min;
printf("\n应交费用为:%2.1f元",((B1-A1)*60+(B2-A2)*price));
free(p);
}
int Arrival(SeqStackCar*Enter,LinkQueueCar*W);
{
int CarNode*p;
QueueNode*t;
p=(CarNode*)malloc(sizeof(CarNode));
printf("\n请输入车牌号:");
getchar();
gets(p->num);
if(Enter->top
{
Enter->top++;
printf("\n车辆在车场的%d位置",Enter->top);
printf("\n输入到达时间/**:**/");
scanf("%d:%d",&(p->reach,&(p->reach.min));
Enter->stack[Enter->top]=p;
return OK;
}
else
{
printf("\n该车需在便道等待!");
t=(QueueNode*)malloc(sizeof(QueueNode));
t->data=p;
t->next=NULL;
w->rear->next=t;
w->rear=t;
return OK;
}
}
void Leave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*w)
{int room;
CarNode *p,*t;
QueueNode *q;
if(Enter->top>0)
{
while(TURE)
{
printf("\n车辆在车场的%d位置/l--%d/:",Enter->top);
scanf("%d",&room);
if(room>=1&&room<=Enter->top)
beark;
}
while(Enter->top>room)
{Temp->top++;
Temp->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++;
printf("\n便道的%s号车进入车场的%d位置。",t->num,Enter-top);
printf("\n请输入现在的时间/**:**/"0);
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
printf{"\n便道里没有车。\n"};
}
else
printf("\n车场没有车。")
}
void List1(SeqStackCar*S)
{
int i,s;
if(s->top>0)
{ printf("\n 车场:");
printf("\n位置 到达时间 车牌号\n");
for(i=1;i<=S->top;i++)
{printf("%d",i);
printf("%d:%d",S->stack[i]->reach.hour,S->stack[i]->reach.min);
puts(S->stack[i]->num );
}
]
else
printf("\n车场没有车。")
}
void List2(LinkQueueCar*W)
{
QueueNode*p;
p=W->head->next;
if(W->head!=W->rear)
{printf("\n等待车辆号码为:");
while(p!=NULL)
{puts(p->data->num);
p=p->next;
}
}
else
printf("\n便道里没有车。");
}
void List2(LinkQueueCar*W)
{QueueNode*p;
p=W->head->next;
if(W->head->head!=W->rear)
{
printf("\n等待车辆号码为:");
while(p!=NULL)
{
puts(p->data->num);
p=p->next;
}
}
}
else
printf("\n便道里没有车.");
}
void List(SeqStackCar S,LinkQueueCar W)
{
int flag,tag;
flag=1;
while(flag)
{
printf("\n请选择1.2.3:");
printf("\n1,车场\n2,便道\n3,返回\n");
while(TRUE)
{
scanf("%d",&tag)
if(tag>=1‖tag<=3)break;
else
printf("\n请选择1|2|3|:");
}
switch(tag)
{
case 1:List1(&S);
break;
case 2:List2(&W);
break;
case 3:flag=0;
break;
default:break;
}
}
}
void main()
{SeqStackCar Enter,Temp;
LinkQueueCar Wait ;
int ch;
StackInit(&Enter);
StackInit(&Temp);
QueueInit(&Wait);
while(TURE)
{
printf("\n1.车辆到达);
printf("2.车辆离开);
printf("3.列表显示);
printf("4.退出系统);
while(TRUE)
{
scanf("%d",&ch);
if(ch>=1&&ch<=4)
break;
else
printf("\n请选择:1|2|3|4.");
}
switch(ch)
{
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;
}
}
}