📄 building.h
字号:
#include "main.h"
#include "Client.h"
#include "wqueue.h"
#include "Elevator.h"
void InOut(Elevator &E,WQueue w[Maxfloor+1][2]) {
//进行乘客的进出电梯活动
//注意:电梯时期要正确,否则乘客无法进入。
Client *p;
if(E.CallCar[E.floor]) //人要从电梯中走出
if(StackEmpty(E.S[E.floor])) E.CallCar[E.floor]=0;
else {//当前层的乘客栈非空,出电梯
Pop(E.S[E.floor],p);E.ClientNumber--;
InOutCount=InOutTime;
PrintClientInfo(*p,Out);
TotalTime+=Time-CInTime(*p);
DestoryClient(p);
}//else
if(E.CallCar[E.floor]==0) //有人要走入电梯
if(!QueueEmpty(w[E.floor][E.Stage])) {//若队列不空,继续进电梯
DeQueue(w[E.floor][E.Stage],p);
Push(E.S[COutfloor(*p)],p);
if(E.CallCar[COutfloor(*p)]!=1) {
//按下要去楼层的按钮
E.CallCar[COutfloor(*p)]=1;
}
E.ClientNumber++;
InOutCount=InOutTime;
PrintClientInfo(*p,In);
}//if
else {//乘客的进出活动已完成
if(E.Stage==Down) E.CallDown[E.floor]=0;//将相应的下降按钮取消
else E.CallUp[E.floor]=0;//将相应的上升按钮取消
}
}
void NewClient(Elevator &E,WQueue w[5][2]) {
//进入新乘客
Client *p;
CreatClient(p);//新的乘客
//将该乘客插入相应队列并按下相应按钮(Up/Down)
if(GoAbove(*p)) {
EnQueue(w[CInfloor(*p)][Up],p);E.CallUp[CInfloor(*p)]=1;
}
else {
EnQueue(w[CInfloor(*p)][Down],p);E.CallDown[CInfloor(*p)]=1;
}//else
}
/**********************************************************/
void PrintStatus(Elevator &E,WQueue w[5][2]) {
//输出当前状态
for(int i=Maxfloor;i>=0;i--){
cout<<"第"<<setw(2)<<i<<"层";
if(i==Maxfloor) cout<<"↓";
else cout<<"↑";
if(i==Maxfloor) {
PrintQueue(w[i][Down]);
cout<<"‖";
PrintStack(E.S[i]);
cout<<endl;
}
if(i==0) {
PrintQueue(w[i][Up]);
cout<<"‖";
PrintStack(E.S[i]);
cout<<endl;
}
if(i!=Maxfloor&&i!=0) {
PrintQueue(w[i][Up]);
cout<<"‖";
PrintStack(E.S[i]);
cout<<endl<<" ↓";
PrintQueue(w[i][Down]);
cout<<"‖";
cout<<endl;
}
}
}
void Print(Elevator &E,Action a) {
//输出电梯动作信息
switch(a) {
case DoorOpened:
cout<<Time<<"\t电梯门已打开"<<endl;break;
case DoorClosed:
cout<<Time<<"\t电梯门已关闭"<<endl;break;
case Achieved:
cout<<Time<<"\t电梯已到达第"<<E.floor<<"层。"<<endl;break;
case GoingUp:
cout<<Time<<"\t电梯上升中..."<<endl;break;
case GoingDown:
cout<<Time<<"\t电梯下降中..."<<endl;break;
default:break;
};//switch
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -