📄 tccgl.h
字号:
/*************************************tccgl.h**********************************************/
/*
定义必要函数
*/
extern SqStack* Parking; //停车场
extern LinkQueue* Temroad; //便道
extern unsigned int DisplayKind; //显示标志,为1时显示详细过程,非1时只显示简略过程
char ArrOrDep; //汽车到达或离去的信息,到达为A,离去为D,E表示结束
float CurCarSize; //当前类型汽车占用空间
CarInfo _tem; //临时存储数据
CarInfo *tem=&_tem; //指向_tem的指针
//-------------------------------------------------------------------------------------------------
//程序启动小动画
void Flash(void);
//设置相关参数
Status SetOpitions(void);
//显示开始信息
int DisplayInfo(void);
//向指定变量中写入系统时间
void WriteTime(struct tm *temp);
//从栈S中查找与所给参数中两个相匹配的项,若找到则返回TRUE,否则返回FALSE
Status CarInfoCorrStack(SqStack* S,CarInfo *temp);
//从队列Q中查找与所给参数中两个相匹配的项,若找到则返回TRUE,否则返回FALSE
Status CarInfoCorrQueue(LinkQueue* Q,CarInfo *temp);
//判断某一车型的汽车现在是否可以进入栈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);
//函数名: Flash
//功能: 打印欢迎动画
//输入参数: 无
//返回参数: 无
void Flash(void)
{
int i;
int j;
int k;
for(i=61;i>=20;i--)
{ //循环延时
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
//函数名: DisplayInfo
//功能: 在程序开始调用,显示说明
//输入参数: 无
//返回值: 类型(int)
// 0 "用于结束函数运行"
int DisplayInfo(void)
{ //显示开始信息
int Key; //接收sleep的返回值
system("cls"); //清屏
int i;
printf("********************************************************************************");
printf(" 欢迎使用停车场管理模拟程序 ");
printf("********************************************************************************");
printf("\n以下为使用说明:\n\n");
printf("||* 开始时可以设置相关参数,若使用默认设置请直接选择退出 ||");
printf("||* 输入格式: ||");
printf("||* 汽车进入则输入(进入或离开,汽车牌号,汽车类型) ||");
printf("||* A表示汽车进入,D表示离开 ||");
printf("||* 汽车牌号必须为整形变量 ||");
printf("||* 汽车类型分为A,B,C三种,其占用空间分别为2,1.5,1 ||");
printf("||* 且不同类型的汽车占用空间不同,收费也不同,费用可在设置菜单中进行设置 ||");
//printf("\n");
printf("||* 功能选项: ||");
printf("||* E:退出 ||");
printf("||* L:显示停车场和便道中的车辆 ||\n");
printf("********************************************************************************");
printf("按回车键进入设置菜单...\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键按下,则退出函数
return 0;
else if(Key==2)
{ //若回车被按下
SetOpitions();
return 0;
}//else
}//for(
return 0;
}//DisplayInfo
//函数名: SetOpitions
//功能: 作为程序开始时调用函数,用来设置各种变量
// 设置ParkingSize(extern unsigned int) 全局变量 "public.h中定义,栈的大小"
// DisplayKind(extern unsigned int) 全局变量 "public.h定义,显示标志,详细为1,简洁为非1
// Fee_Stack_A(extern float) 全局变量 "public.h定义,用于数据计算"
// Fee_Stack_B(extern float) 全局变量 "public.h定义,用于数据计算"
// Fee_Stack_C(extern float) 全局变量 "public.h定义,用于数据计算"
// Fee_Queue_A(extern float) 全局变量 "public.h定义,用于数据计算"
// Fee_Queue_B(extern float) 全局变量 "public.h定义,用于数据计算"
// Fee_Queue_C(extern float) 全局变量 "public.h定义,用于数据计算"
// 函数中使用goto来跳出深层循环
//输入参数: 无
//返回值: 类型(enum Status)
// TRUE 用于结束函数运行
Status SetOpitions(void)
{ //设置相关参数
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(" 设置相关参数 ");
printf("********************************************************************************");
printf("||* 请选择要设置的选项(直接退出采取默认设置):\n");
printf("||* 1.设置停车场空间大小\n");
printf("||* 2.设置各种费用\n");
printf("||* 3.设置显示信息类型\n");
printf("||* 4.恢复默认设置\n");
printf("||* 5.退出\n");
printf("********************************************************************************");
while(1)
{ //循环,直到选择"退出"选项
switch((int)(getch()-48))
{ //根据IntKey选择不同的设置
case 1:
{ //设置停车场空间大小
system("cls"); //清屏
printf("********************************************************************************");
printf(" 重新设置停车场空间 ");
printf("********************************************************************************");
printf("\n||* 请输入新的停车场空间大小:");
scanf("%d",&ParkingSize);
ParkingSize=abs(ParkingSize);
printf("******停车场空间被重置为%d!******\n",ParkingSize);
sleep(2);
goto loop1;
};break;
case 2:
{ //设置各种费用
system("cls"); //清屏
printf("********************************************************************************");
printf(" 重新设置费用 ");
printf("********************************************************************************");
printf("||* 各项费用应为正数,若输入数值非法,则自动更正为绝对值!\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:
{ //设置显示信息方式
system("cls");
printf("********************************************************************************");
printf(" 设置显示方式 ");
printf("********************************************************************************");
printf("\n\n||* 1.显示详细信息");
printf("\n||* 2.显示简略信息\n");
printf("*******默认显示方式为详细*******\n");
IntKey=(int)getch();
if(IntKey-48==2)
{ //若按下的键为0
DisplayKind=0;
printf("\n\n显示方式已设置为简略!\n");
sleep(2);
}//if((
else if(IntKey-48==1)
{ //若按下的键为1
DisplayKind=1;
printf("\n\n显示方式已设置为详细!\n");
sleep(2);
}//else if
goto loop1;
};break;
case 4:
{ //恢复默认设置
system("cls"); //清屏
ParkingSize=10; //设定停车场空间大小为10
Fee_Stack_A=2; //设置A在停车场中费用为2
Fee_Stack_B=1.5; //设置B在停车场中费用为1.5
Fee_Stack_C=1; //设置C在停车场中费用为1
Fee_Queue_A=0.5; //设置A在便道中费用为0.5
Fee_Queue_B=0.4; //设置B在便道中费用为0.4
Fee_Queue_C=0.3; //设置C在便道中费用为0.3
printf("已恢复到默认信息!\n");
sleep(2);
goto loop1;
};break;
case 5:printf("退出设置菜单...\n");sleep(2);return TRUE;
default:printf("请在1~5之间选择!\n");
}//switch
}//whiel(1)
return TRUE;
}
//函数名: WriteTime
//功能: 向temp(struct tm)中写入系统时间(分钟和秒)
//输入参数: temp(struct tm*) "写入数据的变量"
//返回值: 无
void WriteTime(struct tm *temp)
{ //向指定变量中写入系统时间
time_t timep;//定义timep变量
struct tm* tem_time; //得到转换时间格式后的地址,不允许free
tem_time=(struct tm*)malloc(sizeof(struct tm));
time(&timep); //获得系统当前时间
tem_time=gmtime(&timep); //转换为UTC格式
temp->tm_hour=tem_time->tm_hour; //小时
temp->tm_min=tem_time->tm_min; //分钟
temp->tm_sec=tem_time->tm_sec; //秒
}//WriteTime
//函数名:CarInfoCorrStack
//功能:从栈S中查找与所给参数中两个相匹配的项,若找到则返回TRUE,否则返回FALSE
//输入参数: SqSTack* S "指向栈S的指针"
// CarInfo* temp "temp中包含所要查找的数据:"
// "unsigned int temp->CarNum,enum _CarKind temp->CarKind"
//返回值: 类型(enum Status)
// TRUE "在栈S中找到与所给参数相匹配的项"
// FALSE "在栈S中未找到与所给参数相匹配的项"
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
//函数名:CarInfoCorrQueue
//功能:从队列Q中查找与所给参数中两个相匹配的项,若找到则返回TRUE,否则返回FALSE
//输入参数: Q(LinkQueue *) "指向栈S的指针"
// temp(CarInfo *) "temp中包含所要查找的数据:"
// "unsigned int temp->CarNum,enum _CarKind temp->CarKind"
//返回值: 类型(enum Status)
// TRUE "在栈S中找到与所给参数相匹配的项"
// FALSE "在栈S中未找到与所给参数相匹配的项"
Status CarInfoCorrQueue(LinkQueue* Q,CarInfo *temp)
{
QueuePtr p;
if(QueueEmpty(Q)==TRUE)
return FALSE; //若队列为空,返回FALSE
p=Q->front->next;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -