C++类下的学习——模拟电梯的实现

实现功能

模拟电梯的升降,对输入楼层进行排序判断在哪一楼层停留。
可控制停留间隔时间。

代码实现

#include<iostream> 
#include<unistd.h> 
#include<stdlib.h> 
#include<windows.h>         
using namespace std; 

class elevator{                                         //可以尝试将choice和now变量转化为私有类型
 public: 
  void display (int now); 
  elevator(int);  
  void get_choice ();
  void chose(int chose);
  void get_want ();
  void loop ();
  int choice;
  int now;
 private:                      
  int want; 
  void upstairs(int want); 
  void downstairs(int want); 

};  

class elevator2 : public elevator
{
    public:
        void get_num ();
        void get_stairs ();
        void loop ();
        elevator2 (int i) : elevator (i) {}
    private:
        int num;
        int wants[];
        void inorder ();
};

void elevator2 :: get_num ()
{
    cout << "请输入一共有几人乘坐电梯:" ;
    cin >> num;
}

void elevator2 :: get_stairs ()
{
    for (int i = 0; i < num; i ++)
    {
        cout << "第" << i + 1 << "个人去:" ;
        cin >> wants[i];
    }
}

void elevator2 :: inorder ()
{
    int i, j, t;
    for (i = 1; i < num; i ++)
        for (j = 0; j < num - i; j ++)
            if (wants [j] > wants [j + 1])
            {
                t = wants [j];
                wants [j] = wants [j + 1];
                wants [j + 1] = t;
            }
}

void elevator2 :: loop ()
{
    get_choice ();
    while (choice > 0 && choice < 3)
    {
        get_num ();
        get_stairs ();
        inorder ();

        if (choice == 1)
        {
            for (int i = 0; i < num; i ++)
            {
                chose (wants[i]);   
            }
        }
        else if (choice == 2)
        {
            for (int i = num - 1; i >= 0; i --)
            {
                chose (wants [i]);
            }
        }

        display (now);
        get_choice ();
    }
    if (choice != 3)
    {
        cout << "输入不合法!" << endl;
    }
}

void elevator :: upstairs(int want){                     //上下楼梯可以添加比较,当有多人去相同楼层时,只保存一个数据
    if (now < want)
    {
        for (now; now < want; now ++){ 
        cout << "--" << now << "--" << endl; 
        Sleep(1000); 
        } 
        cout << "第" << want << "层到了" <<endl; 
    }
    else if (now == want)  cout << "第" << want << "层到了" << endl;
}  


void elevator :: downstairs(int want) {   
    if (now > want)
    {
        for (now; now > want; now --) 
        { 
          cout << "--" << now << "--" << endl; 
          Sleep (1000); 
        } 
        cout << "第" << want << "层到了" <<endl; 
    }
    else if (now == want)  cout << want << "层到了" << endl;
}  


void elevator :: display ( int now ) {          
 cout << "该电梯一共 10 层,当前您在" << now << "层" <<endl; 
 cout << "---请选择操作----" << endl; 
 cout << "| 1.上升        |" << endl; 
 cout << "| 2.下降        |" << endl; 
 cout << "| 3.退出        |" << endl; 
 cout << "-----------------" << endl; 
}


void elevator :: loop ()
{
    get_choice ();
    while (choice > 0 && choice <= 2)
    {
        cout << "输入想要去的楼层:" ;
        cin >> want;
        chose (want);
        display (now);
        get_choice ();
    }
    if (choice != 3)
    {
        cout << "输入不合法!" ;
    }
}


void elevator :: chose(int want)
{
        switch (choice) 
        { 
             case 1: 
              if (now <= want)   upstairs (want); 
              else { 
                   cout << "请重新输入:" << endl; 
                   display (now); 
                   loop (); 
              } 
              break; 

             case 2: 
              if (now >= want)   downstairs (want); 
              else { 
                   cout <<"请重新输入:" << endl; 
                   display (now); 
                   loop (); 
              } 
              break; 
         }
         now = want;
}  

void elevator :: get_choice ()
{
    cin >> choice;
}

void elevator :: get_want ()
{
    cout << "请输入要去的楼层:" ;
    cin >> want;
}


elevator :: elevator(int n){            
 now = n; 
 SYSTEMTIME syst; 
    GetLocalTime(&syst); 
    cout<< syst.wYear <<"年"<< syst.wMonth <<"月"<< syst.wDay <<"日"<< syst.wHour <<":"<< syst.wMinute <<":"<< syst.wSecond << endl; 
}  


int main() { 
    elevator2 elevator (1);
    elevator.display (1);
    elevator.loop ();
    return 0; 
}

运行结果示例

这里写图片描述

  • 20
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值