停车场车辆管理主要设计源码: void StopInput(SqStack *S) //停车场车辆登记 { int e; int i; int j = 0; int isReach = FALSE; //车到达与否 int isLeave = FALSE; //车离开与否 int leaveTime = 0; //即尚未离开 int cost = 0; //停车费用 int isEmpty = TRUE; //车位是否为空 int *p = NULL; printf("\n--车辆到达登记--\n"); printf("\n请输入车牌号:(车牌号重复时自动退出)\n"); scanf("%d",&e); isReach = TRUE; if(Search(S,0) && !Search(S,e)) //车牌号为0时,停车位空出,优先将进入停车场的车辆放置于此 { if((*S).top != (*S).base) //栈不为空时 { for(p= (*S).base;p <= (*S).top-1;p++) { j++; //printf("\n--%d--\n",j); if(j == 4) { time(&rawtime); *p = rawtime; timeinfo = localtime (&rawtime); printf("到达时间: %s",asctime(timeinfo)); } else if(j == 6) { if(*p != NULL) { rawtime = *p; timeinfo = localtime (&rawtime); printf("离开时间: %s",asctime(timeinfo)); } else printf("离开时间: 空\n"); } else if(j == 7) { *p = 0; printf("停车费用:%d元\n",*p); } else if(j == 8) { *p = FALSE; if(*p == FALSE) printf("停车位是否为空: 否\n"); else printf("停车位是否为空: 是\n"); j = 0; break; } else if(j == 1 || j == 2 || j == 3 || j == 5) { if(j == 1) { while(*p != 0 && p <= (*S).top-1) { for(i = 0;i < 8;i++) p++; j = 1; } if(*p == 0) { *p = e; printf("\n车牌号: %d\n",*p); } } if(j == 2)printf("停车位: %d\n",*p); if(j == 3) { *p = TRUE; if(*p == FALSE) printf("到达: 否\n"); else printf("到达: 是\n"); } if(j == 5) { *p = FALSE; if(*p == FALSE) printf("离开: 否\n"); else printf("离开: 是\n"); } } } } } else{ while(e != 0 && !Search(S,e)) { sLocation++; time(&rawtime); //获取当前时间<秒>(case 1 即为到达时间) isEmpty = FALSE; Push(S,e); Push(S,sLocation); Push(S,isReach); Push(S,rawtime); Push(S,isLeave); Push(S,leaveTime); Push(S,cost); Push(S,isEmpty); printf("\n--车牌号%d登记成功--\n",e); printf("\n请输入车牌号:\n"); scanf("%d",&e); } printf("\n--车牌号已存在,无法登记--\n"); StackTraverse(S); //遍历输出 } } void StopToLoad(dat *Q,int tempCarNumber) //车辆从停车场转入便道 { int e; int i; int j = 0; int isReach = FALSE; //车到达与否 int isLeave = FALSE; //车离开与否 int leaveTime = 0; //即尚未离开 int cost = 0; //停车费用 int isEmpty = TRUE; //车位是否为空 isReach = TRUE; e = tempCarNumber; if(QSearch(Q,0) && !QSearch(Q,e)) //车牌号为0时,停车位空出,优先将进入停车场的车辆放置于此 { if((*Q).front != (*Q).rear) //队列不为空时 { DAT *p = (*Q).front -> next; while(p != NULL) { j++; if(j == 4) { time(&rawtime); p -> data = rawtime; timeinfo = localtime (&rawtime); printf("到达时间: %s",asctime(timeinfo)); } else if(j == 6) { if(p -> data != NULL) { rawtime = p -> data; timeinfo = localtime (&rawtime); printf("离开时间: %s",asctime(timeinfo)); } else printf("离开时间: 空\n"); } else if(j == 7) { p -> data = 0; printf("在便道停留时间:%d秒\n",p -> data); } else if(j == 8) { p -> data = FALSE; if(p -> data == FALSE) printf("停车位是否为空: 否\n"); else printf("停车位是否为空: 是\n"); j = 0; break; } else if(j == 1 || j == 2 || j == 3 || j == 5) { if(j == 1) { while(p -> data != 0) { for(i = 0;i < 8;i++) { p = p -> next; } j = 1; } if(p -> data == 0) { p -> data = e; printf("\n车牌号: %d\n",p -> data); } } if(j == 2)printf("便道车位: %d\n",p -> data); if(j == 3) { p -> data = TRUE; if(p -> data == FALSE) printf("到达: 否\n"); else printf("到达: 是\n"); } if(j == 5) { p -> data = FALSE; if(p -> data == FALSE) printf("离开: 否\n"); else printf("离开: 是\n"); } } p = p -> next; } } printf("\n便道的车辆信息已更新:\n"); QueueTraverse(Q); //遍历输出 printf("\n-----------------------------\n"); } else{ while(e != 0 && !QSearch(Q,e)) { lLocation++; time(&rawtime); //获取当前时间<秒>(case 1 即为到达时间) isEmpty = FALSE; EnQueue(Q,e); EnQueue(Q,lLocation); EnQueue(Q,isReach); EnQueue(Q,rawtime); EnQueue(Q,isLeave); EnQueue(Q,leaveTime); EnQueue(Q,cost); EnQueue(Q,isEmpty); printf("\n--车牌号%d成功转入便道--\n",e); } printf("\n便道的车辆信息已更新:\n"); QueueTraverse(Q); //遍历输出 printf("\n-----------------------------\n"); } } void StopLeave(SqStack *S,dat *Q) //车辆离开停车场 { int tempCarNumber; int flag; int e; int i; int j = 0; int *p = NULL; int isEmpty = TRUE; //车位是否为空 int cost = 0; //车辆停车费用 int sCost = 2; //停车场停车费1秒2元 int time1,time2; //用于记录离开和到达的时间(中间变量) printf("\n--车辆离开登记(车牌号不存在时自动退出)--\n"); printf("\n请输入已经离开的车牌号:\n"); scanf("%d",&e); while(e != 0 && Search(S,e)) { tempCarNumber = e; printf("\n离开的车辆的信息如下:\n"); printf("-----------------------------------\n"); if((*S).top != (*S).base) //栈不为空时 { for(p = (*S).base;p <= (*S).top-1;p++) { j++; //printf("\n--j = %d--\n",j); if(j == 4) { if(*p != NULL) { rawtime = *p; timeinfo = localtime (&rawtime); printf("到达时间: %s",asctime(timeinfo)); time1 = rawtime; *p = 0; //车辆离开后时间重置 } } else if(j == 6) { time(&rawtime); //获取当前时间<秒>(case 1 即为到达时间) timeinfo = localtime (&rawtime); printf("离开时间: %s",asctime(timeinfo)); time2 = rawtime; *p = 0; } else if(j == 7) { cost = (time2 - time1) * sCost; printf("停车费用: %d元\n",cost); cost = 0; } else if(j == 8) { *p = TRUE; printf("停车位是否为空: 是\n"); printf("-----------------------------------\n"); j = 0; break; } else if(j == 1 || j == 2 || j == 3 || j == 5) { if(j == 1) { while(*p != e) { for(i = 0;i < 8;i++) { //printf("\n--p = %d--\n",*p); p++; } j = 1; } if(*p == e) { printf("车牌号: %d\n",*p); *p = 0; } } else if(j == 2)printf("停车位: %d\n",*p); else if(j == 3) { if(*p == FALSE) printf("到达: 否\n"); else printf("到达:是\n"); *p = FALSE; } if(j == 5) { *p = TRUE; if(*p == FALSE) printf("离开: 否\n"); else printf("离开:是\n"); *p = FALSE; } } } } printf("\n离开停车场的该车辆是否要进入便道(1/0)?\n"); scanf("%d",&flag); if(flag == 1) StopToLoad(Q,tempCarNumber); printf("\n如果还有车辆需要离开停车场的话:\n"); printf("请输入已经离开的车牌号:\n"); scanf("%d",&e); } printf("\n--查无此车牌号--\n"); }