码迷,mamicode.com
首页 > 其他好文 > 详细

利用链表实现简单的t停车场信息管理系统

时间:2015-04-24 20:58:36      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 2//车库容量
#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);

int main(void)
{
SeqStackCar Enter,Temp;
LinkQueueCar Wait;
int ch;
InitStack(&Enter);
InitStack(&Temp);
InitQueue(&Wait);

while(1)
{
printf("|-----------------------------------------------|\n");
printf("| 1.The car arrive |\n");
printf("| 2.The car leave |\n");
printf("| 3.The schedule |\n");
printf("| 4.Exit |\n");
printf("|-----------------------------------------------|\n");
while(1)
{
scanf("%d",&ch);
if(ch >= 1 &&ch <= 4)
break;
else
printf("\nPlease choose: 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;
}
}
}

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;
printf("\nPlease input the depart time:/**:**/");
scanf("%d:%d",&(p->leave.hour),&(p->leave.min));
printf("\nThe number of the car:");
puts(p->num);
printf("\nThe time The car arrive:%d:%d",p->reach.hour,p->reach.min);
printf("\nThe 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;
printf("\nThe fee: %2.1f元",((B1-A1)*60+(B2-A2)*price));
free(p);
}

int arrival(SeqStackCar *Enter,LinkQueueCar *W)
{
CarNode *p;
QueueNode *t;
p = (CarNode *)malloc(sizeof(CarNode));
flushall();
printf("\nInput the number of the car(例:陜A1234):");
gets(p->num);
if(Enter->top < MAX)
{
Enter->top ++;
printf("\nThe place of the car.",Enter->top);
printf("\nThe time the car arrive:/**:**/");
scanf("%d:%d",&(p->reach.hour),&(p->reach.min));
Enter->stack[Enter->top] = p;
return 1;
}
else
{
printf("\n该车须在便道等待!");
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 i,room;
CarNode *p,*t;
QueueNode *q;
if(Enter->top > 0)
{
while(1)
{
printf("\n请输入车在车场的位置/1--%d/",Enter->top);
scanf("%d",&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->next;
Enter->top ++;
printf("\n便道的%s号车进入车场的第%d位置。",t->num,Enter->top);
printf("\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
{
printf("\n便道没有车");
}
}
else
{
printf("\n车场里没有车。");
}
}
void list1(SeqStackCar *S)
{
int i;
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 list(SeqStackCar S,LinkQueueCar W)
{
int flag,tag;
flag = 1;
while(flag)
{
printf("\n请选择 1|2|3:");
printf("\n1.车场\n2.便道\n3.返回\n");
while(1)
{
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;
}
}
}

利用链表实现简单的t停车场信息管理系统

标签:

原文地址:http://www.cnblogs.com/tslDream/p/4454397.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!