古詩詞大全網 - 成語解釋 - c語言程序設計實驗報告80~100行,關於壹種小遊戲的,語句簡單些,

c語言程序設計實驗報告80~100行,關於壹種小遊戲的,語句簡單些,

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#define MAX_PARKING_SIZE 10//停車場最大停車數量

#define PRIZE 10.00//停留每小時單價

#define true 1

#define false 0

typedef struct stack

{

long pos[MAX_PARKING_SIZE];//存儲車牌號碼

int time[MAX_PARKING_SIZE];//存儲進入車站的時間

int point;//最後壹輛車的位置指針

}Stack;//定義棧-模擬停車場

typedef struct queue

{

int num;//存儲車牌號

struct queue *next;//指向下壹輛車

}Queue;//定義隊列-模擬停車場外

void InitStack(Stack *s)

{

s->point=-1;

}//初始化棧

Queue *InitQueue()//初始化隊列

{

Queue *q;

q=(Queue *)malloc(sizeof(Queue));

q->next=NULL;

return q;

}

int StackPop(Stack *s,long *i,int *j)//退棧函數

{

if(s->point==-1)return false;

else

{

*i=s->pos[s->point];

*j=s->time[s->point];

s->point--;

return true;

}

}

int StackPush(Stack *s,long i,int j)//壓棧函數

{

if(s->point==MAX_PARKING_SIZE-1)return false;

else

{

s->point++;

s->pos[s->point]=i;

s->time[s->point]=j;

return true;

}

}

int QueuePop(Queue **qH,long *i)//退隊函數

{

Queue *temp;

if((*qH)->next==NULL)return false;

else

{

temp=(*qH)->next;

(*qH)->next=temp->next;

*i=temp->num;

free(temp);

return true;

}

}

int QueuePush(Queue **q,long i)//入隊函數

{

Queue *temp;

if((temp=(Queue *)malloc(sizeof(Queue)))==NULL)return false;

else

{

(*q)->next=temp;

temp->num=i;

temp->next=NULL;

*q=temp;

return true;

}

}

int main()

{

int time,i,j,inStack,inQueue;

long num;

char state;

Stack park;

Queue *H,*p,*temp,*temp2;

H=InitQueue();

p=H;

system("color 9E");

InitStack(&park);//初始化隊列和棧

printf("**********這裏是停車場管理程序,歡迎使用**************\n");

printf("\n停車場最大能停車%d輛,停車時間不得超過24小時,現在停車的單價為每小時%.2f元\n",MAX_PARKING_SIZE,PRIZE);

while(1)

{

inStack=inQueue=0;temp=H;

printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");

printf("┃ 停車場管理系統 ┃\n");

printf("┃ (A或a)汽車到達和已到汽車查詢 ┃\n");

printf("┃ (D或d)汽車離開 ┃\n");

printf("┃ (E或e)程序退出 ┃\n");

printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");

printf("\n您的選擇是:");

state=getche();

if(state=='a'||state=='A'||state=='d'||state=='D')

{

printf("\n輸入車牌號(數字):");

scanf("%ld",&num);

printf("\n輸入到達或查詢或離開的的時間(24小時制,單位:小時):");

scanf("%d",&time);

}

if(state=='a'||state=='A')

{

for(i=0;i<=park.point;i++)

if(park.pos[i]==num)

{

inStack=1;

break;

}//在車站中查找

for(j=1;temp->next!=NULL;j++)

{

temp2=temp;

temp=temp2->next;

if(temp->num==num)

{

inQueue=1;

break;

}

}//在車站外查找

if(inStack)

printf("\n查詢結果:輸入的汽車已經在車站中第%d個位置停留了%d個小時!\n",i+1,time>park.time[i]?time-park.time[i]:time+24-park.time[i]);

else if(inQueue)

printf("\n查詢結果:輸入的汽車已經在車站外第%d個位置等候\n",j);

else

{

if(StackPush(&park,num,time)==false)

{

QueuePush(&p,num);

printf("\n車站已滿,車輛停在場外。\n");

}

else printf("\n車輛成功進站!\n");

}//如果車輛到達,當車站已滿,停在車站外,否則,進入車站

}

else if(state=='d'||state=='D')//如果是離開

{

for(i=0;i<=park.point;i++)

if(park.pos[i]==num)

{

inStack=1;

break;

}//在車站中查找

if(inStack)//如果在車站中

{

printf("正要離開的汽車在車站中第%d個位置停留了%d個小時,應付%.2f元\n",i+1,time>park.time[i]?time-park.time[i]:time+24-park.time[i],time>park.time[i]?(time-park.time[i])*PRIZE:(time+24-park.time[i])*PRIZE);

while(i<park.point)

{

park.pos[i]=park.pos[i+1];

park.time[i]=park.time[i+1];

i++;

}

park.point--;//把離開的車輛從車站中刪除

if(H->next!=NULL)

{

QueuePop(&H,&num);

if(H->next==NULL)p=H;

StackPush(&park,num,time);

printf("\n停車場空出壹位置。場外等候的%d號汽車入站了!\n",num);

}//如果車站外有車,入站

}

else//不在車站中

{

for(i=1;temp->next!=NULL;i++)

{

temp2=temp;temp=temp2->next;

if(temp->num==num)

{

inQueue=1;

break;

}

}//查找是否在車站外

if(inQueue)

{

printf("\n汽車在停車場外,不收費\n",i);

temp2->next=temp->next;

if(temp==p)p=temp2;

free(temp);

}//在車站外

else printf("\n對不起,您輸入了不存在的車牌號!\n");

}

}

else if(state=='e'||state=='E')

{

printf("\n");

break;

}

else printf("\n輸入錯誤!\n");

}

return 0;

}