C++实验一:类与对象——电梯

简介: 编写一个程序,模拟电梯的功能。功能接口包括电梯上行按钮、下行按钮、楼层选择和电梯在行驶过程中的楼层显示。要求: 1.由用户选择按上行按钮还是下行按钮,选择操作后再由用户输入要进入的楼层,进而电梯开始运行,显示所到的每一楼层层数。 2.如果是上行,则选择输入的楼层好不能比当前楼层号小,否则应给出不合法提示。 3. 如果是下行,则选择输入的楼层好不能比当前楼层号大,否则应给出不合法提示。4.电梯一旦开始运作就会始终运行,直到窗口关闭。5.电梯在经过不同楼层时,最好每个楼层的显示之间能有延迟,最终停靠

一、实验目的

1)掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的封装性;

2)掌握类对象的定义;

3)理解类的成员的访问控制的含义,公有、私有和保护成员的区别;

4)掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数;

二、实验原理介绍

通过建立类及对象,用类的成员函数和对象访问类的成员;

利用建立类的构造函数,完成类的成员的初始化工作;

三、实验设备介绍

软件需求: 支持C++程序编辑、编译和运行的软件

硬件需求: 处理器i3、内存2G以上计算机一台。

四、实验内容

编写一个程序,模拟电梯的功能。功能接口包括电梯上行按钮、下行按钮、楼层选择和电梯在行驶过程中的楼层显示。

要求:

1.由用户选择按上行按钮还是下行按钮,选择操作后再由用户输入要进入的楼层,进而电梯开始运行,显示所到的每一楼层层数。

2.如果是上行,则选择输入的楼层好不能比当前楼层号小,否则应给出不合法提示。

3. 如果是下行,则选择输入的楼层好不能比当前楼层号大,否则应给出不合法提示。

4.电梯一旦开始运作就会始终运行,直到窗口关闭。

5.电梯在经过不同楼层时,最好每个楼层的显示之间能有延迟,最终停靠的楼层的输出形式能更加醒目。如果可以,在电梯最初开始运行时,能在电梯由内部显示当前日期(提示:实现这些功能时,需要调用系统api,实现时间显示功能必须使用课堂演示实例CDate类)。

五、 程序清单

#include<iostream>
#include<windows.h>
#include<ctime>
#pragma warning(disable : 4996)
using namespace std;
class Elevator
{
private:
  int floor;  //电梯总的楼层数
  int currentFloor; //当前所在楼层
  void setFloorNumber(int floorNumber);  //根据要进入的楼层电梯开始运行,并逐层显示经过的楼层
public:
  Elevator(int floor);
    void setUpButton(int n);   //按下上行按钮
  void setDownButton(int n);  //按下下行按钮
  int getCurrentFloor(); //获得当前所在楼层
};
Elevator::Elevator(int floor) {
  currentFloor = 1;
  this->floor = floor;
};
void Elevator::setUpButton(int n) {
  if (n >= 1 && n <= floor)
    if (n > currentFloor)
      setFloorNumber(n);
    else
      cout << "您不能上行!" << endl << endl;
  else
    cout << "您选择的楼层不存在" << endl << endl;
};
void Elevator::setDownButton(int n) {
  if (n >= 1 && n <= floor)
    if (n < currentFloor)
      setFloorNumber(n);
    else
      cout << "您不能下行!" << endl << endl;
  else
    cout << "您选择的楼层不存在" << endl << endl;
};
void Elevator::setFloorNumber(int floorNumber) {
  if (floorNumber > currentFloor)
    for (int i = currentFloor; i < floorNumber; i++)
      cout << "--" << i << "--" << endl << endl, Sleep(1000);
  else
    for (int i = currentFloor; i > floorNumber; i--)
      cout << "--" << i << "--" << endl << endl, Sleep(1000);
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED );
  cout << "第" << floorNumber << "层到了" << endl << endl;
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
  currentFloor = floorNumber;
};
int Elevator::getCurrentFloor() { //获得当前所在楼层
  return currentFloor;
};
int main() {
  time_t timer;
  time(&timer);
  tm* t_tm = localtime(&timer);
  int year = t_tm->tm_year + 1900;//年
  int month = t_tm->tm_mon + 1;//月
  int day = t_tm->tm_mday;//日
  int wday = t_tm->tm_wday;//一周中的第几天
  cout << "今天是" << year << "年" << month << "月" << day << "日 "  << endl;
  cout << "该电梯一共10层,欢迎您的使用!" << endl << endl;
  int a, b;
  Elevator p(10);
  while (true) {
    cout << " ---请选择操作---" << endl << "|1.上升          |" << endl << "|2.下降          |" << endl << "|3.退出          |" << endl << " ----------------" << endl;
    cin >> a;
    if (a == 1) {
      cout << "当前电梯停在" << p.getCurrentFloor() << "层" << endl << "请输入要进入的楼层" << endl;
      cin >> b;
      p.setUpButton(b);
    }
    else if (a == 2) {
      cout << "当前电梯停在" << p.getCurrentFloor() << "层" << endl << "请输入要进入的楼层" << endl;
      cin >> b;
      p.setDownButton(b);
    }
    else if (a == 3)
      exit(0);
    else
      cout << "您的选择有误,不能操作!" << endl << endl;
  };
  return 0;
};

image.gif

六 、运行结果

image.gif编辑

输出年月日,然后需要上升电梯输入1,输入要到的楼层为4,从而到达楼层;下降电梯输入2,输入将要到达的楼层3,电梯又开始运行;电梯在3层,输入1要上升,并且上升到第1层,此时就不能上升,输出了不能上行,要重新输入1上升还是2下降,从而继续开始电梯的升降。

七 、实验总结

   将Elevator的类进行加工,进一步学会了怎样创建类和类对象,通过查找资料也进一步了解了系统时间的输出,还有字体颜色的加工。用老师给的程序结果,不断重复更改自己的程序,将自己的程序进行完善,学会了怎样调试。通过类的编写,又深刻的将类函数等的调用进行了复习,与函数的封装性。

相关文章
|
9天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
36 4
|
10天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
33 4
|
1月前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
27 4
|
1月前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
23 4
|
1月前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
21 1
|
1月前
|
存储 编译器 C语言
【C++打怪之路Lv3】-- 类和对象(上)
【C++打怪之路Lv3】-- 类和对象(上)
17 0
|
1月前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)
|
1月前
|
编译器 C++
【C++类和对象(中)】—— 我与C++的不解之缘(四)
【C++类和对象(中)】—— 我与C++的不解之缘(四)
|
1月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
23 3
|
1月前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
53 1