停车场管理系统源代码.docx
停车场管理系统源代码/停车场管理系统#include#include#defineOVERFLOW0#defineERROR0#defineOK1#defineSTACKSIZE2/车库容量/时间节点typedefstructtimeinthour;intmin;Time;/车辆信息typedefstructcharCarNum;floattime;intpos_a;/车在停车场中的位置intpos_b;/车在便道上的位置intflag;Car,Car2;/车库信息顺序栈typedefstructCar*top;Car*base;intstacksize;SqStack;/初始化intInitStack(SqStack&S)S.base=newCarSTACKSIZE;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;jq+;returnOK;/备用车道顺序栈typedefstructCar2*top2;Car2*base2;/intstacksize2;SqStack2;/初始化intInitStack2(SqStack2&S2)S2.base2=newCar2STACKSIZE;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;/车道信息链队typedefstructQNodeCardata;structQNode*next;QNode,*QueuePtr;typedefstructQueuePtrfront;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("ttt欢迎来到XXX停车场!n");printf("*n");printf("ttt1-车辆到达停车场n");printf("ttt2-车辆离开停车场n");printf("ttt3-停车场存放车辆情况n");printf("ttt0-退出程序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;mprintf("t车牌号:");printf("%d",car_I.CarNum);printf("t到达时间:");printf("%5.1ft",car_I.time);printf("t车库中的位置是:%dn",car_I.pos_a);for(intm=1;m/判定车能否在便道上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+;/whileif(flag>=STACKSIZE)printf("您的车停在便道上,所以免费!");printf("n");printf("n");printf("n");/ifelseloop:do/挡在前面的车给要出去的车让路Pop(S,car_M);/加一个判定,判定是不是停车场里的车if(car_D.CarNum!=car_M.CarNum)Push2(S2,car_M);elsecar_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(time0.0&&time