C语言如何实现游戏VIP停车场管理系统
作者
这篇文章主要介绍了C语言如何实现游戏VIP停车场管理系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
在数据结构这部分学习结束后,写一个小项目,我想是对这部分知识一个很好的运用过程。
我在这介绍我写的一个项目,游戏停车场(这个版本只是初级版,可以在这之上继续添加很多其他功能,大家可以自己尝试)。
功能要求如下:
程序如下:
/*************************************************************************** 项目要求 游戏VIP停车场 问题描述:停车场是一个能放10辆车的车场(链表实现),汽车按到达的先后次序停放 在等候区。若等候区满了(10辆车),按汽车的VIP等级(两种排序方法),依次停入停车场,在停 车期间,我们可以通过汽车牌号查找汽车相关信息,并且可以随意删除其中一辆汽车,汽车 离开要按等候区的顺序依次离开(使用队列实现)汽车离开时按停放时间收费。 ***************************************************************************/ #include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> #defineLENsizeof(structparking) #defineMAXSIZE10//车库大小,可自定义大小,这里默认为10 #defineMONEY0.002//收费价格,这里默认为1分钟,收费0.12元 typedefstructparking { charnumber[10];//车辆信息 intvip;//车辆VIP等级 inttime1;//进入停车场时间 inttime2;//离开停车场时间 intcount;//标记车辆,后面入队时使用 structparking*next; }car; staticintn=0;//全局变量,用于标记车辆数目,计算车位 carc; voidmenu() { printf("\t==============欢迎来到中南国际停车场=============\n"); printf("\t******************目前停车场状况*****************\n"); printf("\t停车场共有%d个车位,当前停车场剩余%d车位\n",MAXSIZE,MAXSIZE-n); printf("\t*************************************************\n"); printf("\t================1,停入车辆=======================\n"); printf("\t================2,VIP等级排序车辆================\n"); printf("\t================3,驶出所有车辆(队列)==============\n"); printf("\t================4,查找车辆=======================\n"); printf("\t================5,遍历停车场全部车辆信息=========\n"); printf("\t================6,驶出指定车辆===================\n"); printf("\t================7,退出===========================\n"); } structparking*creat()//创建链表,用于存放车辆信息 { structparking*p1,*p2,*head; head=NULL;//为方便后面排序,这里创建不带头结点的链表 inti=1; p1=p2=(structparking*)malloc(LEN); printf("输入车辆VIP等级:\n"); scanf("%d",&p1->vip); printf("输入车牌号:\n"); scanf("%s",p1->number); p1->count=i; time_tt1; longintt=time(&t1);//标记进入停车场的时间 c.time1=t; char*t2; t2=ctime(&t1);//获取当前时间 printf("牌照为%s的汽车停入等候区成功,当前时间:%s\n",p1->number,t2);//显示停车场状况,以及停入时间 while(p1->vip!=0&&i<=10) {//由于不带头结点,这里创建时考虑了三种插入方法 n=n+1; if(n==1) head=p1; else p2->next=p1; p2=p1; p1=(structparking*)malloc(LEN); printf("输入车辆VIP等级:\n"); scanf("%d",&p1->vip); printf("输入车牌号:\n"); scanf("%s",p1->number); i++; p1->count=i; time_tt1; longintt=time(&t1);//标记进入停车场的时间 c.time1=t; char*t2; t2=ctime(&t1);//获取当前时间 printf("牌照为%s的汽车停入等候区成功,当前时间:%s\n",p1->number,t2);//显示停车场状况,以及停入时间 } p2->next=NULL; printf("等候区以满\n"); returnhead; } structparking*Sort(structparking*head)//链表排序,冒泡排序 { structparking*p,*q,*s; intt,a,m; chararr[10]; printf("请输入排序方式:(1:冒泡排序法0:选择排序法)\n"); scanf("%d",&a); if(a=1) { for(p=head;p!=NULL;p=p->next) { for(q=p->next;q!=NULL;q=q->next) { if(p->vip<q->vip)//降序 { t=q->vip;//按VIP等级交换结点数据 q->vip=p->vip; p->vip=t; strcpy(arr,q->number); strcpy(q->number,p->number); strcpy(p->number,arr); m=q->count; q->count=p->count; p->count=m; } } } returnhead; } else//选择排序法 { for(p=head;p!=NULL;p=p->next) { s=p;//s标记为最大值 for(q=p->next;q!=NULL;q=q->next) { if(p->vip<q->vip)//降序 { s=q; } if(s!=p) { t=q->vip;//按VIP等级交换结点数据 q->vip=p->vip; p->vip=t; strcpy(arr,q->number); strcpy(q->number,p->number); strcpy(p->number,arr); m=q->count; q->count=p->count; p->count=m; } } } returnhead; } } typedefstructQueueNode//先入先出(队列)Vip离场 { intdata; structQueueNode*next; }Queue,*QueuePtr; typedefstruct { QueuePtrfront,rear;//队列指针 }LinkQueue; LinkQueue*CreateQueue(LinkQueue*Q)//创建队列 { Q=(LinkQueue*)malloc(sizeof(LinkQueue)); Q->front=Q->rear=(QueuePtr)malloc(sizeof(Queue)); Q->front->next=NULL; returnQ; } voidPush(structparking*head,LinkQueue*Q)//入队操作,按链表中一开始车辆标号顺序 { structparking*p; p=head; while(p!=NULL) { QueuePtrs=(QueuePtr)malloc(sizeof(Queue)); s->data=p->count;//队列只记录车辆一开始的标号信息 s->next=NULL; Q->rear->next=s; Q->rear=s; p=p->next; } } structparkingExert1(structparking*head,inte)//按等候区顺序出队(一辆) { structparking*p; p=head; while(p!=NULL&&p->count!=e) { p=p->next; } if(p->count==e) { time_tt1; longintt=time(&t1);//标记显示时的时间 printf("车牌号\tVIP等级\t\t停放时长\t当前所需支付金额\n");//打印查到的车辆信息 printf("%s\t%d\t\t%d秒\t\t%2.3f元\n",p->number,p->vip,t-c.time1,MONEY*(t-c.time1)); } } intPop(structparking*head,LinkQueue*Q)//按等候区顺序出队(全部) { QueuePtrp; inti=1; if(Q->front==Q->rear) { printf("停车场无车辆!\n"); return0; } else { for(i;i<=10;i++)//按等候区顺序出队(全部) { p=Q->front->next; Q->front->next=p->next;//出队操作 if(Q->rear==p) Q->rear=Q->front; Exert1(head,i);//调用函数,实现按等候区顺序出一辆车 } } } structparking*Exert(structparking*head,charnumber[10])//驶出指定车辆 { structparking*p1,*p2; p1=head; p2=p1; while(p1->next!=NULL&&strcmp(p1->number,number)!=0) { p2=p1; p1=p1->next; } if(strcmp(p1->number,number)==0)//不带头结点,这里有三种删除车辆的辨别 { if(p1==head) { head=head->next;//头,中间,尾,三种删除方式 printf("驶出车辆成功\n"); n--; } else { p2->next=p1->next; printf("驶出车辆成功\n"); n--; } time_tt1; longintt=time(&t1); c.time2=t;//标记离开停车场的时间 char*t2; t2=ctime(&t1);//获取当前时间 printf("离开时间%s\n需付%2.3f元\n",t2,MONEY*(c.time2-c.time1));//显示停车场状况以及驶出时间和收费情况 } else { printf("停车场没此车辆!\n"); } free(p1); returnhead; } structparking*find(structparking*head,charnumber[20])//查找指定车辆 { structparking*p1; p1=head; while(p1->next!=NULL&&strcmp(p1->number,number)!=0) { p1=p1->next; } if(strcmp(p1->number,number)==0)//打印查到的车辆信息 { printf("查找成功,车辆信息如下:\n"); time_tt1; longintt=time(&t1);//标记显示时的时间 printf("车牌号\tVIP等级\t\t停放时长\t当前所需支付金额\n");//打印查到的车辆信息 printf("%s\t%d\t\t%d秒\t\t%2.3f元\n",p1->number,p1->vip,t-c.time1,MONEY*(t-c.time1)); } else printf("停车场没此车辆!\n"); } voidshow(structparking*head)//显示车库现有车辆 { structparking*p; p=head; if(head!=NULL) { do { time_tt1; longintt=time(&t1);//标记显示时的时间 printf("车牌号\tVIP等级\t\t停放时长\t当前所需支付金额\n");//打印查到的车辆信息 printf("%s\t%d\t\t%d秒\t\t%2.3f元\n",p->number,p->vip,t-c.time1,MONEY*(t-c.time1)); p=p->next; }while(p!=NULL); } else printf("停车场无车辆!\n"); } intmain() { intn=1; inti; structparking*head;//初始化链表 LinkQueueq; LinkQueue*Q=&q; Q=CreateQueue(Q); charnumber[10]; while(n) { system("clear"); menu(); printf("请输入你的骚操作:\n"); scanf("%d",&i); switch(i) { case1:{head=creat();Push(head,Q);break;}//创建链表,并创建队列 case2:{head=Sort(head);break;}//按vip排序 case3:{Pop(head,Q);break;}//按等候区顺序出队(全部) case4: { printf("请输入查找车辆的车牌号:\n");//查找指定车辆 scanf("%s",number); find(head,number);break; } case5:{show(head);break;}//显示车库现有车辆 case6: { printf("请输入要驶出车辆的车牌号:\n");//驶出指定车辆 scanf("%s",number); head=Exert(head,number);break; } default:{break;} } } }
感谢你能够认真阅读完这篇文章,希望小编分享的“C语言如何实现游戏VIP停车场管理系统”这篇文章对大家有帮助,同时也希望大家多多支持恰卡编程网,关注恰卡编程网行业资讯频道,更多相关知识等着你来学习!
目录
推荐阅读
0 条评论
本站已关闭游客评论,请登录或者注册后再评论吧~