C停车场管理系统简单代码实现.docx
《C停车场管理系统简单代码实现.docx》由会员分享,可在线阅读,更多相关《C停车场管理系统简单代码实现.docx(10页珍藏版)》请在冰豆网上搜索。
C停车场管理系统简单代码实现
C停车场管理系统简单代码实现
#include
#include
#include
#include
#defineMAX30/*车库容量*/
#defineprice30/*每车每小时费用*/
typedefstructtime
{
inthour;
intmin;
}Time;/*时间结点*/
typedefstructnode
{
charnum[10];
Timereach;
Timeleave;
}CarNode;/*车辆信息结点*/
typedefstructNODE
{
CarNode*stack[MAX+1];
inttop;
}SeqStackCar;/*模拟车站*/
typedefstructcar
{
CarNode*data;
structcar*next;
}QueueNode;
typedefstructNode
{
QueueNode*head;
QueueNode*rear;
}LinkQueueCar;/*模拟通道*/
voidInitStack(SeqStackCar*);/*初始化栈*/
intInitQueue(LinkQueueCar*);/*初始化便道*/
intArrival(SeqStackCar*,LinkQueueCar*);/*车辆到达*/
voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);/*车辆离开*/
voidList(SeqStackCar,LinkQueueCar);/*显示存车信息*/
voidmain()
{
system("color00f");
SeqStackCarEnter,Temp;
LinkQueueCarWait;
intch;
InitStack(&Enter);/*初始化车站*/
InitStack(&Temp);/*初始化让路的临时栈*/
InitQueue(&Wait);/*初始化通道*/
while
(1)
{
cout<<"欢迎光临"<cout<<"**************************"<cout<<"1.车辆到达"<cout<<"2.车辆离开"<cout<<"3.列表显示"<cout<<"4.退出系统"<cout<<"**************************"<cout<<"请选择所需要的服务!
"<cout<<"请注意正确输入时间,不要为非数字!
"<while
(1)
{
cin>>ch;
if(ch>=1&&ch<=4)break;
elsecout<<"请选择:
1|2|3|4."<}
switch(ch)
{
case1:
Arrival(&Enter,&Wait);break;/*车辆到达*/
case2:
Leave(&Enter,&Temp,&Wait);break;/*车辆离开*/
case3:
List(Enter,Wait);break;/*列表打印信息*/
case4:
exit(0);/*退出主程序*/
default:
break;
}
}
}
voidInitStack(SeqStackCar*s)/*初始化栈*/
{
inti;
s->top=0;
for(i=0;i<=MAX;i++)
s->stack[s->top]=NULL;
}
intInitQueue(LinkQueueCar*Q)/*初始化便道*/
{
Q->head=(QueueNode*)malloc(sizeof(QueueNode));
if(Q->head!
=NULL)
{
Q->head->next=NULL;
Q->rear=Q->head;
return
(1);
}
elsereturn(-1);
}
voidPRINT(CarNode*p,introom)/*打印出站车的信息*/
{
intA1,A2,B1,B2;
cout<<"请输入离开的时间:
/**:
**/"<cin>>p->leave.hour;
while(p->leave.hourreach.hour||p->leave.hour>23)
{
cout<<"error!
"<cout<<"请输入离开的时间的时("<reach.hour<<"-23)"<cin>>p->leave.hour;
B1=p->leave.hour;
}
cout<<":
"<cin>>p->leave.min;
cout<"<puts(p->num);
cout<<"其到达时间为:
"<reach.hour<<":
"<reach.min<cout<<"离开时间为:
"<leave.hour<<":
"<leave.min<A1=p->reach.hour;
A2=p->reach.min;
B1=p->leave.hour;
B2=p->leave.min;
cout<<"应交费用为:
"<<((B1-A1)*60+(B2-A2))*price<<"元!
"<free(p);
}
intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*车辆到达*/
{
CarNode*p;
QueueNode*t;
p=(CarNode*)malloc(sizeof(CarNode));
flushall();
cout<<"请输入车牌号(例:
A1234):
"<gets(p->num);
if(Enter->top{
Enter->top++;
cout<<"车辆在车场第"<top<<"位置!
"<cout<<"请输入到达时间:
/**:
**/"<cin>>p->reach.hour;
while(p->reach.hour<0||p->reach.hour>23)
{
cout<<"error!
"<cout<<"请输入到达时间的时(0-23)!
"<cin>>p->reach.hour;
}
cout<<":
"<cin>>p->reach.min;
while(p->reach.min<0||p->reach.min>59)
{
cout<<"error!
"<cout<<"请输入到达时间的分(0-59)!
"<cin>>p->reach.min;
}
Enter->stack[Enter->top]=p;
return
(1);
}
else/*车场已满,车进便道*/
{
cout<<"该车须在便道等待!
"<t=(QueueNode*)malloc(sizeof(QueueNode));
t->data=p;
t->next=NULL;
W->rear->next=t;
W->rear=t;
return
(1);
}
}
voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)
{/*车辆离开*/
introom;
CarNode*p,*t;
QueueNode*q;
/*判断车场内是否有车*/
if(Enter->top>0)/*有车*/
{
while
(1)/*输入离开车辆的信息*/
{
cout<<"请输入车在车场的位置1--"<top<<":
";
cin>>room;
if(room>=1&&room<=Enter->top)break;
}
while(Enter->top>room)/*车辆离开*/
{
Temp->top++;
Temp->stack[Temp->top]=Enter->stack[Enter->top];
Enter->stack[Enter->top]=NULL;
Enter->top--;
}
p=Enter->stack[Enter->top];
Enter->stack[Enter->top]=NULL;
Enter->top--;
while(Temp->top>=1)
{
Enter->top++;
Enter->stack[Enter->top]=Temp->stack[Temp->top];
Temp->stack[Temp->top]=NULL;
Temp->top--;}
PRINT(p,room);
/*判断通道上是否有车及车站是否已满*/
if((W->head!
=W->rear)&&Enter->top{
q=W->head->next;
t=q->data;
Enter->top++;
cout<<"便道的"<num<<"号车进入车场第"<top<<"位置!
"<cout<<"请输入现在的时间如/*:
*/:
"<if(p->reach.hour<0||p->reach.hour>23)
{
cout<<"error!
"<cout<<"请输入到达时间的时(0-23)!
"<cin>>p->reach.hour;
}
cout<<":
"<cin>>p->reach.min;
if(p->reach.min<0||p->reach.min>59)
{
cout<<"error!
"<cout<<"请输入到达时间的分(0-59)!
"<cin>>p->reach.min;
}
W->head->next=q->next;
if(q==W->rear)W->rear=W->head;
Enter->stack[Enter->top]=t;
free(q);
}
elsecout<<"便道里没有车!
"<}
elsecout<<"车场里没有车!
"<}
voidList1(SeqStackCar*S)/*列表显示车场信息*/
{
inti;
if(S->top>0)/