C语言做的电梯调度模拟系统

117 阅读3分钟

电梯调度模拟系统

一个基于C语言实现的电梯调度模拟系统,使用SCAN算法进行智能调度。

功能特性

  • SCAN调度算法:实现高效的电梯调度策略
  • 外部按键请求:支持上升和下降请求处理
  • 实时状态显示:显示电梯当前位置和待处理请求
  • 交互式操作:用户友好的菜单界面
  • 多楼层支持:支持1-20层楼宇
  • 并发请求:最多支持50个并发请求

系统架构

核心数据结构

// 电梯状态
typedef enum {
    IDLE,    // 空闲
    UP,      // 上升
    DOWN     // 下降
} ElevatorState;

// 请求类型
typedef enum {
    UP_REQUEST,   // 上升请求
    DOWN_REQUEST  // 下降请求
} RequestType;

// 电梯结构体
typedef struct {
    int current_floor;      // 当前楼层
    ElevatorState state;    // 电梯状态
    int total_floors;       // 总楼层数
    Request requests[MAX_REQUESTS];  // 请求队列
    int request_count;      // 请求数量
    int target_floor;       // 目标楼层
} Elevator;

调度算法

系统采用SCAN(电梯)算法,具有以下特点:

  1. 方向性调度:电梯按当前方向处理请求
  2. 就近原则:优先处理距离最近的请求
  3. 往返扫描:到达端点后改变方向继续扫描
  4. 高效性:减少电梯的无效移动

编译和运行

环境要求

  • C编译器(GCC、Clang等)
  • 支持C99标准

编译

gcc -o elevator elevator_system.c

运行

./elevator

使用说明

启动系统

  1. 运行程序后,首先输入电梯总楼层数(1-20)
  2. 系统初始化完成后进入主菜单

操作菜单

=== 电梯控制菜单 ===
1. 添加上升请求
2. 添加下降请求
3. 移除请求
4. 显示电梯状态
5. 运行电梯一步
6. 自动运行电梯
7. 退出程序

操作说明

  • 添加上升请求:在指定楼层添加上升请求
  • 添加下降请求:在指定楼层添加下降请求
  • 移除请求:取消指定楼层的待处理请求
  • 显示电梯状态:查看电梯当前位置和待处理请求
  • 运行电梯一步:手动执行一步电梯移动
  • 自动运行电梯:自动处理所有待处理请求

示例运行

=== 电梯调度模拟系统 ===
请输入电梯总楼层数 (1-20): 10
电梯系统初始化完成!
电梯总楼层数: 10
电梯当前楼层: 1

=== 电梯控制菜单 ===
1. 添加上升请求
2. 添加下降请求
3. 移除请求
4. 显示电梯状态
5. 运行电梯一步
6. 自动运行电梯
7. 退出程序
请选择操作 (1-7): 1
请输入楼层号 (1-10): 5
已添加楼层 5 的上升请求

=== 电梯状态 ===
当前楼层: 1
电梯状态: 空闲
待处理请求:
  楼层 5 (上升)
================

技术特点

错误处理

  • 楼层范围验证
  • 重复请求检测
  • 请求队列溢出保护
  • 输入验证

性能优化

  • 高效的请求查找算法
  • 最小距离计算
  • 状态机管理

代码结构

  • 模块化设计
  • 清晰的函数分离
  • 详细的注释说明
  • 易于扩展和维护

扩展功能

系统设计支持以下扩展:

  1. 多电梯支持:可扩展为多电梯协同调度
  2. 优先级调度:支持紧急请求优先处理
  3. 能耗优化:基于能耗的调度策略
  4. 图形界面:添加可视化显示
  5. 数据统计:运行时间和效率统计

文件结构

dianti/
├── elevator_system.c    # 主程序文件
└── README.md           # 说明文档

注意:这是一个教学演示项目,实际电梯系统需要考虑更多安全因素和实时性要求。

1.png

2.png

3.png

4.png