C语言实现简单停车场管理系统
本文实例为大家分享了C语言停车场管理系统的具体代码,供大家参考,具体内容如下
/*************************************************************************** 项目要求 停车场管理 问题描述:停车场是一个能放n辆车的狭长通道, 只有一个大门,汽车按到达的先后次序停放。若 车场满了,车要停在门外的便道上等候,一旦有 车走,则便道上第一辆车进入。当停车场中的车 离开时,由于通道窄,在它后面的车要先退出, 待它走后再依次进入。汽车离开时按停放时间收费。 基本功能要求: (1)建立三个数据结构分别是:停放栈、让路 栈、等候队列。 (2)输入数据模拟管理过程,数据(入或出,车号)。 ***************************************************************************/ #include#include #include #defineD(24*60*60) #defineH(60*60) #defineM(60) #defineOK1 #defineERROR0 #defineMAX_STACK_SIZE10/*栈向量大小*/ typedefintStackData; typedefintQueueData; typedefintElemType; typedefstructNode { intNo;/*车号*/ intTimeinit;/*进入停车场的时间*/ }Node; typedefstructQueueNode/*队列结点*/ { structNodedata; structQueueNode*next; }QueueNode; typedefstructLinkQueue/*链式队列结构体*/ { structQueueNode*rear,*front; }LinkQueue; typedefstructSqStackNode/*链式栈结构体*/ { inttop; intbottom; structNodestack_array[MAX_STACK_SIZE+1]; }SqStackNode; //*************************************************************** SqStackNode*InitStack()/*初始化栈*/ { SqStackNode*S=(SqStackNode*)malloc(sizeof(SqStackNode)); S->bottom=S->top=0; return(S); } intFullStack(SqStackNode*S)/*满栈*/ { returnS->top==MAX_STACK_SIZE; } intpushStack(SqStackNode*S,Nodedata)/*入栈*/ { if(FullStack(S)) { returnERROR;/*栈满,返回错误标志*/ } S->top++; (S->stack_array[S->top]).No=data.No; (S->stack_array[S->top]).Timeinit=data.Timeinit; returnOK;/*压栈成功*/ } intpopStack(SqStackNode*S,Node*data)/*弹出栈顶元素*/ { if(S->top==0) { returnERROR;/*栈空,返回错误标志*/ } (*data).No=(S->stack_array[S->top]).No; (*data).Timeinit=(S->stack_array[S->top]).Timeinit; S->top--; returnOK; } intFinfStack(SqStackNode*S,Nodedata)/*搜索栈内元素data*/ { inti; if(S->top==0) { returnERROR;/*栈空,返回错误标志*/ } for(i=1;i<=S->top;i++) { if(S->stack_array[i].No==data.No) { returnOK; } } returnERROR; } //**************************************************** LinkQueue*InitQueue(void)/*初始化队列*/ { LinkQueue*Q=(LinkQueue*)malloc(sizeof(LinkQueue)); Q->rear=Q->front=NULL; returnQ; } intQueueEmpty(LinkQueue*Q)/*空队列*/ { returnQ->front==NULL; } intGetFrontQueue(LinkQueue*Q,Node*data)/*取队首*/ { if(QueueEmpty(Q))return0; (*data).No=(Q->front->data).Timeinit;return1; } intEnQueue(LinkQueue**Q,Nodedata)/*入队*/ { QueueNode*p=(QueueNode*)malloc(sizeof(QueueNode)); (p->data).No=data.No; (p->data).Timeinit=data.Timeinit; p->next=NULL; if((*Q)->front==NULL) { (*Q)->front=(*Q)->rear=p; } else { (*Q)->rear=(*Q)->rear->next=p; } return1; } intDeQueue(LinkQueue**Q,Node*data)/*出对*/ { if(QueueEmpty(*Q)) { return0; } QueueNode*p=(*Q)->front; (*data).No=p->data.No; (*data).Timeinit=p->data.Timeinit; (*Q)->front=(*Q)->front->next; if((*Q)->front==NULL)(*Q)->rear=NULL; free(p); return1; } /*********************************************************/ intnow_time(void)/*获取当日时间,单位秒*/ { time_tt1; time(&t1); inttime=t1%D; returntime; } Parking(LinkQueue**Q,SqStackNode*S)/*停车*/ { inti,time_now; Nodedata; printf("InputtheCarNo:\n"); scanf("%d",&data.No); for(i=1;i<=S->top;i++) { if(S->stack_array[i].No==data.No)/*车号已存在*/ { printf("TheCarisexisted\n"); return; } } EnQueue(Q,data);/*进去等待队列*/ while(!QueueEmpty(*Q)) { if(FullStack(S))/*停放栈满*/ { printf("PleaseWait...\n"); break; } else/*停放栈未满*/ { DeQueue(Q,&data);/*等待队列车出对*/ data.Timeinit=now_time();/*记录当前时间*/ pushStack(S,data);/*进入停放栈*/ printf("ParkSuccess\n"); } } return; } leaving(SqStackNode*S,SqStackNode*B,LinkQueue**Q)/*离开*/ { if(S->bottom==S->top)/*停放栈空*/ { printf("ParkingisEmpty:\n"); } else { Nodedata; inti,h,m,s; floatcharge; inttime_now,parking_time; printf("LeavingNo:\n"); scanf("%d",&i); data.No=i; if(!FinfStack(S,data))/*停放栈内无此车*/ { printf("Donotfindthecar\n"); return; } else/*停放栈内有此车*/ { while(S->stack_array[S->top].No!=i)/*此车后的车依次出栈入让路栈*/ { popStack(S,&data); pushStack(B,data); } popStack(S,&data);/*此车出停放栈*/ time_now=now_time(); parking_time=time_now-data.Timeinit;/*计算停车时间*/ h=parking_time/H; parking_time=parking_time%H; m=parking_time/M; s=parking_time%M; charge=6*h+0.1*(m+1);/*计算停车收费*/ printf("Theleavingcar:%dParkingtime:%d:%d:%dCharge($6/h):$%g\n",data.No,h,m,s,charge); while(B->bottom!=B->top)/*让路栈内的车依次出栈入停放栈*/ { popStack(B,&data); pushStack(S,data); } while(!FullStack(S)&&(!QueueEmpty(*Q)))/*停放栈未满且等待队列未空*/ { DeQueue(Q,&data);/*等待队列车出队*/ data.Timeinit=now_time(); pushStack(S,data);/*出队的车入停放栈*/ } } } } situation(SqStackNode*S,LinkQueue**Q)/*查看停车场当前情况*/ { Nodedata; inti; inttime_now,parking_time; inth,m,s; structQueueNode*p; intwait_count=0; p=(*Q)->front; if(p==NULL)/*等待队列空*/ { printf("Waitingcar:0\n"); } else/*等待队列未空*/ { do { wait_count++; p=p->next; }while(p!=NULL);/*计算等待队列内车数*/ printf("Waitingcar:%d\n",wait_count); } printf("CarNo:"); for(i=1;i<=S->top;i++) { printf("%-10d",S->stack_array[i].No); if(S->stack_array[i].No==data.No) { returnOK; } } printf("\nParktime:"); for(i=1;i<=S->top;i++) { time_now=now_time(); parking_time=time_now-S->stack_array[i].Timeinit;/*计算截止当前停车时间*/ h=parking_time/H; parking_time=parking_time%H; m=parking_time/M; s=parking_time%M; printf("%02d:%02d:%02d",h,m,s); } printf("\n"); } intmain() { inti; Nodedata; SqStackNode*park;/*停放栈*/ SqStackNode*back;/*让路栈*/ LinkQueue*wait;/*等待队列*/ park=InitStack(); back=InitStack(); wait=InitQueue(); while(1) { system("clear\n"); printf("----------WelcometoourCarParking----------\n"); printf("1.Parking\n"); printf("2.leaving\n"); printf("3.situation\n"); printf("4.exit\n"); scanf("%d",&i); switch(i) { case1:/*停车*/ { system("clear\n"); Parking(&wait,park); setbuf(stdin,NULL); getchar(); break; } case2:/*离开*/ { leaving(park,back,&wait); setbuf(stdin,NULL); getchar(); break; } case3:/*查看停车情况*/ { system("clear\n"); situation(park,&wait); setbuf(stdin,NULL); getchar(); break; } case4:/*退出*/ { return0; } default: { break; } } } return0; }
更多学习资料请关注专题《管理系统开发》。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。