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的汽车停入等候区成功,当前时间:%sn",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的汽车停入等候区成功,当前时间:%sn",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等级tt停放时长t当前所需支付金额n"); //打印查到的车辆信息     printf ("%st%dtt%d秒tt%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("离开时间%sn需付%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等级tt停放时长t当前所需支付金额n"); //打印查到的车辆信息     printf ("%st%dtt%d秒tt%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等级tt停放时长t当前所需支付金额n"); //打印查到的车辆信息      printf ("%st%dtt%d秒tt%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;}   }   }  }

功能的实现,有很多方法,如果大家有自己的想法,可以评论,大家互利共进。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

—-想了解C语言实现游戏VIP停车场管理系统分享!全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/483631.html

(0)
上一篇 2020年11月10日
下一篇 2020年11月10日

精彩推荐