单服务台排队系统详细设计说明书
单服务台排队系统详细设计说明书
1引言
1.1编写目的:
1.2背景:
1.3定义:
1.4参考文献: 2总体设计概述
本软件由三个模块组成,分别是:总控模块(control )、顾客到达模块(arrive )、顾客离开模块(departure )。
3类的定义
根据仿真方案的需求,定义事件表类(Table),包括:
属性:a.事件数目n_event (即事件表长度)。
b. 事件类型type_event
c. 事件发生时间time |
struct eve nt_talbe
{int type_event;
int time;
}e_t[100];
struct eve nt_talbe n ext;
int n_event;
操作:a.插入操作insert :按事件发生时间的先后将到达或离开事件插入事件表。
将事件表e_t[i]以后的值后移一位
for(j=i;i<=n_event;j++) {e_t[i+1].time=e_t[i].time;
e_t[i+1].type_event=e_t[i].type_event}
事件表长度+1
n eve nt++
返回
b.取事件操作pop:将事件表中队首的事件取出。
4程序描述
本软件的各子程序或函数如下表 4.1所示。
表4.1单服务台排队系统的子程序和函数
4. 1总控模块
1)模块描述:总控模块主要负责事件选取,推进仿真的进行。
2)功能描述:总控模块必须完成五项基本工作,包括:
a 系统初始化:状态变量取值初始化、系统参数初始化、仿真时钟初始化等。
b 时间扫描:确定下一最早发生事件的发生时间,并将仿真中推进到该时刻。
c 事件识别:检索当前仿真时刻将要发生的所有时间,并确定执行顺序。
d 事件执行:执行获得资格的当前事件的事件例程。
e 返回报告:返回报告模块的结果。
4)数据定义:本模块涉及到的变量名称和定义如下表 4.2所示。
表4.2总控模块涉及的变量和定义
5)流程逻辑:
开始
4.1.1初始化子程序INIT ()
根据仿真方案,该子程序负责初始化整个系统,包括实例化一个事件表Even t_Table 对象,设相关变量初值为0,设置第一个事件为顾客到达事件及首次事件发生时间,即
e_t[co un t].time=time+EXPON(m_arrvie_t); e_t[co un t].type_eve nt=1
4.1.2报告子程序REPORT。
根据仿真方案,该子程序用于产生服从负指数分布的随机变量,其返回值用于表示顾客
到达的随机时间间隔以及随机服务长度。
(1)参数:
(2)函数:
Float Expon(float rmean):该函数通过调用Drand()函数和公式v=-rmean*log(rand),产生
服从负指数分布的随机数,其返回值v用于变量tne[next]的生成,即用于时钟推进。
4.2顾客到达模块arrive。
1) 模块描述:该模块用于处理顾客到达事件,解决顾客到达后引发的系统状态改变以及队列状态改变的问题。
2) 功能描述:该模块主要完成以下五部分功能:
a 服务时间判断:获取当前时间,判断是否在服务时间内。
b 系统状态判断:获取服务台状态,决定仿真进程走向。
c 入队。
d 预定下一事件:预定顾客服务完成后离开事件,保证仿真模型持续地运行下
去。
e 延迟时间获取:获取顾客因在队列中等待所延迟服务的时间。
3) 数据定义
本模块涉及到的变量名称和定义如下表 4.3所示。
表4.3顾客到达模块涉及的变量和定义
4)流程逻辑:
4.3顾客离开模块depart。
1)模块描述:该模块用于处理顾客离开事件,解决顾客离开后引发的系统状态改变以及队列状态改变的问题。
2)功能描述:该模块主要完成以下四部分功能:
a 队列状态判断:获取当前队列状态,判断并决定仿真走向。
b 出队。
c 预定下一事件:预定顾客服务完成后离开事件,保证仿真模型持续地运行下
去。
d 延迟时间获取:获取顾客在队列中等待的时间。