1、include
2、rd *base; record *top; int size; }Stack; ///////////////////////////////////////////////////// typedef struct Qnode{ int number; float int_time[2]; struct Qnode *next; }Qnode,*Queue; typedef struct { Queue front; Queue rear; }Linkqueue; void xunhuan(Stack L,Linkqueue Q
3、); void jixu(Stack L,Linkqueue Q); ///////////////////////////////////////////////////// ///////////////////////////////////////////////////// void InitStack(Stack &L) //堆栈操作 { L.base=(record*)malloc(sizeof(Snode)*stacksize); if(!L.base) exit(0);
4、 L.top=L.base; L.size=stacksize; } ///////////////////////////////////////////////////// void input(Stack &L,record h) { *L.top++=h; } /////////////////////////////////////////////////// Snode output(Stack &L,record &e) { e=*--L.top; return e;
5、 } int Stackman(Stack L) { if(L.top-L.base==L.size) return 0; else return 1; } int StackEmpty(Stack L) { if(L.base==L.top) return 0; else return 1; } ////////////////////////////////////////////////// ////////////////////////////////////////////////// vo
6、id Initque(Linkqueue &Q) //队列操作 { Q.front=Q.rear=(Queue)malloc(sizeof(Qnode)); if(!Q.front) exit(0); Q.front->next=NULL; } ////////////////////////////////////////////////// void enqueue(Linkqueue &Q,int number,float time[]) { Queue q; printf
7、"停车场已满,请将车辆停入便道!\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; } /////////////////////////////////////////////////// void outqueue(Linkqueue &Q,Queue &e)
8、 //此处有点问题?????????????? { // Qnode *q; // q=(Queue)malloc(sizeof(Qnode)); e=Q.front->next; // Q.front->next=q->next; //delete q; Q.front->next=Q.front->next->next; if(Q.rear==e){ Q.front=Q.rear; // Q.front=NULL; } } int QEm
9、pty(Linkqueue Q) { if(Q.rear==Q.front) return 0; else return 1; } //////////////////////////////////////////////////// //停车场管理操作 //////////////////////////////////////////////////// void jixu(Stack L,Linkqueue Q) { int n; fflush(stdin);
10、 scanf("%d",&n); switch(n) { case 1: printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); xunhuan(L,Q); break; case 2: printf("****************************退出管理系统*****************************\n"); break; default: pr
11、intf("\n输入错误,请重新输入: "); jixu(L,Q); break; } } void jiaofei(float time[],float time1[],float time2[]) //缴费操作 { float data1,data2; double money; if(time2[0]!=0&&time2[1]!=0) data2=(time1[0]-time2[0]-1)*60+60-time2[1]+time1[1]; e
12、lse data2=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(
13、data1>60.0&&data1<=120.0) printf("请交纳10元。"); if(data1>120.0) printf("请交纳20元。");*/ } void leave(Stack &L,Linkqueue &Q,int number,float time[]) //汽车离开操作 { Stack S; InitStack(S); float time1[2],time2[2]; record e,e1; Queue q; e1=output(L,e); whi
14、le(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); ///////////////
15、/////////// 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],&ti
16、me2[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); } } ///////////////////////////////////////////////////// void xunhuan(Stack L,Linkqu
17、eue Q) //选择操作及循环 { // Queue q; char ch; int number; float time[2],time2[2]; fflush(stdin); printf("\nA:进入停车场 D:退出停车场 E:退出管理系统\n"); printf("\n请输入:"); scanf("%c",&ch); fflush(stdin); switch(ch) { case 'A': printf("
18、\n请输入车牌号: "); scanf("%d",&number); printf("请输入入场时间,输入格式为(时 空格 分):"); scanf("%f %f",&time[0],&time[1]); if(Stackman(L)) { record e; 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; print
19、f("请将车停在%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)
20、 printf("输入汽车离开时间:"); scanf("%f %f",&time2[0],&time2[1]); leave(L,Q,number,time2); } else printf("停车场为空\n"); printf("\n1、继续操作 2、退出操作 : "); jixu(L,Q); break; case 'E': { printf("***************************退出管理系统*****************************
21、\n"); break; } default: { printf("输入错误,请重新输入!\n"); printf("############################################################\n"); xunhuan(L,Q); break; } } } //////////////////////////////////////////////////// ////////////////////////////////////////////////////
22、 void main() //主函数操作 { Linkqueue Q; Stack L; 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); }






