简单的停车场系统
Queue.h文件
#ifndef _QUEUE_H_
#define _QUEUE_H_
#define SIZE 3
#define FLAST 0
#define TRUE 1
//typedef int Data;
//数据
typedef struct node
{
int number;
int time;
}Node;
//栈结点
typedef struct stacknode
{
Node data;
struct stacknode *next;
}StackNode;
typedef struct stack
{
StackNode *top;
int sum;
}Stack;
//队列结点
typedef struct queuenode
{
Node infom;
struct queuenode *next;
}QueueNode;
//链式队列
typedef struct queue
{
QueueNode *front;
QueueNode *rear;
}Queue;
//初始化
int Init(Queue *park,Queue *wait,Stack *turn);
//主菜单
void Menu(Queue *park,Queue *wait,Stack *turn,int num,int t);
//测队列长度
int Length(Queue q);
//进队列
int Push(Queue *q,int num,int t);
//出队列
int Pop(Queue *q,int *num,int *t);
//停车
void park_car(Queue *wait,Queue *park);
//进栈
int Push1(Stack *s,int num,int t);
//出栈
int Pop1(Stack *s,int *num,int *t);
//离开
void leave_car(Queue *wait,Queue *park,Stack *turn,int num,int t);
//显示停车场状况
void examine_car(Queue wait,Queue park);
#endif// _QUEUE_H_
Queue.c文件
#include "Queue.h"
#include <stdlib.h>
#include <stdio.h>
//初始化
int Init(Queue *wait,Queue *park,Stack *turn)
{
QueueNode *newnode1=(QueueNode *)malloc(sizeof(QueueNode) );
if(NULL==newnode1)
return FLAST;
newnode1->next=NULL;
park->front=newnode1;
park->rear=newnode1;
QueueNode *newnode2=(QueueNode *)malloc(sizeof(QueueNode) );
if(NULL==newnode2)
return FLAST;
newnode2->next=NULL;
wait->front=newnode2;
wait->rear=newnode2;
turn->top=NULL;
turn->sum=0;
}
//主菜单
void Menu(Queue *wait,Queue *park,Stack *turn,int num,int t)
{
printf("*****************************************\n");
printf("* 欢迎来到停车场管理系统 *\n");
printf("*****************************************\n");
printf("* 请选择 *\n");
printf("*****************************************\n");
printf("* 1.停车: *\n");
printf("* 2.离开: *\n");
printf("* 3.查看停车场所有情况: *\n");
printf("* 4.退出: *\n");
printf("*****************************************\n");
int i;
printf("请选择功能\n");
scanf("%d",&i);
switch(i)
{
case 1:
{
park_car(wait,park);
printf("-------nihao\n");
Menu(wait,park,turn,num,t);
}
break;
case 2:
{
leave_car(wait,park,turn,num,t);
Menu(wait,park,turn,num,t);
}
break;
case 3:
{
examine_car(*wait,*park);
Menu(wait,park,turn,num,t);
}
break;
case 4:
{
printf("停车结束\n");
}
break;
default:
Menu(wait,park,turn,num,t);
break;
}
}
//测队列长度
int Length(Queue q)
{
int i=0;
while(q.front!=NULL)
{
i++;
q.front=q.front->next;
}
return i;
}
//进队列
int Push(Queue *q,int num,int t)
{
QueueNode *newnode=(QueueNode *)malloc(sizeof(QueueNode) );
if(NULL==newnode)
return FLAST;
newnode->infom.number=num;
newnode->infom.time=t;
newnode->next=NULL;
//if(q->rear!=NULL)
//{
q->rear->next=newnode;
q->rear=newnode;
//}
//else
//{
// q->rear=newnode;
/// q->front=newnode;
//}
return TRUE;
}
//出队列
int Pop(Queue *q,int *num,int *t)
{
if(NULL==q)
return FLAST;
int num1=*num;
int t1=*t;
if(q->front==NULL)
{
printf("队列以空\n");
return FLAST;
}
num1=q->front->infom.number;
t1=q->front->infom.time;
QueueNode *temp=q->front;
q->front=temp->next;
free(temp);
if(q->front==NULL)
q->rear=q->front;
printf("%d,%d\n",num1,t1);
*num=num1;
*t=t1;
return TRUE;
}
//停车
void park_car(Queue *wait,Queue *park)
{
int num;
int t;
printf("请输入车牌和时间\n");
scanf("%d%d",&num,&t);
printf("=======nihao\n");
if(Length(*park)>SIZE )
{
printf("停车场满了\n");
Push(wait,num,t);
}
else
{
Push(park,num,t);
//printf("%d,%d\n",park->num,park->t);
}
}
//进栈
int Push1(Stack *s,int num,int t)
{
if(NULL==s)
return FLAST;
StackNode *newnode1=(StackNode *)malloc(sizeof(StackNode) );
if(NULL==newnode1)
return FLAST;
newnode1->data.number=num;
newnode1->data.time=t;
newnode1->next=s->top;
s->top=newnode1;
s->sum++;
return TRUE;
}
//出栈
int Pop1(Stack *s,int *num,int *t)
{
if(NULL==s)
return FLAST;
int num2=*num;
int t2=*t;
if(s->sum=0)
{
printf("栈是空的\n");
return FLAST;
}
num2=s->top->data.number;
t2=s->top->data.time;
StackNode *temp=s->top;
s->top=temp->next;
free(temp);
s->sum--;
*num=num2;
*t=t2;
return TRUE;
}
//离开
void leave_car(Queue *wait,Queue *park,Stack *turn,int num,int t)
{
printf("请输入你要离开的车牌\n");
int j=0;
int i;
scanf("%d",&i);
QueueNode *head=park->front;
printf("----ddddd\n");
while(head!=park->rear)
{
if(head->infom.number!=i)
{
head=head->next;
j++;
}
else
{
break;
}
printf("---\n");
}
printf("---\n");
int a=0;
if(j<SIZE)
{
while(j!=a)
{
printf("------dsdsad\n");
Pop(park,&num,&t);
printf("====dsdsad\n");
Push1(turn,num,t);
a++;
//printf("%d,%d",num,t);
}
Pop(park,&num,&t);
}
else
{
printf("没有要离开的车\n");
}
while(turn->top!=NULL)
{
Pop1(turn,&num,&t);
Push(park,num,t);
}
if(Length(*wait)!=0)
{
Pop(wait,&num,&t);
Push(park,num,t);
}
}
//显示停车场状况
void examine_car(Queue wait,Queue park)
{
printf("查看当前停车场状况\n");
printf("------kk\n");
printf("停车场共有%d车位,当前停车共有%d辆,等待区共有%d辆\n",SIZE,Length(park),Length(wait) );
printf("************************************************\n");
printf("\t车号\t\n");
QueueNode *head1=park.front;
QueueNode *head2=park.front;
while(head1!=NULL)
{
printf("%d\t",head1->infom.number);
head1=head1->next;
}
//printf("\n");
printf("\t停车时间\t\n");
while(head2!=NULL)
{
printf("\t%d",head2->infom.time);
head2=head2->next;
}
printf("\n");
}
main.c文件
#include <stdio.h>
#include "Queue.h"
int main()
{
Queue park;
Queue wait;
Stack turn;
int num=0;
int t=0;
Init(&wait,&park,&turn);
Menu(&wait,&park,&turn,num,t);
return 0;
}