📄 tccgl.h
字号:
//返回值: 类型(enum Status)
// TRUE "栈非空,并成功显示"
// FALSE "栈为空"
Status List_Stack(SqStack *S)
{ //列出停车场中汽车牌号,汽车型号,进入时间
CarInfo* temp; //临时变量,未分配空间
char CarKindKey; //汽车类型
float CarSize; //汽车占地空间
temp=S->top-1;
if(StackEmpty(S)==TRUE)
{ //若栈为空
system("cls");
sleep(1);
printf("**************************************停车场************************************");
printf("停车场中没有汽车\n");
printf("\n--------------------------------------------------------------------------------\n");
sleep(2);
return FALSE; //如果栈为空则返回FALSE
}//if(Sta
else
{ //若栈非空
system("cls"); //清屏
sleep(1);
printf("**************************************停车场************************************");
printf("汽车牌号\t 汽车型号\t 所占空间\t 进入停车场时间\n");
sleep(2);
while(temp!=S->base-1)
{ //访问栈的全部内容
if(temp->CarKind==A)
{ //车型为A
CarKindKey='A'; //显示为A型车
CarSize=2; //所占空间为2
}//if
else if(temp->CarKind==B)
{ //车型为B
CarKindKey='B'; //显示为B型车
CarSize=1.5; //所占空间为1.5
}//else if
else if(temp->CarKind==C)
{ //车型为C
CarKindKey='C'; //显示为C型车
CarSize=1; //所占空间为1
}//else if
sleep(1);
printf("%-8d\t %-8c\t %-8.1f\t %2d时%2d分\n",
temp->CarNum,CarKindKey,CarSize,
temp->ArrTime->tm_min%24,temp->ArrTime->tm_sec);
temp--;
}//while
}//else
printf("\n--------------------------------------------------------------------------------\n");
sleep(2);
return TRUE;
}//List_Stack
//函数名: List_Queue
//功能: 将队列Q中信息在屏幕上显示
//输入参数: Q(LinkQueue *) "要处理队列"
//返回值: 类型(enum Status)
// TRUE "队列Q非空,成功显示信息"
// FALSE "队列Q为空"
Status List_Queue(LinkQueue* Q)
{//显示便道中的汽车信息
QueuePtr temp; //临时变量,不分配空间,不能用free进行释放
char CarKindKey; //汽车类型
float CarSize; //车辆占地空间
temp=Q->front->next;
if(QueueEmpty(Q)==TRUE)
{ //若队列为空
//system("cls");
sleep(1);
printf("***************************************便道*************************************");
printf("便道中没有汽车\n");
printf("\n--------------------------------------------------------------------------------\n");
return FALSE; //如果队列为空则返回FALSE
}//if(Que
else
{ //若队列非空
//system("cls"); //清屏
sleep(1);
printf("***************************************便道*************************************");
printf("汽车牌号\t 汽车型号\t 所占空间\t 进入便道时间\n");
sleep(2);
while(temp!=NULL)
{ //访问队列的全部内容
if(temp->data.CarKind==A)
{ //车型为A
CarKindKey='A'; //显示为A型车
CarSize=2.000000; //所占空间为2
}//if
else if(temp->data.CarKind==B)
{ //车型为B
CarKindKey='B'; //显示为B型车
CarSize=1.500000; //所占空间为1.5
}//else if
else if(temp->data.CarKind==C)
{ //车型为C
CarKindKey='C'; //显示为C型车
CarSize=1.000000; //所占空间为1
}//else if
sleep(1);
printf("%-8d\t %-8c\t %-8.1f\t %2d时%2d分\n",
temp->data.CarNum,CarKindKey,CarSize,
temp->data.ArrTemTime->tm_min%24,temp->data.ArrTemTime->tm_sec);
temp=temp->next;
}//while
}//else
printf("\n--------------------------------------------------------------------------------\n");
return TRUE;
}//List_Queue
//函数名: CarGetInStack
//功能: 检查栈中数据,若栈中已有相同的数据则返回错误信息
// 若栈中没有该数据且有足够存放数据的空间,则将数据放进栈中
// 若栈空间不足,则将数据放入队列Temroad(LinkQueue* )全局变量中
//输入参数: L(SqStack *) "指向要处理的栈"
// temp(CarInfo* ) "指向要处理的数据"
//返回值: 类型(enum Status)
// TRUE "数据成功入栈"
// FALSE "数据未成功入栈"
Status CarGetInStack(SqStack* L,CarInfo *temp)
{//汽车进入
if(SearchCarFromStack(L,temp->CarNum)==TRUE)
{ //若停车场中车号为CarNum的汽车已经存在
printf("该车号已经存在于停车场中!\n");
return(FALSE);
}//if
else
{ //若该车号汽车未进停车场
if(CanCarGetInStack(Parking,temp->CarKind)==FALSE)
{ //若停车场没有足够空间停放该车
if(SearchCarFromQueue(Temroad,temp->CarNum)==FALSE)
{//若在便道中没有该车
EnQueue(Temroad,temp); //将该车停入便道
WriteTime(temp->ArrTemTime);//将进入便道时间写入
if(DisplayKind==1) //若显示类型为详细
printf("停车场没有足够空间,该车停入便道%d号位置等候...\n",QueueLength(Temroad));//GetCarPosInQueue(Temroad));
}//if(Sear
else
{//若该车号已在便道中存在
printf("车号为%d的汽车已经在便道中!\n",temp->CarNum);
}//else
return FALSE;
}//if
else
{ //若停车场有足够空间停放该车
if(temp->CarKind==A) //类型为A
CurCarSize=2; //所占空间为2
else if(temp->CarKind==B) //类型为B
CurCarSize=1.5; //所占空间为1.5
else //类型为C
CurCarSize=1; //所占空间为1
Push(L,temp); //当前车辆入栈
L->stacksize+=CurCarSize;
WriteTime(temp->ArrTime); //写入时间
if(DisplayKind==1)
{ //若显示类型为详细
if(temp->CarKind==A)
printf("车牌号为%d的大型汽车在%d时%d分停入停车场%d号位置!\n",temp->CarNum,temp->ArrTime->tm_min%24,temp->ArrTime->tm_sec,StackLength(L));//GetCarPosInStack(L));
else if(temp->CarKind==B)
printf("车牌号为%d的中型汽车在%d时%d分停入停车场%d号位置!\n",temp->CarNum,temp->ArrTime->tm_min%24,temp->ArrTime->tm_sec,StackLength(L));//GetCarPosInStack(L));
else
printf("车牌号为%d的小型汽车在%d时%d分停入停车场%d号位置!\n",temp->CarNum,temp->ArrTime->tm_min%24,temp->ArrTime->tm_sec,StackLength(L));//GetCarPosInStack(L));
return TRUE;
}//else
else
{ //若显示类型为简洁
printf("汽车已停入停车场!\n");
}//else
}//else
}//else
return TRUE;
}//CarGetInStack
//函数名: CarGetOutStack
//功能: 从栈中查找与所给数据相匹配的数据CarNum(unsigned int),若未找到则返回错误信息
// 若找到匹配数据,则将数据从栈中弹出,并调用Charge函数
// 若该匹配数据并非栈顶元素,则先创建一个新栈,将其后数据依次弹出并压入新栈中存储
// 随后弹出该匹配数据并删除,然后将新栈中数据弹出压回原栈
// 检查队列Temroad(LinkQueue *)全局变量,若队列非空,则将其第一个元素出列,压入栈中
//输入参数: L(SqStack *) "指向要处理的栈,一般为全局变量Parking"
// CarNum(unsigned int) "要进行匹配的数据"
//返回值: 类型(enum Status)
// TRUE "找到匹配数据并成功进行操作"
// FALSE "未找到匹配数据"
Status CarGetOutStack(SqStack* L,CarInfo* temp)
{ //若车号为CarNum的汽车在停车场中则离开并返回TRUE,否则返回FALSE
SqStack *TemCarParking; //建立临时停车场,用以放置为要离开汽车让道而暂时退出停车场的汽车
CarInfo _TemCarInfo; //临时存储汽车信息
CarInfo *TemCarInfo=&_TemCarInfo; //初始化一个指向_TemCarInfo的指针
//检查栈中是否有车号为CarNum的车辆
if(SearchCarFromStack(L,temp->CarNum)==FALSE)
{ //若汽车不在停车场中
printf("该汽车不在停车场中!\n");
return FALSE;
}//if
else
{ //若汽车在停车场中
if(CarInfoCorrStack(Parking,temp)==FALSE)
{ //若该车号与类型不匹配
printf("车牌号与车的类型不匹配!请重新输入!\n");
return FALSE;
}//if(Sear
else
{ //若该车号与类型匹配
TemCarParking=(SqStack*)malloc(sizeof(SqStack));
InitStack(TemCarParking);//建立临时停车场
//将该汽车之后进入的汽车全部退出放进临时停车场中
while((L->top-1)->CarNum!=tem->CarNum)
{ //此汽车之后的汽车为其让路
Pop(Parking,TemCarInfo);
Push(TemCarParking,TemCarInfo);
if(DisplayKind==1)
{ //若显示类型为详细
printf("车牌号为%d的汽车为要离开的汽车让路...进入临时停车场\n",TemCarInfo->CarNum);
sleep(1); //延迟
}//if(D
}//while
//向该车信息中的DepTime写入当前系统时间的分钟数和秒数,作为该车离开时间
WriteTime((L->top-1)->DepTime);
Pop(Parking,TemCarInfo); //将该数据弹出,存放到TemCarInfo中提供收费函数所需参数
Charge(TemCarInfo); //调用收费函数
/*
if(DisplayKind==1) //若显示类型为详细
{
;//printf("车牌号为%d的汽车于%d时%d分离开停车场!\n",TemCarInfo->CarNum,TemCarInfo->DepTime->tm_min%24,TemCarInfo->DepTime->tm_sec);
}
else //若显示类型为简洁
printf("汽车已离开停车场!\n");
*/
L->stacksize=L->stacksize-CurCarSize;
//让路汽车返回停车场
while(StackEmpty(TemCarParking)!=TRUE)
{ //当临时停车场不为空时,把为其让路的汽车返回停车场
Pop(TemCarParking,TemCarInfo); //从临时栈中弹出
Push(Parking,TemCarInfo); //压入原栈中
if(DisplayKind==1)
{ //若显示类型为详细
printf("车牌号为%d的汽车从临时停车场中返回停车场...\n",TemCarInfo->CarNum);
sleep(1); //稍延迟
}//if(D
}//wile
//汽车离去后若停车场有充足空间,且便道上有车等候,则让车辆进入停车场中
if((QueueEmpty(Temroad)==FALSE))
{ //若队列非空
GetTopQueue(Temroad,TemCarInfo); //拷贝队首元素检查
if(CanCarGetInStack(Parking,TemCarInfo->CarKind)==TRUE)
{ //如果该车能够进入
DeQueue(Temroad,TemCarInfo); //该车辆离开便道
WriteTime(TemCarInfo->DepTemTime); //写入离开便道时间
CarGetInStack(Parking,TemCarInfo); //该车辆进入停车场
}//if(Can
}//if((Que
}//else
DestroyStack(TemCarParking);//销毁临时停车场
return TRUE;
}//else
}//CarGetOutStack
//函数名: CarGetOutQueue
//功能: 从队列中查找指定数据,若找匹配数据到则将数据之前进入队列的数据重新放至队尾,
// 将该数据置为队首后出队
//输入参数: Q(LinkQueue *) "要处理的队列"
// temp(CarInfo *) "要处理的数据"
//返回值: 类型(enum Status)
// TRUE "找到匹配数据,并将该数据出队"
// FALSE "未找到匹配数据"
Status CarGetOutQueue(LinkQueue* Q,CarInfo* temp)
{ //将汽车从便道中退出
CarInfo* p;
p=(CarInfo*)malloc(sizeof(CarInfo));
if(SearchCarFromQueue(Q,temp->CarNum)==FALSE)
{ //若便道中没有匹配的汽车
printf("未找到该汽车!\n");
return FALSE;
}//if(Sea
else
{ //若在便道中找到该汽车
if(CarInfoCorrQueue(Q,temp)==FALSE)
{//若车号与车的类型不匹配
printf("车牌号与车的类型不匹配!请重新输入!\n");
return FALSE;
}//if(Car
else
{ //若车号与该汽车类型匹配
do
{ //遍历队列Q,直至找到该汽车
GetTopQueue(Q,p);
if(p->CarNum!=temp->CarNum)
{ //若此汽车不是匹配汽车
DeQueue(Q,p); //将该车退出
EnQueue(Q,p); //放入队尾
if(DisplayKind==1)
{ //若显示类型为详细
printf("车牌号为%d的汽车为要从便道中离开的汽车让路,出入便道尾中重新排队!\n",p->CarNum);
sleep(1); //延迟
}//if(D
}//if(p-
else if(p->CarNum==temp->CarNum)
{ //若此汽车是匹配汽车
DeQueue(Q,p); //将其出队
WriteTime(p->DepTemTime); //写入离开时间
Charge(p); //调用收费函数
return TRUE;
}//else
}while(p!=NULL);
}//else
free(p);
return TRUE;
}//else
}//CarGetOutQueue
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -