课程设计作业布置张艳梅ymzhang@bupt.edu.cn提纲1.实验任务说明2.软件工程概述3.小组成员及职责4.课程设计进度安排及提交内容5.程序结构说明1.实验任务说明•实验一模拟电梯系统程序设计•实验二模拟火车调度系统程序设计•实验三模拟银行营业厅排队系统程序设计实验一模拟电梯系统程序设计•电梯的运行控制策略–顺便服务策略。在运行控制中所规定的安全前提下,一次将一个方向上的所有呼叫和目标全部完成。然后掉转运行方向完成另外一个方向上的所有呼叫和目标(要求实现)。实验一模拟电梯系统程序设计•输入方式:–以键盘输入呼叫和目标。–图形界面输入呼叫和目标。•输出方式:–命令行输出报告电梯运行状态。–电梯运行的动画显示(调用基于WIN32API的图形库函数EasyGraphicalegG(Egg))。–文件记录:电梯运行情况的记录(结果)文件。•版本一:实现从键盘接收输入,命令行输出,文件记录;•版本二:实现从图形界面输入,动画输出,文件记录。实验二模拟火车调度系统程序设计A车轨道B车轨道车站S1火车A火车B火车A出站探测点火车A进站探测点火车B进站探测点火车B出战探测点控制策略:如果出现2个监测点同时向中央控制中心发信号,提示火车要进入公共运行轨道,则A、B车交替使用公共轨道。实验二模拟火车调度系统程序设计•火车的运行控制策略:如果出现2个监测点同时向中央控制中心发信号,提示火车要进入公共运行轨道–A、B车交替使用公共轨道–快车优先(初始设置A、B车的级别)•要求实现上述2种策略,而且在火车运行过程中能动态更改策略实验二模拟火车调度系统程序设计•输入数据–1)一系列的初始化信息,包括:火车运行速度(分级),运行轨道的长和宽,两火车是否同时启动,先启动哪辆火车,启动间隔时间,启动位置以及探测点位置。–2)控制信号,包括暂停或者继续某辆火车运行,改变控制策略。•输入方式–初始化信息可以从键盘或者文本文件读取–控制信号从键盘/界面输入实验二模拟火车调度系统程序设计•输出方式(采用a或者b)–a.动画显示火车运行情况:运行轨道,火车当前位置,探测点位置。如果探测点监测到火车通过,需要变色。–b.使用文件记录火车运行情况,每隔5秒记录一次。•版本一:从键盘输入,火车运行情况输出到文件。•版本二:从界面输入,火车运行情况动画输出。实验二模拟火车调度系统程序设计•较高要求:–在火车运行轨道上设置若干停靠站点,不同的站点可能有不同的停靠时间。在动画输出时,要能显示出剩余停靠时间。实验三模拟银行营业厅排队系统程序设计•银行营业厅配置–营业窗口设3~8个,可以灵活设置–两类客户:一类是普通客户,一类是VIP客户(需要提供VIP身份号进行身份验证)–设定1~2个窗口优先办理VIP客户服务。只要有VIP客户在等待,这些窗口都要优先办理VIP客户业务。只在当前没有VIP客户服务申请的情况下,这些窗口转去办理普通客户业务。实验三模拟银行营业厅排队系统程序设计•所有客户到达后,先取号排队,等待营业窗口叫号。•营业窗口按顺序逐个叫号进行服务。•营业窗口在办完一项业务后,可以暂停办理,停止叫号,休息一段时间,然后恢复办理。但原则上所有窗口不会同时休息。•到下班时间点或收到“下班”指令后,不再接受新来的客户;等原有排队的客户都被处理完毕,才允许正式下班,关闭营业厅,退出程序。实验三模拟银行营业厅排队系统程序设计•银行营业厅的排队策略–按照先来先服务原则,普通窗口永远只能服务于普通客户。–VIP窗口顺便服务策略VIP窗口在VIP客户队列为空的时候,转变为普通服务窗口,跟其他窗口一起分担处理普通客户VIP窗口在VIP客户出现后要尽快结束普通业务的处理,为VIP客户提供服务实验三模拟银行营业厅排队系统程序设计•输入数据–1)营业厅初始化信息,包括:营业窗口的数量、短暂休息时间、下班时间、VIP信息库。–2)控制信号,包括客户到达、VIP身份号、窗口暂停服务、下班指令。•输入方式–从键盘输入–从界面输入实验三模拟银行营业厅排队系统程序设计•输出方式(采用a或者b)–a.动画显示营业厅服务情况:营业窗口、工作或暂停状态,当前服务号码,等待服务的客户数。以及是否到下班时间或是否发出下班指令。–b.使用文件记录营业厅服务情况,每服务完一个客户记录一次。•版本一:初始化信息从文本文件读取,控制信息从键盘输入,营业情况输出到文件。•版本二:初始化信息可以自由选择从文本文件或者从键盘输入,控制信息从界面输入,营业情况动画输出。提纲1.实验任务说明2.软件工程概述3.小组成员及职责4.课程设计进度安排及提交内容5.程序结构说明开发软件不仅仅是编程开发维护设计编写模块测试联合测试分析目标:提高软件质量和生产率•软件质量要素–正确性:软件满足规格说明及完成用户目标的程度–可靠性:软件无故障执行一段时间的概率–性能:完成一项任务所花时间在可忍受范围–容错性:忽略或自动处理数据错误;后台处理运行期异常,以友好可理解的方式提示告警.–完整性:控制未被授权人员访问程序和数据的程度–易用性:用户使用软件的难易程度–灵活性:允许用户变更显示风格和操作模式–易理解性:代码易读,设计思路清晰,文档齐全–易维护性:模块间独立性强,数据结构有扩充余地以规范的方式操作全过程瀑布模型(WaterfallModel)维护开发定义问题定义可行性研究需求分析详细设计编码和单元测试集成测试软件移交和维护概要设计软件开发策略1:复用拿来主义!——复用成熟的代码,创新小部分内容.面向对象学者的口头禅:“请不要再发明相同的车轮子了!”软件开发策略2:分而治之从易到难,循序渐进。罗马不是一天建成的!计划!计划!还是计划!要有可行的设计图纸!软件开发策略3:优化折中优化工作不是可有可无的事情,而是必须要做的事情。“为了使整个组织具有最好的战斗力,我们要重用几个人,照顾一些人,在万不得已的情况下委屈一批人”。提纲1.实验任务说明2.软件工程概述3.小组成员及职责4.课程设计进度安排及提交内容5.程序结构说明3.小组成员职责组长职责1.进度计划的制定和监控,定期召开小组讨论会议;2.制定编码规范(程序书写风格要全组一致);3.任务分解与任务安排;4、定期召开小组会议了解进度以及存在的问题;5、各阶段末需要开小组会议对阶段成果进行讨论评审;3.小组成员职责组员职责1.积极参与讨论;2.配合组长的工作,完成组长交给的任务;3.要求对自己负责实现的每一个函数要进行算法设计和单元测试。4.重视组员之间的协作,有问题及时沟通。5.遇到难题要向助教和老师申请帮助。提纲1.实验任务说明2.软件工程概述3.小组成员及职责4.课程设计进度安排及提交内容5.程序结构说明程序设计进度要求•第7周提交概要设计书•第9周提交详细设计书•第14周提交可运行版本1和测试报告(键盘输入、文件输出),源代码和使用说明文档。•第17周提交可运行版本2和测试报告(界面输入、动画输出并文件记录),源代码和使用说明文档。程序提交网址•文件和状态机作业的提交地址是:•大作业的文档和程序提交网址是文件和状态机作业命名要求:•班级号-班内序号-实验序号-题号-姓名-v1.c•班级号:1~19,班内序号:1~31,实验序号(实验指导书上的序号):1~12,题号(实验指导书上的题目编号):1~12,v1指的是版本号。•例:15-21-12-4-张三-v1.c表示15班21号张三同学实验12第4题去除注释程序版本1提纲1.实验任务说明2.软件工程概述3.小组成员及职责4.课程设计进度安排及提交内容5.程序结构说明5.程序结构说明•整个程序(工程,由多个C文件组成)由输入模块、控制模块和输出模块组成。•输入模块:用于接收请求(电梯请求、排队请求),并保存到相应数据结构中。•控制模块:负责计算每一时刻的电梯/火车/营业窗口状态(运行/服务、开关门/停靠/叫号/暂停、空闲)•输出模块:不断输出刷新电梯/火车/营业厅的状态。•注:版本二,界面输入和动画输出模块可以合并5.程序结构说明-输入模块/*extern说明getInput能被其他文件中的函数调用*/externvoidgetInput(void){charch;while((ch=getchar())!=‘Q’){switch(ch){//将请求保存到相应变量中。}}}input.c定义一个文件input.c,里面有一个函数getInput,用于接收键盘输入请求,并保留到相应数据结构中。voidgetInput(void);input.h5.程序结构说明-控制模块空闲运行停靠其他楼层有请求(n层)到达目标楼层停靠时间结束&&无目标楼层当前楼层有请求停靠时间结束&&有下一目标楼层无请求未到达目标楼层停靠时间未结束电梯状态图有新的优先下行请求有新的优先上行请求低于电梯当前楼层高于电梯当前楼层分析目标请求上行下行修正目标楼层按策略检查请求队列运行状态的内部细化时间到按开门钮时间到/按关门钮开门关门检查请求队列停靠状态的内部细化5.程序结构说明-控制模块•银行窗口的状态图空闲办理结束办理中当前楼层有请求无请求办理未结束等待顾客暂停服务时间到暂停时间未结束申请暂停且请求被允许接到任务顾客未到达且未等待超时等待超时顾客到达且未超时办理结束无任务接到任务5.程序结构说明-输出模块•使用图形库EasyGraphicalegG(Egg)来完成动画显示功能。在visualC++6开发环境下调用。•可以创建2个文件output.c和output.houtPut.c中定义动画输出的若干函数,例如:定义一个函数,功能是画9层楼。outPut.h是outPut.c中函数的函数原型声明,供控制模块或主模块调用动画函数时使用。5.程序结构说明-输出模块/*extern说明drawState能被其他文件中的函数调用*/externvoiddrawState(intst){//根据状态刷新界面switch(st){case1://停靠开门dtEggStop();doorOpen();break;case2:}}output.c定义一个文件output.c,里面有多个动画函数,例如drawState,用于动画显示电梯/火车/营业厅的当前状态。voiddrawState(intst);...output.h