停车场(2)

#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;
}

停车场的实现主要使用的两个队列和一个栈,一个停车队列,一个等候队列,一个让路栈,当有车进入停车场的时候会先判断停车队列是否满了,如果停车队列未满,该辆车将直接停车在停车场,如果停车场已经满了,那么该车将停入等候队列,当用户取车的时候,会让该车辆后面的车先出队列进入栈中,让该车直接出队列,再将栈中的车停入停车队列中,此时如果候车队列中有车将候车队列中取出一辆车停入停车队列中。

    原文作者:停车场模拟问题
    原文地址: https://blog.csdn.net/x_unknown/article/details/76809991
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞