#includestdio.h#includestdlib.h#definestacksize2//车站//容量///////////////////////////////////////////////////////typedefstructSnode{intnumber;floatint_time[2];floatbian_time[2];}record;typedefstruct{record*base;record*top;intsize;}Stack;/////////////////////////////////////////////////////typedefstructQnode{intnumber;floatint_time[2];structQnode*next;}Qnode,*Queue;typedefstruct{Queuefront;Queuerear;}Linkqueue;voidxunhuan(StackL,LinkqueueQ);voidjixu(StackL,LinkqueueQ);//////////////////////////////////////////////////////////////////////////////////////////////////////////voidInitStack(Stack&L)//堆栈操作{L.base=(record*)malloc(sizeof(Snode)*stacksize);if(!L.base)exit(0);L.top=L.base;L.size=stacksize;}/////////////////////////////////////////////////////voidinput(Stack&L,recordh){*L.top++=h;}///////////////////////////////////////////////////Snodeoutput(Stack&L,record&e){e=*--L.top;returne;}intStackman(StackL){if(L.top-L.base==L.size)return0;elsereturn1;}intStackEmpty(StackL){if(L.base==L.top)return0;elsereturn1;}////////////////////////////////////////////////////////////////////////////////////////////////////voidInitque(Linkqueue&Q)//队列操作{Q.front=Q.rear=(Queue)malloc(sizeof(Qnode));if(!Q.front)exit(0);Q.front-next=NULL;}//////////////////////////////////////////////////voidenqueue(Linkqueue&Q,intnumber,floattime[]){Queueq;printf(停车场已满,请将车辆停入便道!\n);q=(Queue)malloc(sizeof(Qnode));q-int_time[0]=time[0];q-int_time[1]=time[1];q-number=number;q-next=NULL;Q.rear-next=q;Q.rear=q;}///////////////////////////////////////////////////voidoutqueue(Linkqueue&Q,Queue&e)//此处有点问题??????????????{//Qnode*q;//q=(Queue)malloc(sizeof(Qnode));e=Q.front-next;//Q.front-next=q-next;//deleteq;Q.front-next=Q.front-next-next;if(Q.rear==e){Q.front=Q.rear;//Q.front=NULL;}}intQEmpty(LinkqueueQ){if(Q.rear==Q.front)return0;elsereturn1;}//////////////////////////////////////////////////////停车场管理操作////////////////////////////////////////////////////voidjixu(StackL,LinkqueueQ){intn;fflush(stdin);scanf(%d,&n);switch(n){case1:printf(\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n);xunhuan(L,Q);break;case2:printf(****************************退出管理系统*****************************\n);break;default:printf(\n输入错误,请重新输入:);jixu(L,Q);break;}}voidjiaofei(floattime[],floattime1[],floattime2[])//缴费操作{floatdata1,data2;doublemoney;if(time2[0]!=0&&time2[1]!=0)data2=(time1[0]-time2[0]-1)*60+60-time2[1]+time1[1];elsedata2=0;data1=(time[0]-time1[0]-1)*60+60-time1[1]+time[1];//printf(进入车场时间%f,退出车场时间%f\n,time1[1],time[1]);printf(你的停车时间为%lf小时,在便道停留时间%f小时\n,data1/60,data2/60);money=data1/60*5.0+data2/60*2.0;printf(请交纳%lf元\n,money);/*if(data1=60.0)printf(请交纳5元。);if(data160.0&&data1=120.0)printf(请交纳10元。);if(data1120.0)printf(请交纳20元。);*/}voidleave(Stack&L,Linkqueue&Q,intnumber,floattime[])//汽车离开操作{StackS;InitStack(S);floattime1[2],time2[2];recorde,e1;Queueq;e1=output(L,e);while(e.number!=number){input(S,e1);e1=output(L,e);}time1[0]=e.int_time[0];//入车站时间time1[1]=e.int_time[1];time2[0]=e.bian_time[0];//入便道时间time2[1]=e.bian_time[1];jiaofei(time,time1,time2);//////////////////////////while(StackEmpty(S))input(L,output(S,e1));while(QEmpty(Q)&&Stackman(L)){outqueue(Q,q);//printf(\n\n请输入汽车从便道进入停车场的时间,输入格式为(时空格分):);e.bian_time[0]=q-int_time[0];e.bian_time[1]=q-int_time[1];//scanf(%f%f,&time2[0],&time2[1]);e.int_time[0]=time[0];e.int_time[1]=time[1];e.number=q-number;printf(\n汽车从便道退出进入停车场……);printf(\n请将%d号车停在%d号位置!\n,e.number,L.top-L.base+1);input(L,e);}}/////////////////////////////////////////////////////voidxunhuan(StackL,LinkqueueQ)//选择操作及循环{//Queueq;charch;intnumber;floattime[2],time2[2];fflush(stdin);printf(\nA:进入停车场D:退出停车场E:退出管理系统\n);printf(\n请输入:);scanf(%c,&ch);fflush(stdin);switch(ch){case'A':printf(\n请输入车牌号:);scanf(%d,&number);printf(请输入入场时间,输入格式为(时空格分):);scanf(%f%f,&time[0],&time[1]);if(Stackman(L)){recorde;e.int_time[0]=time[0];e.int_time[1]=time[1];e.bian_time[0]=0.0;e.bian_time[1]=0.0;e.number=number;printf(请将车停在%d号位置!,L.top-L.base+1);input(L,e);}else{enqueue(Q,number,time);}printf(\n);printf(\n1、继续操作2、退出操作:);jixu(L,Q);break;case'D':if(StackEmpty(L)){printf(请输入离开汽车的车牌号:);scanf(%d,&number);printf(输入汽车离开时间:);scanf(%f%f,&time2[0],&time2[1]);leave(L,Q,number,time2);}elseprintf(停车场为空\n);printf(\n1、继续操作2、退出操作:);jixu(L,Q);break;case'E':{printf(***************************退出管理系统*****************************\n);break;}default:{printf(输入错误,请重新输入!\n);printf(############################################################\n);xunhuan(L,Q);break;}}}////////////////////////////////////////////////////////////////////////////////////////////////////////voidmain()//主函数操作{LinkqueueQ;StackL;InitStack(L);Initque(Q);printf(****************************欢迎进入停车场管理系统******************************\n);printf(收费标准\n);printf(------------------------------------\n);printf(|车场内5.0元/h,便道内2.0元/h|\n);printf(------------------------------------\n);printf(\n---------------------------------请选择操作-------------------------------------\n);xunhuan(L,Q);}