C语言如何实现简单停车场管理系统
这篇文章主要介绍了C语言如何实现简单停车场管理系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
本文实例为大家分享了C语言停车场管理系统的具体代码,供大家参考,具体内容如下
/*************************************************************************** 项目要求 停车场管理 问题描述:停车场是一个能放n辆车的狭长通道, 只有一个大门,汽车按到达的先后次序停放。若 车场满了,车要停在门外的便道上等候,一旦有 车走,则便道上第一辆车进入。当停车场中的车 离开时,由于通道窄,在它后面的车要先退出, 待它走后再依次进入。汽车离开时按停放时间收费。 基本功能要求: (1)建立三个数据结构分别是:停放栈、让路 栈、等候队列。 (2)输入数据模拟管理过程,数据(入或出,车号)。 ***************************************************************************/ #include<stdio.h> #include<stdlib.h> #include<time.h> #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; }
感谢你能够认真阅读完这篇文章,希望小编分享的“C语言如何实现简单停车场管理系统”这篇文章对大家有帮助,同时也希望大家多多支持恰卡编程网,关注恰卡编程网行业资讯频道,更多相关知识等着你来学习!
推荐阅读
windows安装touble c
近期有些网友想要了解windows?安装touble的相关情况,小编通过整理给您分享一下。为什么现在还需要TurboC?在当今V...
C/C++如何获取CAN信号
C/C++如何获取CAN信号本篇内容主要讲解“C/C++如何获取C...
C语言怎么通过二分查找实现猜数字游戏
C语言怎么通过二分查找实现猜数字游戏本文小编为大家详细介绍“C语言...
C语言数据结构中的线性表怎么使用
C语言数据结构中的线性表怎么使用这篇文章主要介绍“C语言数据结构中...
C语言的数据结构怎么理解
C语言的数据结构怎么理解这篇文章主要介绍了C语言的数据结构怎么理解...
C语言与C++中内存管理的方法
C语言与C++中内存管理的方法这篇文章主要介绍了C语言与C++中内...
C语言链式队列与循环队列怎么实现
C语言链式队列与循环队列怎么实现这篇文章主要介绍了C语言链式队列与...
C语言冒泡排序怎么实现
C语言冒泡排序怎么实现这篇文章主要介绍了C语言冒泡排序怎么实现的相...
C语言如何实现斐波那契数列
C语言如何实现斐波那契数列这篇文章主要介绍了C语言如何实现斐波那契...
C语言如何实现无符号数和有符号数间的运算
C语言如何实现无符号数和有符号数间的运算本篇内容主要讲解“C语言如...