?? tccgl.h
字號:
/*************************************tccgl.h**********************************************/
/*
定義必要函數(shù)
*/
extern SqStack* Parking; //停車場
extern LinkQueue* Temroad; //便道
extern unsigned int DisplayKind; //顯示標志,為1時顯示詳細過程,非1時只顯示簡略過程
char ArrOrDep; //汽車到達或離去的信息,到達為A,離去為D,E表示結(jié)束
float CurCarSize; //當前類型汽車占用空間
CarInfo _tem; //臨時存儲數(shù)據(jù)
CarInfo *tem=&_tem; //指向_tem的指針
//-------------------------------------------------------------------------------------------------
//程序啟動小動畫
void Flash(void);
//設(shè)置相關(guān)參數(shù)
Status SetOpitions(void);
//顯示開始信息
int DisplayInfo(void);
//向指定變量中寫入系統(tǒng)時間
void WriteTime(struct tm *temp);
//從棧S中查找與所給參數(shù)中兩個相匹配的項,若找到則返回TRUE,否則返回FALSE
Status CarInfoCorrStack(SqStack* S,CarInfo *temp);
//從隊列Q中查找與所給參數(shù)中兩個相匹配的項,若找到則返回TRUE,否則返回FALSE
Status CarInfoCorrQueue(LinkQueue* Q,CarInfo *temp);
//判斷某一車型的汽車現(xiàn)在是否可以進入棧S
Status CanCarGetInStack(SqStack *S,_CarKind tem_CarKind);
//信息讀入,初始化部分全局變量
Status InputInfo(void);
//從停車場中查找車號為CarNum的汽車,若找到則返回TRUE,若未找到則返回FALSE
Status SearchCarFromStack(SqStack* L,unsigned int CarNum);
//從停車場中查找車號為CarNum的汽車,若找到則返回TRUE,若未找到則返回FALSE
Status SearchCarFromQueue(LinkQueue* Q,unsigned int CarNum);
//計算費用
float Charge(CarInfo *ChargingCar);
//列出停車場中汽車牌號,汽車型號,進入時間
Status List_Stack(SqStack *S);
//顯示便道中的汽車信息
Status List_Queue(LinkQueue* Q);
//汽車進入停車場
Status CarGetInStack(SqStack* L,CarInfo *temp);
//若車號為CarNum的汽車在停車場中則離開并返回TRUE,否則返回FALSE
Status CarGetOutStack(SqStack* L,CarInfo* temp);
//將汽車從便道中退出
Status CarGetOutQueue(LinkQueue* Q,CarInfo* temp);
//函數(shù)名: Flash
//功能: 打印歡迎動畫
//輸入?yún)?shù): 無
//返回參數(shù): 無
void Flash(void)
{
int i;
int j;
int k;
for(i=61;i>=20;i--)
{ //循環(huán)延時
for(k=0;k<6000000;k++)
;
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n");
for(j=0;j<i;j++)
printf(" ");
printf(" ╭======╮\n");
for(j=0;j<i;j++)
printf(" ");
printf("╭╯ΘΘ ‖\n");
for(j=0;j<i;j++)
printf(" ");
printf("╰⊙--⊙—╯。o ○歡迎使用停車場管理模擬程序!");
if(i>=30)
printf("\r ");
}//for
printf("\n\n\n\n\n\n\n\n\n\n\n程序正在初始化...");
sleep(2);
}//Flash
//函數(shù)名: DisplayInfo
//功能: 在程序開始調(diào)用,顯示說明
//輸入?yún)?shù): 無
//返回值: 類型(int)
// 0 "用于結(jié)束函數(shù)運行"
int DisplayInfo(void)
{ //顯示開始信息
int Key; //接收sleep的返回值
system("cls"); //清屏
int i;
printf("********************************************************************************");
printf(" 歡迎使用停車場管理模擬程序 ");
printf("********************************************************************************");
printf("\n以下為使用說明:\n\n");
printf("||* 開始時可以設(shè)置相關(guān)參數(shù),若使用默認設(shè)置請直接選擇退出 ||");
printf("||* 輸入格式: ||");
printf("||* 汽車進入則輸入(進入或離開,汽車牌號,汽車類型) ||");
printf("||* A表示汽車進入,D表示離開 ||");
printf("||* 汽車牌號必須為整形變量 ||");
printf("||* 汽車類型分為A,B,C三種,其占用空間分別為2,1.5,1 ||");
printf("||* 且不同類型的汽車占用空間不同,收費也不同,費用可在設(shè)置菜單中進行設(shè)置 ||");
//printf("\n");
printf("||* 功能選項: ||");
printf("||* E:退出 ||");
printf("||* L:顯示停車場和便道中的車輛 ||\n");
printf("********************************************************************************");
printf("按回車鍵進入設(shè)置菜單...\n");
printf("\t\t\t\t\t\t\t ╭======╮\n\t\t\t\t\t\t\t╭╯ΘΘ ‖\n\t\t\t\t\t\t\t╰⊙--⊙—╯。o ○\n\n");
for(i=20;i>=0;i--)
{ //顯示倒計時
printf("\r本頁面將會在%d秒后自動退出...(按ESC鍵立即退出)",i);
Key=sleep(2);
if(Key==1) //若ESC鍵按下,則退出函數(shù)
return 0;
else if(Key==2)
{ //若回車被按下
SetOpitions();
return 0;
}//else
}//for(
return 0;
}//DisplayInfo
//函數(shù)名: SetOpitions
//功能: 作為程序開始時調(diào)用函數(shù),用來設(shè)置各種變量
// 設(shè)置ParkingSize(extern unsigned int) 全局變量 "public.h中定義,棧的大小"
// DisplayKind(extern unsigned int) 全局變量 "public.h定義,顯示標志,詳細為1,簡潔為非1
// Fee_Stack_A(extern float) 全局變量 "public.h定義,用于數(shù)據(jù)計算"
// Fee_Stack_B(extern float) 全局變量 "public.h定義,用于數(shù)據(jù)計算"
// Fee_Stack_C(extern float) 全局變量 "public.h定義,用于數(shù)據(jù)計算"
// Fee_Queue_A(extern float) 全局變量 "public.h定義,用于數(shù)據(jù)計算"
// Fee_Queue_B(extern float) 全局變量 "public.h定義,用于數(shù)據(jù)計算"
// Fee_Queue_C(extern float) 全局變量 "public.h定義,用于數(shù)據(jù)計算"
// 函數(shù)中使用goto來跳出深層循環(huán)
//輸入?yún)?shù): 無
//返回值: 類型(enum Status)
// TRUE 用于結(jié)束函數(shù)運行
Status SetOpitions(void)
{ //設(shè)置相關(guān)參數(shù)
extern unsigned int ParkingSize; //棧的大小,即為停車場的空間大小
extern unsigned int DisplayKind; //顯示標志,為1時顯示詳細過程,非1時只顯示簡略過程
extern float Fee_Stack_A; //A型汽車在停車場中的收費標準
extern float Fee_Stack_B; //B型汽車在停車場中的收費標準
extern float Fee_Stack_C; //C型汽車在停車場中的收費標準
extern float Fee_Queue_A; //A型汽車在便道中的收費標準
extern float Fee_Queue_B; //B型汽車在便道中的收費標準
extern float Fee_Queue_C; //C型汽車在便道中的收費標準
int IntKey; //按鍵的Int值
loop1:
system("cls"); //清屏
printf("********************************************************************************");
printf(" 設(shè)置相關(guān)參數(shù) ");
printf("********************************************************************************");
printf("||* 請選擇要設(shè)置的選項(直接退出采取默認設(shè)置):\n");
printf("||* 1.設(shè)置停車場空間大小\n");
printf("||* 2.設(shè)置各種費用\n");
printf("||* 3.設(shè)置顯示信息類型\n");
printf("||* 4.恢復(fù)默認設(shè)置\n");
printf("||* 5.退出\n");
printf("********************************************************************************");
while(1)
{ //循環(huán),直到選擇"退出"選項
switch((int)(getch()-48))
{ //根據(jù)IntKey選擇不同的設(shè)置
case 1:
{ //設(shè)置停車場空間大小
system("cls"); //清屏
printf("********************************************************************************");
printf(" 重新設(shè)置停車場空間 ");
printf("********************************************************************************");
printf("\n||* 請輸入新的停車場空間大小:");
scanf("%d",&ParkingSize);
ParkingSize=abs(ParkingSize);
printf("******停車場空間被重置為%d!******\n",ParkingSize);
sleep(2);
goto loop1;
};break;
case 2:
{ //設(shè)置各種費用
system("cls"); //清屏
printf("********************************************************************************");
printf(" 重新設(shè)置費用 ");
printf("********************************************************************************");
printf("||* 各項費用應(yīng)為正數(shù),若輸入數(shù)值非法,則自動更正為絕對值!\n");
printf("\n||* 請輸入A型汽車在停車場中的收費標準:");
scanf("%f",&Fee_Stack_A);
printf("\n||* 請輸入A型汽車在便道中的收費標準:");
scanf("%f",&Fee_Queue_A);
printf("\n||* 請輸入B型汽車在停車場中的收費標準:");
scanf("%f",&Fee_Stack_B);
printf("\n||* 請輸入B型汽車在便道中的收費標準:");
scanf("%f",&Fee_Queue_B);
printf("\n||* 請輸入C型汽車在停車場中的收費標準:");
scanf("%f",&Fee_Stack_C);
printf("\n|* 請輸入C型汽車在便道中的收費標準:");
scanf("%f",&Fee_Queue_C);
goto loop1;
};break;
case 3:
{ //設(shè)置顯示信息方式
system("cls");
printf("********************************************************************************");
printf(" 設(shè)置顯示方式 ");
printf("********************************************************************************");
printf("\n\n||* 1.顯示詳細信息");
printf("\n||* 2.顯示簡略信息\n");
printf("*******默認顯示方式為詳細*******\n");
IntKey=(int)getch();
if(IntKey-48==2)
{ //若按下的鍵為0
DisplayKind=0;
printf("\n\n顯示方式已設(shè)置為簡略!\n");
sleep(2);
}//if((
else if(IntKey-48==1)
{ //若按下的鍵為1
DisplayKind=1;
printf("\n\n顯示方式已設(shè)置為詳細!\n");
sleep(2);
}//else if
goto loop1;
};break;
case 4:
{ //恢復(fù)默認設(shè)置
system("cls"); //清屏
ParkingSize=10; //設(shè)定停車場空間大小為10
Fee_Stack_A=2; //設(shè)置A在停車場中費用為2
Fee_Stack_B=1.5; //設(shè)置B在停車場中費用為1.5
Fee_Stack_C=1; //設(shè)置C在停車場中費用為1
Fee_Queue_A=0.5; //設(shè)置A在便道中費用為0.5
Fee_Queue_B=0.4; //設(shè)置B在便道中費用為0.4
Fee_Queue_C=0.3; //設(shè)置C在便道中費用為0.3
printf("已恢復(fù)到默認信息!\n");
sleep(2);
goto loop1;
};break;
case 5:printf("退出設(shè)置菜單...\n");sleep(2);return TRUE;
default:printf("請在1~5之間選擇!\n");
}//switch
}//whiel(1)
return TRUE;
}
//函數(shù)名: WriteTime
//功能: 向temp(struct tm)中寫入系統(tǒng)時間(分鐘和秒)
//輸入?yún)?shù): temp(struct tm*) "寫入數(shù)據(jù)的變量"
//返回值: 無
void WriteTime(struct tm *temp)
{ //向指定變量中寫入系統(tǒng)時間
time_t timep;//定義timep變量
struct tm* tem_time; //得到轉(zhuǎn)換時間格式后的地址,不允許free
tem_time=(struct tm*)malloc(sizeof(struct tm));
time(&timep); //獲得系統(tǒng)當前時間
tem_time=gmtime(&timep); //轉(zhuǎn)換為UTC格式
temp->tm_hour=tem_time->tm_hour; //小時
temp->tm_min=tem_time->tm_min; //分鐘
temp->tm_sec=tem_time->tm_sec; //秒
}//WriteTime
//函數(shù)名:CarInfoCorrStack
//功能:從棧S中查找與所給參數(shù)中兩個相匹配的項,若找到則返回TRUE,否則返回FALSE
//輸入?yún)?shù): SqSTack* S "指向棧S的指針"
// CarInfo* temp "temp中包含所要查找的數(shù)據(jù):"
// "unsigned int temp->CarNum,enum _CarKind temp->CarKind"
//返回值: 類型(enum Status)
// TRUE "在棧S中找到與所給參數(shù)相匹配的項"
// FALSE "在棧S中未找到與所給參數(shù)相匹配的項"
Status CarInfoCorrStack(SqStack* S,CarInfo *temp)
{
CarInfo* Sq_temp;
int flag=0;
Sq_temp=S->base;
while(Sq_temp!=S->top)
{//遍歷棧S
if(Sq_temp->CarNum==temp->CarNum)
if(Sq_temp->CarKind==temp->CarKind)
return TRUE;
Sq_temp++;
}//while
return FALSE;
}//CarInfoCorrStack
//函數(shù)名:CarInfoCorrQueue
//功能:從隊列Q中查找與所給參數(shù)中兩個相匹配的項,若找到則返回TRUE,否則返回FALSE
//輸入?yún)?shù): Q(LinkQueue *) "指向棧S的指針"
// temp(CarInfo *) "temp中包含所要查找的數(shù)據(jù):"
// "unsigned int temp->CarNum,enum _CarKind temp->CarKind"
//返回值: 類型(enum Status)
// TRUE "在棧S中找到與所給參數(shù)相匹配的項"
// FALSE "在棧S中未找到與所給參數(shù)相匹配的項"
Status CarInfoCorrQueue(LinkQueue* Q,CarInfo *temp)
{
QueuePtr p;
if(QueueEmpty(Q)==TRUE)
return FALSE; //若隊列為空,返回FALSE
p=Q->front->next;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -