编制时间: 编制人员:
1.1 用户界面设计 1.1.1 动画方式
画出电梯内部的操作面板设计,和楼层呼叫面板,以及模拟电梯运行的界面设计; 说明所画界面中对应的各种操作含义和预期效果;定义键盘输入指令和动画输出之间的对应关系。
1.1.2 文件方式
定义出输入呼叫文件格式,和输出结果文件格式。 说明输入输出文件中符号的含义。 1.2 自动机模型(状态转换图)
画出电梯系统的状态转换图;要求在图形之外,再给出各状态的详细文字说明,说明该状态可以接受的输入和相应动作。
1.3 高层数据结构设计
设计出如何存储电梯系统的各类呼叫、楼层和运行状态数据。例如:上下楼的请求如何存储?目标楼层如何存储?电梯当前状态和运行方向如何表示等?
本实验要求用数组和链表两种方式实现存储,需要给出两套数据结构设计。 1.4 系统模块划分
画出系统模块的调用关系图;并详细说明各个模块的功能。
针对每一个模块,要求给出:模块名称、模块功能简要描述、模块接口(接口名称、参数类型、接口功能)、本模块会调用的其他模块名和接口名。
注:接口就是本模块提供给其他模块调用的C函数。 1.5 高层算法设计
系统核心算法的概要设计,例如电梯系统的控制策略算法。要求用N-S图结合自然语言,对任务书中的策略进一步细化分解,结合上面的数据结构和模块设计,描述出算法的实现思路。
(5)【模板3:详细设计】
<小组编号>小组 <实验名称>详细设计
版本号:Elevator-小组简写-FunctionDesign-***(每次修订时改变编号) 编制时间: 编制人员:
1.1 模块1<模块名称>
1.1.1 局部数据结构设计
当前模块的内部变量设计。要求给出数据的含义、变量的命名,以及类型定义。 1.1.2 算法设计
用N-S图描述出算法。 1.2 模块2<模块名称> …
(6)【模板4:测试用例】
<小组编号>小组 <实验名称>测试用例
版本号:Elevator-小组简写-CaseOfTest-***(每次修订时改变编号) 编制时间:
编制人员: 1.1 测试用例1
1.1.1 测试目标
说明本测试用例是用来测试:某项功能?边界异常处理?压力测试(多次频繁操作,测试程序的承受力)? 1.1.2 用例输入
文件方式:列出输入文件的内容; 动画方式: 操作顺序 1 2 。。。 操作 内部几层呼叫; 外部几层呼叫; 操作前电梯状态 停/运行在几层?上行/下行? 已有未处理呼叫 内部几层呼叫,外部几层呼叫。。。 1.1.3 用例输出 文件方式:列出输出文件的内容; 动画方式: 输入操作序号 1 2 。。。
1.2 测试用例2 …
2.1 测试结果总结
对照任务书各项要求,逐一说明测试结果是否正确,存在哪些bug?
备注:按照测试用例模版设计2—4个包含多个呼叫及目标的测试用例。根据用例实际执行结果写成测试结果报告。单元测试不用提交测试用例,这里只包括系统的测试用例。
(7)程序清单
电子版的源程序,要注意程序必要的注释,以及缩进对齐。
(8)使用说明模版
<小组编号>小组 <实验名称>使用手册
版本号:Elevator-小组简写-UserGuide-***(每次修订时改变编号) 编制时间: 编制人员:
1.1 运行环境配置
说明程序的安装环境要求,比如操作系统、内存等。
说明程序的安装文件路径、文件名称、文件个数。(尤其注意程序运行时必须的一些文件) 说明程序的运行方式:菜单、图标、命令行等。
操作 操作后电梯状态 结果是否正确? 是/否 内部几层呼叫; 停/运行在几层?上外部几层呼叫; 行/下行? 1.2 系统功能介绍
概述程序的主要功能和特点。 1.3 功能1使用说明
逐步演示操作步骤,可以把实际界面粘贴在文档中。 1.4 功能2使用说明 …
(9)实验总结
体会、评论与收获。必写,内容随意。在组间交流会上进行口头经验交流。
2. 模拟火车调度系统程序设计
八、实验内容和要求:
要求根据下面的功能说明描述实现模拟火车调度软件。 (一)火车配置
1、共有两辆小火车(如下图所示)。
2、小火车A、B分别沿顺时针方向行驶在自己的闭合轨道上。它们的轨道都经过一个车站S1,进站的轨道只有一条,是两辆小火车公用的。当火车A在车站的公共轨道上运行的时候,另一辆火车B如果也想进入车站,则必须等待,直到列车A离开了车站,让出该段轨道。为了防止两辆火车在车站的公共轨道上相撞,必须要有一个中央控制系统来调度火车的运行。
3、为了能及时识别火车想进入车站的公共轨道或者已经离开公共轨道,在车站附近(等待进站区和出站区)的A车和B车的轨道上分别安装两个探测点,当探测点发现火车经过此点时,将会发送信号给中央控制系统,中央控制系统根据发送信号的是哪个探测点,能识别出是哪辆火车想进入或者已经驶出车站的公共轨道。
火车A
A车轨道
车站S1 B车轨道
火车B
火车A 出站探测点 火车A 进站探测点
火车B 进站探测点 火车B 出战探测点
图5 小火车示意图
(二)火车的运行控制 1.A火车开动前的停放位置在轨道的最上方中间,B火车在轨道的左下方,如上图所示。 2.火车一旦被启动运行,除非因为等待公共轨道的释放而暂停,或者被人为地停止,否则会一直运行。
3.必须要保证两辆火车有序运行,交替使用公共轨道。 4.火车的运行速度和运行轨道的长和宽可以在配置文件中设置。是同时启动两辆火车、还是先启动某一辆、两车启动的间隔时间可以在配置文件中设置。
5.在火车运行期间,火车除了因为等待公共轨道的释放而暂停,也可能由于某些特殊原因被人为地停止,用户可以通过输入信号来控制火车的暂停和继续运行。
(三)火车运行的控制策略
如果出现2个监测点同时向中央控制中心发信号,提示火车要进入公共运行轨道,则A、B车交替使用公共轨道。第一次出现这种情况时,让A车先行,第二次时让B车先行,第三次还是让A车先行,第四次B车先行。
(四)输入输出 1.输入:
输入数据包括以下两种:
1)一系列的初始化信息,包括:火车运行速度,运行轨道的长和宽,两火车是否同时启动,先启动哪辆火车,启动间隔时间,启动位置以及探测点位置。
2)暂停或者继续某辆火车运行的控制信号。 输入可以采用两种方法:
a.从键盘输入。例如:可以在程序开始,提示键盘输入初始化信息;运行中接受到探测点信号后提示输入车站的控制信号。我们可以设定控制信号的按键如下:
A车暂停:‘A’ A车继续:‘C’ B车暂停:‘B’ B车继续:‘D’
b.将初始化信息写入一个正文文件,然后程序读取这些信息可以在没有人工干预的情况下模拟小火车运行情况。正文文件包含信息如下:
[A Speed] //A运行速度 [B Speed] //B运行速度
[A width] //A运行轨道的宽度 [A hight] //A运行轨道的高度 [B width] //B运行轨道的宽度 [B hight] //B运行轨道的高度 [FirstStart] //如果是‘A’,表示A启动;如果是‘X’,表示同时启动 [Interval] //启动间隔时间,单位秒
[A StartPoint] //A启动位置(例如将A轨道分为0-12点刻度,启动位置在0点) [B StartPoint] //B启动位置(例如将B轨道分为0-12点刻度,启动位置在7点)
[A InPoint] //A进站探测点位置(例如将A轨道分为0-12点刻度,探测点位置在5点) [A OutPoint] //A出站探测点位置(例如将A轨道分为0-12点刻度,探测点位置在7点) [B InPoint] //B进站探测点位置(例如将B轨道分为0-12点刻度,探测点位置在11点) [B OutPoint] //B出站探测点位置(例如将B轨道分为0-12点刻度,探测点位置在1点)
2.输出:
a.火车运行的动画显示:运行轨道,火车当前位置,探测点位置。如果探测点监测到火车通过,需要变色。
b.火车运行情况的记录(结果)文件,每隔5秒记录一次。 记录文件也是文本文件,每一行表示火车A和B的运行位置。 备注:老师会提供一组已经编制好的子程序以及一些给出的数据定义,它们的主要功能是动画输出设计。
(五)基本的要求和较高的要求
以下内容仅供有余力的同学参考实现。