1#includestdio.h#includestdlib.h#includestring.h#defineMAX3/*车库容量*/#defineprice0.5/*每车每分钟费用*/typedefstructtime{inthour;intmin;}Time;/*时间结点*/typedefstructnode{charnum[10];Timereach;Timeleave;}CarNode;/*车辆信息结点*/typedefstructNODE{CarNode*stack[MAX+1];inttop;2}Moni_Cheku;typedefstructcar{CarNode*data;structcar*next;}QueueNode;typedefstructNode{QueueNode*head;QueueNode*rear;}Moni_Biandao;voidInitStack(Moni_Cheku*);/*初始化车库*/intInitQueue(Moni_Biandao*);/*初始化便道*/intArrival(Moni_Cheku*,Moni_Biandao*);/*车辆到达*/voidLeave(Moni_Cheku*,Moni_Cheku*,Moni_Biandao*);/*车辆离开*/voidList(Moni_Cheku,Moni_Biandao);/*显示车库和便道的存车信息*/3intmain(){Moni_ChekuEnter,Temp;Moni_BiandaoWait;intch;InitStack(&Enter);/*初始化车站*/InitStack(&Temp);/*初始化让路的临时链表*/InitQueue(&Wait);/*初始化便道*/printf(\n);printf(^_^欢迎进入停车场管理系统1!^_^\n);printf(\n);printf(提示!(1).该车库的最大容量为:%d;\n,MAX);printf((2).该车库的收费标准为:%4.2f元/(辆*分钟).\n,price);while(1){system(CLS);printf(********************主菜单********************\n);printf(1.车辆到达);printf(2.车辆离开);printf(3.列表显示);4printf(4.退出系统\n);printf(**********************************************\n);printf(请选择(1-4):[]\b\b);while(1){scanf(%d,&ch);if(ch=1&&ch=4)break;elseprintf(错误!请重选(1-4):[]\b\b);}switch(ch){case1:Arrival(&Enter,&Wait);break;/*车辆到达*/case2:Leave(&Enter,&Temp,&Wait);break;/*车辆离开*/case3:List(Enter,Wait);break;/*打印列表信息*/case4:exit(0);/*退出主程序*/default:break;}}return0;5}voidInitStack(Moni_Cheku*s)/*初始化车库*/{inti;s-top=0;for(i=0;i=MAX;i++)s-stack[s-top]=NULL;}intInitQueue(Moni_Biandao*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;6{printf(请输入离开的时间:/**:**/);scanf(%d:%d,&(p-leave.hour),&(p-leave.min));printf(离开车辆的车牌号为:);puts(p-num);printf(其到达时间为:%d:%d\n,p-reach.hour,p-reach.min);printf(离开时间为:%d:%d\n,p-leave.hour,p-leave.min);A1=p-reach.hour;A2=p-reach.min;B1=p-leave.hour;B2=p-leave.min;printf(应交费用为:%4.2f元,((B1-A1)*60+(B2-A2))*price);free(p);}}intArrival(Moni_Cheku*Enter,Moni_Biandao*W)/*车辆到达*/{CarNode*p;QueueNode*t;7p=(CarNode*)malloc(sizeof(CarNode));fflush(stdin);printf(请输入车牌号(例如:中CUG888):);scanf(%s,&(p-num));if(Enter-topMAX)/*车库未满,车进车库*/{Enter-top++;printf(该车在车库位置%d.\n,Enter-top);printf(请输入到达时间(**:**):);scanf(%d:%d,&(p-reach.hour),&(p-reach.min));Enter-stack[Enter-top]=p;return(1);}else/*车库已满,车进便道*/{printf(该车须在便道等待!\n);t=(QueueNode*)malloc(sizeof(QueueNode));t-data=p;t-next=NULL;W-rear-next=t;W-rear=t;return(1);8}}voidLeave(Moni_Cheku*Enter,Moni_Cheku*Temp,Moni_Biandao*W)/*车辆离开*/{inti,room;CarNode*p,*t;QueueNode*q;/*判断车库内是否有车*/if(Enter-top0)/*有车*/{printf(请输入车在车库的位置(1--%d):,Enter-top);/*输入车辆离开的信息*/while(1){scanf(%d,&room);if(room=1&&room=Enter-top)break;elseprintf(错误!请重选:);}while(Enter-toproom)/*车辆离开*/{9Temp-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-topMAX)/*便道的车辆进入车库*/{q=W-head-next;t=q-data;Enter-top++;10printf(\n便道的%s号车进入车场第%d位置.,t-num,Enter-top);printf(\n请输入现在的时间(**:**):);scanf(%d:%d,&(t-reach.hour),&(t-reach.min));W-head-next=q-next;if(q==W-rear)W-rear=W-head;Enter-stack[Enter-top]=t;free(q);}elseprintf(\n便道里没有车.\n);}elseprintf(车库里没有车!\n);/*没车*/}voidList1(Moni_Cheku*S)/*列表显示车库信息*/{inti;if(S-top0)/*判断车库内是否有车*/{printf(车库号到达时间\t车牌号\n);for(i=1;i=S-top;i++){printf(%d,i);11printf(\t%d:%d,S-stack[i]-reach.hour,S-stack[i]-reach.min);printf(\t\t%s\n,S-stack[i]-num);}}elseprintf(车库里没有车\n);}voidList2(Moni_Biandao*W)/*列表显示便道信息*/{QueueNode*p;p=W-head-next;if(W-head!=W-rear)/*判断便道上是否有车*/{printf(在便道里等待的车辆的号码为:\n);while(p!=NULL){puts(p-data-num);p=p-next;}}elseprintf(便道里没有车.\n);12}voidList(Moni_ChekuS,Moni_BiandaoW){intflag,tag;flag=1;while(flag){printf(**********查看**********\n);printf(1.车库2.便道3.返回\n);printf(************************\n);printf(请选择(1-3):[]\b\b);while(1){scanf(%d,&tag);if(tag=1&&tag=3)break;elseprintf(错误!请重选(1-3):[]\b\b);}switch(tag)13{case1:List1(&S);break;/*列表显示车库信息*/case2:List2(&W);break;/*列表显示便到信息*/case3:flag=0;break;default:break;}}}