#include "L.h"
#include <stdlib.h>
#include <stdio.h>
#define FALSE 0
#define TRUE 1
int count = 0;
int a = 0;
int main()
{
Queue* Wait = Create_Queue();
Queue* Stop = Create_Queue();
LinkStack* Give = Create_Stack();
while(1)
{
system("clear");
if(count == 0)
{
printf("停车场当前没有车辆,请停车\n");
sleep(1);
QueueData x;
printf("请输入你要停放车辆的id\n");
scanf("%d",&x.id);
printf("正在停车,请稍候\n");
x.time_first = time(NULL);
EnQueue(Stop,x);
count++;
sleep(1);
printf("停车成功,开始计时\n");
getchar();
sleep(1);
continue;
}
printf("**************************************************\n");
printf("* *\n");
printf("* 1、停放车辆 *\n");
printf("* *\n");
printf("* 2、取走车辆 *\n");
printf("* *\n");
printf("* 3、查看停车信息 *\n");
printf("* *\n");
printf("* 4、退出 *\n");
printf("* *\n");
printf("**************************************************\n");
printf("停车场当前有%d辆车,等待区有%d辆车\n",count,a);
printf("请输入你的选择:\n");
char c;
scanf("%c",&c);
if(c == '1')
{
QueueData x;
printf("请输入你要停放车辆的id\n");
scanf("%d",&x.id);
printf("正在停车,请稍候\n");
x.time_first = time(NULL);
sleep(1);
if(find_id(Stop, x.id))
{
printf("对不起,该车辆已在停车场中\n");
}
else if(count < 10)
{
EnQueue(Stop,x);
count++;
printf("停车成功,开始计时\n");
}
else
{
EnQueue(Wait,x);
a++;
printf("停车场已满,车辆进入候车区\n");
}
sleep(1);
printf("输入回车键继续\n");
getchar();
getchar();
}
else if(c == '2')
{
int id;
QueueData x;
printf("请输入你要取的车辆的id\n");
scanf("%d",&id);
printf("正在查车并取车,请稍候\n");
sleep(1);
if(!find_id(Stop, id))
{
printf("对不起,该车辆不在停车场中,取车失败\n");
getchar();
getchar();
continue;
}
while(!QueueEmpty(Stop))
{
re_DeQueue(Stop,&x);
count--;
if(x.id == id)
{
break;
}
Push(Give,x);
}
printf("取车成功,停放时间为%d秒,请缴费\n",Time_Stop(x));
while(!StackEmpty(Give))
{
Pop(Give,&x);
EnQueue(Stop,x);
count++;
}
if(!QueueEmpty(Wait))
{
DeQueue(Wait,&x);
x.time_first = time(NULL);
EnQueue(Stop,x);
count++;
a--;
}
sleep(1);
printf("输入回车键继续\n");
getchar();
getchar();
}
else if(c == '3')
{
printf("正在查询,请稍候\n");
sleep(1);
system("clear");
printf("车辆编号 车辆停放时间\n");
Node * node = (Node*)malloc(sizeof(Node)/sizeof(char));
if (node == NULL)
{
return FALSE;
}
node = Stop->front;
int b = count;
while(b)
{
sleep(1);
printf(" %d",node->data.id);
if(Time_Stop(node->data) >= 60)
{
printf(" %dm %ds\n",Time_Stop(node->data)/60,Time_Stop(node->data)%60);
}
else
printf(" %ds\n",Time_Stop(node->data));
node = node->next;
b--;
}
sleep(1);
printf("输入回车键继续\n");
getchar();
getchar();
}
else if(c == '4')
{
Destroy(Give);
Destroy_Queue(Stop);
Destroy_Queue(Wait);
system("clear");
exit(0);
}
else if( c == '\n')
{
continue;
}
else
{
printf("输入有误,请重新输入\n");
sleep(1);
printf("输入回车键继续\n");
getchar();
getchar();
}
}
return 0;
}
停车场的实现主要使用的两个队列和一个栈,一个停车队列,一个等候队列,一个让路栈,当有车进入停车场的时候会先判断停车队列是否满了,如果停车队列未满,该辆车将直接停车在停车场,如果停车场已经满了,那么该车将停入等候队列,当用户取车的时候,会让该车辆后面的车先出队列进入栈中,让该车直接出队列,再将栈中的车停入停车队列中,此时如果候车队列中有车将候车队列中取出一辆车停入停车队列中。