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

📄 elevator.cpp

📁 这是个电梯模拟系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include"elevator.h"
//////////////////////////////////////////////
//     function definition for class floor
//////////////////////////////////////////////
floors::floors(int floor_number):current_number(floor_number){
 
 int out_people=0;
 in_people_number[UP]=0;
 in_people_number[DN]=0;
 //init_graphics();
 //clear_screen();

}
//--------------------------------------------
void floors::record_rep(){
   char chDirection;
   char ustring[BUF_LENGTH];
   int  people_number;
   cout << "请选择你是上去还是下去 (u or d): ";
   cin.get(chDirection);      
   cin.ignore(10, '\n'); 
   cout << "请输入这层进电梯的人数(最多14人): ";
   cin.get(ustring, BUF_LENGTH);       
   cin.ignore(10, '\n'); 
   people_number = atoi(ustring);
   if(chDirection=='u' || chDirection=='U'){
	   in_people_number[UP]=in_people_number[UP]+people_number;

   } 
   if(chDirection=='d' || chDirection=='D'){
      in_people_number[DN]=in_people_number[DN]+people_number;
   }
   set_cursor_pos(1,17); clear_line();     
   set_cursor_pos(1,18); clear_line();
   set_cursor_pos(1,19); clear_line();
   }  
//--------------------------------------------------------------
int floors::get_floor_in_num(const int dir)const{
    return in_people_number[dir];
}
//--------------------------------------------------------------
void floors::set_floor_in_num(const int dir) {
    in_people_number[dir]=0;
}
//----------------------------------------------
///////////////////////////////////////////////////////////////
//        function definition for class building            //
/////////////////////////////////////////////////////////////////
building::building(){
   char ustring[BUF_LENGTH];
   init_graphics();
   clear_screen();
   number_cars=0;
   for(int k=0;k<NUMBER_CAR;k++){
      car_list[k]=new elevator(this,number_cars);
      number_cars++;
   }
 
   number_floors=0;
   for(int j=0;j<NUMBER_FLOOR;j++){
      ptrFloor[j]=new floors(number_floors);
      number_floors++;
   }
    for(int z=0; z<NUMBER_FLOOR; z++){
      set_cursor_pos(3, NUMBER_FLOOR-z);  
      itoa(z+1, ustring, 10);           
      cout << setw(3) << ustring;
      }

}
//-----------------------------------------

void building::master_tick(){
   show_floor_rep();
   int j;
   for(j=0; j<NUMBER_CAR; j++)         
      car_list[j]->car_tick(); 
   for(j=0;j<NUMBER_CAR;j++)
	   car_list[j]->move();

}
//---------------------------------------------------
void building::record_each_floor_rep(){
   char ch = 'x';            
   char ustring[BUF_LENGTH];  
   int iFloor;                
   
   set_cursor_pos(1,17);      
  cout << "请按 [Enter] 来呼叫电梯: ";
   if( !kbhit() )             
      return;
   cin.ignore(10, '\n');
   if(ch=='\x1B')            
      exit(0);
   set_cursor_pos(1,17); clear_line();  
   set_cursor_pos(1,17);      
   cout << "请输入你现在所在的楼层号: ";
   cin.get(ustring, BUF_LENGTH);        
   cin.ignore(10, '\n');      
   iFloor = atoi(ustring);
    ptrFloor[iFloor-1]->record_rep();
}
//---------------------------------------------------
void building::show_floor_rep()const{ 
   for(int j=0; j<NUMBER_FLOOR; j++){
      set_cursor_pos(SPACING, NUMBER_FLOOR-j);
      if(ptrFloor[j]->in_people_number[UP])
         cout << '\x1E';            
      else
         cout << ' ';
      set_cursor_pos(SPACING+3, NUMBER_FLOOR-j);
      if(ptrFloor[j]->in_people_number[DN])
         cout << '\x1F';             
      else
         cout << ' ';
      }
   } 
//-----------------------------------------------------------
int building::get_cars_floor(const int carNo) const {
  return car_list[carNo]->get_current_floor();
}
//------------------------------------------------------------
direction building::get_cars_dir(const int carNo) const {
 return car_list[carNo]->get_current_dir();
}

//////////////////////////////////////////////////////////////
//           function definition for class elevator         //
///////////////////////////////////////////////////////////////
 elevator::elevator(building* ptrB, int nc) : 
                               ptrBuilding(ptrB), car_number(nc) {
   current_floor = 0;                
   old_floor = 0;                    
   current_dir = STOP;               
   for(int j=0; j<NUMBER_FLOOR; j++)   
      destination[j] = 0;        
   limit_people_number=14;
   current_people_number=0;
 }
void elevator::car_tick(){
   car_display();                    
    destination_display();                
    dicide_next();                         
   } 
//------------------------------------------------------------------
int elevator::get_current_floor() {    
   return current_floor;
   }
//--------------------------------------------------------------
direction elevator::get_current_dir() {                                      
   return current_dir;
   }
//--------------------------------------------------------------
int elevator::get_destination_num(int num){
    return destination[num];
}
//--------------------------------------------------------------
void elevator::set_destination_num(int num){
    destination[num]=0;
}
//--------------------------------------------------------------
void elevator::car_display(){
   set_cursor_pos(SPACING+(car_number+1)*SPACING, NUMBER_FLOOR-old_floor);
   cout << "   "; 
   int in_people_number=0;
   int up_people_number=0;
   int down_people_number=0;
   int out_people_number=0;
   up_people_number=ptrBuilding->ptrFloor[current_floor]->get_floor_in_num(UP);
   ptrBuilding->ptrFloor[current_floor]->set_floor_in_num(UP);
   down_people_number=ptrBuilding->ptrFloor[current_floor]->get_floor_in_num(DN);
   ptrBuilding->ptrFloor[current_floor]->set_floor_in_num(DN);
   out_people_number= get_destination_num(current_floor);
   set_destination_num(current_floor);
   set_cursor_pos(SPACING+(car_number+1)*SPACING, NUMBER_FLOOR-current_floor);
  if(up_people_number||down_people_number){
    if(up_people_number)
        in_people_number=up_people_number;
	if(down_people_number)
		in_people_number=down_people_number;
	for(int i=0;i<in_people_number;i++){
	   set_cursor_pos(SPACING+(car_number+1)*SPACING,NUMBER_FLOOR-current_floor);
	   cout<<"\x3D\x01\x3D";
	   wait(1000);
	   set_cursor_pos(SPACING+(car_number+1)*SPACING,NUMBER_FLOOR-current_floor);
	   cout << "   ";
	}
	set_cursor_pos(SPACING+(car_number+1)*SPACING,NUMBER_FLOOR-current_floor);
	cout<<"\x3D\x3D\x3D";
   get_destination();
   current_people_number+=in_people_number;
   if(current_people_number>=limit_people_number){
     set_cursor_pos(1,17); clear_line();  
     set_cursor_pos(1, 17);
	 cout<<"this elevator is full,please upload the next";
   }
  }
  if(out_people_number){
	  set_cursor_pos(SPACING+(car_number+1)*SPACING,NUMBER_FLOOR-current_floor);
	  cout << "   ";
     for(int i=0;i<out_people_number;i++){
      
	   set_cursor_pos(SPACING+(car_number+1)*SPACING,NUMBER_FLOOR-current_floor);
	    cout<<"\x3D\x01\x3D";
	   wait(1000);
	   set_cursor_pos(SPACING+(car_number+1)*SPACING,NUMBER_FLOOR-current_floor);
	   cout << "   ";
	}
	set_cursor_pos(SPACING+(car_number+1)*SPACING,NUMBER_FLOOR-current_floor);
	cout<<"\x3D\x3D\x3D";
	current_people_number-=out_people_number;
  }
  if(!in_people_number&&!out_people_number) 
	   cout<<"\x3D\x3D\x3D";
  old_floor = current_floor;
   }

							   
//-------------------------------------------------------------
void elevator::destination_display(){                                 
   for(int j=0; j<NUMBER_FLOOR; j++){
      set_cursor_pos(SPACING-2+(car_number+1)*SPACING, NUMBER_FLOOR-j);
      if( destination[j])
         cout << '\x11';             
      else
         cout << ' ';                
      }
   }
//--------------------------------------------------------------
void elevator::get_destination(){
   int dest_floor;                    

⌨️ 快捷键说明

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