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

发布时间:2021-05-28 12:56:23 作者:小新
来源:亿速云 阅读:231

这篇文章主要介绍了C语言如何实现游戏VIP停车场管理系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

在数据结构这部分学习结束后,写一个小项目,我想是对这部分知识一个很好的运用过程。

我在这介绍我写的一个项目,游戏停车场(这个版本只是初级版,可以在这之上继续添加很多其他功能,大家可以自己尝试)。

功能要求如下:

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

程序如下:

/*************************************************************************** 
项目要求 
游戏VIP停车场 
问题描述:停车场是一个能放10辆车的车场(链表实现), 汽车按到达的先后次序停放
在等候区。若等候区满了(10辆车),按汽车的VIP等级(两种排序方法),依次停入停车场 ,在停
车期间,我们可以通过汽车牌号查找汽车相关信息,并且可以随意删除其中一辆汽车,汽车
离开要按等候区的顺序依次离开(使用队列实现)汽车离开时按停放时间收费。 
***************************************************************************/ 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
 
#define LEN sizeof(struct parking)      
#define MAXSIZE 10 //车库大小,可自定义大小,这里默认为10
#define MONEY 0.002 //收费价格,这里默认为1分钟,收费0.12元
 
typedef struct parking
{
 char number[10]; //车辆信息
 int vip; //车辆VIP等级
 int time1;  // 进入停车场时间
 int time2;  // 离开停车场时间
 int count; //标记车辆,后面入队时使用
 struct parking*next;
}car;
static int n = 0; //全局变量,用于标记车辆数目,计算车位
car c;
void menu()
{
 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");
}
 
struct parking *creat() //创建链表,用于存放车辆信息
{
 struct parking*p1,*p2,*head;
 head = NULL; //为方便后面排序,这里创建不带头结点的链表
 int i = 1;
 p1=p2=(struct parking*)malloc(LEN);
 printf("输入车辆VIP等级:\n");
 scanf("%d",&p1->vip);
 printf("输入车牌号:\n");
 scanf("%s",p1->number);
 p1->count = i;
 time_t t1;
  long int t = 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 = (struct parking*)malloc(LEN);
 printf("输入车辆VIP等级:\n");
 scanf("%d",&p1->vip);
 printf("输入车牌号:\n");
 scanf("%s",p1->number);
 i++;
 p1->count = i;
 time_t t1;
    long int t = time(&t1); // 标记进入停车场的时间
 c.time1 = t;
    char* t2;
    t2 = ctime(&t1);  // 获取当前时间         
    printf("牌照为%s的汽车停入等候区成功,当前时间:%s\n",p1->number,t2); //显示停车场状况,以及停入时间
    
 }
 p2->next = NULL;
 printf("等候区以满\n");
 return head;
}
 
struct parking *Sort(struct parking *head)//链表排序,冒泡排序
{
  struct parking *p,*q,*s;
  int t,a,m;
  char arr[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;
  }
     }
   }
 return head; 
  }
 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;
  }
     }
   }
 return head;
 }
}
 
typedef struct QueueNode //先入先出(队列)Vip离场
{
  int data;
  struct QueueNode *next;
}Queue,*QueuePtr;
 
typedef struct
{
  QueuePtr front,rear; //队列指针
}LinkQueue;
 
LinkQueue* CreateQueue(LinkQueue *Q) //创建队列
{
  Q = (LinkQueue*)malloc(sizeof(LinkQueue));
  Q->front = Q->rear = (QueuePtr)malloc(sizeof(Queue));
  Q->front->next = NULL;
  return Q;
}
 
void Push(struct parking *head,LinkQueue* Q) //入队操作,按链表中一开始车辆标号顺序
{
  struct parking *p;
 p = head;
  while(p!=NULL)
  {
    QueuePtr s = (QueuePtr)malloc(sizeof(Queue));
    s->data = p->count; //队列只记录车辆一开始的标号信息
    s->next = NULL;
    Q->rear->next = s;
    Q->rear = s;
    p = p->next;     
  }
}
 
struct parking Exert1(struct parking *head,int e) //按等候区顺序出队(一辆)
{
  struct parking *p;
  p = head;
  while(p != NULL && p->count != e)
  {
    p = p->next;
  }
  if(p->count == e)
  {
    time_t t1;
 long int t = 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));
  }
}
int Pop(struct parking *head,LinkQueue *Q) //按等候区顺序出队(全部)
{
  QueuePtr p;
  int i = 1;
  if(Q->front == Q->rear)
  {
    printf("停车场无车辆!\n");
    return 0;
  }
  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); //调用函数,实现按等候区顺序出一辆车
     }
  }
}
 
 
 
struct parking *Exert(struct parking *head,char number[10]) //驶出指定车辆
{ 
 struct parking *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_t t1;   
 long int t = 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);
 return head;
}
 
struct parking *find(struct parking *head,char number[20]) //查找指定车辆
{
 struct parking *p1;
 p1 = head;
 while(p1->next != NULL && strcmp(p1->number,number)!=0)
 {
 p1 = p1->next; 
 }
 if(strcmp(p1->number,number)==0) //打印查到的车辆信息
 {
 printf("查找成功,车辆信息如下:\n");
 time_t t1;
 long int t = 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"); 
}
 
void show(struct parking *head) //显示车库现有车辆
{
 struct parking *p;
 p = head;
 if(head != NULL)
 {
 do
  {
  time_t t1;
  long int t = 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");
}
 
int main()
{
 int n = 1;
 int i;
 struct parking *head; //初始化链表
 LinkQueue q;
 LinkQueue* Q = &q;
 Q = CreateQueue(Q);
 char number[10];   
 while(n)
 {
 system("clear");
 menu();
 printf("请输入你的骚操作:\n");
 scanf("%d",&i);
 switch(i)
 {
  case 1:{head = creat();Push(head,Q);break;} //创建链表,并创建队列
  case 2:{head = Sort(head);break;} //按vip排序
  case 3:{Pop(head,Q);break;} //按等候区顺序出队(全部)
  case 4:
  {
  printf("请输入查找车辆的车牌号:\n"); //查找指定车辆
  scanf("%s",number);
  find(head,number);break;
  }
  case 5:{show(head);break;} //显示车库现有车辆
  case 6:
  { 
  printf("请输入要驶出车辆的车牌号:\n"); //驶出指定车辆
  scanf("%s",number);
  head = Exert(head,number);break; 
  }
  default:{break;}
 }
 }
}

感谢你能够认真阅读完这篇文章,希望小编分享的“C语言如何实现游戏VIP停车场管理系统”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

推荐阅读:
  1. C语言源码实现停车场管理系统
  2. C语言如何实现简单停车场管理系统

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c语言

上一篇:C语言如何实现简单停车场管理系统

下一篇:C语言如何实现班档案管理系统课程设计

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》