停车场管理系统源代码.docx
- 文档编号:24395269
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:14
- 大小:16.87KB
停车场管理系统源代码.docx
《停车场管理系统源代码.docx》由会员分享,可在线阅读,更多相关《停车场管理系统源代码.docx(14页珍藏版)》请在冰豆网上搜索。
停车场管理系统源代码
//停车场管理系统
#include
#include
#defineOVERFLOW0
#defineERROR0
#defineOK1
#defineSTACKSIZE2//车库容量
//时间节点
typedefstructtime{
inthour;
intmin;
}Time;
//车辆信息
typedefstruct{
charCarNum;
floattime;
intpos_a;//车在停车场中的位置
intpos_b;//车在便道上的位置
intflag;
}Car,Car2;
//车库信息(顺序栈)
typedefstruct{
Car*top;
Car*base;
intstacksize;
}SqStack;
//初始化
intInitStack(SqStack&S){
S.base=newCar[STACKSIZE];
if(!
S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACKSIZE;
returnOK;
}
//判空
intStackEmpty(SqStackS){
if(S.top==S.base)returnOK;
elsereturnERROR;
}
//判满
intStackFull(SqStackS){
if(S.top-S.base>=S.stacksize)returnOK;
elsereturnERROR;
}
//入栈
intPush(SqStack&S,Care){
if(S.top-S.base==S.stacksize)returnERROR;
*S.top++=e;
returnOK;
}
//出栈
intPop(SqStack&S,Car&e){
if(S.top==S.base)returnERROR;
e=*--S.top;
returnOK;
}
//遍历栈
intStackTraverse(SqStackS){
Car*p=S.top;
Car*q=S.base;
intl=1;
if(StackEmpty(S)){
for(intj=1;j<=STACKSIZE;j++){
printf("\t车牌:
");
printf("\t\t到达时间:
");
printf("\t位置%d:
空空",j);
printf("\n");
}
returnOK;
}
while(p!
=q){
Carcar=*(q);
printf("\t车牌:
%d",car.CarNum);
printf("\t\t到达时间:
%5.2f",car.time);
printf("\t\t位置:
%d",l++);
printf("\n");
q++;
}
returnOK;
}
//备用车道(顺序栈)
typedefstruct{
Car2*top2;
Car2*base2;//
intstacksize2;
}SqStack2;
//初始化
intInitStack2(SqStack2&S2){
S2.base2=newCar2[STACKSIZE];
if(!
S2.top2)exit(OVERFLOW);//
S2.top2=S2.base2;
S2.stacksize2=STACKSIZE;
returnOK;
}
//判空
intStackEmpty2(SqStack2S2){
if(S2.top2==S2.base2)returnOK;
elsereturnERROR;
}
//进栈
intPush2(SqStack2&S2,Car2e2){
if(S2.top2-S2.base2==STACKSIZE)returnERROR;
*S2.top2++=e2;
returnOK;
}
//出栈
intPop2(SqStack2&S2,Car2&e2){
if(S2.top2==S2.base2)returnERROR;
e2=*--S2.top2;
returnOK;
}
//车道信息(链队)
typedefstructQNode{
Cardata;
structQNode*next;
}QNode,*QueuePtr;
typedefstruct{
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
//初始化
intInitQueue(LinkQueue&Q){
Q.front=Q.rear=newQNode;
Q.front->next=NULL;
returnOK;
}
//进队
intEnQueue(LinkQueue&Q,Care){
QueuePtrp;
p=newQNode;
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
returnOK;
}
//判空
intQueueEmpty(LinkQueueQ){
if(Q.front==Q.rear)returnOK;
elsereturnERROR;
}
//出队
intDeQueue(LinkQueue&Q,Car&e){
QueuePtrp;
if(Q.front==Q.rear)returnERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
deletep;
returnOK;
}
//主函数
intmain(){
inti=1;
intj=1;
intstatus;
floattime,money;
LinkQueueQ;
Carcar_I,car_D,car_M;
SqStackS;
SqStack2S2;
InitStack(S);
InitStack2(S2);
InitQueue(Q);
while
(1){
printf("\t\t\t欢迎来到XXX停车场!
\n");
printf("*****************************************************************\n");
printf("\t\t\t1--车辆到达停车场\n");
printf("\t\t\t2--车辆离开停车场\n");
printf("\t\t\t3--停车场存放车辆情况\n");
printf("\t\t\t0--退出程序\n");
printf("*****************************************************************\n");
printf("选择(0-3):
\n");
scanf("%d",&status);
if(status==1){
printf("\t请输入车牌号:
");
scanf("%d",&car_I.CarNum);
printf("\t请输入车到达的时间:
");
scanf("%f",&car_I.time);
if(!
StackFull(S)){
Push(S,car_I);//车进入车库
car_I.pos_a=i;
car_I.flag=1;
i=i+1;
for(intm=1;m<50;m++)//边线
printf("--");
printf("\n");
printf("\t车牌号:
");
printf("%d",car_I.CarNum);
printf("\t到达时间:
");
printf("%5.1f\t",car_I.time);
printf("\t车库中的位置是:
%d\n",car_I.pos_a);
for(intm=1;m<50;m++)//边线
printf("--");
printf("\n");
printf("\n");
printf("\n");
}
else{
EnQueue(Q,car_I);
car_I.pos_b=j;
car_I.flag=0;//
++j;
printf("\n");
printf("\tSorry!
我们的车库已满!
!
!
,您可以把车!
!
免费!
!
停在车道上!
\n");
printf("\n");
for(intm=1;m<50;m++)//边线
printf("..");
printf("\n");
printf("\t车牌号:
");
printf("%d",car_I.CarNum);
printf("\t便道上的位置为:
%d\n",car_I.pos_b);
for(intm=1;m<50;m++)//边线
printf("..");
printf("\n");
printf("\n");
printf("\n");
}
}
elseif(status==2){//指令为2,开车离去(如果车在车库里收取停车费;在便道上则免费)
printf("请输入客户的车牌号:
");
scanf("%d",&car_D.CarNum);
printf("请输入现在的时间:
");
scanf("%f",&car_D.time);
i=i-1;
intflag=0;
//判断车是否在便道上
if(StackFull(S)){
Car*p=S.top;
Car*q=S.base;
while(p!
=q){
Carcar=*(q);
if(car.CarNum!
=car_D.CarNum){
flag++;
}
if(car.CarNum==car_D.CarNum){
gotoloop;
}
q++;
}//while
if(flag>=STACKSIZE){
printf("您的车停在便道上,所以免费!
!
!
");
}
printf("\n");
printf("\n");
printf("\n");
}//if
else{
loop:
do{//挡在前面的车给要出去的车让路
Pop(S,car_M);
//加一个判断,判断是不是停车场里的车
if(car_D.CarNum!
=car_M.CarNum){
Push2(S2,car_M);
}
else{
car_I.time=car_M.time;
}
}while(car_D.CarNum!
=car_M.CarNum);
while(!
StackEmpty2(S2)){//让路的车返回去
Pop2(S2,car_M);
Push(S,car_M);
}
while(!
QueueEmpty(Q)&&!
StackFull(S)){
if(!
StackFull(S)){
DeQueue(Q,car_M);//便道上的车离开后进入停车场,那么后面的车的位置都得变。
car_M.flag=1;
}
Push(S,car_M);
printf("车牌为%d的车离开车库,车道上车牌为%d的车进入车库\n",car_D.CarNum,car_M.CarNum);
}
time=car_D.time-car_I.time;
if(time<0.0){
printf("输入时间有错!
请重新输入!
");
}
if(time>0.0&&time<=3.0){
money=time*4;
}
elsemoney=time*6;
printf("你的车牌为%d的车,应收费%5.2f元。
",car_D.CarNum,money);
printf("欢迎下次光临我们的车库\n");
}
printf("\n");
printf("\n");
printf("\n");
}
elseif(status==3){//指令为3;查看车库停车情况;
StackTraverse(S);
}
elseif(status!
=1&&status!
=2&&status!
=3&&status!
=0){
printf("\t指令错误!
!
!
请在下面重新输入:
");
}
elseif(status==0)
break;
}
}
WelcomeTo
Download!
!
!
欢迎您的下载,资料仅供参考!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 管理 系统 源代码