溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C語言如何實現(xiàn)游戲VIP停車場管理系統(tǒng)

發(fā)布時間:2021-05-28 12:56:23 來源:億速云 閱讀:224 作者:小新 欄目:編程語言

這篇文章主要介紹了C語言如何實現(xiàn)游戲VIP停車場管理系統(tǒng),具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

在數(shù)據(jù)結(jié)構(gòu)這部分學(xué)習(xí)結(jié)束后,寫一個小項目,我想是對這部分知識一個很好的運用過程。

我在這介紹我寫的一個項目,游戲停車場(這個版本只是初級版,可以在這之上繼續(xù)添加很多其他功能,大家可以自己嘗試)。

功能要求如下:

C語言如何實現(xiàn)游戲VIP停車場管理系統(tǒng)

程序如下:

/*************************************************************************** 
項目要求 
游戲VIP停車場 
問題描述:停車場是一個能放10輛車的車場(鏈表實現(xiàn)), 汽車按到達(dá)的先后次序停放
在等候區(qū)。若等候區(qū)滿了(10輛車),按汽車的VIP等級(兩種排序方法),依次停入停車場 ,在停
車期間,我們可以通過汽車牌號查找汽車相關(guān)信息,并且可以隨意刪除其中一輛汽車,汽車
離開要按等候區(qū)的順序依次離開(使用隊列實現(xiàn))汽車離開時按停放時間收費。 
***************************************************************************/ 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
 
#define LEN sizeof(struct parking)      
#define MAXSIZE 10 //車庫大小,可自定義大小,這里默認(rèn)為10
#define MONEY 0.002 //收費價格,這里默認(rèn)為1分鐘,收費0.12元
 
typedef struct parking
{
 char number[10]; //車輛信息
 int vip; //車輛VIP等級
 int time1;  // 進(jìn)入停車場時間
 int time2;  // 離開停車場時間
 int count; //標(biāo)記車輛,后面入隊時使用
 struct parking*next;
}car;
static int n = 0; //全局變量,用于標(biāo)記車輛數(shù)目,計算車位
car c;
void menu()
{
 printf("\t==============歡迎來到中南國際停車場=============\n");
 printf ("\t******************目前停車場狀況*****************\n");
 printf ("\t停車場共有%d個車位,當(dāng)前停車場剩余%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() //創(chuàng)建鏈表,用于存放車輛信息
{
 struct parking*p1,*p2,*head;
 head = NULL; //為方便后面排序,這里創(chuàng)建不帶頭結(jié)點的鏈表
 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);  // 標(biāo)記進(jìn)入停車場的時間
  c.time1 = t;
  char* t2;
  t2 = ctime(&t1);  // 獲取當(dāng)前時間         
  printf("牌照為%s的汽車停入等候區(qū)成功,當(dāng)前時間:%s\n",p1->number,t2); //顯示停車場狀況,以及停入時間
 while(p1->vip != 0 && i <= 10)
 {      //由于不帶頭結(jié)點,這里創(chuàng)建時考慮了三種插入方法
 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); // 標(biāo)記進(jìn)入停車場的時間
 c.time1 = t;
    char* t2;
    t2 = ctime(&t1);  // 獲取當(dāng)前時間         
    printf("牌照為%s的汽車停入等候區(qū)成功,當(dāng)前時間:%s\n",p1->number,t2); //顯示停車場狀況,以及停入時間
    
 }
 p2->next = NULL;
 printf("等候區(qū)以滿\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等級交換結(jié)點數(shù)據(jù)
   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標(biāo)記為最大值
  for(q = p->next;q != NULL;q = q->next)
     {
   if(p->vip < q->vip)//降序
  {
         s = q;
  }
  if(s != p)
  { 
         t = q->vip; //按VIP等級交換結(jié)點數(shù)據(jù)
   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) //創(chuàng)建隊列
{
  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) //入隊操作,按鏈表中一開始車輛標(biāo)號順序
{
  struct parking *p;
 p = head;
  while(p!=NULL)
  {
    QueuePtr s = (QueuePtr)malloc(sizeof(Queue));
    s->data = p->count; //隊列只記錄車輛一開始的標(biāo)號信息
    s->next = NULL;
    Q->rear->next = s;
    Q->rear = s;
    p = p->next;     
  }
}
 
struct parking Exert1(struct parking *head,int e) //按等候區(qū)順序出隊(一輛)
{
  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);  // 標(biāo)記顯示時的時間
 printf ("車牌號\tVIP等級\t\t停放時長\t當(dāng)前所需支付金額\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) //按等候區(qū)順序出隊(全部)
{
  QueuePtr p;
  int i = 1;
  if(Q->front == Q->rear)
  {
    printf("停車場無車輛!\n");
    return 0;
  }
  else
  {
    for(i;i <= 10;i++) //按等候區(qū)順序出隊(全部)
    { 
     p = Q->front->next;
     Q->front->next = p->next; //出隊操作
     if(Q->rear == p) 
       Q->rear = Q->front;
     Exert1(head,i); //調(diào)用函數(shù),實現(xiàn)按等候區(qū)順序出一輛車
     }
  }
}
 
 
 
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) //不帶頭結(jié)點,這里有三種刪除車輛的辨別
 {
 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; // 標(biāo)記離開停車場的時間
 char* t2;
 t2 = ctime(&t1); // 獲取當(dāng)前時間
 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);       // 標(biāo)記顯示時的時間
 printf ("車牌號\tVIP等級\t\t停放時長\t當(dāng)前所需支付金額\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) //顯示車庫現(xiàn)有車輛
{
 struct parking *p;
 p = head;
 if(head != NULL)
 {
 do
  {
  time_t t1;
  long int t = time(&t1); // 標(biāo)記顯示時的時間
  printf ("車牌號\tVIP等級\t\t停放時長\t當(dāng)前所需支付金額\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;} //創(chuàng)建鏈表,并創(chuàng)建隊列
  case 2:{head = Sort(head);break;} //按vip排序
  case 3:{Pop(head,Q);break;} //按等候區(qū)順序出隊(全部)
  case 4:
  {
  printf("請輸入查找車輛的車牌號:\n"); //查找指定車輛
  scanf("%s",number);
  find(head,number);break;
  }
  case 5:{show(head);break;} //顯示車庫現(xiàn)有車輛
  case 6:
  { 
  printf("請輸入要駛出車輛的車牌號:\n"); //駛出指定車輛
  scanf("%s",number);
  head = Exert(head,number);break; 
  }
  default:{break;}
 }
 }
}

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“C語言如何實現(xiàn)游戲VIP停車場管理系統(tǒng)”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI