C语言停车场管理系统源代码
- 格式:doc
- 大小:53.50 KB
- 文档页数:8
#include<stdio.h>#include<stdlib.h>#define stacksize 2 //车站//容量///////////////////////////////////////////////////////typedef struct Snode{int number;float int_time[2];float bian_time[2];}record;typedef struct {record *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);void jixu(Stack L,Linkqueue Q);//////////////////////////////////////////////////////////////////////////////////////////////////////////void InitStack(Stack &L) //堆栈操作{L.base=(record*)malloc(sizeof(Snode)*stacksize);if(!L.base)exit(0);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;}int Stackman(Stack L){if(L.top-L.base==L.size)return 0;elsereturn 1;}int StackEmpty(Stack L){if(L.base==L.top)return 0;elsereturn 1;}////////////////////////////////////////////////////////////////////////////////////////////////////void 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("停车场已满,请将车辆停入便道!\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) //此处有点问题{// 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 QEmpty(Linkqueue Q){if(Q.rear==Q.front)return 0;elsereturn 1;}//////////////////////////////////////////////////// //停车场管理操作////////////////////////////////////////////////////void jixu(Stack L,Linkqueue Q){int n;fflush(stdin);scanf("%d",&n);switch(n){case 1:printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~\n");xunhuan(L,Q);break;case 2:printf("****************************退出管理系统*****************************\n");break;default:printf("\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];elsedata2=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(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);while(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); //////////////////////////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],&time2[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,Linkqueue 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("\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;printf("请将车停在%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);printf("输入汽车离开时间:");scanf("%f %f",&time2[0],&time2[1]);leave(L,Q,number,time2);}elseprintf("停车场为空\n");printf("\n1、继续操作2、退出操作: ");jixu(L,Q);break;case 'E':{printf("***************************退出管理系统*****************************\n");break;}default:{printf("输入错误,请重新输入!\n");printf("############################################################\n");xunhuan(L,Q);break;}}}////////////////////////////////////////////////////////////////////////////////////////////////////////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);}。