C語言實(shí)現(xiàn)游戲VIP停車場管理系統(tǒng)
在數(shù)據(jù)結(jié)構(gòu)這部分學(xué)習(xí)結(jié)束后,寫一個(gè)小項(xiàng)目,我想是對(duì)這部分知識(shí)一個(gè)很好的運(yùn)用過程。
我在這介紹我寫的一個(gè)項(xiàng)目,游戲停車場(這個(gè)版本只是初級(jí)版,可以在這之上繼續(xù)添加很多其他功能,大家可以自己嘗試)。
功能要求如下:

程序如下:
/***************************************************************************
項(xiàng)目要求
游戲VIP停車場
問題描述:停車場是一個(gè)能放10輛車的車場(鏈表實(shí)現(xiàn)), 汽車按到達(dá)的先后次序停放
在等候區(qū)。若等候區(qū)滿了(10輛車),按汽車的VIP等級(jí)(兩種排序方法),依次停入停車場 ,在停
車期間,我們可以通過汽車牌號(hào)查找汽車相關(guān)信息,并且可以隨意刪除其中一輛汽車,汽車
離開要按等候區(qū)的順序依次離開(使用隊(duì)列實(shí)現(xiàn))汽車離開時(shí)按停放時(shí)間收費(fèi)。
***************************************************************************/
#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 //收費(fèi)價(jià)格,這里默認(rèn)為1分鐘,收費(fèi)0.12元
typedef struct parking
{
char number[10]; //車輛信息
int vip; //車輛VIP等級(jí)
int time1; // 進(jìn)入停車場時(shí)間
int time2; // 離開停車場時(shí)間
int count; //標(biāo)記車輛,后面入隊(duì)時(shí)使用
struct parking*next;
}car;
static int n = 0; //全局變量,用于標(biāo)記車輛數(shù)目,計(jì)算車位
car c;
void menu()
{
printf("\t==============歡迎來到中南國際停車場=============\n");
printf ("\t******************目前停車場狀況*****************\n");
printf ("\t停車場共有%d個(gè)車位,當(dāng)前停車場剩余%d車位\n", MAXSIZE,MAXSIZE - n);
printf ("\t*************************************************\n");
printf("\t================1,停入車輛=======================\n");
printf("\t================2,VIP等級(jí)排序車輛================\n");
printf("\t================3,駛出所有車輛(隊(duì)列)==============\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é)點(diǎn)的鏈表
int i = 1;
p1=p2=(struct parking*)malloc(LEN);
printf("輸入車輛VIP等級(jí):\n");
scanf("%d",&p1->vip);
printf("輸入車牌號(hào):\n");
scanf("%s",p1->number);
p1->count = i;
time_t t1;
long int t = time(&t1); // 標(biāo)記進(jìn)入停車場的時(shí)間
c.time1 = t;
char* t2;
t2 = ctime(&t1); // 獲取當(dāng)前時(shí)間
printf("牌照為%s的汽車停入等候區(qū)成功,當(dāng)前時(shí)間:%s\n",p1->number,t2); //顯示停車場狀況,以及停入時(shí)間
while(p1->vip != 0 && i <= 10)
{ //由于不帶頭結(jié)點(diǎn),這里創(chuàng)建時(shí)考慮了三種插入方法
n = n+1;
if(n == 1)
head = p1;
else
p2->next = p1;
p2 = p1;
p1 = (struct parking*)malloc(LEN);
printf("輸入車輛VIP等級(jí):\n");
scanf("%d",&p1->vip);
printf("輸入車牌號(hào):\n");
scanf("%s",p1->number);
i++;
p1->count = i;
time_t t1;
long int t = time(&t1); // 標(biāo)記進(jìn)入停車場的時(shí)間
c.time1 = t;
char* t2;
t2 = ctime(&t1); // 獲取當(dāng)前時(shí)間
printf("牌照為%s的汽車停入等候區(qū)成功,當(dāng)前時(shí)間:%s\n",p1->number,t2); //顯示停車場狀況,以及停入時(shí)間
}
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("請(qǐng)輸入排序方式:(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等級(jí)交換結(jié)點(diǎn)數(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等級(jí)交換結(jié)點(diǎn)數(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 //先入先出(隊(duì)列)Vip離場
{
int data;
struct QueueNode *next;
}Queue,*QueuePtr;
typedef struct
{
QueuePtr front,rear; //隊(duì)列指針
}LinkQueue;
LinkQueue* CreateQueue(LinkQueue *Q) //創(chuàng)建隊(duì)列
{
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) //入隊(duì)操作,按鏈表中一開始車輛標(biāo)號(hào)順序
{
struct parking *p;
p = head;
while(p!=NULL)
{
QueuePtr s = (QueuePtr)malloc(sizeof(Queue));
s->data = p->count; //隊(duì)列只記錄車輛一開始的標(biāo)號(hào)信息
s->next = NULL;
Q->rear->next = s;
Q->rear = s;
p = p->next;
}
}
struct parking Exert1(struct parking *head,int e) //按等候區(qū)順序出隊(duì)(一輛)
{
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)記顯示時(shí)的時(shí)間
printf ("車牌號(hào)\tVIP等級(jí)\t\t停放時(shí)長\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ū)順序出隊(duì)(全部)
{
QueuePtr p;
int i = 1;
if(Q->front == Q->rear)
{
printf("停車場無車輛!\n");
return 0;
}
else
{
for(i;i <= 10;i++) //按等候區(qū)順序出隊(duì)(全部)
{
p = Q->front->next;
Q->front->next = p->next; //出隊(duì)操作
if(Q->rear == p)
Q->rear = Q->front;
Exert1(head,i); //調(diào)用函數(shù),實(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é)點(diǎn),這里有三種刪除車輛的辨別
{
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)記離開停車場的時(shí)間
char* t2;
t2 = ctime(&t1); // 獲取當(dāng)前時(shí)間
printf("離開時(shí)間%s\n需付%2.3f元\n",t2,MONEY * (c.time2 - c.time1)); //顯示停車場狀況以及駛出時(shí)間和收費(fèi)情況
}
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)記顯示時(shí)的時(shí)間
printf ("車牌號(hào)\tVIP等級(jí)\t\t停放時(shí)長\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)記顯示時(shí)的時(shí)間
printf ("車牌號(hào)\tVIP等級(jí)\t\t停放時(shí)長\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("請(qǐng)輸入你的騷操作:\n");
scanf("%d",&i);
switch(i)
{
case 1:{head = creat();Push(head,Q);break;} //創(chuàng)建鏈表,并創(chuàng)建隊(duì)列
case 2:{head = Sort(head);break;} //按vip排序
case 3:{Pop(head,Q);break;} //按等候區(qū)順序出隊(duì)(全部)
case 4:
{
printf("請(qǐng)輸入查找車輛的車牌號(hào):\n"); //查找指定車輛
scanf("%s",number);
find(head,number);break;
}
case 5:{show(head);break;} //顯示車庫現(xiàn)有車輛
case 6:
{
printf("請(qǐng)輸入要駛出車輛的車牌號(hào):\n"); //駛出指定車輛
scanf("%s",number);
head = Exert(head,number);break;
}
default:{break;}
}
}
}
功能的實(shí)現(xiàn),有很多方法,如果大家有自己的想法,可以評(píng)論,大家互利共進(jìn)。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:C語言實(shí)現(xiàn)簡單航班管理系統(tǒng)
欄 目:C語言
下一篇:C語言實(shí)現(xiàn)的猜數(shù)字小游戲
本文標(biāo)題:C語言實(shí)現(xiàn)游戲VIP停車場管理系統(tǒng)
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/6.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)數(shù)怎么表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10C#中split用法實(shí)例總結(jié)


