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

相关文章
【期末不挂科-单片机考前速过系列P6】(第六章:10题速过定时计数器的结构和工作方式例题)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P6】(第六章:10题速过定时计数器的结构和工作方式例题)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P7】(第七章:11题速过串行口基本概念/结构/工作方式/双机通信例题)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P7】(第七章:11题速过串行口基本概念/结构/工作方式/双机通信例题)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P5】(第五章:11题速过中断系统和中断系统结构)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P5】(第五章:11题速过中断系统和中断系统结构)经典例题盘点(带图解析)
|
7月前
|
存储 芯片
【期末不挂科-单片机考前速过系列P11】(第十一章:15题速过串行口的工作原理和应用)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P11】(第十一章:15题速过串行口的工作原理和应用)经典例题盘点(带图解析)
|
7月前
|
C++ 内存技术
【期末不挂科-单片机考前速过系列P8】(第八章:21题速过AT89S51单片机的内部硬件结构)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P8】(第八章:21题速过AT89S51单片机的内部硬件结构)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P10】(第十章:11题中断系统的工作原理及应用)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P10】(第十章:11题中断系统的工作原理及应用)经典例题盘点(带图解析)
|
7月前
|
算法 数据处理 芯片
【期末不挂科-单片机考前速过系列P9】(第九章:6题速过单片机概述)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P9】(第九章:6题速过单片机概述)经典例题盘点(带图解析)
|
7月前
|
存储 芯片
【期末不挂科-单片机考前速过系列P12】(第十二章:单片机的并行拓展例题)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P12】(第十二章:单片机的并行拓展例题)经典例题盘点(带图解析)
|
算法
|
算法 算法框架/工具
图论算法实例分析|趣味象棋
图论(graph theory)是数学的一个分支,以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。
130 0
图论算法实例分析|趣味象棋