C++创建乘客class实现电梯仿真。最高层数为40,最大载客量为15,仿真开始前电梯位于一层且为空梯,仿真开始,有20位乘客乘电梯上行前往随机楼层
时间: 2024-05-13 21:14:13 浏览: 17
以下是乘客类和电梯类的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_FLOOR 40
#define MAX_CAPACITY 15
typedef enum {IDLE, UP, DOWN} Direction;
typedef struct {
int id;
int start_floor;
int dest_floor;
} Passenger;
typedef struct {
int current_floor;
Direction direction;
int capacity;
Passenger passengers[MAX_CAPACITY];
} Elevator;
void init_elevator(Elevator *elevator) {
elevator->current_floor = 1;
elevator->direction = IDLE;
elevator->capacity = 0;
}
void add_passenger(Elevator *elevator, Passenger passenger) {
if (elevator->capacity < MAX_CAPACITY) {
elevator->passengers[elevator->capacity] = passenger;
elevator->capacity++;
}
}
void remove_passenger(Elevator *elevator, int index) {
for (int i = index; i < elevator->capacity - 1; i++) {
elevator->passengers[i] = elevator->passengers[i + 1];
}
elevator->capacity--;
}
void move_elevator(Elevator *elevator) {
if (elevator->direction == UP) {
elevator->current_floor++;
} else if (elevator->direction == DOWN) {
elevator->current_floor--;
}
}
void print_elevator(Elevator *elevator) {
printf("Floor %d, Direction %s, Capacity %d\nPassengers:\n",
elevator->current_floor, elevator->direction == UP ? "UP" : elevator->direction == DOWN ? "DOWN" : "IDLE", elevator->capacity);
for (int i = 0; i < elevator->capacity; i++) {
printf(" Passenger %d: From %d to %d\n", elevator->passengers[i].id, elevator->passengers[i].start_floor, elevator->passengers[i].dest_floor);
}
}
int main() {
srand(time(NULL));
Elevator elevator;
init_elevator(&elevator);
for (int i = 1; i <= 20; i++) {
Passenger passenger;
passenger.id = i;
passenger.start_floor = 1;
passenger.dest_floor = rand() % (MAX_FLOOR - 1) + 2;
add_passenger(&elevator, passenger);
}
print_elevator(&elevator);
while (elevator.capacity > 0) {
if (elevator.direction == IDLE) {
elevator.direction = elevator.passengers[0].dest_floor > elevator.current_floor ? UP : DOWN;
}
move_elevator(&elevator);
for (int i = 0; i < elevator.capacity; i++) {
if (elevator.passengers[i].dest_floor == elevator.current_floor) {
printf("Passenger %d has arrived at floor %d\n", elevator.passengers[i].id, elevator.current_floor);
remove_passenger(&elevator, i);
i--;
}
}
for (int i = 0; i < elevator.capacity; i++) {
if (elevator.passengers[i].start_floor == elevator.current_floor) {
printf("Passenger %d has entered the elevator at floor %d\n", elevator.passengers[i].id, elevator.current_floor);
}
}
if (elevator.current_floor == MAX_FLOOR) {
elevator.direction = DOWN;
} else if (elevator.current_floor == 1) {
elevator.direction = UP;
} else if (elevator.capacity == MAX_CAPACITY) {
elevator.direction = elevator.passengers[0].dest_floor > elevator.current_floor ? UP : DOWN;
} else if (elevator.direction == UP && elevator.passengers[elevator.capacity - 1].dest_floor < elevator.current_floor) {
elevator.direction = DOWN;
} else if (elevator.direction == DOWN && elevator.passengers[0].dest_floor > elevator.current_floor) {
elevator.direction = UP;
}
print_elevator(&elevator);
}
printf("Elevator is empty\n");
return 0;
}
```
在主函数中,我们先初始化电梯,并让20位乘客随机选择目的楼层并上电梯。然后进入主循环,不断移动电梯并处理到达和上下乘客的情况,直到电梯为空为止。在每次移动电梯之前,我们根据当前状态决定电梯的运行方向,包括空闲、上行和下行三种状态。在移动电梯后,我们检查是否有乘客到达目的地或者在当前楼层上下电梯,如果有,则从电梯中移除或添加相应的乘客。然后再次根据当前状态决定电梯的运行方向,并打印电梯的状态。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)