1、第7章 结构化系统设计,本章计划学时:810学时,本章主要内容,系统设计的任务总体设计结构化设计的概念、基本原则从数据流图导出结构图详细设计代码设计输出设计输入设计人机对话设计模块详细设计数据库设计、网络设计系统设计说明书,转换,从分析到设计,现实领域的各种需求,计算机领域的具体实现,针对需求,进行计算机信息系统的物理模型设计,7.1 系统设计的任务,通俗地说,设计就是要回答“怎么做”完成技术实现方案的制定,即信息系统的物理模型一个逻辑模型,可以提出多个物理模型根据物理模型进行实施,得到最终的物理系统,设计系统之前,先看看评价信息系统的标准,这些标准对任何设计方法都适用:信息系统的功能:是否满
2、足用户的需求系统的效率:响应时间、操作的方便性系统的可靠性:抗干扰能力、故障恢复系统的工作质量:准确性、使用效果系统的可变更性:修改和维护的难易程度系统的经济性:系统收益与支出比,7.1.1 设计标准,信息系统的可变更性,变化是不变的真理。统计表示:在信息系统的整个生命周期中,系统维护成本占总成本的80%左右。因此,可变更性是衡量信息系统设计的重要指标。,如何提高系统变更性,结构简单系统各组成元素分工明确,易于理解元素之间的关系清晰简洁变动灵活软件维护中的“水波效应”使系统各组成元素内部的改变容易实现,改动对其他部分的影响尽量减少提前考虑将来最易出现的扩展和变更设计方法:结构化设计和面向对象设
3、计,7.1.2 系统设计的内容,一般划分为两部分:总体设计也称概要设计明确软件的组成元素及其结构(structure)、体系结构(architecture)详细设计各项具体细节,设计硬件软件的各个方面,结构化方法的总体设计主要包括:将系统划分成程序模块;决定每个模块的功能;决定模块的调用关系;决定模块的界面,即模块间信息的传递。简单地说,就是绘制模块结构图,结构化系统总体设计,面向对象系统总体设计,面向对象方法的总体设计主要包括:识别系统中的对象,设计类;决定每个类的属性和操作(功能);决定对象之间的协作关系;将类划分为组件,决定组件的依赖关系。最重要的图是类图和协作图(UML模型),详细设计
4、,包括代码设计输入设计输出设计人机交互设计(用户界面设计)模块处理过程设计(模块详细设计)数据库设计网络设计,7.2 结构化设计的概念,结构化:自上至下,逐步分解求精结构化设计:模块化,模块化,因为根据经验:对于问题1(P1)和问题2(P2)若: C(P1)C(P2)则 :E(P1)E(P2)有规律:C(P1+P2)C(P1)+C(P2)则:E(P1+P2)E(P1)+E(P2)C表示复杂度,E表示需要的工作量,模块化的基本思想,使用结构化设计方法一定程度上能够简化系统结构,使系统容易修改和理解。具体做法:把整个软件划分为部分,其中每一部分的功能简单明确,即程序模块(可以是子过程或函数)划分模
5、块的工作按层次进行,上层模块调用下层模块每一个模块应尽可能独立模块间的调用接口要阐明(模块名称、输入数据、输出数据),接口成本,成本,模块数量,单元模块成本,软件总成本,模块数量和软件成本,粒度太大,单个模块复杂度升高、维护困难 粒度太小,管理与运行成本升高试想一下:每个经理管理协调多少个下级合适?,7.2.1 模块的概念,模块(Module)一词使用很广泛。通常对应于用一个名字就可以调用的一段程序语句(子程序或函数)模块具有输入和输出、逻辑功能、运行程序、内部数据四种属性。,计算工资,模块的图形表示方法,7.2.2 模块结构图,结构图(Structured Chart)描述系统的模块结构及模
6、块间的联系 结构图中的主要成分有:模块:用长方形表示调用:从一个模块指向另一模块的箭头表示前一个模块调用后一个模块。有循环调用和条件调用数据:用带圆圈的小箭头表示从一个模块传递给另一模块的数据(有实义)控制信息:带涂黑圆圈的小箭头表示一个模块传送给另一模块的控制信息,主调模块,被调模块,被调模块,主调模块,被调模块,被调模块,循环调用,条件调用,1.结构图无严格的模块调用顺序,但一般习惯从左至右2.因为约定遵从从上向下的调用,调用关系也可以不使用箭头,而直接使用直线3.模块间传递的信息如果出现在数据字典中,则视为数据,否则为控制信息,结构图的画法,一个完整的结构图,模块设计的度量标准,为了衡量
7、模块的相对独立性,提出了模块间的耦合(Coupling)与模块的内聚(Cohesion)两个标准耦合:模块内部各元素之间的联系程度内聚:模块和模块之间的联系程度设计目标:模块内的联系越紧越好模块间的联系越少越好为什么?,7.2.3 模块的耦合,double CalculateAvg() int n; double total, average, value;scanf(“input value:”, ,影响耦合度的因素,如果使用模块A需要了解模块B,那么A和B是耦合的。影响模块间耦合程度有三方面的因素:联系方式模块间通过什么方式联系来往信息的作用模块间来往信息作什么用数量模块间来往信息的多少。
8、,混合控制数据,用过程 直接引用语句调用,少,多,数量,方式,作用,0,离坐标原点越远,耦合程度越高,模块联系方式,直接引用:一个模块直接存取另一个模块的某些信息,例如全程变量、FORTRAN的common量、语言的extern量、共享的通信区等 。也称为公共环境耦合(common environment coupling) 降低这种耦合程度的办法是使数据局部化,即使用局部变量 过程语句调用:一个模块调用另一个模块,所有数据来往都以参数或返回值方式传递并使用,来往信息的作用,模块间的来往信息可以作数据用,也可以作控制信息用,A,取平均成绩或最高成绩,平均/最高B,(a)控制耦合,成绩,取最高成
9、绩,取平均成绩,A,平均成绩,最高成绩,(b)数据耦合,来往信息的数量,模块间传递的信息量越大,它们之间的耦合程度越高。一个模块最好只了解它确实需要使用的数据,而完全不知道其他数据的存在(独立性好),耦合的类型,根据以上因素,对耦合分类如下:数据耦合:采用子程序调用,调用模块将需要进行处理的数据传递给被调模块。数据耦合是不可避免的。标记耦合:如果调用模块将整个数据记录传递给被调模块,而被调模块只使用了部分数据项,则称为标记耦合或特征耦合。控制耦合:一个模块将控制信息传递给另一个模块,以控制被调模块的内部处理逻辑。(可以分解)公共环境耦合:如果两个模块共享同一全局数据,称为公共耦合。内容耦合:两
10、个模块之间的内部属性有直接关联,也称病态耦合。(某些GOTO语句),减低耦合的设计原则,结构化设计要求模块间的耦合程度尽可能小。 为此应:用过程语句调用其他模块模块间的参数作数据用模块间的参数尽可能少,7.2.4 模块的内聚,模块的内聚反映模块内部联系的紧密程度。一个模块只需要做好一件事情,不要过分关心其他任务。高内聚性的好处是可以提高程序的可靠性。有一个调查表明,50的强内聚性子程序是没有错误的,而只有 18的弱内聚性子程序才是无错的,弱内聚性子程序的出错机会要比强内聚性出错机会高 6 倍,而修正成本则要高 19 倍。代码大全,内聚的类型,模块的内聚可以分以下七类:. 偶然内聚(coinci
11、dental cohesion). 逻辑内聚(logical cohesion). 时间内聚(temporal cohesion). 步骤内聚(procedural cohesion). 通信内聚(communicational cohesion). 顺序内聚(sequential cohesion). 功能内聚(functional cohesion),当同一个子程序中的操作之间无任何联系时,为偶然内聚性,也叫作“无内聚性”。比如只是为了将程序中某几处凑巧相同的一些语句组合起来形成的一个模块:,P,Q,R,S,1、偶然内聚,B=A; read(Cardfile); D=C;,T,将几个逻辑上
12、相似的功能放在一个模块中,比如常见的出错处理模块,工作模块发现错误后,调用错误处理模块,将错误号作为控制参数传入,然后出错处理模块根据不同的错误号执行相应的操作,2、逻辑内聚,将在有限时间单元内处理的成分组合为同一模块比如在程序初始化时所作的处理: m_Medirecno = psPerson.Medirecno txtMedirecno = psPerson.Medirecno txtTel = psPerson.Tel txtContact = psPerson.Contact txtAddr = psPerson.Addr txtMedirecno.Enabled = False,可视化
13、程序设计中在窗口打开时初始化窗口中得控件内容,如列表框的项目、文本框或单选钮的缺省取值还比如:C+的构造函数、析构函数,3、时间内聚,4、步骤内聚,当子程序中的操作是按某一特定过程结构进行的,就是步骤内聚。例如:用户想按一定的顺序打印告,子程序设计成是用于按顺序打印销售收入、开支、雇员电话表的。步骤内聚在时间内聚的基础上增加了次序的约束,模块划分示例,PREP,PLANLOOP,STMRO(主模块),TYPDECID,准备好的矩阵指示标记,准备好的矩阵指示标记,矩阵指示标记,部分结果、标签等,模块PERP是一个初始化模块,属时间内聚。模块PLANLOOP和TYPDECID都属于步骤内聚。前者的
14、元素用于控制主循环,后者的元素负责主循环的整个判定执行过程,绘制划分后的模块图,当模块内的成分引用共同的数据,而不存在其他联系时,称为通信内聚,修改库存,购货单,开发货单,库存,A、销售模块,B 、产生留退名单模块,期末不及格统计,累计不及格统计,5、通信内聚,模块中某个成分的输出是另一成分的输入。比如显示期末成绩通知:,6、顺序内聚,6、顺序内聚,顺序内聚有较强的内聚性是步骤内聚和通信内聚的结合例如:一个模块用于计算高于平均分的人数,步骤是先循环累计总分,然后计算得到平均分,最后循环统计高于平均分的人数有步骤的先后,而且前一个步骤的结果要用于后一步骤的运算中但仍然不是最高的内聚类型,7、功能
15、内聚,一个模块包括并且仅仅包括为完成一个具体任务所需要的所有成分,称为功能内聚。功能内聚性是最强也是最好的一种内聚例如:打印职工名单,PrintStaffList()例如:计算平均分,CalculateAvg()仅用一个动宾词组能明确指出这个模块的所有功能。,内聚的评分,耦合和内聚的概念是Stevens等人提出的, 是测量一个模块化系统好坏的标志。按他们的观点, 给上述七种内聚评分如下:功能内聚分顺序内聚分通信内聚分步骤内聚分时间内聚分逻辑内聚分偶然内聚分可以给一个软件的所有模块打分,最后计算平均分,作为软件结构质量评价的参考,耦合和内聚的关系,二者就像连体兄弟,存在紧密相关的关系:模块内的高
16、内聚往往意味着模块间的松耦合反之,低内聚一般会带来紧耦合,7.2.5 作用范围与控制范围,一个设计原则:对于任何一个判断,其作用范围应该是这个判断所在模块的控制范围的一个子集该原则的目的:消除控制耦合,降低耦合度想象一下,假设某个控制标志在系统的很多部分发挥作用,那么可能会产生这样一种情况:错误发作的位置离产生错误的源头很远,这给程序调试和维护带来极大困难。,作用范围与控制范围,一个判断的作用范围是所有这样的模块的集合,这些模块内含有依赖于这个判断结果的处理。或称影响范围。一个模块的控制范围是指它本身及其所有下属模块的集合。,D计算总工资,C计算职工工资,B计算临时工工资,A计算工资,模块A的
17、控制范围是:A、B、C、D,假如判定出现在模块A,该判断的作用范围是:AB、C、D不受影响,(a),TOP,X,Y,A,B1,B2,(b),B,X,Y,A,B1,B2,TOP,(c),X,B,A,B1,B2,TOP,(d),X,Y,A,B1,B2,作用范围和控制范围图示,期末成绩查询,Main() stuNo = 读入学号模块 调用成绩查询模块 调用显示模块,主模块,成绩查询模块() 调用查期末成绩模块 如果有不及格科目则标志1=True调用不及格处理模块不及格处理模块() 标志2=确定留退模块() 如果标志2 != True 则调用查补考安排模块,显示结果模块() 调用显示成绩模块 如果标志
18、1=True 则 调用不及格显示模块显示不及格处理模块() 如果标志2=True 则 调用留退通知模块 否则调用补考通知模块,子模块,学生期末成绩查询,读入学号,显示成绩,查询成绩,显示成绩,不及格处理,确定留退,显示补考,显示留退,改写后的模块图,7.2.6 模块的扇入与扇出,模块的扇入是指有多少个上级模块调用它。模块的扇出是指模块的直属下层模块的个数,扇出系数不宜过大,A的扇出为2,A,B,C,B1,C1,C2,C3,B的扇出为1,C的扇出为3,T,T的扇入为2,总体设计原则,设计功能内聚的模块模块使用过程语句调用其他模块,传递的参数作数据用,并且尽可能少模块内语句数一般为50100平均扇
19、出系数最好是35高层模块高扇出,最低层模块高扇入一个判断的作用范围是判断所在模块的控制范围的子集,7.2.7 模块总体设计举例,问题描述:病人监护系统中的实时监测模块。该模块使用病床专用设备测量病人的若干生理参数,如体温、脉搏、血压等等。每个病人各种指标的安全范围由医生预先指定。每经过一定的时间间隔,监测模块从监视设备读入这些数据,并存入数据库中。若发现某个指标超出合理范围,则向维修站发出设备故障通知,报告床号。 若发现某个指标越出安全范围,则向护理站发出通知,报告病人号。,分析产生的DFD,病历,合理数据,数据,不安全因素,读取数据,存储数据,检查数据,通报不安全因素,不合理数据,FS2,病
20、人监护,采集数据,检查数据,处理数据,获取下一个病人,PN,FS,EOF,EF,EOF,FS,EF,USF,EF,USF,FS,PN,EF,USF,PN,FS,PN,FS,EF,PN,EF,PN,FS,FSSR,读取数据,检查不合理范围,查询安全范围,判定病人是否安全,写数据库,通报设备故障,通报不安全因素,EF,BN,PN,FS,EF,PN,BN,初始结构图,PN病人号;BN床位号;SR安全范围;FS各指标数据; EF设备故障标志; EOF标志已查过最后一个病人;FS2标志指标是否合理; USF标志指标不安全,第1次改进,“处理数据”模块没有实质性的功能,所包含的三个子模块相互之间没有什么关
21、联,内聚程度很低。该模块只是充当了“管道”,改进如下:废除“处理数据”模块;直接由主模块调用“通报设备故障”、“通报不安全因素”和“写数据库”三个模块,病人监护,写数据库,通报不安全因素,通报设备故障,检查数据,采集数据,第1次改进结果,第2次改进,通报设备故障时应通报床位号而不应是病人号,因此要传递床位号。床位号BN可由“采集数据”模块传给主模块,再由主模块传递给“通知设备故障”模块。但这样做增加了模块间的联系,改为由“采集数据”模块直接调用,PN,FS,病人监护,采集数据,检查数据,通报不安全因素,获取下一个病人,PN,FS,EOF,EF,PN,BN,EOF,FS,EF,USF,USF,P
22、N,FS2,PN,EF,PN,FS,FSSR,SR,读取数据,检查不合理范围,查询安全范围,判定病人是否安全,写数据库,通报设备故障,EF,BN,PN,FS,EF,FS,第2次改进结果,第3次改进,若由“检查数据”模块直接调用“通报不安全因素”模块,则可减少模块间的联系,即不用传递USF标志(排除控制耦合)。这样的话,“检查数据”的名字改为“报告不安全因素”更为恰当,第3次改进结果,病人监护,采集数据,报告不安全因素,写数据库,PN,FS,EOF,EF,EF,USF,PN,SR,FS,EF,PN,FS,查询安全范围,通报不安全因素,PN,FS,判定病人是否安全,第4次改进,“获取下一个病人”模
23、块的界面要返回病人号和床位号,如果使“ 读取数据”模块包括从病人号查床位号的功能,则“获取下一个病人”模块的接口可以简化,第4次改进结果,采集数据,获取下一个病人,PN,EOF,FS,EF,PN,BN,FS,读取数据,检查不合理因素,从PN查BN,EOF,PN,通报设备故障,FS2,BN,第5次改进,通过床号读取数据,功能很明确,但目前包含在“读取数据”模块中,这部分程序代码如果抽取出来单独成为一个模块更好,名字为“从床号读数据”该模块可以成为一个公用模块,很易于重用,第5次改进结果,采集数据,获取下一个病人,PN,EOF,FS,EF,PN,BN,FS,EOF,PN,FS2,BN,从PN查BN
24、,从床号读数据,通报设备故障,检查不合理因素,BN,采集病人数据,第6次改进,“ 从床号读数据”应该是功能单一,调用“通报设备故障”不应属于该模块内容。将“通报设备故障”改为上层模块调用,使“从床号读数据”模块功能更明确,公用性也更好,第6次改进结果,病人监护,采集数据,报告不安全因素,写数据库,判定下一个病人,PN,FS,EOF,EF,PN,EOF,FS,EF,USF,PN,EF,SR,EF,FS,PN,FS,SR,采集病人数据,检查安全范围,判定病人是否安全,通报不安全因素,EF,PN,PN,FS,从PN查BN,从床号读数据,通报设备故障,检查不合理因素,BN,BN,EF,FS,BN,FS
25、,FS2,PN,FS,第7次改进,给护士站或维修站的通报消息可能采用了同一种方式或界面,因此可能会有公用的模块,比如“写一行”(或者“发出警报”之类)因此再抽出一个模块“写一行”,供两个模块调用。,第7次改进结果,病人监护,采集数据,报告不安全因素,写数据库,判定下一个病人,PN,FS,EOF,EF,PN,EOF,FS,EF,USF,PN,EF,SR,EF,FS,PN,FS,FS,SR,采集病人数据,检查安全范围,判定病人是否安全,通报不安全因素,EF,PN,PN,FS,从PN查BN,从床号读数据,通报设备故障,产生一行,写一行,检查不合理因素,BN,BN,EF,EF,FS,BN,FS,FS2
26、,PN,FS,一行,一行,一行,结构图优化方法,减少模块间的联系,减少参数传递,特别是控制信息的传递消除重复功能消除“管道”模块考虑变化控制模块大小整体考虑参照系统分析说明书,7.2.8 对已有程序进行重构,重构(Refactoring):在不改变程序代码功能的前提下,对程序结构所进行的改造因为不是总能提前做出最好的设计,或者对遗留系统的维护过程中提高品质而做出的结构变化参见重构改善既有代码的设计,Void printOwing() Enumeration e = _orders.elements(); double outstanding = 0.0 System.out.println(“
27、*”); System.out.println(“*Customer Owes*”); System.out.println(“*”); While (e.hasMoreElements() Order each = (Order) e.nextElement(); outstanding += each.getAmount(); System.out.println(“name:” + _name) System.out.println(“amoutn:” + outstanding);,模块重构例1,重构后的例1,void printOwing() Enumeration e = _ord
28、ers.elements(); double outstanding = 0.0 printBanner(); while (e.hasMoreElements() Order each = (Order) e.nextElement(); outstanding += each.getAmount();printDetails(outstanding);或者:void printOwing() printBanner(); double outstanding = getOutstanding(); printDetails(outstanding);,模块重构例2,void setValu
29、e(String name, int value) if (name.equals(“height”) _height = value;return;if (name.equals(“width) _width = value;return;为长方形的长和宽设置新值,是一个逻辑内聚的例子,重构后的例2,void setHeight(int value) _height = value;void setWidth(int value) _width = value;,模块重构例3,获取某个数并且修改它以作其他用途,比如:void getTotalOutstandingAndSetReadyFor
30、Summaries()这是一个顺序内聚的模块,重构后:double getTatalOutstanding()void setReadyForSummaries(double x),7.3 从数据流图导出结构图,转换,设计模型(物理模型),转换存在鸿沟,数据流图着眼于现实世界,结构图着眼于计算机世界。数据流图反映数据流,反映系统的逻辑功能,即系统能够“做什么”;结构图反映程序控制层次,反映系统的物理模型,即怎样逐步实现系统的总功能。简单地说:数据流图描述线性的工作流程,结构图描述工作的分配(谁负责做什么),转换有规律可循吗?,数据流图中存在两种典型的结构: 变换型( Transform)结构事
31、务型(Transaction)结构。这两种结构可以分别通过变换分析和事务分析方法导出标准形式的结构图。变换分析:用来描述输入、处理、输出数据流。事务分析:用来描述多种事务类型的处理。,7.3.1 变换分析,对线性结构的DFD作分析,步骤:划分数据流图的输入、主加工和逻辑输出套用固定格式生成第1、2层模块结构图对第2层模块进一步分解,构造完整的模块结构图,第1步 划分输入、加工、输出,原始数据,机内数据,正确数据,解,格式化解,输出解,逻辑输出,逻辑输入,(物理输入),(物理输出),第2步 构造第1、2层模块,正确数据,求解编辑数据,计算,获得正确数据,输出解,编排格式,打印解,编辑数据,读入数
32、据,正确数据,原始数据,原始数据,解,格式化解,解,正确数据,格式化解,解,第3步 继续分解,更细粒度的模块分解,如:,计算,中间结果,数据,计算A,计算B,最终解,7.3.2 事务分析,对并行结构的DFD进行分析,如:根据输入数据判断业务类型,不同业务的具体处理过程有区别。,Q内容,B结果,C结果,B数据,A结果,清单,原始输入,A数据,P内容,C数据,R内容,决定事务类型,打印更新内容,事务A,事务B,事务C,更新P,更新Q,更新R,事务分析结果,业务处理,分配处理,分析类型,判别业务,输入数据,处理事务C,处理事务A,处理事务B,事务A,更新P,事务B,更新Q,事务C,更新R,打印清单,
33、事务分析结果,上图存在控制耦合,消除后:,业务处理,分配处理,输入数据,判别业务,处理事务C,处理事务A,处理事务B,事务A,更新P,事务B,更新Q,事务C,更新R,打印清单,7.3.3 层次的对应关系,数据流图的层次和结构图的层次存在一定的对应关系,但不是机械照搬。,32,. .,.,.,.,.,P1.4,7.4 一体化设计方法,从数据流图导出结构图通常依赖于设计人员的经验以上两种分析方法如同八股,虽然可以套用,但能够符合套用标准的DFD并不多有没有一套规范的转换方法能够帮助经验不足的设计人员从数据流图导出结构图呢?这就是本章所探讨的方法:有章可循的一体化设计方法。,7.5 代码设计,什么是
34、代码?用来表征客观事物的一个或一组有序的符号,它应易于计算机和人识别与处理。一般用数字、字母或它们的组合来表示。代码设计是科学管理的体现。代码无处不在:车牌号码、商品编码、身份证号、学号、专业代码,代码的作用,1. 鉴别功能2. 分 类 3. 排序4. 专用含义,代码的特性,唯一化,规范化,系统化,为事物提供一个概要而不含糊的认定,便于数据的存储和检索。,即编码要有规律,符合某一类事物的聚集,提高处理的效率和精度。,也即标准化,符合国家或行业标准,提高数据全局一致性。,代码的种类,代码的类型,代码的类型指代码符号的表示形式,一般有: 数字型:结构简单,使用方便,也便于排序,但对象特征的描述不直
35、观 字母型:便于记忆,人们有使用习惯。与同样长度的数字码相比,容量大得多。但会出现重复和冲突 数字字母混合型:兼有前两种代码的优点。但是其组成形式复杂,计算机输入不便,人工录入效率低,错误率高,代码举例,身份证号国际书号会计科目考研报考的学校代码、专业代码,如何保证代码输入的正确性,代码不允许出错,那么如何避免代码错误:输入技术(如磁卡、IC卡、读卡器)列表选择输入(少量)界面中采用下拉表选择,不需要键盘输入利用数据库中的代码表对照检查(较多)代码量很多时,下拉选择不可取,可在数据库中为代码及其含义建立数据表,手工输入后,在数据库中进行查询,如果存在则可显示详细内容,否则表示输入有误代码中设置
36、校验位(上述方法都不适用时)代码自身具有一定的验证功能,代码中的校验位,校验码的生成过程如下: (1)对代码本体的每一位加权求和: 设代码本体为:C 1C 2C n 权因子为:P 1P 2P n 加权求和:S= C i P i (2)以模除和得余数: R=S mod(M) (3) 运算后得校验位(如模减去余数): Cn+1 =M-R,身份证中的校验位,比如:34052419800101001(aiWi) mod 11 i: 表示号码字符从由至左包括校验码在内的位置序号 Ai:表示第i位置上的号码字符值 Wi:示第i位置上的加权因子Ai 3 4 0 5 2 4 1 9 8 0 0 1 0 1 0
37、 0 1 ?Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 根据公式进行计算: (aiWi) =21+36+0+25+16+16+2+9+48+0+0+9+0+5+0+0+2) (aiWi)(mod 11) = 189 Mod 11 = 2余数:0 1 2 3 4 5 6 7 8 9 10 校验码:1 0 X 9 8 7 6 5 4 3 2 得出:34052419800101001X,代码设计的原则,代码设计必须遵循以下基本原则: 1. 唯一性 2. 合理性 3. 可扩充性(想想千年虫问题) 4. 简单性 5. 适用性 6. 规范性 7. 系统性,代码设计的步骤,
38、代码设计可按下列步骤进行:确定代码对象考查是否已有标准代码根据代码的使用范围、使用时间,根据实际情况选择代码的种类与类型。考虑检错功能编写代码表,输入/输出设计,哪些地方需要进行输入/输出设计呢?输出设计:当DFD图中有数据流从系统流出到外部实体的地方。报表、人机交互的查询、发送邮件等到其他系统(消息、数据库、文件等)输入设计:外部实体的数据流进入到系统的地方。本系统操作人员的输入来自于其他系统的输入(其他的数据库或文件、其他系统的实时响应结果)高度自动化的输入(条码扫描仪、传感器等),7.6 输出设计,系统中的数据输出到人、组织、其他系统,报表,商品查询结果,付款信息,输出设计的内容,确定输
39、出内容:首先确定用户在使用信息方面的要求,包括使用目的、输出速度、频率、数量、安全性要求等等。然后设计输出信息的内容、信息形式(表格、图形、文字)、数据结构、数据类型、位数及取值范围等等。 选择输出设备与介质:常用的输出设备有显示终端、打印机、磁带机、磁盘机、绘图仪、缩微胶卷输出器、多媒体设备。输出介质有纸张、磁带、磁盘、缩微胶卷、光盘、多媒体介质等等。确定输出格式:输出报表或图形,清晰直观,满足需求和习惯,符合行业标准,什么是高质量的输出设计,以下因素确定了输出质量:易存取Accessibility :很容易被使用及时Timeliness适当Relevance :有使用价值正确Accurac
40、y可用Useability :有合适的格式,输出设备输出介质,输出设备和输出介质,Printers(打印机)Video Display Unit(显示器)Plotters(绘图仪)COM Equipment(串行端口设备)Speakers(喇叭)Paper(纸)Video Screen(屏幕)Microfilm/Microfiche(胶片)Air Waves/Sound(声音)Disk(存储设备)IC卡,输出格式,表格清单(如各种收费单)汇总表(月报表)对照表(年度对照)图形折线图(股票走势)柱状图(产品销售业绩)饼图(产品区域分布比例)文字,图形类型,离散点线条(水平、垂直、三维)扇,7.7
41、 输入设计,外部产生的数据如何输入到系统中,贷款审批意见,订单,新生档案,1、输入设计的内容,确定输入数据内容:包括确定输入数据项名称、数据内容、精度、数值范围。确定数据的输入方式:联机终端输入还是脱机批量输入,与数据发生地点、时间、紧急程度有关。记录格式设计:记录格式设计得好,能减少数据冗余,降低错误率和操作员劳动强度。输入数据的正确性校验:可能的话直接从已有数据中选择确定输入设备:键盘、鼠标、触摸屏、读卡机、字符识别机、光电阅读器、条形码识别机、语音识别仪、图像扫描仪,输入设计的重要性,输入是垃圾 输出是垃圾 (GIGO),批量输入联机输入混合方式,2、输入模式,批量输入的优点,收集和输入
42、可以脱机输入可以由受过专门训练的人员完成处理的速度很快处理可以安排在非高峰时间进行保险单的录入人口普查数据的输入比如国内一些科研项目申请的数据都是各个单位自行录入,保存在盘中上交。,批量输入的不足,数据收集通常是集中式的数据录入一般需要受过专门训练的人员完成处理过程有延迟,因此可能造成数据过时,或等到处理完后已经不适用了因为处理通常在业余时间进行,因此在处理时发现的输入错误,只能在下一次处理时才能纠正(录入人员不熟悉业务)如果程序发生故障,业余计算机操作员没有能力处理,不得不报告系统分析员或程序员(录入人员不熟悉技术),联机输入的优点,数据能够由拥有者进行录入数据的录入可以尽可能地与他们的源头
43、靠近对于数据的正确性和可接受性,可以获得快速的反馈 输入的数据能及时更新数据库,从而使数据在最新状态比如北京市房地产开发企业与购房者签订房屋预售合同时,通过网上签约并下载打印合同文本,实现与政府网的联机备案,保护了消费者权益,联机输入的不足,为了完成录入,设备的花费更多使用者繁杂,不总是受过良好训练对用户数据录入的程序控制要求高数据经常在交易时间录入,因此对正常的机器运行工作量有影响同样的数据,其录入会比批量录入过程要慢,总的效率低,Magnetic Ink Character Recognition (MICR)Optical Character Recognition (OCR)Optic
44、al Mark Recognition (OMR)Image Scanner & Facsimile (Fax) MachinesPoint-of-Sale Device (POS)Automatic Teller Machine (ATM)Intelligent Card,KeyboardMouseJoystickPensScalesVoice RecognitionTouch Screen,3、输入设备,4、输入的记录格式,很多数据在输入到系统之前,通常来源于纸质的记录。原因:数据提供者只负责提供数据,而不负责数据录入到计算机系统出于安全考虑,需要有纸质档案,如会计数据因此需要进行数据记录格式的设计。数据记录格式的设计直接关系到系统输入数据的质量,因此要考虑计算机录入的特点。,