typedef struct
{
int day;
int hour;
int min;
}TIME;
//时间结点
typedef struct
{
char num[10]; //车牌号
TIME time; //进入停车场的时间
int n; //进入停车场的位置
}hansu;
//栈结构体定义
typedef struct node
{
hansu data;
struct node *next;
}stacknode;
stacknode *top1,*top2;
//便道队列结构体定义
typedef struct
{
hansu data;
stacknode *front,*rear;
}LQueue;LQueue *Q;
//函数声明部分/////////////////////////////////////////////////////////
stacknode *Init();
//栈的初始化
stacknode *into(stacknode *top1,LQueue *Q); //初始化车辆进入
int expenses(stacknode *p,int x,int y); //停车费用计算函数
stacknode *leave(stacknode *top1,char str[],LQueue *Q); //车辆驶出出场函数
LQueue *InitLQue(); //初始化队列函数
LQueue *wait(LQueue *q,stacknode *s); //车辆进入候车便道函数
int EmptyLQue(LQueue *q); //判断候车便道有无等待车辆函数
stacknode *out(LQueue *q); //便道车辆出队
stacknode *LQinto(stacknode *p,stacknode *top1); //从便道进入停车场函数
void show(stacknode *top1); //显示停车场所有信息函数
/*函数部分*/
/*子函数*/
//初始化
#define price 3
int b=1;
#define max 3
stacknode *Init()
{
stacknode *top;
top=(stacknode *)malloc(sizeof(stacknode));
top=NULL;
return top;
}
//初始化车辆进入
stacknode *into(stacknode *top1,LQueue *Q)
{
stacknode *p,*q;
time_t rawtime; //调用系统时间函数
struct tm *timeinfo; //时间结点
time(&rawtime);
timeinfo=localtime(&rawtime);
p=(stacknode *)malloc(sizeof(stacknode));
if(p==NULL)
{
printf(“内存分配失败”);
return top1;
}
printf(“\t请输入进入停车场车辆的车牌号:”);
scanf(“%s”,p->data.num);
q=top1;
while(q!=NULL)
{
if(strcmp(p->data.num,q->data.num)==0)
{
printf(“\t车牌号输入有误,车库已有相同车牌,该车可能为套牌车,已报警!”);
return top1;
}
q=q->next;
}
p->data.time.day=timeinfo->tm_mday;
p->data.time.hour=timeinfo->tm_hour;
p->data.time.min=timeinfo->tm_min;
p->data.n=b;
if(b>max)
{
printf(“\t停车场已满,请在便道等候!\n”);
wait(Q,p);
return top1;
}
if(top1==NULL)
{
p->next=NULL;
top1=p;
}
else
{
p->next=top1;
top1=p;
}
b++;
printf(“\t车辆进入停车场成功,时间已经自动载入!\n”);
printf(“\t车牌为%s的汽车驶入时间为:%d号%d点%d分\n”,top1->data.num,top1->data.time.day,top1->data.time.hour,top1->data.time.min);
return top1;
}
//停车费用计算函数
int expenses(stacknode *p,int x1,int x2,int x3)
{
int w;
if(x3!=0)
w=(x1*24+x2+1+x3-(p->data.time.day*24+p->data.time.hour+p->data.time.min))*price;
else
w=(x1*24+x2+x3-(p->data.time.day*24+p->data.time.hour+p->data.time.min))*price;
return w;
}
//车辆驶出出场函数
stacknode *leave(stacknode *top1,char str[],LQueue *Q)
{
int i,day,hour,min;
time_t rawtime;
struct tm *timeinfo;
time(&rawtime);
timeinfo=localtime(&rawtime);
day=timeinfo->tm_mday;
hour=timeinfo->tm_hour;
min=timeinfo->tm_min;
stacknode *p,*q;
if(top1==NULL)
{
printf(“\t停车场没有车辆!\n”);
return top1;
}
q=(stacknode *)malloc(sizeof(stacknode));
if(p==NULL)
{
printf(“\t内存分配失败”);
return top1;
}
q=top1;
while(q!=NULL)
{
if(strcmp(q->data.num,str)==0)
break;
q=q->next;
}
if(q==NULL)
{
printf(“\t输入有误,该车辆不在停车场!\n”);
return top1;
}
for(i=top1->data.n;i>q->data.n;i–)
{
p=(stacknode *)malloc(sizeof(stacknode));
if(p==NULL)
{
printf(“\t内存分配失败”);
return top1;
}
strcpy(p->data.num,top1->data.num);
p->data.time=top1->data.time;
p->data.n=top1->data.n-1;
top1=top1->next;
if(top2==NULL)
{
p->next=NULL;
top2=p;
}
else
{
p->next=top2;
top2=p;
}
}
top1=top1->next;
while(top2!=NULL)
{
p=(stacknode *)malloc(sizeof(stacknode));if(p==NULL){printf(“\t内存分配失败”);return top1;}
p->data.n=top2->data.n;
strcpy(p->data.num,top2->data.num);
p->data.time=top2->data.time;
p->next=top1;
top1=p;
top2=top2->next;
}
if(EmptyLQue(Q))
{
p=out(Q);
p->data.n–;
top1=LQinto(p,top1);
}
else
b–;
printf(“\t车牌为%s的汽车驶出时间为:%d号%d点%d分\n”,q->data.num,day,hour,min);
printf(“\t车辆驶出停车场需要缴纳的费用为:%d元\n”,expenses(q,day,hour,min));
return top1;
}
//队列函数初始化
LQueue *InitLQue()
{
LQueue *Q;
stacknode *p;
Q=(LQueue *)malloc(sizeof(LQueue));
p=(stacknode *)malloc(sizeof(stacknode));
p->next=NULL;
Q->front=Q->rear=p;
return Q;
}
//候车区队列入队
LQueue *wait(LQueue *q,stacknode *s)
{
s->next=NULL;
q->rear->next=s;
q->rear=s;
return q;
}
//判断候车便道有无车辆等待
int EmptyLQue(LQueue *q)
{
if(q->front==q->rear)
return 0;
else
return 1;
}
//候车区车辆出队
stacknode *out(LQueue *q)
{
stacknode *p;
p=q->front->next;
if(q->front->next==q->rear)
{
q->rear=q->front;
return p;
}
else
q->front->next=p->next;
p->next=NULL;
return p;
}
//候车队列进入停车场
stacknode *LQinto(stacknode *p,stacknode *top1)
{
p->next=top1;
top1=p;
return top1;
}
//显示停车场内所有车辆信息
void show(stacknode *top1)
{
printf(“\t停车场内全部车辆信息表\n”);
if(top1==NULL)
printf(“\t停车场内无车!\n”);
else
{
printf(“\t车牌号 进入时间 位置\n”);
while(top1!=NULL)
{
printf(“\t%s %d号%d点%d分 第%d位\n”,top1->data.num,top1->data.time.day,top1->data.time.hour,top1->data.time.min,top1->data.n);
top1=top1->next;
}
}
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include “dingyi.h”
#include “zhs.h”
//主函数
void main()
{
char str[10];
Q=InitLQue();
top1=Init();
top2=Init();
Q=InitLQue();
int i;
printf(“\t\t\t*************************************\n”);
printf(“\t\t\t\t 停车场管理系统\n”);
printf(“\t\t\t|| 1. 车辆进入停车场 ||\n”);
printf(“\t\t\t|| 2. 车辆离开停车场 ||\n”);
printf(“\t\t\t|| 3. 显示停车场内所有车辆信息 ||\n”);
printf(“\t\t\t|| 4. 退出 ||\n”);
printf(“\t\t\t*************************************\n”);
while(i)
{
printf(“\t*************************************\n”);
printf(“\t请输入你要选择的程序1-4:”);
scanf(“%d”,&i);
switch(i)
{
case 1:
top1=into(top1,Q);
break;
case 2:
printf(“\t请输入离开车辆的车牌号:”);
scanf(“%s”,str);
top1=leave(top1,str,Q);
break;
case 3:show(top1);break;
case 4:exit(1);
default:printf(“\t输入错误,请重新输入1—4:”);
break;
}
}
}