本次大作业任务是设计一个模拟电梯控制系统的程序,旨在实现电梯的运行控制和交互功能。该系统要求支持多层楼(8-100层)的电梯服务,具备多种运行控制策略,包括先来先服务、顺便服务以及两部电梯联动策略(高级选项)。以下是关键知识点的详细解释:
1. **程序设计要求**:
- 概要设计和详细设计文档:需要编写清晰的设计文档,概述系统的架构和功能模块,包括电梯的状态机模型,如停靠、运行、上行、下行等状态的转换逻辑。
- 实现两个版本:一个是文件版,注重服务策略算法的实现,简化输入输出,可能是基于命令行或简单的界面;另一个是动画版,可能需要图形用户界面,展示电梯的实际运行情况和状态变化。
2. **时间控制函数**:
- 时间间隔控制:如`#define INTERVAL TIME 5`定义了电梯运行一层所需的基本时间(5秒),`time count 5`用于推进时间进程。
- 停靠与运行计时:通过`clock`结构体进行计时,如`start clock`和`finish clock`分别记录电梯启动和停止的时刻,判断是否超过间隔时间。
3. **电梯状态管理**:
- 电梯状态常量:如`IDLE`、`RUN`、`STOP`,表示电梯的不同工作状态。
- 状态转移函数`state trans`:根据输入和当前状态判断电梯应进入哪个状态,例如,如果电梯在运行且到达目标楼层,将转变为停靠状态。
4. **服务策略**:
- 先来先服务:基于时间排序,内部呼叫优先处理。
- 顺便服务:一次处理同一方向的所有请求,再转向其他方向。
- 两部电梯联动:高级策略,根据任务量均衡或速度差异分配请求。
5. **输入/输出设计**:
- 内部和外部呼叫:通过数组`inside`和`outside up/down`分别存储电梯内部和外部的呼叫请求。
- 用户接口:通过`getInput`函数接收用户输入,如按键1-9表示内部请求,Q-W-E-R-T-Y-U-I表示上行呼叫,A-S-D-F-G-H-J-K表示下行呼叫,M键表示启动信号。
6. **系统界面**:
- 文件版本强调模拟过程,可能不显示实时画面;而动画版本则提供可视化界面,便于用户直观了解电梯状态和运行路线。
在完成这个项目时,学生需要熟悉C语言编程,深入理解操作系统原理,特别是线程管理和时间管理,并能有效地应用到电梯控制系统的模拟中。同时,良好的文档编写习惯和清晰的代码组织对于任务的成功至关重要。