|
发表于 2014-3-10 12:27:13
|
显示全部楼层
//停车场管理系统
//车辆可以看成是一个节点,设计成一个结构体
typedef struct node
{
char num[10]; //车牌号
Time reach; //车辆到达的时间
Time leave; //车辆离开的时间
}carNode;
//时间,栈,队列的定义
typedef struct Time
{
int hour ;
int min;
}Time;
//停车场内用栈来维护,因为先进去的要让后面的先出去才可以出去,符合栈的先进后出的特点
typedef struct NODE
{
carNode *stack[MAXSIZE+1];
int top;
}sqStackCar;
//便道上车辆的表示
typedef struct car
{
carNode *data;
struct car *next;
}QueueCar;
typedef struct Node
{
QueueCar *head;
QueueCar *rear;
}LinkQueue;
//初始化停车场中的栈
void InitStack(sqStackCar *s)
{
int i;
s->top = 0;
for(i = 0; i<=MAX ; i++)
s->stack[s->top] = null;
}
//初始化一个队列,此队列是在当停车场满的时候在外面等待的队列
int InitQueue(QueueCar *Q)
{
Q->head = (QueueCar*)malloc(sizeof(QueueCar));
if(Q->head)
{
Q->head->next = null;
Q->rear = Q->head;
return 1;
}
else
return 0;
}
//打印收费 其中room是停车的位置
void PRINT(carNode *p , int room )
{
int A1 , A2 , B1 ,B2;
printf("\n车辆离开的时间!")
scanf("%d %d",&(p->leave.hour),&(p->leave.min));
printf("\请输入该车的车牌号!")
puts(p->num);
printf("\n到达的时间");
printf("%d %d",(p->reach.hour),(p->reach.min));
printf("%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("\n应该收%d元",(B1-A1)*60+(B2-A2)*1);
free(p);
}
int Arrival(seqStackCar * s , LinkQueue * q)
{
carNode *p ;
QueueCar *t;
p = (carNode*)malloc(sizeof(carNode));
flushall(); //清除缓冲区
printf("\n请输入车辆的车牌号!");
puts(p->num);
if(s->top<MAX)
{
s->top++;
printf("\n车辆在停车场的%d位置",s->top);
printf("\n输入车辆到达的时间");
scanf("%d %d",&(p->reach.hour),&(p->reach.min));
s->stack[s->top] = p ;
return 1;
}
else
{
printf("\n停车场已经满,请在旁边等待");
t = (QueueCar*)malloc(sizeof(QueueCar));
t->data = p ;
t->next = null;
q->rear->next = t ;
q->rear = t ;
return 1 ;
}
}
void Leave(seqStackCar *s , seqStackCar *temp , LinkQueue * L)
{
int room //离开的车辆的位置
carNode *p , *t ;
QueueCar * q ;
if(s->top >0)
{
while (1)
{
printf("\n请输入车辆的停车位置:%d",s->top);
scanf("%d",&room);
if(room>=1 && room <s->top) break;
else
{
printf("\n输入有误,请重新输入!");
}
}
while(s->top > room)
{
Temp->top++;
Temp->stack[temp->top]=s->stack[s->top];
s->stack[s->top]=NULL;
s->top--;
}
p=s->stack[s->top]; //把要删除的车辆节点赋给p。
s->stack[s->top]=NULL;
s->top--;
while(temp->top >= 1)
{
s->top ++;
s->stack[s->top] = temp->stack[temp->temp];
temp -> stack[temp->tap] = null ;
temp -> top--;
}
PRINT(p , room);
if((L->head != L->rear) && s->top <MAX )
{
q = L ->head ->next ;
t = q -> data ;
s -> top ++ ;
printf("\n便道的%s号车进入车场第%d位置.",t->num,s->top);
scanf("%d:%d",&(t->reach.hour),&(t->reach.min));
W->head->next=q->next;
if(q==L->rear)
L->rear=L->head;
s->stack[s->top]=t;
free(q);
}
}
}
void List1(sqStackCar *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("停车场没有车");
}
//显示停车便道上的停车情况
void List2(LinkQueue *q )
{
QueueCar *p ;
int i ;
p = q->head->next;
if(q->head != q->rear)
{
printf("等待车辆的号码为:");
for(i = 1 ; p!=null ; i++)
{
printf("\n第%d车辆.",i);
puts(p->data->num);
p=p->next;
}
}
else
{
printf("\n过道里面没有等待的车辆");
}
}
我弄了一点,后面的有测试的什么的,你看看自己写。 |
|