⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tccgl.h

📁 数据结构课程设计,实现一个停车场管理模拟的小程序,主要是对栈和队列的经典操作
💻 H
📖 第 1 页 / 共 3 页
字号:
/*************************************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 + -