项目:停车场

停车场项目需求

问题描述:停车场是一个能放 n 辆车的狭长通道,只有一个大门,汽车按到达的先后次序停放。若车场满了,车要停在门           外的便道上等候,一旦有车走,则便道上第一辆车进入。当停车场中的车离开时,由于通道窄,在它后面的车
 要先退出,待它走后在依次进入。汽车离开时按停放时间收费。

基本功能要求:           (1)建立三个数据结构分别是:停放栈、让路栈、等候队列。           (2)输入数据模拟管理过程,数据(入或出,车号)

功能描述:进车登记、出车登记、按车牌号查询停车车辆信息、查询出入车记录、           查询场内车辆信息、查询等候车辆信息、退出系统。           (1)linux系统编写(链表、栈、队列);           (2)进车登记:登记车牌号以及入场时间;           (3)出车登记:计算出停车时间,记录车辆车牌;
 (4)按车牌号查询车辆信息:停车时间,是否来过停车场,是否还在停车场           (5)查询出入记录:所有车辆,包括已经离开的           (6)查询场内车辆信息:列出所有场内车辆信息
 (7)查询等候车辆信息:显示等候车辆数量以及所有车牌号
 (8)退出系统。

#ifndef _PARK_H_
#define _PARK_H_

#define MAXSIZE   2
#define FAILURE   10001

struct node
{
	char id[20];
	int month,day,hour,min,sec;
	time_t start,end;
	char info[10];
	struct node *next;
};
typedef struct node Node;
typedef Node *LinkNode;

struct stack
{
	LinkNode top;
	int count;
};
typedef struct stack Stack;

struct queue
{
	LinkNode front;
	LinkNode rear;
	int flag;
};
typedef struct queue Queue;

int settime(LinkNode n,time_t t);
int timecopy(LinkNode n, LinkNode p);
int InitStack(Stack *L);
int InitQueue(Queue *S);
int EnQueue(Queue *S, LinkNode i);
int EnStack(Stack *L, LinkNode i);
int EnCar(Stack *L, Queue *S, Queue *T);
int OutCar(Stack *L, Stack *P, Queue *S, Queue*T);
int Encar2(Stack *L, LinkNode S, Queue *T);
int SearchInfo(Stack L, Queue T);
int ShowInfo(Queue T);
int EnInfo(Stack L);
int WaitInfo(Queue S);

#endif
#include <stdio.h>
#include <stdlib.h>
#include "park.h"


void show()
{
	system("clear");
	printf("\t\t\t\t");
	printf("**********************************\n\n\n");
	printf("\t\t\t\t");
	printf("**********************************\n\n\n");
	printf("\t\t\t\t");
	printf("*********欢迎来到停车场!*********\n\n\n");
	printf("\t\t\t\t");
	printf("**********************************\n\n\n");
	printf("\t\t\t\t");
	printf("**********************************\n\n\n");
	sleep(1);
	system("clear");
}

void Print()
{
	printf("\t\t\t\t");
	printf("**********************************\n");
	printf("\t\t\t\t");
	printf("****1.进车登记********************\n");
	printf("\t\t\t\t");
	printf("****2.出车登记********************\n");
	printf("\t\t\t\t");
	printf("****3.查询车辆信息****************\n");
	printf("\t\t\t\t");
	printf("****4.查询出入记录****************\n");
	printf("\t\t\t\t");
	printf("****5.查询场内车辆信息************\n");
	printf("\t\t\t\t");
	printf("****6.查询等候车辆信息************\n");
	printf("\t\t\t\t");
	printf("****7.退出系统********************\n");
	printf("\t\t\t\t");
	printf("**********************************\n");
	printf("\t\t\t\t");
}

int main()
{
	Stack in,tmp;
	Queue wait,record;
	
	InitQueue(&record);
	InitStack(&in);
	InitStack(&tmp);
	InitQueue(&wait);

	show();
	int choice;

	while(1)
	{
		Print();
		printf("********输入你的选择:************\n");
		printf("\t\t\t\t");
		scanf("%d",&choice);

		switch(choice)
		{
			case 1:
				EnCar(&in,&wait,&record);
				break;
			case 2:
				OutCar(&in,&tmp,&wait,&record);
				break;
			case 3:
				SearchInfo(in,record);
				break;
			case 4:
				ShowInfo(record);
				break;
			case 5:
				EnInfo(in);
				break;
			case 6:
				WaitInfo(wait);
				break;
			case 7:
				exit(1);
				break;
			default:
				printf("无效操作!\n");

		}
	}
	return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include "park.h"
#include <time.h>
#include <string.h>

int settime(LinkNode n,time_t t)
{
 
	struct tm *pt;
	time(&t);
	pt = localtime(&t);
	n->month = pt->tm_mon;
	n->day = pt->tm_mday;
	n->hour = pt->tm_hour;
	n->min = pt->tm_min;
	n->sec = pt->tm_sec;
}

int timecopy(LinkNode n, LinkNode p)
{
	n->start = p->start;
	n->month = p->month;
	n->day = p->day;
	n->hour = p->hour;
	n->min = p->min;
	n->sec = p->sec;
}

int InitStack(Stack *L)
{
	L->top = NULL;
	L->count = 0;

}

int InitQueue(Queue *S)
{
	S->front = (LinkNode)malloc(sizeof(Node));
	S->rear = S->front;
	S->rear->next = NULL;
	S->flag = 0;
}

int EnQueue(Queue *S,LinkNode i)
{
	S->rear->next = i;
	S->rear = i;
	i->next = NULL;
	S->flag++;
}

int EnStack(Stack *L, LinkNode i)
{
	i->next = L->top;
	L->top = i;
	L->count++;
}


int EnCar(Stack *L, Queue *S, Queue *T)
{
	time_t t;
	struct tm *pt;
	LinkNode n = (LinkNode)malloc(sizeof(Node));
	LinkNode m = (LinkNode)malloc(sizeof(Node));
	printf("\t\t\t\t");
	printf("收费说明:每秒一元\n");
	printf("\t\t\t\t");
	printf("请您输入停车信息(车牌号):\n");
	printf("\t\t\t\t");
	scanf("%s",n->id);

	if(L->count >= MAXSIZE)
	{
		printf("\t\t\t\t");
		printf("抱歉!停车场已满,请稍等。\n");
		EnQueue(S,n);
		return FAILURE;
	}

	time(&t);
	n->start = t;
	pt = localtime(&t);

    settime(n,t);
	printf("\t\t\t\t现在是%d月%d日%d:%d:%d\n",n->month,n->day,n->hour,n->min,n->sec);
	
	timecopy(m,n);
	strcpy(m->info,"Parking!");
	strcpy(m->id, n->id);
	EnQueue(T,m);
	EnStack(L,n);
	printf("\t\t\t\t");
	printf("停车成功!\n");

}

int OutCar(Stack *L, Stack *P, Queue *S,Queue *T)
{
	long int ti;
	LinkNode m = (LinkNode)malloc(sizeof(Node));
	time_t t;
	struct tm *pt;
	char i[20];
	printf("\t\t\t\t输入您的车牌号:\n");
	printf("\t\t\t\t");
	scanf("%s",i);

	while(L->top)
	{
		LinkNode p= L->top;
		if(strcmp((p->id),i) == 0)
		{
			break;	
		}
		L->top = p->next;
		EnStack(P,p);
	}

/*    if(L->top == NULL)
	{
		while(P->top)
		{
			LinkNode k = P->top;
			P->top = k->next;
			EnStack(L,k);
		}
		return 0;
	}
*/
	LinkNode l = L->top;

	time(&t);
	l->end = t;
	pt = localtime(&t);

	settime(l,t);
	ti = l->end - l->start;
	printf("\t\t\t\t现在是%d月%d日%d:%d:%d\n",l->month,l->day,l->hour,l->min,l->sec);
	printf("\t\t\t\t停车总时长:%d s\n", ti);
	printf("\t\t\t\t总共应收费:%d元\n", ti*1);
	printf("\t\t\t\t欢迎您下次再来光临!\n");
	printf("\t\t\t\t********************************\n\n");

	timecopy(m,l);
	strcpy(m->info,"Left!   ");
	strcpy(m->id, l->id);
	EnQueue(T,m);
	L->top = l->next;
	free(l);
	L->count--;
	
	while(P->top)
	{
		LinkNode k = P->top;
		P->top = k->next;
		EnStack(L,k);
	}

	if((S->flag) > 1)
	{
		printf("\t\t\t\t通知:等候的车辆%s可以进场停车!\n",S->front->next->id);
		LinkNode j = S->front->next;
		S->front->next = j->next;
		Encar2(L,j,T);
		S->flag--;
		return;

	}
	else if(S->flag == 1)
	{

		printf("\t\t\t\t通知:等候的车辆%s可以进场停车!\n",S->front->next->id);
		LinkNode j = S->front->next;
		S->front->next = j->next;
		S->rear = S->front;
		Encar2(L,j,T);
		S->flag--;
		return 0;
	}
	else 
		return;


}

int Encar2(Stack *L, LinkNode S, Queue *T)
{

	LinkNode m = (LinkNode)malloc(sizeof(Node));
	time_t t;
	struct tm *pt;
	printf("\t\t\t\t");
	printf("收费说明:每秒一元\n");


	time(&t);
	S->start = t;
	pt = localtime(&t);

	settime(S,t);
	printf("\t\t\t\t现在是%d月%d日%d:%d:%d\n",S->month,S->day,S->hour,S->min,S->sec);
	
	timecopy(m,S);
	strcpy(m->info,"Parking!");
	strcpy(m->id, S->id);
	EnQueue(T,m);
	EnStack(L,S);
	printf("\t\t\t\t停车成功!\n");
}

int SearchInfo(Stack L, Queue T)
{
	char n[10];
	printf("\t\t\t\t请输入您想查询的车牌号:\n");
	printf("\t\t\t\t");
	scanf("%s",n);
	
	
	LinkNode p = T.front->next;
	while(p)
	{
		if(strcmp(p->id,n) == 0)
		{
			break;
		}
		p = p->next;
	}

	LinkNode l = p;
	printf("\t\t\t\t车牌号: %s  车辆信息: %s  时间:%d月%d日%d:%d:%d\n",l->id,l->info,l->month,l->day,l->hour,l->min,l->sec);
	
	p = p->next;	
	while(p)
	{
		if(strcmp(p->id,n) == 0)
		{
			break;
		}
		p = p->next;
	}
	printf("\t\t\t\t车牌号: %s  车辆信息: %s  时间:%d月%d日%d:%d:%d\n",p->id,p->info,p->month,p->day,p->hour,p->min,p->sec);
	
	if(p == NULL)
	{
		printf("\t\t\t\t此车没来过停车场!\n");
		return;
	}

	LinkNode q = L.top;
	while(q)
	{
		if(strcmp(q->id,n) == 0)
		{
			printf("\t\t\t\t车还在停车场中!\n");
			break;
		}
		q = q->next;
	}

	if(q == NULL)
	{
		printf("\t\t\t\t车不在停车场中!\n");
	}

}

int ShowInfo(Queue T)
{
	if(T.front->next == NULL)
	{
		printf("\t\t\t\t没有信息可以查询!\n");
		return;
	}
	
	LinkNode q = T.front->next;
	
	while(q)
	{
		printf("\t\t\t\t车牌号: %s  车辆信息: %s  时间:%d月%d日%d:%d:%d\n",q->id,q->info,q->month,q->day,q->hour,q->min,q->sec);
		q = q->next;
	}

}

int EnInfo(Stack L)
{
	LinkNode p = L.top;

	while(p != NULL)
	{
		printf("\t\t\t\t");
		printf("车牌号: %s 开始停车时间:%d月%d日%d:%d:%d\n",p->id,p->month,p->day,p->hour,p->min,p->sec);
		p = p->next;
	}
}

int WaitInfo(Queue S)
{
	printf("\t\t\t\t");
	printf("现在有 %d 辆车在等待:\n",S.flag);

	if(S.flag == 0)
	{
		return 0;
	}
	LinkNode p = S.front;
	
	while(p->next != NULL)
	{
		printf("\t\t\t\t");
		printf("车牌号: %s\n",p->next->id);
		p = p->next;
	}
}
    原文作者:停车场模拟问题
    原文地址: https://blog.csdn.net/CYQ0318/article/details/78660724
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞