《程序设计课程设计》任务书_第1页
《程序设计课程设计》任务书_第2页
《程序设计课程设计》任务书_第3页
《程序设计课程设计》任务书_第4页
《程序设计课程设计》任务书_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

模拟电梯系统程序设计、实验内容和要求:要求根据下面的功能说明描述实现模拟电梯控制软件(一)电梯配置1.共有1个电梯2.共有maxfloor层楼层。maxfloor=9。3.中间层每层有上下两个按钮,最下层只有上行按钮,最上层只有上行按钮。每层都有相应的指示灯,灯亮表示该按钮已经被按下,如果该层的上行或者下行请求已经被响应,则指示灯灭电梯内共有maxfloor个目标按钮,表示有乘客在该层下电梯。有指示灯指示按钮是否被按下。乘客按按钮导致按钮指示灯亮,如果电梯已经在该层停靠则该按钮指示灯灭另有一启动按钮(GO)。当电梯停在某一楼层后,接受至GO信息就继续运行。如果得不到GO信息,等待一段时间也自动继续运行。电梯内设有方向指示灯表示当前电梯运行方向。说明:由于本次实验不使用可视化框架,所以无法作至从图形界面上获取按钮请求。因此电梯按钮的设计,不在图形界面上体现,仅用来设计键盘的模拟输入。(二) 电梯的运行控制电梯的初始状态是电梯位于第一层处,所有按钮都没有按下。乘客可以在任意时刻按任何一个目标钮和呼叫钮。呼叫和目标对应的楼层可能不是电梯当前运行方向可达的楼层。如果电梯正在向I层驶来,并且位于I层与相邻层(向上运行时是I-1层或者向下运行时是I+1层)之间,则因为安全考虑不响应此时出现的I层目标或者请求。如果电梯正好经过了I楼层,运行在I楼层和下一楼层之间,则为了直接响应此时出现的[层目标或者请求,必须至少到达运行方向上的下一楼层然后才能掉头到达I楼层(假设掉头无须其它额外时间),如果I楼层不是刚刚经过的楼层则可以在任意位置掉头,此时掉头后经过的第一个楼层不可停。电梯系统依照某种预先定义好的策略对随机出现的呼叫和目标进行分析和响应。乘客数量等外界因素(可能导致停靠时间的长短变化)不予考虑。假设电梯正常运行一层的时间是5S,停靠目标楼层、上下乘客和电梯继续运行的时间是5S。当电梯停靠某层时,该层的乘客如果错误的按目标或呼叫按钮都不予响应。电梯停靠某一层后,苦无目标和呼叫,则电梯处于无方向状态,方向指示灯全灭,否则电梯内某个方向的指示灯亮,表示电梯将向该方向运行。等接到“GO”信号后电梯立即继续运行。若无GO信号,则电梯在等了上下乘客和电梯继续运行时间后也将继续运行。当一个目标(呼叫)已经被服务后,应将对应的指示灯熄灭。(三) 电梯运行的控制策略以下是几个候选策略:1.先来先服务策略:将所有呼叫和目标按到达时间排队,然后一一完成。这是相当简单的策略,只需要设计一个将呼叫和目标排队的数据结构。因为该策略效率也很低,所以没有实际的电梯采用这种策略。2.顺便服务策略:顺便服务是一种最常见的简单策略。这种策略在运行控制中所规定的安全前提下,一次将一个方向上的所有呼叫和目标全部完成。然后掉转运行方向完成另外一个方向上的所有呼叫和目标。可以采用设定目标楼层的办法来实现这个策略,即电梯向一个目标楼层运行,但这个楼层可以修改。具体策略如下:1) 修改目标楼层的策略:如果电梯运行方向向上,那么如果新到一个介于当前电梯所处楼层和目标楼层之间,又可以安全到达的向上呼叫或者目标,将目标楼层修改为这个新的楼层。如果电梯运行方向向下,那么如果新到一个介于当前电梯所处楼层和目标楼层之间,又可以安全到达的向下呼叫或者目标,将目标楼层修改为这个新的楼层。2) 确定新的目标楼层:如果电梯向上运行,当它到达某个目标楼层后,则依照以下顺序确定下一个目标楼层:如果比当前层高的楼层有向上呼叫或者目标,那么以最低的高于当前楼层的有向上呼叫或者目标的楼层为目标。如果无法确定目标楼层,那么以最高的向下呼叫或者目标所在楼层为电梯当前目标楼层。如果无法确定目标楼层,那么以最低的向上呼叫所在楼层为电梯当前的目标楼层。如果仍然不能确定目标楼层(此时实际上没有任何呼叫和目标),那么电梯无目标,运行暂停。如果电梯向下运行,依照以下顺序确定下一目标楼层:如果比当前层低的楼层有向下呼叫或者目标,那么以最高的低于当前楼层的有向下呼叫或者目标的楼层为目标。如果无法确定目标楼层,那么以最低的向上呼叫或者目标所在楼层为电梯当前目标楼层。如果无法确定目标楼层,那么以最高的向下呼叫楼层为目标楼层。如果仍然不能确定目标楼层(此时实际上没有任何呼叫和目标),那么电梯无目标,运行暂停。3) 最快响应策略:响应所有的现在存在的所有呼叫和目标所需时间(采用不同方案电梯停靠时间相同,所以不必考虑)最短的策略。可选方案一是电梯先向上运行响应经过各层的目标和向上呼叫,再向下运行响应所有向下呼叫以及途经各层的目标,最后再向上响应剩余的向上呼叫。二是恰好相反,先向下,再向上,最后再向下运行。由于呼叫和目标会随时增加,所以实际上有时这种策略并不好。另外有时这将导致电梯突然向相反的方向运行。为了防止经常性的改变方向,我们可以采用设定只有当原来的运行方向比相反方向的代价高20%的时候才切换方向。4) 最短平均等待时间策略:假设每一呼叫楼层等待的人数和每一目标楼层走出电梯的人数相等。计算响应当前所有呼叫和目标全部乘客所需时间的总和(包括等待时间和电梯运行时间,对于提出呼叫而尚未进入电梯的乘客则只计算等待时间)。对于这种策略,基本上也是只有象3一样的两种选择方案。由于呼叫和目标会随时增加,所以实际上这种策略有时并不好,但它比最快响应时间策略较为稳定和高效。另外有时这将导致电梯突然向相反的方向运行。为了防止经常性的改变方向,我们可以采用设定只有当原来的方向比替代方向的代价高20%的时候才切换运行方向。注意:除了先来先服务以外,我们不能预先设定固定不变电梯运行的目标楼层。5)同学们也可以自己提出新的控制策略。要求重点要实现顺便服务策略,应在一相对独立的程序块中实现控制策略,这样能方便地对其进行修改而不影响程序的其他部分。(四)输入输出1)输入:就是一系列的呼叫和目标。输入可以采用两种方法:以键盘输入呼叫和目标。例如我们可以设定如下:当敲击键1、2、3、4、5、6、7、8、9时表示电梯内有乘客按目标按钮,指定相应目标楼层。当敲击键Q、W、E、R、T、Y、U、I时表示8层至1」1层有上行呼叫请求。当敲击键A、S、D、F、G、、H、J、K时表示9层至1」2层有下行呼叫请求。将呼叫和目标写入一个正文文件,然后程序读取这些呼叫和目标数据后可以在没有人工干预的情况下模拟电梯运行情况。其中一个呼叫/目标占一行,格式如下:<操作时间>[空格]<呼叫目标>[回车]操作时间,表示呼叫请求的发生时间,是以程序启动时刻为参照的相对时间。以四位的数字字符串表示,从0000开始,单位秒。呼叫目标,和键盘输入的设定一致,占1个字节。1、2、3、4、5、6、7、8、9时表示电梯内有乘客按目标按钮;Q、W、E、R、T、Y、U、I时表示8层至1」1层有上行呼叫请求;A、S、D、F、G、H、J、K时表示9层到2层有下行呼叫请求;每个数据项之间用一个空白字符隔开。不必考虑检查数据的正确性。2)输出:电梯运行的动画显示:包括显示各按钮指示灯的亮灭情况、电梯方向指示灯和电梯位置及运行情况。另:为方便查看电梯运行情况,需要在显示中划分一块区域,专门显示键盘输入的呼叫和目标数据。电梯运行情况的记录(结果)文件。记录文件也是文本文件,每一行表示一次停靠,包括以下内容:停靠时间:开始停靠某楼层的时间,以整数表示,从小至大排列,占4个字节,从0开始,单位秒。楼层:停靠的楼层,占一个字节(1-9)。每个数据项之间用一个空白字符隔开。程序中不必考虑检查数据的正确性。备注:老师会提供一组已经编制好的子程序以及一些给出的数据定义,它们的主要功能是表示电梯系统参数,模拟电梯运行以及处理各类信号的输入输出。要注意利用它们提供的一些控制显示和键盘输入的函数和过程来简化输入和输出(包括动画)的设计。当然也可以利用编程语言提供的函数和过程来完成输入和输出。(五)基本的要求和较高的要求以下内容仅供有余力的同学参考实现。1.程序的运行方式:如果输入从数据文件中取得,则程序的运行应该有两种方式,动画方式、快速方式和完全方式。如果输入从键盘获得,那么只能采用动画方式或完全方式,不能使用快速方式。动画方式花费较长的时间来直观地模拟电梯运行。快速方式则没有动画,只是生成记录文件。完全方式花费较长的时间来直观地模拟电梯运行,同时生成记录文件。基本要求只实现动画方式。2.控制策略:基本要求实现先来先服务和顺便服务策略,可以指定电梯模拟系统使用不同的策略。较高的要求是可以在多个策略之间由我们控制进行切换。3.输入输出:基本要求实现键盘输入、动画输出。4.统计分析统计分析每个乘客乘电梯花费的平均时间。如果实现了多个策略,则可以对不同策略加以比较。统计分析是较高要求,基本要求不必考虑此功能。5.程序的适应性考虑:例如如何不要作很多修改就可以适应楼层数改变(例如增加到30层)等等。程序适应性是较高要求,基本要求不必考虑此功能。程序总体结构以下内容仅供参考。我们可以在主程序中写如下两个函数调用:Configure;Simulation;前者在进行模拟前设置一些参数,这比较简单。而后者则是进行仿真模拟,这相当复杂,所以下面我们就来讨论如何设计Simulation。这一类的模拟仿真程序有一个共同的特点是要模拟某个系统在一段时间内的情况,所以我们很自然地要从时间上对该问题进行分解,就是说Simulation(){Initialize;{初始化过程}doLift_status();{计算电梯状态在这一时刻的变化,例如到达某层,就要设定为已经完成了该层的目标,同时将电梯停下来等}Writemessage();{输出信息(包括动画)}Getinput();{接收当前时刻的新输入(包括新目标和新呼叫)Control();{调用控制策略程序决定电梯该如何运动}Time二time+l;{推进仿真时间,假定每一秒电梯进行上述操作一次}Whilenotendcondition;}这就是可以模拟电梯系统的基本结构了!这个程序结构的基本思想就是模拟了电梯每个时刻做的几件事情,然后将时间向后推移一个时间单位,然后再做那几件事,于是就模拟了电梯的工作状态。二、实验报告要求:实验要求,按照软件开发过程的各个阶段提交阶段性文档。阶段性文档不能在实验结束后补写,必须遵照实验进度分阶段提交,贯彻文档指导实践、实践修正文档的软件工程思想。文档提交可以书面形式,也可以电子文件形式。(1)【模板:会议记要】<小组编号>小组第**周第**次会议记要实验名称:*******会议时间:****年**月**日**点至**点与会者:<成员1>、<成员2>..文档记录者:***会议内容摘要:<问题编号>、〈问题说明〉;〈讨论意见〉;〈最后结果〉。备注:小组正式会议的记录,主要记录讨论问题的概要,以及工作进展情况,详细设计内容应该放在其它文档中。会议记要一般两页左右。(2)【模板:周报】<小组编号>小组第**周周报实验名称:*******周报时间:****年**月**日小组成员:<成员1>、<成员2>..是否按计划完成?是!〈上周工作小结〉;//按人员总结〈本周工作分派〉。//按人员分排否!〈未完成原因〉;〈本周解决办法〉;〈需要请指导教师协助的问题〉。(3)【模板1:任务书】<小组编号>小组<实验名称>任务书版本号:Elevator-小组简写-Task-***(每次修订时改变编号)编制时间:**编制人员:**1.1任务目标概述1.2目标系统的需求(对应书上的电梯配置)1.3目标系统的需求分析(对应书上的电梯运行控制)1.4目标系统的策略选择(对应书上的电梯运行控制策略)1.5目标系统的IO需求(对应书上的输入输出)1.6目标系统的高级需求(对应书上的基本要求和较高要求)备注:根据书上的任务书,剪裁得到一份符合你要实现的电梯系统实际情况的任务书。(4)【模板2:概要设计】<小组编号>小组<实验名称>概要设计版本号:Elevator-小组简写-GlobalDesign-***(每次修订时改变编号)编制时间:编制人员:1.1用户界面设计1.1.1动画方式画出电梯内部的操作面板设计,和楼层呼叫面板,以及模拟电梯运行的界面设计;说明所画界面中对应的各种操作含义和预期效果;定义键盘输入指令和动画输出之间的对应关系。1.1.2文件方式定义出输入呼叫文件格式,和输出结果文件格式。说明输入输出文件中符号的含义。1.2自动机模型(状态转换图)画出电梯系统的状态转换图;要求在图形之外,再给出各状态的详细文字说明,说明该状态可以接受的输入和相应动作。1.3高层数据结构设计设计出如何存储电梯系统的各类呼叫、楼层和运行状态数据。例如:上下楼的请求如何存储?目标楼层如何存储?电梯当前状态和运行方向如何表示等?本实验要求用数组和链表两种方式实现存储,需要给出两套数据结构设计。1.4系统模块划分画出系统模块的调用关系图;并详细说明各个模块的功能。针对每一个模块,要求给出:模块名称、模块功能简要描述、模块接口(接口名称、参数类型、接口功能)、本模块会调用的其他模块名和接口名。注:接口就是本模块提供给其他模块调用的C函数。1.5高层算法设计系统核心算法的概要设计,例如电梯系统的控制策略算法。要求用N-S图结合自然语言,对任务书中的策略进一步细化分解,结合上面的数据结构和模块设计,描述出算法的实现思路。(5)【模板3:详细设计】<小组编号>小组<实验名称>详细设计版本号:Elevator-小组简写-FunctionDesign-***(每次修订时改变编号)编制时间:编制人员:模块1<模块名称>局部数据结构设计当前模块的内部变量设计。要求给出数据的含义、变量的命名,以及类型定义。算法设计用N-S图描述出算法。模块2<模块名称>(6)【模板4:测试用例】<小组编号>小组<实验名称>测试用例版本号:Elevator-小组简写-CaseOfTest-***(每次修订时改变编号)编制时间:编制人员:1.1测试用例11.1.1测试目标说明本测试用例是用来测试:某项功能?边界异常处理?压力测试(多次频繁操作测试程序的承受力)?1.1.2用例输入文件方式:列出输入文件的内容;动画方式:操作顺序操作操作前电梯状态已有未处理呼叫1内部几层呼叫;外部几层呼叫;停/运行在几层?上行/下行?内部几层呼叫,外部几层呼叫。020001.1.3用例输出文件方式:列出输出文件的内容动画方式:输入操作序号操作操作后电梯状态结果是否正确?1内部几层呼叫;外部几层呼叫;停/运行在几层?上行/下行?是/否20001.2测试用例22.1测试结果总结对照任务书各项要求,逐一说明测试结果是否正确,存在哪些bug?备注:按照测试用例模版设计2—4个包含多个呼叫及目标的测试用例。根据用例实际执行结果写成测试结果报告。单元测试不用提交测试用例,这里只包括系统的测试用例。(7)程序清单电子版的源程序,要注意程序必要的注释,以及缩进对齐。(8)使用说明模版<小组编号>小组<实验名称>使用手册版本号:Elevator-小组简写-UserGuide-***(每次修订时改变编号)编制时间:编制人员:1.1运行环境配置说明程序的安装环境要求,比如操作系统、内存等。说明程序的安装文件路径、文件名称、文件个数。(尤其注意程序运行时必须的一说明程序的运行方式:菜单、图标、命令行等。1.2系统功能介绍概述程序的主要功能和特点。1.3功能1使用说明逐步演示操作步骤,可以把实际界面粘贴在文档中1.4功能2使用说明(9)实验总结体会、评论与收获。必写,内容随意。在组间交流会上进行口头经验交流。模拟火车调度系统程序设计八、实验内容和要求:要求根据下面的功能说明描述实现模拟火车调度软件。(一)火车配置1、共有两辆小火车(如下图所示)。2、 小火车A、B分别沿顺时针方向行驶在自己的闭合轨道上。它们的轨道都经过一个车站S1,进站的轨道只有一条,是两辆小火车公用的。当火车A在车站的公共轨道上运行的时候,另一辆火车B如果也想进入车站,则必须等待,直到列车A离开了车站,让出该段轨道。为了防止两辆火车在车站的公共轨道上相撞,必须要有一个中央控制系统来调度火车的运行。3、 为了能及时识别火车想进入车站的公共轨道或者已经离开公共轨道,在车站附近(等待进站区和出站区)的A车和B车的轨道上分别安装两个探测点,当探测点发现火车经过此点时,将会发送信号给中央控制系统,中央控制系统根据发送信号的是哪个探测点,能识别出是哪辆火车想进入或者已经驶出车站的公共轨道。•火车A出站探测点°火车A进站探测点口火车B进站探测点火车B出战探测点图5小火车示意图(二)火车的运行控制A火车开动前的停放位置在轨道的最上方中间,B火车在轨道的左下方,如上图所示。2.火车一旦被启动运行,除非因为等待公共轨道的释放而暂停,或者被人为地停止,否则会一直运行。必须要保证两辆火车有序运行,交替使用公共轨道。火车的运行速度和运行轨道的长和宽可以在配置文件中设置。是同时启动两辆火车、还是先启动某一辆、两车启动的间隔时间可以在配置文件中设置。在火车运行期间,火车除了因为等待公共轨道的释放而暂停,也可能由于某些特殊原因被人为地停止,用户可以通过输入信号来控制火车的暂停和继续运行。(三)火车运行的控制策略如果出现2个监测点同时向中央控制中心发信号,提示火车要进入公共运行轨道,则A、B车交替使用公共轨道。第一次出现这种情况时,让A车先行,第二次时让B车先行,第三次还是让A车先行,第四次B车先行。(四)输入输出1.输入:输入数据包括以下两种:1) 一系列的初始化信息,包括:火车运行速度,运行轨道的长和宽,两火车是否同时启动,先启动哪辆火车,启动间隔时间,启动位置以及探测点位置。2) 暂停或者继续某辆火车运行的控制信号。输入可以采用两种方法:a.从键盘输入。例如:可以在程序开始,提示键盘输入初始化信息;运行中接受到探测点信号后提示输入车站的控制信号。我们可以设定控制信号的按键如下:A车暂停:‘AA车继续:‘C'B车暂停:'B'B车继续:'D'b.将初始化信息写入一个正文文件,然后程序读取这些信息可以在没有人工干预的情况下模拟小火车运行情况。正文文件包含信息如下:[ASpeed] //A运行速度[BSpeed] //B运行速度[Awidth] 〃A运行轨道的宽度[Ahight] 〃A运行轨道的高度[Bwidth] 〃B运行轨道的宽度[Bhight] 〃B运行轨道的高度[FirstStart] 〃如果是'A'表示A启动;如果是‘X'表示同时启动[Interval] //启动间隔时间,单位秒[AStartPoint]//A启动位置(例如将A轨道分为0-12点刻度,启动位置在0点)[BStartPoint]//B启动位置(例如将B轨道分为0-12点刻度,启动位置在7点)[AInPoint]//A进站探测点位置(例如将A轨道分为0-12点刻度,探测点位置在5点)[AOutPoint]//A出站探测点位置(例如将A轨道分为0-12点刻度,探测点位置在7点)[BInPoint]//B进站探测点位置(例如将B轨道分为0-12点刻度,探测点位置在11点)[BOutPoint]//B出站探测点位置(例如将B轨道分为0-12点刻度,探测点位置在1点)输出:火车运行的动画显示:运行轨道,火车当前位置,探测点位置。如果探测点监测到火车通过,需要变色。火车运行情况的记录(结果)文件,每隔5秒记录一次。记录文件也是文本文件,每一行表示火车A和B的运行位置。备注:老师会提供一组已经编制好的子程序以及一些给出的数据定义,它们的主要功能是动画输出设计。(五)基本的要求和较高的要求以下内容仅供有余力的同学参考实现。在火车运行轨道上设置若干停靠站点,不同的站点可能有不同的停靠时间。在动画输出时,要能显示出剩余停靠时间。程序总体结构下面的内容仅供参考:我们可以在主程序中写如下两个函数调用:Configure;Simulation;前者在进行模拟前从配置文件读取数据设置一些参数,这比较简单。而后者则是进行仿真模拟,这相当复杂,所以下面我们就来讨论如何设计Simulation。这一类的模拟仿真程序有一个共同的特点是要模拟某个系统在一段时间内的情况,所以我们很自然地要从时间上对该问题进行分解,就是说Simulation(){Initialize;{初始化过程}dotrain_status();{计算火车A和B的状态在这一时刻的变化,例如继续运行、暂停等}Writemessage();{输出信息(包括动画)}Control();{调用控制策略程序决定电梯该如何运动}Time二time+l;{推进仿真时间,假定每一秒电梯进行上述操作一次}Whilenotendcondition;}这就是可以模拟小火车中央控制系统的基本结构了!这个程序结构的基本思想就是模拟了小火车每个时刻做的几件事情,然后将时间向后推移一个时间单位,然后再做那几件事于是就模拟了小火车的工作状态。十一、实验报告要求:实验要求,按照软件开发过程的各个阶段提交阶段性文档。阶段性文档不能在实验结束后补写,必须遵照实验进度分阶段提交,贯彻文档指导实践、实践修正文档的软件工程思想。文档提交可以书面形式,也可以电子文件形式。(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<模块名称>局部数据结构设计当前模块的内部变量设计。要求给出数据的含义、变量的命名,以及类型定义。算法设计用N-S图描述出算法。模块2<模块名称>(6)【模板4:测试用例】<小组编号>小组<实验名称>测试用例版本号:Train-小组简写-CaseOfTest-***(每次修订时改变编号)编制时间:编制人员:1.3测试用例11.3.1测试目标说明本测试用例是用来测试:某项功能?边界异常处理?压力测试(多次频繁操作测试程序的承受力)?1.3.2用例输入文件方式:列出输入文件的内容;动画方式:操作顺序操作操作前火车状态公共轨道状态1启动A/B火车;暂停A/B火车;停止/运行?位置?速度?空闲?A/B车想进入?冲突?占用?

20001.3.3用例输出文件方式:列出输出文件的内容动画方式:输入操作序号操作操作后火车状态结果是否正确?1启动A/B火车;暂停A/B火车;停止/运行?位置?速度?是/否20001.4测试用例22.1测试结果总结对照任务书各项要求,逐一说明测试结果是否正确,存在哪些bug?备注:按照测试用例模版设计2—4个包含多个呼叫及目标的测试用例。根据用例实际执行结果写成测试结果报告。单元测试不用提交测试用例,这里只包括系统的测试用例。(7)程序清单电子版的源程序,要注意程序必要的注释,以及缩进对齐。(8)使用说明模板<小组编号>小组<实验名称>使用手册版本号:Train-小组简写-UserGuide-***(每次修订时改变编号)编制时间:编制人员:1.5运行环境配置说明程序的安装环境要求,比如操作系统、内存等。说明程序的安装文件路径、文件名称、文件个数。(尤其注意程序运行时必须的一说明程序的运行方式:菜单、图标、命令行等。1.61.71.61.71.8概述程序的主要功能和特点。功能1使用说明逐步演示操作步骤,可以把实际界面粘贴在文档中。功能2使用说明(9)实验总结体会、评论与收获。必写,内容随意。在组间交流会上进行口头经验交流。模拟银行营业厅排队系统程序设计八、实验内容和要求:要求根据下面的功能说明描述实现模拟银行排队软件。(一)银行营业厅配置1.共有1家银行营业厅,但营业窗口设3~8个,可以灵活设置。2.每位客户进入营业厅后,在取号机上申请一个服务号码。3•服务号码根据客户级别分为两类,一类是普通客户,一类是VIP客户。申请VIP客户服务的人,在申请时必须提供VIP身份号,经过银行客户资料核对后,通过申请,分配一个VIP服务号码给他。普通客户类服务号码,和VIP客户类服务号码分开两队,都按先后顺序排队。普通号码范围:000〜999;VIP号码范围:V00〜V99。营业窗口按服务号码的顺序,叫号为客户办理。营业窗口叫号后,进入办理状态。设定1〜2个窗口优先办理VIP客户服务,也就是说,只要有VIP客户在等待,这些窗口都要优先办理VIP客户业务。只在当前没有VIP客户服务申请的情况下,这些窗口转去办理普通客户业务。营业窗口在办完一项业务后,可以暂停办理,停止叫号,休息一段时间,然后恢复办理。但原则上所有窗口不会同时休息。当所有服务号码都被处理完毕,才允许发出“下班”指令,关闭营业厅,退出程序说明:由于本次实验不使用可视化框架,所以无法作到从图形界面上获取客户取号和营业窗口请求。因此请求按钮的设计,不在图形界面上体现,仅用来设计键盘的模拟输入。(二) 银行营业厅的运行控制营业厅的初始状态是各窗口空闲,处于等待服务状态;两类服务号码初始都设为0。客户可以在任意时刻进入营业厅,申请普通服务或VIP服务。申请普通服务,不需要核对身份,直接在当前最大普通服务号码上加1,分配给客户。申请VIP服务,需要客户输入VIP身份号,核对银行VIP文件,若该身份号存在并有效,在当前最大VIP服务号码上加1,分配给客户;若该身份号不存在,提示重新输入,三次错误以后,转为分配普通服务号码给客户。如果VIP客户到达,并成功申请至l」VIP服务号码。此时若VIP优先服务窗口都正在办理业务,新到的客户排队等待。若VIP优先服务窗口有转去办理普通业务的,那么办完当前普通业务后要立刻转回办理VIP业务。若某营业窗口发出暂停信号,系统检查其他窗口的状态,若仍有其它窗口在办理业务,准予该营业窗口暂停休息,停止该窗口的叫号,一段时间后恢复办理状态;若没有其它窗口在办理业务,不允许该窗口暂停。客户办理业务的时间长短,窗口暂停休息时间长短等随机因素不予考虑。可以假设一项业务办理的固定时间是20S,暂停休息的固定时间为30S。营业窗口办理业务时,显示当前处理的服务号码;叫号时,显示等待的服务号码;暂停时显示“pause”。(三) 银行营业厅的排队策略以下是银行营业厅的几个排队策略:先来先服务策略:将同一类的服务号码按取号时间排队,然后一一交给最先空闲的窗口去办理。这是基本的排队策略,只需要设计一个将服务号码排队的数据结构。VIP客户服务有自己的优先服务窗口,普通客户服务有其他的营业窗口,在两个队列都不空闲的时候,遵循这个服务策略。2.顺便服务策略:VIP优先服务窗口,在VIP客户队列为空的时候,采取顺便服务策略:VIP窗口转变为普通服务窗口,跟其他窗口一起分担处理普通客户队列。顺便服务策略建立在先来先服务策略的基础之上。3.最快响应策略:VIP优先服务窗口,因为VIP客户队列为空,转去处理普通业务以后,若重新出现VIP客户,这时要采取最快响应策略:最快结束当前普通业务的VIP窗口,首先回到VIP队列处理状态;较慢结束当前普通业务的VIP窗口,则需要重新判断VIP队列是否为空,来决定下一个业务是接受VIP业务,还是普通业务。最快响应策略建立在先来先服务策略和顺便服务策略基础上。要求重点实现先来先服务和顺便服务策略,应在一相对独立的程序块中实现控制策略,这样能方便地对其进行修改而不影响程序的其他部分。(四)输入输出1)输入:就是一系列的呼叫和目标。输入可以采用两种方法:从键盘输入。初始化设定营业窗口的数量。输入客户到达信息、VIP身份号,以及营业窗口暂停信息、下班指令。我们可以设定按键如下:'WIN3回车'表示营业厅的窗口设置为3。'G'表示一个普通客户到达。'V'表示一个VIP客户到达。'ID12345'表示一个VIP身份号12345。'R1'表示1号窗口请求暂停。'Q'表示下班。将初始化营业窗口数量,和输入的客户到达信息、VIP身份号,以及营业窗口暂停信息、下班指令都写入一个正文文件,然后程序读取这些数据后可以在没有人工干预的情况下模拟银行营业厅的排队情况。其中一个信息占一行,包括如下内容:'WIN3回车'表示营业厅的窗口设置为3。'G'表示一个普通客户到达。'V'表示一个VIP客户到达。'ID12345'表示一个VIP身份号12345。'R1'表示1号窗口请求暂停。'Q'表示下班。银行的VIP客户资料,预存在一个二进制文件中,包括:客户姓名、客户VIP身份号和客户存款金额等。要求利用文件的上机作业2,改写为一个VIP客户资料维护模块,可以添加、删除、更新VIP客户记录。VIP客户维护的输入,从键盘输入:'X'表示进入VIP客户维护状态;'V+'表示添加一个VIP客户;'V-'表示删除一个VIP客户;'V/'表示更新一个VIP客户;'E'表示退出VIP客户维护状态;2)输出:a.银行营业厅排队的动画显示:包括显示当前最大服务号码,窗口正在办理的服务号码,以及窗口的空闲、暂停状态。为方便查看程序,设置一块显示区,显示键盘输入的信息。b.银行营业厅排队情况的记录(结果)文件。记录文件也是文本文件,每一行表示一次取号服务或一次营业办理,包括以下内容:取号时间:表示客户到达后,得到普通VIP服务号码的时间;以整数表示,从小到大排列,占4个字节,从0开始,单位秒。服务号码:刚分配到的服务号码,字符串表示,占3个字节(000/V00-999/V99)。或者:办理时间:表示窗口处理完一个服务号码,准备叫下一个号码的时间。以整数表示,从小到大排列,占4个字节,从0开始,单位秒。服务号码:办理完业务的客户服务号码,字符串表示,占5个字节(000/V00-999/V99)。每个数据项之间用一个空白字符隔开。程序中不必考虑检查数据的正确性。备注:老师会提供一组已经编制好的子程序以及一些给出的数据定义,它们的主要功能是表示银行排队系统参数,模拟银行排队以及处理各类信号的输入输出。要注意利用它们提供的一些控制显示和键盘输入的函数和过程来简化输入和输出(包括动画)的设计。当然也可以利用编程语言提供的函数和过程来完成输入和输出。基本的要求和较高的要求以下内容仅供有余力的同学参考实现。不同类别业务的办理时间不同,而客户办理各类别业务的几率随机。营业窗口叫号两次,客户不应答,做过号处理。程序总体结构以下内容仅供参考。我们可以在主程序中写如下两个函数调用:Configure;Simulation;前者在进行模拟前设置一些参数,这比较简单。而后者则是进行仿真模拟,这相当复杂,所以下面我们就来讨论如何设计Simulation。这一类的模拟仿真程序有一个共同的特点是要模拟某个系统在一段时间内的情况,所以我们很自然地要从时间上对该问题进行分解,就是说Simulation(){Initialize;{初始化过程}doBank_status();{计算银行营业厅状态在这一时刻的变化,例如某窗口的一个业务办理完毕,就要重新设定下一个服务号码}Writemessage();{输出信息(包括动画)}Getinput();{接收当前时刻的新输入(包括新客户到达和窗口暂停等)Control();{调用排队策略程序决定该如何分配号码给窗口}Time二time+1;{推进仿真时间,假定每一秒营业厅进行上述操作一次}Whilenotendcondition;}这就是可以模拟银行排队系统的基本结构了!这个程序结构的基本思想就是模拟了银行排队系统每个时刻做的几件事情,然后将时间向后推移一个时间单位,然后再做那几件事,于是就模拟了银行营业厅的工作状态。十一、实验报告要求:实验要求,按照软件开发过程的各个阶段提交阶段性文档。阶段性文档不能在实验结束后补写,必须遵照实验进度分阶段提交,贯彻文档指导实践、实践修正文档的软件工程思想。文档提交可以书面形式,也可以电子文件形式。(1)【模板:会议记要】<小组编号>小组第**周第**次会议记要实验名称:*******会议时间:****年**月**日**点至**点与会者:<成员1>、<成员2>..文档记录者:***会议内容摘要:<问题编号>、〈问题说明〉;〈讨论意见〉;〈最后结果〉。备注:小组正式会议的记录,主要记录讨论问题的概要,以及工作进展情况,详细设计内容应该放在其它文档中。会议记要一般两页左右。(2)【模板:周报】<小组编号>小组第**周周报实验名称:*******周报时间:****年**月**日小组成员:<成员1>、<成员2>..是否按计划完成?是!〈上周工作小结〉;//按人员总结〈本周工作分派〉。//按人员分排否!〈未完成原因〉;〈本周解决办法〉;〈需要请指导教师协助的问题〉。(3)【模板1:任务书】<小组编号>小组<实验名称>任务书版本号:Bank-小组简写-Task-***(每次修订时改变编号)编制时间:**编制人员:**1.1任务目标概述1.2目标系统的需求(对应任务书上的银行营业厅配置)1.3目标系统的需求分析(对应任务书上的银行营业厅排队控制)1.4目标系统的策略选择(对应任务书上的银行营业厅排队策略)1.5目标系统的IO需求(对应任务书上的输入输出)1.6目标系统的高级需求(对应任务书

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论