C语言如何实现游戏VIP停车场管理系统

这篇文章主要介绍了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停车场管理系统”这篇文章对大家有帮助,同时也希望大家多多支持恰卡编程网,关注恰卡编程网行业资讯频道,更多相关知识等着你来学习!

发布于 2021-05-30 14:08:22
收藏
分享
海报
0 条评论
169
上一篇:JavaScript如何实现动态数字时钟 下一篇:python如何爬取影视网站下载链接
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码