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

📄 electorc++.txt

📁 文件中包含了电梯程序的C++语言源代码
💻 TXT
字号:
void Building::SysRun()//Run Run Run Run Run Run Run Run 
{
char key;
do{
     cout<<"\nchoose->";
     key=getch();
     switch(key){
     case ENTER://Create people
             cout<<"Create people..."<<endl;
             SysCreatePeople();
          break;
     case SPACE://The elevator run to next floor
             cout<<"Elevator run to next..."<<endl;
             SysElevatorRunNext();
          break;
     case 'H':
     case 'h':     SysChooseHelp();break;
     case ESC:     //stop
             cout<<"stop!!!"<<endl;
             SysStop();
          break;
     }
}while(key!=ESC);
}

SysCreatePeople 命令生成人,
void Building::SysCreatePeople()
{
       //随机产生
int rfnum=rand() % RANDOM_FLOORS_MAX     +1;
int u,d;
for(int i=0; i<rfnum; i++)
{
       int r=rand() % bfloors;
       u=SysSearchElevatorLeastestUp(r);
          d=SysSearchElevatorLeastestDown(r);
          fVector[r]->CreatePeople(eVector[u],eVector[d]);
    
}
}

SysElevatorRunNext 命令电梯运行到下一层楼,
void Building::SysElevatorRunNext()
{
int floorAt;
       for(int i=0; i<elevatorCount;i++){ //多个电梯都要运行到下一楼层
     Elevator* &ep=eVector[i];
           floorAt=ep->GetFloorAt()+ep->GetStatus();
        Floor* &thisfloor=fVector[floorAt];
        ep->floorAt=floorAt;//!!!!!!!!!!!!!!!!!改名电梯所到楼层
        //the information//输出提示信息
           cout<<" #Elevator No."<<ep->number<<" at floor —("<<ep->floorAt<<")—"<<endl;
        /********************************************/
        bool stop=false; //先设置为不停。为了之后看是否开门,
     int c=0;
     int r=ep->runline[floorAt];//stor
     if(r>0){ //当需要停就执行以下
      switch(ep->status){
      case -1: //down当电梯是向下运动时
       if(r & OUT){      //有人要出
// #define OPENDOOR if(!stop){ ep->BellRing(); ep->OpenDoor();stop=true; }
             OPENDOOR
           ep->PeopleOut();}
       if(r & DOWN){     //有人要进且下
           OPENDOOR
        ep->PeopleEnter(thisfloor->pList[0],0); }//down
       break;
      case     0: //stop电梯是停止的
       if(r==UP){     //有人要进且上
        OPENDOOR
           ep->PeopleEnter(thisfloor->pList[1],1); }//up
       if(r==DOWN){ //有人要进且下
        OPENDOOR
        ep->PeopleEnter(thisfloor->pList[0],0); }//down
       if(r==UP_DOWN){ //上下都有人根据人数确定是该上还是下
        OPENDOOR
        if(fVector[floorAt]->pList[0].size() < fVector[floorAt]->pList[1].size())
            ep->PeopleEnter(thisfloor->pList[1],1); //up
            else
          ep->PeopleEnter(thisfloor->pList[0],0); //down
       }
       break;
      case     1: //up     电梯向上运行
       if(r & OUT) { //有人要出
        OPENDOOR
        ep->PeopleOut(); }
       if(r & UP){ //有人要进且上
        OPENDOOR
        ep->PeopleEnter(thisfloor->pList[1],1); }//up
       break;
      }//END_switch
     }//end_if
     //deel the status of 0
     if(ep->status==0){//电梯是停止的时候
      if(r==TT){     //电梯在此楼层没有人进和,此时要考虑其他楼层
       Time tm,tt;
          int tem=-1;
          tm.CurTime();
          for(int j=0;j<bfloors;j++){
        tt=fVector[j]->GetFistTime();//get the 
           if((ep->runline[j] > 0) && (tm > tt)){
         tm=tt;
            tem=j;     }
       }//end_for
       if(tem!=-1){
           if(tem < floorAt)
            ep->status=-1;
           if(tem > floorAt)
            ep->status=1;
       }//if
      }
         else{//这是在有人出电梯之后电梯电梯里没有人了,而此楼还有人要进,这才能实现同一时段有人出且有人进。
          switch(ep->runline[floorAt]){
           case UP : 
        OPENDOOR
        ep->PeopleEnter(thisfloor->pList[1],1);
        break;
       case DOWN :
        OPENDOOR
        ep->PeopleEnter(thisfloor->pList[0],0);
        break;
       case UP_DOWN :
        OPENDOOR
        if(fVector[floorAt]->pList[0].size() < fVector[floorAt]->pList[0].size())
         ep->PeopleEnter(thisfloor->pList[1],1); //up
        else
         ep->PeopleEnter(thisfloor->pList[0],0); //down
        break;
       }//end_switch
      }//end_if_else
     }//end_if
     if(stop)//开门之后,这里关门
      ep->CloseDoor();//Close Door
     if(floorAt>=(bfloors-1) && ep->status==1)//控制电梯的最高楼层和最低楼层
          ep->status=0;
         else if(floorAt<=0 && ep->status==-1)
          ep->status=0;
}//end_for
}//end_SysElevatorRunNext

SysSearchElevatorLeastestUp 搜索能到达floornum楼层且向上最快到达的电梯,返回电梯号数。
int Building::SysSearchElevatorLeastestUp(int floornum)
{
float *c=new float[elevatorCount];
for(int i=0; i<elevatorCount; i++)
     c[i]=2*elevatorCount;
for(i=0; i<elevatorCount; i++){
     if(eVector[i]->status==1){//elevator up...
      if(eVector[i]->floorAt>=floornum)
       c[i]=2*(bfloors-1-floornum);
      else
       c[i]=floornum-eVector[i]->floorAt;
     }//if
     else if(eVector[i]->status==-1)//elevator down
      c[i]=floornum + eVector[i]->floorAt;
     else                           //elevator is stop
      c[i]=abs(eVector[i]->floorAt-floornum);
}//end_for
int j=0;
for(i=1; i<elevatorCount; i++)
     if(c[i] < c[j]) 
      j=i;
delete []c;
       return j;
}//end_SysSearchElevatorLeastestUP



http://hi.baidu.com/neuwjyou/blog/item/ee8ea0775f34b51ab051b94f.html
  


文件中包含了电梯程序的C语言源代码,以及可执行文件。本电梯程序比较好的模拟了电梯的运行过程!-

⌨️ 快捷键说明

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