电梯模拟系统(1~2人)功能要求:界面友好,易于操作。可采用菜单或其它人机对话方式进行选择。实现电梯的正常运行。利用队列、定时器等知识加以实现。演示程序以人机对话的形式进行。每次测试完毕正确显示电梯上行、下行停靠楼层序列。c++全部代码
时间: 2024-02-11 22:06:53 浏览: 74
数据结构与算法大作业C++实现的电梯模拟器源代码,实现四种电梯调度算法
5星 · 资源好评率100%
下面是一个简单的电梯模拟系统的C++代码,实现了电梯的正常运行和人机对话:
```cpp
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
class Elevator {
public:
Elevator(int capacity, int maxFloor)
: capacity_(capacity), maxFloor_(maxFloor), curFloor_(1),
state_(State::STOP), direction_(Direction::UP) {}
void run() {
while (!requests_.empty()) {
int nextFloor = requests_.front();
requests_.pop();
if (nextFloor > curFloor_) {
direction_ = Direction::UP;
while (curFloor_ < nextFloor) {
moveOneFloor();
handleRequest();
}
} else if (nextFloor < curFloor_) {
direction_ = Direction::DOWN;
while (curFloor_ > nextFloor) {
moveOneFloor();
handleRequest();
}
}
state_ = State::STOP;
handleRequest();
}
}
void addRequest(int floor) {
requests_.push(floor);
}
void displayRoute() {
for (int i = 0; i < route_.size(); ++i) {
cout << route_[i] << " ";
}
cout << endl;
}
private:
enum class Direction {
UP,
DOWN
};
enum class State {
STOP,
MOVING
};
void moveOneFloor() {
state_ = State::MOVING;
if (direction_ == Direction::UP) {
++curFloor_;
} else {
--curFloor_;
}
}
void handleRequest() {
if (requests_.empty()) {
return;
}
if (requests_.front() == curFloor_) {
requests_.pop();
route_.push_back(curFloor_);
}
}
int capacity_;
int maxFloor_;
int curFloor_;
State state_;
Direction direction_;
queue<int> requests_;
vector<int> route_;
};
int main() {
int capacity = 10;
int maxFloor = 20;
Elevator elevator(capacity, maxFloor);
while (true) {
int floor;
cout << "Please input the floor you want to go (or input -1 to exit): ";
cin >> floor;
if (floor == -1) {
break;
}
if (floor < 1 || floor > maxFloor) {
cout << "Invalid floor!" << endl;
continue;
}
elevator.addRequest(floor);
}
elevator.run();
cout << "The route of the elevator is: ";
elevator.displayRoute();
return 0;
}
```
该程序使用了一个Elevator类来表示电梯,其中包含了电梯的容量、最高楼层数、当前楼层、状态、运行方向、请求队列和运行路线。
在主函数中,程序通过人机对话的方式读取用户输入的请求,将其添加到电梯的请求队列中。然后调用Elevator类的run方法来模拟电梯的运行过程。在run方法中,程序首先判断下一个请求所在的楼层与当前楼层的关系,然后根据运行方向逐层地移动电梯,直到到达目的地。移动过程中,程序不断检查请求队列中是否有新的请求,如果有就加入到电梯的请求队列中。到达目的地后,程序将电梯的状态设为STOP,然后处理请求队列中的下一个请求。最后,程序输出电梯的运行路线。
该程序采用了简单的队列和vector来实现电梯的请求管理和路线记录,没有使用定时器等高级技术。由于时间关系,该程序没有进行界面的美化和错误处理,仅供参考。
阅读全文