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

📄 elevator.cpp

📁 这个程序是对电梯的模拟
💻 CPP
字号:
// Elevator.cpp: implementation of the Elevator class.
//
//////////////////////////////////////////////////////////////////////

#include "Elevator.h"


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

unsigned Elevator::peopleLimit=ELEVATOR_PEOPLE_LIMIT;

Elevator::Elevator(int fcount,int num):number(num),bfloors(fcount)
{
	
	//the runline init
	 int i;
     runline=new int[fcount];
	 for(i=0;i<fcount;i++)
		 runline[i]=TT; //TT=0

	 //the number button vector init
	 Button *pb;
	 for(i=0;i<fcount;i++)
	 {
		 pb=new Button(i);
         numButton.push_back(pb);	 
	 }

	 floorAt=0;//the elevator at 0 floor at init;

	 //door button
	 doorCloseButton.SetCaption(-1);
	 doorOpenButton.SetCaption(1);

	 status=0;//the begining elevator is stop;	     

}//end_Elevator

Elevator::~Elevator()
{
	list<People *>::iterator pit=NULL;
	People *p=NULL;

	delete []runline;
	for(int i=0; i<bfloors; i++){
		delete numButton[i];
	}
		

	while(pList.size() > 0){
		pit=pList.begin();
		p=*pit;
		pList.pop_front();
		if(p!=NULL)
		   delete p;
		}

}

void Elevator::OpenDoor()
{
    cout<<SPACE2<<"No."<<number<<" door open {"<<endl;
}

void Elevator::CloseDoor()
{
    cout<<SPACE2<<"}No."<<number<<"door closed !"<<endl;
}

void Elevator::Stop()
{

}

bool Elevator::IsGetBottom()
{
	return(floorAt==0);

}

bool Elevator::IsGetTop()
{
	return (bfloors-floorAt-1)>0;

}

int Elevator::GetFloorAt()
{
	return floorAt;

}

bool Elevator::IsPeopleOut()
{
	return(runline[floorAt]>0);
}

bool Elevator::IsPeopleEnter()//!!!!!!!!!!!!!!!!!!!
{
    return(runline[floorAt]==-1);

}

void Elevator::PeopleOut() //People Out
{
	list<People *>::iterator p_iter,pitA[10];
	int count=0;

	People *p;
	for(p_iter=pList.begin(); p_iter!=pList.end(); p_iter++)
	{
		if((*p_iter)->to==floorAt){
			p=*p_iter;
			pitA[count++]=p_iter;
		}
		p=NULL;
	}

	if(count>0)
	    cout<<SPACE2<<count<<" people go out"<<endl;

	while(count){
		p=*(pitA[--count]);
		pList.remove(*(pitA[count]));
		if(p!=NULL)
		   delete p;//!!!!!!!!!!!!!!!!!!!!!!!!!
	}

	cout<<SPACE2<<"<> "<<pList.size()<<" people in elevator"<<endl;

	//set runline
	runline[floorAt]-=OUT;

	//set status
    if(pList.size()==0)
		status=0; 

}//PeopleOut



void Elevator::PeopleEnter(list<People *> &pl,int up)//People enter
{
	list<People *>::iterator p_iter;
	People *p;
	int encount=0;
    
    //Traversing people list
	for(p_iter=pl.begin(); (p_iter!=pl.end()) && (pList.size() < peopleLimit); ++p_iter)
	{
		++encount;
        p=*p_iter;		
		
		p->IntoElevator();//enter elevator
			
		//people press number buttom to choose floor 
		if(up==1)
		    p->PressButton(floorAt+1,bfloors-1,2); //peole to up
		else  
			p->PressButton(0,floorAt-1,2);	//peole to down

        //out put infomation and light on the number button
		cout<<" to "<<p->to<<" & ";
		numButton[p->to]->LightOn();

		//add OUT 
		if(!(runline[p->to] & OUT))
			runline[p->to]+=OUT;

		pList.push_back(p);//add floor people
		p=NULL;
	}//for

	cout<<SPACE2<<"<> "<<pList.size()<<" people in elsevator"<<endl;

	while(encount--)
		pl.pop_front();

    //set runline
    if(pl.size()==0)
		if(up==1)
			runline[floorAt]-=UP; 
		else
			runline[floorAt]-=DOWN; 


	// status   -1   0    1
	// (up)1     X   1    1
	// (up)0    -1   -1   X   <-1—down; 1—up; X—No this status>
	status=(up? 1:-1);//change this status is for up or down
}

int Elevator::GetStatus()
{
	return status;

}

void Elevator::BellRing()
{
	bell.Ring();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -