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

相关文章
|
3天前
|
设计模式 安全 算法
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
14 0
|
2天前
|
编译器 C++
【C++】继续学习 string类 吧
首先不得不说的是由于历史原因,string的接口多达130多个,简直冗杂… 所以学习过程中,我们只需要选取常用的,好用的来进行使用即可(有种垃圾堆里翻美食的感觉)
7 1
|
2天前
|
算法 安全 程序员
【C++】STL学习之旅——初识STL,认识string类
现在我正式开始学习STL,这让我期待好久了,一想到不用手撕链表,手搓堆栈,心里非常爽
9 0
|
2天前
|
存储 安全 测试技术
【C++】string学习 — 手搓string类项目
C++ 的 string 类是 C++ 标准库中提供的一个用于处理字符串的类。它在 C++ 的历史中扮演了重要的角色,为字符串处理提供了更加方便、高效的方法。
7 0
|
3天前
|
Java C++ Python
【C++从练气到飞升】06---重识类和对象(二)
【C++从练气到飞升】06---重识类和对象(二)
|
3天前
|
编译器 C++
【C++从练气到飞升】06---重识类和对象(一)
【C++从练气到飞升】06---重识类和对象(一)
|
3天前
|
存储 编译器 C语言
【C++从练气到飞升】02---初识类与对象
【C++从练气到飞升】02---初识类与对象
|
3天前
|
设计模式 算法 编译器
【C++入门到精通】特殊类的设计 |只能在堆 ( 栈 ) 上创建对象的类 |禁止拷贝和继承的类 [ C++入门 ]
【C++入门到精通】特殊类的设计 |只能在堆 ( 栈 ) 上创建对象的类 |禁止拷贝和继承的类 [ C++入门 ]
8 0
|
5天前
|
C语言 C++
【C++】string类(常用接口)
【C++】string类(常用接口)
13 1
|
3天前
|
算法 安全 调度
【C++入门到精通】 线程库 | thread类 C++11 [ C++入门 ]
【C++入门到精通】 线程库 | thread类 C++11 [ C++入门 ]
13 1