1、
停车场管理系统源代码
18
2020年4月19日
文档仅供参考,不当之处,请联系改正。
//停车场管理系统
#include
2、um; float time; int pos_a; //车在停车场中的位置 int pos_b; //车在便道上的位置 int flag; }Car,Car2; //车库信息 (顺序栈) typedef struct{ Car *top; Car *base; int stacksize; }SqStack; //初始化 int InitStack(SqStack &S){ S.base=new Car[STACKSIZE]; if(!S.base) exit(OVERFLOW); S.top
3、S.base; S.stacksize=STACKSIZE; return OK; } //判空 int StackEmpty(SqStack S){ if(S.top==S.base) return OK; else return ERROR; } //判满 int StackFull(SqStack S){ if(S.top-S.base>=S.stacksize) return OK; else return ERROR; } //入栈 int Push(SqStack &S,Car e){ if(S.top-S.bas
4、e==S.stacksize) return ERROR; *S.top++=e; return OK; } //出栈 int Pop(SqStack &S,Car &e){ if(S.top==S.base) return ERROR; e=*--S.top; return OK; } //遍历栈 int StackTraverse(SqStack S) { Car *p=S.top; Car *q=S.base; int l=1; if(StackEmpty(S))
5、{ for(int j=1;j<=STACKSIZE;j++){ printf("\t车牌: "); printf("\t\t到达时间: "); printf("\t位置%d:空空",j); printf("\n"); } return OK; } while(p!=q){ Car car=*(q); printf("\t车牌: %d",car.CarNum); printf("\t\t到达时间:%5.2f",car.time); printf("\t\t位置:%d",l++);
6、 printf("\n"); q++; } return OK; } //备用车道 (顺序栈) typedef struct { Car2 *top2; Car2 *base2; // int stacksize2; }SqStack2; //初始化 int InitStack2(SqStack2 &S2){ S2.base2=new Car2[STACKSIZE]; if(!S2.top2) exit(OVERFLOW); // S
7、2.top2=S2.base2; S2.stacksize2=STACKSIZE; return OK; } //判空 int StackEmpty2(SqStack2 S2){ if(S2.top2==S2.base2) return OK; else return ERROR; } //进栈 int Push2(SqStack2 &S2,Car2 e2){ if(S2.top2-S2.base2==STACKSIZE) return ERROR; *S2.top2++=e2; return OK; } //出栈 in
8、t Pop2(SqStack2 &S2,Car2 &e2){ if(S2.top2==S2.base2) return ERROR; e2=*--S2.top2; return OK; } //车道信息(链队) typedef struct QNode{ Car data; struct QNode *next; }QNode,*QueuePtr; typedef struct{ QueuePtr front; QueuePtr rear; }LinkQueue; //初始化 int InitQueu
9、e(LinkQueue &Q){ Q.front=Q.rear=new QNode; Q.front->next=NULL; return OK; } //进队 int EnQueue(LinkQueue &Q,Car e){ QueuePtr p; p=new QNode; p->data=e; p->next=NULL; Q.rear->next=p; Q.rear=p; return OK; } //判空 int QueueEmpty(LinkQueue Q){ if(Q.front==Q.rear) return OK
10、 else return ERROR; } //出队 int DeQueue(LinkQueue &Q,Car &e){ QueuePtr p; if(Q.front==Q.rear) return ERROR; p=Q.front->next; e=p->data; Q.front->next=p->next; delete p; return OK; } //主函数 int main(){ int i=1; int j=1; int status; float ti
11、me,money; LinkQueue Q; Car car_I,car_D,car_M; SqStack S; SqStack2 S2; InitStack(S); InitStack2(S2); InitQueue(Q); while(1){ printf("\t\t\t欢迎来到XXX停车场!\n"); printf("*****************************************************************\n"); printf("\t\t\t1
12、车辆到达停车场\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请输入车牌号:")
13、 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(int m=1;m<50;m++) //边线 printf("--"); printf("\n"); pri
14、ntf("\t车牌号:"); printf("%d",car_I.CarNum); printf("\t到达时间:"); printf("%5.1f\t",car_I.time); printf("\t车库中的位置是:%d\n",car_I.pos_a); for(int m=1;m<50;m++) //边线 printf("--"); printf("\n"); printf("\n"); printf("\n"); } else{ EnQueue(Q
15、car_I); car_I.pos_b=j; car_I.flag=0; // ++j; printf("\n"); printf("\tSorry!我们的车库已满!!!,您能够把车!!免费!!停在车道上!\n"); printf("\n"); for(int m=1;m<50;m++) //边线 printf(".."); printf("\n"); printf("\t车牌号:"); printf("%d",car_I.CarNum);
16、printf("\t便道上的位置为:%d\n",car_I.pos_b); for(int m=1;m<50;m++) //边线 printf(".."); printf("\n"); printf("\n"); printf("\n"); } } else if(status==2){ //指令为 2, 开车离去(如果车在车库里收取停车费;在便道上则免费) printf("请输入客户的车牌号:"); scanf("%d",&car_D.CarNum);
17、 printf("请输入现在的时间:"); scanf("%f",&car_D.time); i=i-1; int flag=0; //判断车是否在便道上 if(StackFull(S)){ Car *p=S.top; Car *q=S.base; while(p!=q){ Car car=*(q); if(car.CarNum!=car_D.CarNum){ flag++; } if(car.CarNum==ca
18、r_D.CarNum){ goto loop; } q++; } //while if(flag>=STACKSIZE){ printf("您的车停在便道上,因此免费!!!"); } printf("\n"); printf("\n"); printf("\n"); } //if else{ loop:do{ //挡在前面的车给要出去的车让路 Pop(S,car_M);
19、 //加一个判断,判断是不是停车场里的车 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
20、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); }
21、 time=car_D.time-car_I.time; if(time<0.0) { printf("输入时间有错!请重新输入!"); } if(time>0.0&&time<=3.0){ money=time*4; } else money=time*6; printf("你的车牌为%d的车,应收费%5.2f元。",car_D.CarNum,money); printf("欢迎下次光临我们的车库\n"); } printf("\n"); printf("\n"); printf("\n"); } else if(status==3) { //指令为 3 ;查看车库停车情况; StackTraverse(S); } else if(status!=1&&status!=2&&status!=3&&status!=0){ printf("\t指令错误!!! 请在下面重新输入:"); } else if(status==0) break; } }






