這篇文章主要介紹了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停車場管理系統”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。