c语言车辆管理系统课程设计培训讲学.doc
如有侵权,请联系网站删除,仅供学习与交流c语言车辆管理系统课程设计【精品文档】第 11 页#include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 3 /*车库容量*/ #define price 0.5 /*每车每分钟费用*/ typedef struct timeint hour;int min;Time; /*时间结点*/typedef struct nodechar num10;Time reach;Time leave;CarNode;/*车辆信息结点*/typedef struct NODECarNode *stackMAX + 1;int top;Moni_Cheku;typedef struct carCarNode *data;struct car *next;QueueNode;typedef struct NodeQueueNode *head;QueueNode *rear;Moni_Biandao;void InitStack(Moni_Cheku *); /*初始化车库*/int InitQueue(Moni_Biandao *);/*初始化便道*/int Arrival(Moni_Cheku *, Moni_Biandao *); /*车辆到达*/void Leave(Moni_Cheku *, Moni_Cheku *, Moni_Biandao *); /*车辆离开*/void List(Moni_Cheku, Moni_Biandao); /*显示车库和便道的存车信息*/int main()Moni_Cheku Enter, Temp;Moni_Biandao Wait;int ch;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.列表显示");printf(" 4.退出系统n");printf("*n");printf("请选择(1-4): bb");while (1)scanf("%d",&ch);if (ch >= 1 && ch <= 4)break;else printf("错误!请重选(1-4): bb");switch (ch)case 1:Arrival(&Enter, &Wait); break; /*车辆到达*/case 2:Leave(&Enter, &Temp, &Wait); break; /*车辆离开*/case 3:List(Enter, Wait); break; /*打印列表信息*/case 4:exit(0); /*退出主程序*/default: break;return 0;void InitStack(Moni_Cheku *s) /*初始化车库*/int i;s->top = 0;for (i = 0; i <= MAX; i+)s->stacks->top = NULL;int InitQueue(Moni_Biandao *Q) /*初始化便道*/Q->head = (QueueNode *)malloc(sizeof(QueueNode);if (Q->head != NULL)Q->head->next = NULL;Q->rear = Q->head;return(1);else return(-1);void PRINT(CarNode *p, int room) /*输出出库车的信息*/int A1, A2, B1, B2;printf("请输入离开的时间:/*:*/");scanf("%d:%d", &(p->leave.hour), &(p->leave.min);printf("离开车辆的车牌号为:");puts(p->num);printf("其到达时间为: %d:%dn", p->reach.hour, p->reach.min);printf("离开时间为: %d:%dn", 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);int Arrival(Moni_Cheku *Enter, Moni_Biandao *W) /*车辆到达*/CarNode *p;QueueNode *t;p = (CarNode *)malloc(sizeof(CarNode);fflush(stdin);printf("请输入车牌号(例如:中CUG888):");scanf("%s",&(p->num);if (Enter->top < MAX) /*车库未满,车进车库*/Enter->top+;printf("该车在车库位置%d.n", Enter->top);printf("请输入到达时间(*:*):");scanf("%d:%d", &(p->reach.hour), &(p->reach.min);Enter->stackEnter->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);void Leave(Moni_Cheku *Enter, Moni_Cheku *Temp, Moni_Biandao *W) /*车辆离开*/int i, room;CarNode *p, *t;QueueNode *q;/*判断车库内是否有车*/if (Enter->top > 0) /*有车*/printf("请输入车在车库的位置(1-%d):", Enter->top);/*输入车辆离开的信息*/while (1)scanf("%d", &room);if (room >= 1 && room <= Enter->top) break;else printf("错误!请重选:");while (Enter->top > room) /*车辆离开*/Temp->top+;Temp->stackTemp->top = Enter->stackEnter->top;Enter->stackEnter->top = NULL;Enter->top-;p = Enter->stackEnter->top;Enter->stackEnter->top = NULL;Enter->top-;while (Temp->top >= 1)Enter->top+;Enter->stackEnter->top = Temp->stackTemp->top;Temp->stackTemp->top = NULL;Temp->top-;PRINT(p, room); /*判断通道上是否有车及车库是否已满*/if (W->head != W->rear) && Enter->top < MAX) /*便道的车辆进入车库*/q = W->head->next;t = q->data;Enter->top+;printf("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->stackEnter->top = t;free(q);else printf("n便道里没有车.n");else printf("车库里没有车!n"); /*没车*/void List1(Moni_Cheku *S) /*列表显示车库信息*/int i;if (S->top > 0) /*判断车库内是否有车*/printf("车库号 到达时间 t车牌号n");for (i = 1; i <= S->top; i+)printf(" %d ", i);printf(" t%d:%d", S->stacki->reach.hour, S->stacki->reach.min);printf("tt%sn",S->stacki->num);else printf("车库里没有车n");void List2(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;else printf("便道里没有车.n");void List(Moni_Cheku S, Moni_Biandao W)int flag, tag;flag = 1;while (flag)printf("*查看*n");printf("1.车库2.便道3.返回n");printf("*n");printf("请选择(1-3): bb");while (1)scanf("%d", &tag);if (tag >= 1 && tag <= 3) break;else printf("错误!请重选(1-3): bb");switch (tag)case 1:List1(&S);break;/*列表显示车库信息*/case 2:List2(&W);break; /*列表显示便到信息*/case 3:flag = 0;break;default:break;