在火车运行轨道上设置若干停靠站点,不同的站点可能有不同的停靠时间。在动画输出时,要能显示出剩余停靠时间。
(六)程序总体结构 下面的内容仅供参考:
我们可以在主程序中写如下两个函数调用: Configure;
Simulation;
前者在进行模拟前从配置文件读取数据设置一些参数,这比较简单。而后者则是进行仿真模拟,这相当复杂,所以下面我们就来讨论如何设计Simulation。
这一类的模拟仿真程序有一个共同的特点是要模拟某个系统在一段时间内的情况,所以我们很自然地要从时间上对该问题进行分解,就是说
Simulation() {
Initialize;{初始化过程} do
train_status();{计算火车A和B的状态在这一时刻的变化,例如继续运行、暂停等}
Writemessage();{输出信息(包括动画)}
Control();{调用控制策略程序决定电梯该如何运动}
Time=time+1;{推进仿真时间,假定每一秒电梯进行上述操作一次} While not endcondition; }
这就是可以模拟小火车中央控制系统的基本结构了!这个程序结构的基本思想就是模拟了小火车每个时刻做的几件事情,然后将时间向后推移一个时间单位,然后再做那几件事,于是就模拟了小火车的工作状态。
十一、实验报告要求:
实验要求,按照软件开发过程的各个阶段提交阶段性文档。阶段性文档不能在实验结束后补写,必须遵照实验进度分阶段提交,贯彻文档指导实践、实践修正文档的软件工程思想。
文档提交可以书面形式,也可以电子文件形式。 (1)【模板:会议记要】
<小组编号>小组第**周第**次会议记要
实验名称: *******
会议时间:****年**月**日**点 至 **点 与会者:<成员1>、<成员2>.. 文档记录者:*** 会议内容摘要: <问题编号>、〈问题说明〉;〈讨论意见〉;〈最后结果〉。 ..
备注:小组正式会议的记录,主要记录讨论问题的概要,以及工作进展情况,详细设计内容应该放在其它文档中。会议记要一般两页左右。
(2)【模板:周报】
<小组编号>小组第**周周报
实验名称: *******
周报时间:****年**月**日
小组成员:<成员1>、<成员2>.. 是否按计划完成? 是!
〈上周工作小结〉;//按人员总结 〈本周工作分派〉。//按人员分排
否!
〈未完成原因〉; 〈本周解决办法〉;
〈需要请指导教师协助的问题〉。
(3)【模板1:任务书】
<小组编号>小组 <实验名称>任务书
版本号:Train-小组简写-Task-***(每次修订时改变编号) 编制时间:** 编制人员:** 1.1 任务目标概述 1.2 目标系统的需求 (对应任务书上的火车配置) 1.3 目标系统的需求分析 (对应任务书上的火车运行控制) 1.4 目标系统的策略选择 (对应任务书上的火车运行控制策略) 1.5 目标系统的IO需求 (对应任务书上的输入输出) 1.6 目标系统的高级需求 (对应任务书上的基本要求和较高要求)
备注:根据书上的任务书,剪裁得到一份符合你要实现的火车调度系统实际情况的任务书。
(4)【模板2:概要设计】
<小组编号>小组 <实验名称>概要设计
版本号:Train-小组简写-GlobalDesign-***(每次修订时改变编号) 编制时间: 编制人员:
1.2 用户界面设计 1.1.1 动画方式
画出火车轨道和车站、探测点,模拟火车运行的设计;另:为方便查看火车运行情况,需要在输出显示中划分一块区域,专门显示键盘输入的控制信号,以及速度信息。
说明所画界面中对应的各种操作含义和预期效果; 1.1.2 文件方式
定义出输入呼叫文件格式,和输出结果文件格式。 说明输入输出文件中符号的含义。
1.2 自动机模型(状态转换图)
画出火车调度系统的状态转换图;要求在图形之外,再给出各状态的详细文字说明,说明该状态可以接受的输入和相应动作。
1.3 高层数据结构设计
设计出如何存储火车调度系统的各类操作、调度信号和运行状态数据。例如:公共轨道的占用情况如何存储?启动和暂停信号如何存储?火车当前状态和运行速度如何表示等?
本实验要求用数组和链表两种方式实现存储,需要给出两套数据结构设计。 1.4 系统模块划分
画出系统模块的调用关系图;并详细说明各个模块的功能。
针对每一个模块,要求给出:模块名称、模块功能简要描述、模块接口(接口名称、参数类型、接口功能)、本模块会调用的其他模块名和接口名。
注:接口就是本模块提供给其他模块调用的C函数。 1.5 高层算法设计
系统核心算法的概要设计,例如火车调度系统的中央控制算法。要求用自然语言,对任务书中的策略进一步细化分解,结合上面的数据结构和模块设计,描述出算法的实现思路。
(5)【模板3:详细设计】
<小组编号>小组 <实验名称>详细设计
版本号:Train-小组简写-FunctionDesign-***(每次修订时改变编号) 编制时间: 编制人员:
1.3 模块1<模块名称>
1.3.1 局部数据结构设计
当前模块的内部变量设计。要求给出数据的含义、变量的命名,以及类型定义。 1.3.2 算法设计
用N-S图描述出算法。 1.4 模块2<模块名称> …
(6)【模板4:测试用例】
<小组编号>小组 <实验名称>测试用例
版本号:Train-小组简写-CaseOfTest-***(每次修订时改变编号) 编制时间: 编制人员: 1.3 测试用例1
1.3.1 测试目标
说明本测试用例是用来测试:某项功能?边界异常处理?压力测试(多次频繁操作,测试程序的承受力)? 1.3.2 用例输入
文件方式:列出输入文件的内容; 动画方式:
操作顺序 1 操作 启动A/B火车; 暂停A/B火车; 操作前火车状态 停止/运行?位置?速度? 公共轨道状态 空闲?A/B车想进入?冲突?占用? 2 。。。 1.3.3 用例输出
文件方式:列出输出文件的内容; 动画方式: 输入操作序号 1 2 。。。
1.4 测试用例2 …
2.1 测试结果总结
对照任务书各项要求,逐一说明测试结果是否正确,存在哪些bug?
备注:按照测试用例模版设计2—4个包含多个呼叫及目标的测试用例。根据用例实际执行结果写成测试结果报告。单元测试不用提交测试用例,这里只包括系统的测试用例。
(7)程序清单
电子版的源程序,要注意程序必要的注释,以及缩进对齐。
(8)使用说明模板
<小组编号>小组 <实验名称>使用手册
版本号:Train-小组简写-UserGuide-***(每次修订时改变编号) 编制时间: 编制人员:
1.5 运行环境配置
说明程序的安装环境要求,比如操作系统、内存等。
说明程序的安装文件路径、文件名称、文件个数。(尤其注意程序运行时必须的一些文件) 说明程序的运行方式:菜单、图标、命令行等。
1.6 系统功能介绍
概述程序的主要功能和特点。 1.7 功能1使用说明
逐步演示操作步骤,可以把实际界面粘贴在文档中。 1.8 功能2使用说明 …
(9)实验总结
体会、评论与收获。必写,内容随意。在组间交流会上进行口头经验交流。
操作 操作后火车状态 结果是否正确? 是/否 启动A/B火车; 停止/运行?位置?暂停A/B火车; 速度? 3. 模拟银行营业厅排队系统程序设计
八、实验内容和要求:
要求根据下面的功能说明描述实现模拟银行排队软件。
(一)银行营业厅配置
1.共有1家银行营业厅,但营业窗口设3~8个,可以灵活设置。 2.每位客户进入营业厅后,在取号机上申请一个服务号码。
3.服务号码根据客户级别分为两类,一类是普通客户,一类是VIP客户。申请VIP客户服务的人,在申请时必须提供VIP身份号,经过银行客户资料核对后,通过申请,分配一个VIP服务号码给他。普通客户类服务号码,和VIP客户类服务号码分开两队,都按先后顺序排队。普通号码范围:000~999;VIP号码范围:V00~V99。
4.营业窗口按服务号码的顺序,叫号为客户办理。营业窗口叫号后,进入办理状态。 5.设定1~2个窗口优先办理VIP客户服务,也就是说,只要有VIP客户在等待,这些窗口都要优先办理VIP客户业务。只在当前没有VIP客户服务申请的情况下,这些窗口转去办理普通客户业务。
6.营业窗口在办完一项业务后,可以暂停办理,停止叫号,休息一段时间,然后恢复办理。但原则上所有窗口不会同时休息。
7.当所有服务号码都被处理完毕,才允许发出“下班”指令,关闭营业厅,退出程序。 说明:由于本次实验不使用可视化框架,所以无法作到从图形界面上获取客户取号和营业窗口请求。因此请求按钮的设计,不在图形界面上体现,仅用来设计键盘的模拟输入。 (二)银行营业厅的运行控制
1.营业厅的初始状态是各窗口空闲,处于等待服务状态;两类服务号码初始都设为0。 2.客户可以在任意时刻进入营业厅,申请普通服务或VIP服务。
3. 申请普通服务,不需要核对身份,直接在当前最大普通服务号码上加1,分配给客
户。申请VIP服务,需要客户输入VIP身份号,核对银行VIP文件,若该身份号存在并有效,在当前最大VIP服务号码上加1,分配给客户;若该身份号不存在,提示重新输入,三次错误以后,转为分配普通服务号码给客户。
4. 如果VIP客户到达,并成功申请到VIP服务号码。此时若VIP优先服务窗口都正在办
理业务,新到的客户排队等待。若VIP优先服务窗口有转去办理普通业务的,那么办完当前普通业务后要立刻转回办理VIP业务。
5. 若某营业窗口发出暂停信号,系统检查其他窗口的状态,若仍有其它窗口在办理业
务,准予该营业窗口暂停休息,停止该窗口的叫号,一段时间后恢复办理状态;若没有其它窗口在办理业务,不允许该窗口暂停。
6. 客户办理业务的时间长短,窗口暂停休息时间长短等随机因素不予考虑。可以假设
一项业务办理的固定时间是20S,暂停休息的固定时间为30S。
7. 营业窗口办理业务时,显示当前处理的服务号码;叫号时,显示等待的服务号码;
暂停时显示“pause”。 (三)银行营业厅的排队策略
以下是银行营业厅的几个排队策略: 1.先来先服务策略:
将同一类的服务号码按取号时间排队,然后一一交给最先空闲的窗口去办理。这是基本的排队策略,只需要设计一个将服务号码排队的数据结构。
VIP客户服务有自己的优先服务窗口,普通客户服务有其他的营业窗口,在两个队列都