C++课程设计:电梯控制系统程序设计

目录

电梯控制系统程序设计背景

类结构图

程序设计

程序释义

运行展示

总结与体会


电梯控制系统程序设计背景

电梯控制系统程序设计旨在通过C++编程实现电梯的模拟功能,使用户能够选择上行或下行,并输入要进入的楼层,程序将模拟电梯运行过程并显示经过的每一楼层层数。同时,要求电梯的输入和运行有一定的限制条件,并且在显示楼层时具有一定的延迟效果,以及能在开始运行时显示当前日期。

基本功能要求:

  1. 提供用户界面,让用户选择上行或下行操作,并输入要进入的楼层。
  2. 对用户输入的楼层号进行合法性检查,确保上行时输入的楼层号不小于当前楼层,下行时输入的楼层号不大于当前楼层。
  3. 模拟电梯的运行过程,显示经过的每一楼层层数,并在最终停靠的楼层的输出形式上加以突出显示。
  4. 在电梯开始运行时,显示当前日期。
  5. 程序运行直到用户关闭窗口,即电梯一旦开始运作就会持续运行。

类结构图

有专门的软件去制作UML图,这里我们就采用Vistual Studio来得到UML图。

 可通过搜索框搜索Vistual Studio Installer,另外一种通过VS里面的顶部导航栏:工具——>获取工具和能力打开。

勾选并下载,VS会重启,完成后再次打开。

在单个组件中搜索"类设计器"

再次修改即可,然后就能使用VS来得到UML图了。

右键点击解决方案资源管理器,点击查看,查看类图。

程序设计

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;class ELEVATOR {
private:int now_floor_e;int now_floor_p;int want_floor;bool choice;             //上下行std::vector floor_history; // 记录经过的楼层public:int all_floor;ELEVATOR() {now_floor_e = 1;   //表示电梯当前所在的楼层now_floor_p = 1;   //表示乘客在电梯内的当前楼层want_floor = 1;    //表示乘客想要去的楼层all_floor = 10; choice = true;     }int start() {displayDate();                                //首先显示当前日期和时间bool continueFlag = true;while (continueFlag) {ask();arriave_now_floor_p();get_choice();get_floor();arriave_want_floor();cout << "是否继续进行?(输入3退出,否则继续):";   //非3即为继续int choice;cin >> choice;if (choice == 3) {continueFlag = false;}}saveFloorHistory();return 0;}void ask() {cout << "目前最高层为" << all_floor << "层,欢迎使用!!" << endl;cout << "请输入您当前所在的楼层:";cin >> now_floor_p;}void arriave_now_floor_p() {cout << "电梯从 " << now_floor_e << " 层到达 " << now_floor_p << " 层" << endl;now_floor_e = now_floor_p;}bool get_choice() {cout << "请选择上行(1)或下行(0):";cin >> choice;return choice;}void get_floor() {cout << "请输入您要前往的楼层:";cin >> want_floor;while (judge() == -1) {cout << "输入不合法!请重新输入:" << endl;cin >> want_floor;}}int judge() {if (choice && want_floor < now_floor_e) {cout << "不合法!目标楼层不能比当前楼层小。" << endl;return -1;}else if (!choice && want_floor > now_floor_e) {cout << "不合法!目标楼层不能比当前楼层大。" << endl;return -1;}return 0;}void arriave_want_floor() {cout << "电梯开始运行..." << endl;if (choice) {for (int floor = now_floor_e; floor <= want_floor; floor++) {now_floor_e = floor;displayFloor();this_thread::sleep_for(chrono::milliseconds(500));floor_history.push_back(floor);}}else {for (int floor = now_floor_e; floor >= want_floor; floor--) {now_floor_e = floor;displayFloor();this_thread::sleep_for(chrono::milliseconds(500));floor_history.push_back(floor);}}cout << "电梯到达目标楼层:" << now_floor_e << " 层" << endl;}void displayFloor() {cout << "电梯经过 " << now_floor_e << " 层" << endl;}void displayDate() {time_t now = time(0);tm localTime;localtime_s(&localTime, &now);char buffer[80];strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &localTime);cout << "当前日期和时间:" << buffer << endl;}void saveFloorHistory() {std::ofstream file("floor_history.txt");if (file.is_open()) {time_t now = time(0);tm localTime;localtime_s(&localTime, &now);char buffer[80];strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &localTime);file << "[" << buffer << "] (起始时间)\n";for (int floor : floor_history) {file << floor << "\n";}file.close();cout << "楼层历史记录已保存到文件。" << endl;}else {cout << "无法打开文件来保存楼层历史记录。" << endl;}}
};class ExpressElevator : public ELEVATOR {
public:ExpressElevator() {all_floor = 20; // 设置更高的最高层数}};int main() {ELEVATOR elevator;elevator.start();ExpressElevator expressElevator;expressElevator.start();return 0;
}

程序释义

程序设计实现了一个简单的电梯系统。代码包含了一个名为 ELEVATOR 的类和一个继承自 ELEVATOR 的类 ExpressElevator

ELEVATOR 类的私有成员变量包括:

  • now_floor_e:电梯当前所在的楼层。
  • now_floor_p:乘客在电梯内的当前楼层。
  • want_floor:乘客想要去的楼层。
  • choice:表示上行或下行的选择。
  • floor_history:记录经过的楼层的向量。

ELEVATOR 类的公有成员函数包括:

  • start():开始电梯系统的运行。
  • ask():询问乘客所在的楼层。
  • arriave_now_floor_p():模拟电梯从当前楼层到达乘客所在楼层。
  • get_choice():让乘客选择上行或下行。
  • get_floor():询问乘客要前往的楼层。
  • judge():判断输入的楼层是否合法。
  • arriave_want_floor():模拟电梯从当前楼层运行到目标楼层。
  • displayFloor():显示经过的楼层信息。
  • displayDate():显示当前日期和时间。
  • saveFloorHistory():将楼层历史记录保存到文件中。

ExpressElevator 类是 ELEVATOR 类的子类,它在构造函数中将 all_floor 变量设置为更高的楼层数,表示快速电梯可以到达更高的楼层。

main 函数中,创建了一个 ELEVATOR 对象 elevator 和一个 ExpressElevator 对象 expressElevator,并分别调用它们的 start() 方法开始运行电梯系统。

整个程序的执行流程是:首先显示当前日期和时间,然后进入一个循环,循环中询问乘客所在楼层,模拟电梯运行到乘客所在楼层,然后询问乘客要前往的楼层,并模拟电梯运行到目标楼层。循环结束后,将楼层历史记录保存到文件中。

运行展示

 图1 电梯控制系统效果图

图2 floor_history.txt页面 

总结与体会

本设计针对电梯系统的功能需求进行了实现,主要完成了以下工作:

(1)系统功能设计包括:

  • 输入当前楼层和目标楼层。
  • 根据输入判断电梯运行方向。
  • 电梯运行至目标楼层,并记录经过的楼层。
  • 可以选择继续进行或退出系统。
  • 保存楼层历史记录到文件。

(2)系统软件设计由以下组成:

  • ELEVATOR类:定义了电梯的属性和方法,包括当前楼层、目标楼层、最高楼层、运行方向、楼层历史记录等。
  • ExpressElevator类:继承自ELEVATOR类,可以设置更高的最高楼层数。
  • start()方法:控制整个电梯系统的流程,包括用户输入、电梯运行、保存楼层历史记录等。
  • 其他辅助方法:如输入验证、显示楼层、显示日期和时间等。
  • 本次设计利用了C++的面向对象编程思想和相关库函数,包括iostream、fstream、vector、chrono、thread、ctime等。

(3)完成系统调试:

在设计中,已经添加了基本的输入验证和错误提示机制,并进行了简单的调试和测试。然而,仍然有几处地方需要完善,具体包括:错误处理:对于非法输入或错误操作,需要给出更具体和友好的提示信息,并提供重新输入的机制。功能扩展:根据具体需求,可以添加更多的功能和特性,如静态数据、常数据、动态创建数组或vector模板的应用、继承与派生、多态和文件流等。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部