C语言如何实现简单停车场管理系统

这篇文章主要介绍了C语言如何实现简单停车场管理系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

本文实例为大家分享了C语言停车场管理系统的具体代码,供大家参考,具体内容如下

/***************************************************************************
项目要求
停车场管理
问题描述:停车场是一个能放n辆车的狭长通道,
只有一个大门,汽车按到达的先后次序停放。若
车场满了,车要停在门外的便道上等候,一旦有
车走,则便道上第一辆车进入。当停车场中的车
离开时,由于通道窄,在它后面的车要先退出,
待它走后再依次进入。汽车离开时按停放时间收费。
基本功能要求:
(1)建立三个数据结构分别是:停放栈、让路
栈、等候队列。
(2)输入数据模拟管理过程,数据(入或出,车号)。
***************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#defineD(24*60*60)
#defineH(60*60)
#defineM(60)
#defineOK1
#defineERROR0
#defineMAX_STACK_SIZE10/*栈向量大小*/
typedefintStackData;
typedefintQueueData;
typedefintElemType;
typedefstructNode
{
intNo;/*车号*/
intTimeinit;/*进入停车场的时间*/
}Node;
typedefstructQueueNode/*队列结点*/
{
structNodedata;
structQueueNode*next;
}QueueNode;
typedefstructLinkQueue/*链式队列结构体*/
{
structQueueNode*rear,*front;
}LinkQueue;


typedefstructSqStackNode/*链式栈结构体*/
{
inttop;
intbottom;
structNodestack_array[MAX_STACK_SIZE+1];
}SqStackNode;

//***************************************************************
SqStackNode*InitStack()/*初始化栈*/
{
SqStackNode*S=(SqStackNode*)malloc(sizeof(SqStackNode));
S->bottom=S->top=0;
return(S);
}
intFullStack(SqStackNode*S)/*满栈*/
{
returnS->top==MAX_STACK_SIZE;
}
intpushStack(SqStackNode*S,Nodedata)/*入栈*/
{
if(FullStack(S))
{
returnERROR;/*栈满,返回错误标志*/
}
S->top++;
(S->stack_array[S->top]).No=data.No;
(S->stack_array[S->top]).Timeinit=data.Timeinit;
returnOK;/*压栈成功*/
}
intpopStack(SqStackNode*S,Node*data)/*弹出栈顶元素*/
{
if(S->top==0)
{
returnERROR;/*栈空,返回错误标志*/
}
(*data).No=(S->stack_array[S->top]).No;
(*data).Timeinit=(S->stack_array[S->top]).Timeinit;
S->top--;
returnOK;
}
intFinfStack(SqStackNode*S,Nodedata)/*搜索栈内元素data*/
{
inti;
if(S->top==0)
{
returnERROR;/*栈空,返回错误标志*/
}

for(i=1;i<=S->top;i++)
{
if(S->stack_array[i].No==data.No)
{
returnOK;
}
}
returnERROR;
}



//****************************************************
LinkQueue*InitQueue(void)/*初始化队列*/
{
LinkQueue*Q=(LinkQueue*)malloc(sizeof(LinkQueue));
Q->rear=Q->front=NULL;
returnQ;
}
intQueueEmpty(LinkQueue*Q)/*空队列*/
{
returnQ->front==NULL;
}

intGetFrontQueue(LinkQueue*Q,Node*data)/*取队首*/
{
if(QueueEmpty(Q))return0;
(*data).No=(Q->front->data).Timeinit;return1;
}
intEnQueue(LinkQueue**Q,Nodedata)/*入队*/
{
QueueNode*p=(QueueNode*)malloc(sizeof(QueueNode));
(p->data).No=data.No;
(p->data).Timeinit=data.Timeinit;
p->next=NULL;
if((*Q)->front==NULL)
{
(*Q)->front=(*Q)->rear=p;
}
else
{

(*Q)->rear=(*Q)->rear->next=p;
}
return1;
}
intDeQueue(LinkQueue**Q,Node*data)/*出对*/
{
if(QueueEmpty(*Q))
{
return0;
}
QueueNode*p=(*Q)->front;
(*data).No=p->data.No;
(*data).Timeinit=p->data.Timeinit;
(*Q)->front=(*Q)->front->next;
if((*Q)->front==NULL)(*Q)->rear=NULL;
free(p);
return1;
}
/*********************************************************/
intnow_time(void)/*获取当日时间,单位秒*/
{
time_tt1;
time(&t1);
inttime=t1%D;
returntime;
}

Parking(LinkQueue**Q,SqStackNode*S)/*停车*/
{
inti,time_now;
Nodedata;
printf("InputtheCarNo:\n");
scanf("%d",&data.No);

for(i=1;i<=S->top;i++)
{

if(S->stack_array[i].No==data.No)/*车号已存在*/
{
printf("TheCarisexisted\n");
return;
}
}

EnQueue(Q,data);/*进去等待队列*/
while(!QueueEmpty(*Q))
{
if(FullStack(S))/*停放栈满*/
{
printf("PleaseWait...\n");
break;
}
else/*停放栈未满*/
{
DeQueue(Q,&data);/*等待队列车出对*/
data.Timeinit=now_time();/*记录当前时间*/
pushStack(S,data);/*进入停放栈*/
printf("ParkSuccess\n");
}
}
return;
}
leaving(SqStackNode*S,SqStackNode*B,LinkQueue**Q)/*离开*/
{
if(S->bottom==S->top)/*停放栈空*/
{
printf("ParkingisEmpty:\n");
}
else
{
Nodedata;
inti,h,m,s;
floatcharge;
inttime_now,parking_time;
printf("LeavingNo:\n");
scanf("%d",&i);
data.No=i;
if(!FinfStack(S,data))/*停放栈内无此车*/
{
printf("Donotfindthecar\n");
return;
}
else/*停放栈内有此车*/
{
while(S->stack_array[S->top].No!=i)/*此车后的车依次出栈入让路栈*/
{
popStack(S,&data);
pushStack(B,data);
}
popStack(S,&data);/*此车出停放栈*/
time_now=now_time();
parking_time=time_now-data.Timeinit;/*计算停车时间*/

h=parking_time/H;
parking_time=parking_time%H;
m=parking_time/M;
s=parking_time%M;
charge=6*h+0.1*(m+1);/*计算停车收费*/
printf("Theleavingcar:%dParkingtime:%d:%d:%dCharge($6/h):$%g\n",data.No,h,m,s,charge);

while(B->bottom!=B->top)/*让路栈内的车依次出栈入停放栈*/
{
popStack(B,&data);
pushStack(S,data);
}
while(!FullStack(S)&&(!QueueEmpty(*Q)))/*停放栈未满且等待队列未空*/
{
DeQueue(Q,&data);/*等待队列车出队*/
data.Timeinit=now_time();
pushStack(S,data);/*出队的车入停放栈*/
}
}

}
}
situation(SqStackNode*S,LinkQueue**Q)/*查看停车场当前情况*/
{
Nodedata;
inti;
inttime_now,parking_time;
inth,m,s;
structQueueNode*p;
intwait_count=0;
p=(*Q)->front;
if(p==NULL)/*等待队列空*/
{
printf("Waitingcar:0\n");
}
else/*等待队列未空*/
{
do
{
wait_count++;
p=p->next;
}while(p!=NULL);/*计算等待队列内车数*/
printf("Waitingcar:%d\n",wait_count);
}

printf("CarNo:");
for(i=1;i<=S->top;i++)
{
printf("%-10d",S->stack_array[i].No);

if(S->stack_array[i].No==data.No)
{
returnOK;
}
}
printf("\nParktime:");
for(i=1;i<=S->top;i++)
{
time_now=now_time();
parking_time=time_now-S->stack_array[i].Timeinit;/*计算截止当前停车时间*/
h=parking_time/H;
parking_time=parking_time%H;
m=parking_time/M;
s=parking_time%M;
printf("%02d:%02d:%02d",h,m,s);
}
printf("\n");

}

intmain()
{
inti;
Nodedata;
SqStackNode*park;/*停放栈*/
SqStackNode*back;/*让路栈*/
LinkQueue*wait;/*等待队列*/
park=InitStack();
back=InitStack();
wait=InitQueue();
while(1)
{
system("clear\n");
printf("----------WelcometoourCarParking----------\n");
printf("1.Parking\n");
printf("2.leaving\n");
printf("3.situation\n");
printf("4.exit\n");
scanf("%d",&i);
switch(i)
{
case1:/*停车*/
{
system("clear\n");
Parking(&wait,park);
setbuf(stdin,NULL);
getchar();
break;
}
case2:/*离开*/
{
leaving(park,back,&wait);
setbuf(stdin,NULL);
getchar();
break;
}
case3:/*查看停车情况*/
{

system("clear\n");
situation(park,&wait);
setbuf(stdin,NULL);
getchar();
break;
}
case4:/*退出*/
{
return0;
}
default:
{
break;
}
}
}
return0;
}

感谢你能够认真阅读完这篇文章,希望小编分享的“C语言如何实现简单停车场管理系统”这篇文章对大家有帮助,同时也希望大家多多支持恰卡编程网,关注恰卡编程网行业资讯频道,更多相关知识等着你来学习!

发布于 2021-05-30 14:07:45
分享
海报
169
上一篇:C语言如何实现扫雷程序下一篇:C语言如何实现旅游景点咨询系统
目录

    忘记密码?

    图形验证码