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

📄 building.h

📁 关于一个五层楼的电梯模型,关于栈与队列的应用,内有实验报告.
💻 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 + -