📄 elevator.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 + -