第 4章 系 统 设 计
4.1 系统结构设计
4.2 网 络 设 计
4.3 数据库设计
4.4 代 码 设 计
4.5 输入输出设计
4.6 模 块 设 计
4.7 系统设计报告
4.8 实 验 三
4.1 系统结构设计
4.1.1 系统结构设计的基本原则
1,结构化设计的基本思想结构化设计的基本思想是将一个系统分为若干个彼此具有一定独立性,同时又有一定联系的组成部分,这些组成部分称为模块 。 对每一个系统都可以按功能由顶向下逐层分解为一个多层次的具有独立功能的许多模块,一直分解到每一个模块都能很容易实现为止 。
结构化设计方法集中体现了软件工程中的模块化原则,
模块化可以使系统开发的整体工作量变小 。 在使用模块化方法时应注意模块化是与模块独立性紧密相连的,如果模块之间联系过于密切,虽然每个模块工作量减小,但模块之间接口将很复杂,这将使得接口工作量增大 。
2,模块的耦合性耦合性表现了模块的外部特征,模块之间的耦合程度越低,
说明模块的独立性越好 。 常见的耦合方式有下面几种:
1) 非直接耦合非直接耦合是指两个模块能彼此独立工作,没有直接的关系,仅通过主程序的控制和调用来实现,两者之间不传递任何信息 。
2) 数据耦合数据耦合是指两个模块之间通过数据交换实现相互间的联系 。 一个模块带参数调用另一个模块,被调用模块执行后返回一个参数给调用它的模块 。 传入和返回的参数都是单个的数据项 。
3) 标记耦合标记耦合是指一个模块调用另一个模块时,不是传送数据本身,而是传送存放数据的变量名或文件名等数据标记。这种耦合比数据耦合具有更多的出错机会,复杂程度高于数据耦合。例如,C语言中通过传递一个变量的地址给另一个模块就是一种标记耦合的形式,它的复杂程度很显然高于值传递,出错的可能性更大。
4) 控制耦合一个模块调用另一个模块时传递的不是数据参数,而是一个控制变量,它用来控制被调用模块的功能,称为控制耦合。通常被调用的模块含有多种功能,由传递的控制变量决定调用哪一种功能。被调用模块的逻辑控制走向,受控于调用模块。
控制耦合的耦合程度较高,在设计时应尽量避免 。 控制耦合增加了理解和编程的复杂性,我们看一下图 4.1所示的例子 。 假设模块
A通过传递开关变量 f调用模块 B( 图 4.1( a)),模块 B返回变量 x。
模块 B中包含有两种功能 ( 图 4.1( b)),则在编制模块 A的程序时首先要理解开关变量 f的含义,同时在模块 A中还必须设置开关变量的值 。 模块 A可能还要根据不同的返回值进行不同的处理 。
A
B
f
x
( a ) ( b )
判断功能 1 功能 2
( c )
A
功能 1 功能 2
图 4.1 改控制耦合为数据耦合的方法示意图在绝大多数情况下,控制耦合是可以避免的,对于图 4.1中的例子,可以采取如下的方法:
① 将被调用模块 B中的判定上移到模块 A中去 。
② 将被调用模块 B中包含的两种功能分为两个模块 。
经过这样处理后,控制耦合改变为数据耦合,图 4.1(c)是改变后的模块调用示意图 。
5) 外部耦合外部耦合是指模块与外部环境之间的联系,例如输入输出模块,只有当需要的外部设备正常工作时,这些模块才能正常工作 。
6) 公共耦合公共耦合是指多个模块共享全局数据区,如 C语言中的共用外部变量,FORTRAN语言中的 COMMON共用数据区等。公共耦合的耦合程度较高,属于强耦合,设计时应该避免使用。
7) 内容耦合内容耦合指一个模块直接访问另一个模块的内部信息
( 程序代码或内部数据 ) 。 这是最不好的耦合形式,它对模块的独立性破坏最大 。
3,模块的内聚性内聚性是一个模块内软件成分之间联系的强弱程度的定性度量,是模块内部特征的表现。内聚性越高,表明各成分之间的联系强度越大。模块的内聚性好,一般与其它模块的关联程度也相对较弱,模块的独立性也较好。
1) 偶然内聚偶然内聚是指模块中各软件成分之间没有有意义的联系 。
有时若干个模块中存在若干相同的语句序列,程序员为了节省存储空间将它们抽取出来形成一个单独的模块 。 这些语句只有与调用它们的模块放在一起时才具有意义,这些语句本身相互之间并没有有意义的联系,这个新的模块是偶然内聚的 。
偶然内聚的可理解性差,难于修改,内聚程度最低,设计时应该尽量避免使用。
2) 逻辑内聚逻辑内聚是指将几个逻辑上功能相似的模块合并,而形成一个新的模块,该模块包含有若干个在逻辑上具有相似功能的程序段,由传送给模块的参数来确定该模块完成哪一段功能 。
图 4.2显示了这种情况,图 4.2( a) 表示模块 A,B,C分别调用模块 D,E,F,模块 D,E,F逻辑功能相似,具有部分相同的代码段 。 图 4.2( b) 为将 D,E,F合并为一个模块 DEF后的内部逻辑结构,不同的代码段根据开关值判断执行哪一个代码段 。 图
4.2( c) 表示合并后 A,B,C调用新的模块 DEF。
( a )
A B C
D E F
公用代码段公用代码段
( b )
A
1
B
1
C
1
( c )
A B C
D E F
图 4.2 逻辑内聚示意图逻辑内聚属于低内聚,它的缺点是不易修改 。 例如,图 4.2( b)
中,当 A,B,C中某个模块需要改变公用代码段,其它模块可能并不需要改变 。 另外,逻辑内聚增强了模块之间的耦合强度,图
4.2( c) 中模块 A,B,C与新模块 DEF之间由数据耦合变为控制耦合了 。
3) 时间内聚时间内聚也称瞬时内聚,是指模块中的任务必须在同一时间段内执行 。 例如,为各种变量设置初值以及打开文件等任务经常在系统初始化时进行,通常将这些在时间上必须同时进行的任务组合起来形成一个模块,该模块就是时间内聚的 。 时间内聚也属于低内聚,模块内各成分的时间关系在一定程度上反映了各成分的某些实质,它的可理解性和紧密程度比逻辑内聚好 。
4) 过程内聚模块内各成分是相关的,并且必须按照某种特定的次序执行。
过程内聚属于中等程度的内聚,模块内各成分的联系紧密程度优于前面几种类型,比它们易于理解、维护。
5) 通信内聚通信内聚是指模块内各成分有共用的数据区,或者所有成分都使用相同的输入或产生相同的输出 。 这样的模块如果将其中的软件成分分为多个模块,则这些模块之间的耦合方式是公共耦合 。
它是一种强耦合,模块之间的独立性很差 。 通信内聚模块中各软件成分之间关系比较密切,因为它们使用或产生同一数据区中的相应数据,这说明其功能是密切相关的,所以可修改性和可理解性均较好 。
6) 顺序内聚顺序内聚是指模块内各成分的执行顺序以确定的顺序进行,往往前一功能成分的输出就是后一功能成分的输入,执行顺序不能改变 。 而且这些成分是与同一功能密切相关的 。
7) 功能内聚功能内聚是指模块内包括并仅包括为完成某一功能必需的所有成分 。 这是内聚程度最好的方式 。
4,信息隐藏与信息局部化原则与模块独立性相关的另外两个软件工程学的基本原则是信息隐藏原则与信息局部化原则,下面介绍一下它们的基本内容 。
1) 信息隐藏原则信息隐藏原则是指在设计和确定模块时,使得模块内包含的信息对于不需要这些信息的模块来说是不能访问的 。 这个定义听起来有点费解,下面通过一个例子来解释 。
消息队列输入处理模块消息处理模块图 4.3 图形用户界面模块示意图消息处理模块可以直接访问消息队列,从消息队列中读取数据 。
此时这两个模块之间的关联程度密切,模块独立性很差 。 如果输入处理模块改变消息队列的管理方法,则第二个模块必须进行相应的改变 。
如果消息处理模块对消息队列操作有误,将影响输入处理模块,在程序调试时难以确定错误发生在哪一个模块中 。 实际上,消息处理模块并不需要消息队列的管理信息,它只需知道消息队列中有没有消息及有什么样的消息 。 上面的处理方法违反了软件工程中的信息隐藏原则,
消息处理模块访问了它不需要的信息 。
输入处理模块消息队列消息处理模块获取消息的外部接口图 4.4 信息隐藏示意图信息隐藏使得模块易于修改,并使程序的可靠性、可理解性更好。程序员只需将精力集中在自己的工作上,编写消息处理模块程序的程序员不再需要了解消息队列的管理方法。
2) 信息局部化信息局部化是指将关系密切的软件元素物理地放得彼此靠近。
所谓“关系密切”是指这些软件元素是共同解决某问题或实现某功能所需的。我们可以看到,功能内聚实际上就是将关系密切的软件元素放在同一个模块中。
信息局部化的优点是系统易于维护、易于理解、可靠性好。
4.1.2 子系统的划分信息系统覆盖组织机构管理工作的多个方面,涉及不同的部门。
每个部门所要完成的工作也各不相同,系统设计通常首先将系统按照管理要求以及环境条件等划分为若干子系统。目前最常用的一种划分方法是按照功能进行划分,根据相对独立的管理活动建立各个职能子系统。
一般制造企业子系统通常包括:计划管理子系统,生产管理子系统,物资供应管理子系统,销售管理子系统,财务管理子系统,设备管理子系统,质量管理子系统,劳动人事管理子系统等 。 不同的组织机构的管理功能要求也不尽相同,应根据系统分析结果来进行划分 。
对于较小的系统,也可以按照组织机构的部门设置来进行划分,
因为部门设置在一定程度上也反映了管理功能要求的分布 。 例如对于前面 X工贸公司的例子,该公司的部门可以分为管理部门,业务部门,
财务部门,单证储运部门,由此,我们可以将系统划分为综合管理子系统,业务子系统,单证储运子系统,财务子系统 。
子系统的划分还可以按照业务的先后顺序,实际环境和网络分布等进行划分,本书不再详细介绍 。 子系统划分过程中一般应该遵循如下的几个原则:
(1) 子系统要具有相对的独立性 。 子系统的划分必须使得子系统的内聚性较好,应将联系比较密切,功能近似的模块相对集中 。 子系统之间的联系应尽量减少,接口要简单明确 。
(2) 子系统的划分应使数据冗余较小 。 如果忽视这个问题,可能会使得相关功能的数据分布到各个不同的子系统中,大量的中间结果需要保存和传递,大量的计算工作也将重复进行 。 从而使得程序结构紊乱,数据冗余,不仅会给软件的编写工作带来很大的困难,而且会使系统的工作效率大大降低 。
(3) 子系统的设置应考虑今后管理工作发展的需要 。
(4) 子系统的划分应便于系统的分阶段实现。
4.1.3 基于数据流程图的结构设计结构设计的基本任务是将系统划分成模块、决定每个模块的功能、决定模块间的调用关系和调用接口。
结构化系统开发方法在结构设计阶段采用的方法称为结构化设计方法( SD),本节我们将介绍如何根据系统分析阶段得到的数据流程图来划分软件的结构。下面首先介绍一种常用的软件结构的描述工具 ——结构图。
4.1.3.1 结构图结构图是由美国 Yourdon公司于 1974年提出的,它是目前用于表达系统内各部分的组织结构和相互关系的主要工具 。 下面介绍结构图使用的基本符号 。
1,结构图的基本符号结构图由三种成分组成,它们是:
1) 模块一个模块使用一个矩形框来表示(见图 4.5( a)),模块的名称写在矩形框中,通常由一个名词和一个作为宾语的名词构成。结构图中最底层的模块通常称为基本模块或功能模块,功能模块的命名必须使用确切含义并能表明该功能的动词,不能使用“做”、“处理”等含糊的动词。不过对包含多种管理和控制功能的非功能模块,并不要求一定使用有明确含义的动词。
( a ) ( b ) ( c )
图 4.5 结构图的基本符号
2) 调用调用是模块图中模块之间唯一的联系方式,它将系统中所有模块结构化地,有序地组织在一起 。 表示调用关系的图形是从调用模块指向被调用模块的箭头 。 调用的基本符号如图 4.5( b) 所示 。 被调用模块称为调用者的直接下层模块 。
结构图限制调用关系只能是上层模块调用下层模块,不允许下层模块调用上层模块 。 通常也不允许同层模块之间的调用 。
所以箭头总是向下,不允许向上 。
3) 数据模块在相互调用的过程中要传送数据,结构图用带有注解的小箭头来表示传送的数据信息,如图 4.5( c) 所示 。 模块之间传送的数据可以分为两类,一类是作为数据用的信息,称为数据信息;另一类是作为控制用的信息,称为控制信息 。 结构图中使用尾部有空心圆标记的小箭头表示数据信息,而使用尾部有实心圆标记的小箭头表示控制信息 。 尾部无标记的小箭头既可表示数据信息,也可表示控制信息 。
有时调用模块和被调用模块对传送的数据使用不同的名字
(例如形式参数与实际参数不同名)。为了避免混淆,规定在结构图中使用实际参数的名字。
2,结构图的附加符号除了上面介绍的三种基本符号之外,结构图还提供了两个附加的符号以表示模块间更进一步的调用关系:模块间的判断调用和循环调用 。
1) 模块间的判断调用模块间的判断调用通过在表示调用模块的矩形框下边画一个小菱形,以表示根据判断的结果决定是否调用下层的模块。图 4.6是两种典型的判断调用的例子。
A
B
如果条件成立则 调用 B
如果 情况 1 调用 B
情况 2 调用 C
情况 3 调用 D
A
B C D
图 4.6 模块间的判断调用
2) 模块间的循环调用 。
模块间的循环调用可以通过在表示调用关系的箭头上附加一个弧形的箭头来表示,如图 4.7所示 。
( a )
A
B
( b )
A
B C
图 4.7 模块间的循环调用图 4.7( a)表示模块 A循环调用模块 B,图 4.7( b)表示一个嵌套的循环模块 A循环调用模块 B和模块 C,每一次循环都调用一次 B并循环调用 C。
图 4.8是一个循环调用的结构图,该程序循环读取销售记录以统计每种货物的销售总数,每个销售记录相当于一张售货单,每张售货单包含多种货物的销售数量。
产生统计表读取售货记录 计算每种货物的销售数量售货记录无售货记录销售数量累计数量图 4.8 循环调用的例子结构图只是描述一个系统被分解成层次的模块结构的组成情况,它并不表示模块的调用次序。大部分人可能习惯于按照调用的次序安排从左至右的模块,
但结构图并没有这种规定。有时按照调用次序安排可能会由于表示调用关系的箭头交叉太多而使结构图看起来很复杂,此时可以适当调整结构图模块的次序。
4.1.3.2 数据流程图的基本类型根据数据流程图来进行软件结构的设计,首先要对数据流程图进行分析,并根据数据流程图的特点选择适当的方法 。 结构化设计方法根据数据流程图的特点将其分为交换流和事务流两种基本类型 。
在介绍两种基本类型之前,我们首先介绍几个有关数据流程图的概念 。
(1) 物理输入 (出 ):直接来自 (去向 )外部数据源 (池 )的输入 (出 )数据流 。
(2) 逻辑输入 (出 ):指距离物理输入 (出 )段最远,且仍被看作输入
(出 )的数据流的那个数据流 。
(3) 逻辑输入 (出 )路径:指由物理输入 (出 )到逻辑输入 (出 )沿 (逆 )数据流方向所经过的各加工和数据流组成的通路。
(4) 逻辑输入 (出 )部分:指逻辑输入 (出 )路径的集合 。
逻辑输入部分是系统的输入部分,在逻辑输入路径上的各加工实际上是把外部的物理输入数据,由外部形式转换为系统的内部形式,是为变换部分作预处理 。 通常所做的工作包括数据编辑,有效性检查,格式转换等 。
逻辑输出部分是系统的输出部分,在逻辑输出路径上的各加工实际上是把输出数据从内部形式转换成适合外部设备所要求的输出格式,为真正的物理输出作预处理 。 所做的工作通常包括格式转换,缓冲处理,
组成物理块等 。
因此,所有的数据流程图均可以分为三个部分,即输入部分、输出部分和变换中心。但在这种变换形式中有一类特殊的数据流程图,在数据流程图的形式及从数据流程图导出软件结构图的方法上都有特殊之处。
这种形式特殊的数据流程图称为事务流,而一般的数据流程图称为变换流。图 4.9是两种类型数据流程图的示意图。
( a ) 变换流输入流 输出流变换流
( b ) 事务流
T事务中心图 4.9 变换流与事务流数据流程图变换流类型的数据流程图具有图 4.9( a) 所示的形状,由输入流,
变换流 ( 或称变换中心 ) 和输出流三部分组成 。 其特征是外部的数据信息沿逻辑输入路径进入系统,同时将数据的外部形式变成内部形式 。
进入系统的数据信息经变换中心加工处理后,再沿逻辑输出路径上的各处理变换成外部形式而离开系统 。
事务流类型的数据流程图具有图 4.9( b) 所示的形状,它的特征是该事务流具有一个明显的事务中心 。 数据沿输入通路到达事务处理中心的加工 T,事务处理中心根据输入数据 ( 事务 ) 的类型,在若干个动作序列中选择一个来执行 。 由图 4.9( b) 可以看出,事务流类型的数据流程图呈放射状,事务中心只有一个输入数据流,但有多个输出数据流 。
4.1.3.3 基于数据流程图的软件结构设计
1,基本步骤结构化设计方法将数据流程图转换为软件结构图的基本步骤如下:
第一步,分析数据流程图 。 设计人员首先必须仔细研究和分析数据流程图,
对照数据字典,查看数据流程图的输入,输出数据流和加工是否有遗漏或分解不合理之处 。
第二步,确认数据流程图是属于变换流类型还是事务流类型 。 一般来说,所有的数据流程图都可以看作是变换流 。 但如果数据流程图具有明显的事务流特征,
则采用事务流设计方法更合适 。 当系统规模较大时,数据流程图可能会很复杂,
可能在某些局部具有很明显的事务流类型数据流程图的放射状特征,此时应注意系统的核心功能是否在该放射状特征所在的加工中,如果核心功能不在该处,则该处不是整个系统的事务中心 。 最底层的数据流程图如果很复杂,可适当参照上层的数据流程图来进行判断 。
数据流程图的类型确定后,下面要做的就是按照不同类型的方法将数据流程图转换为软件结构图。得到初始的软件结构图之后,还应该对其进行优化。下面首先介绍变换流和事务流类型的数据流程图的转换方法。
2,变换流类型数据流程图的转换方法对于变换流类型的数据流程图首先必须找出变换中心,逻辑输入部分和逻辑输出部分,然后按照下面的方法进行转换:
1) 设计顶层模块顶层模块反映系统整体功能或主要功能,所以,顶,应在变换中心,
应按变换中心整体功能或关键处理来命名顶层模块 。 顶层模块的作用是协调和控制下层模块并接收和发送数据,所以顶层模块通常称为控制模块,下层特别是底层模块称为功能模块 。
2) 设计第一层模块设计第一层模块有两种不同的方法,实际上它们基本上是一致的,
下面分别介绍这两种方法 。
第一种方法是为每个逻辑输入设计一个输入模块,该模块负责向顶层模块输入该数据流;为变换流设计一个“变换控制模块”以实现所需要的变换功能;为每个逻辑输出设计一个输出模块为顶层模块实现该数据流的输出。图 4.10( a)是一张变换流类型数据流程图的示意图。采用第一种方法导出的软件结构图如图 4.10( b)所示,第一层共有四个模块,
分别对应两个逻辑输入、变换中心和一个逻辑输出。
第二种方法如图 4.10( c) 所示,设计 CI,CT,CO三个模块 。 它们的功能分别是:
CI:输入控制模块,由它协调所有输入数据的接收和预加工,并向顶层模块发送所需的数据,由顶层模块发送给变换中心 。
CT:变换控制模块,负责系统内部数据的变换,把输入数据变换 ( 逻辑输入 ) 为可供输出的数据 ( 逻辑输出 ) 。
CO:输出控制模块,负责数据的加工和实现物理输出 。
上面介绍的第一种方法中当逻辑输入路径、逻辑输出路径较多时,
软件结构的第一层模块数目将很多,顶层主控模块的复杂性较高。第二种方法相对来说更适合这种情况,不管有多少逻辑输入路径和逻辑输出路径,
第一层模块的数目是固定的。当逻辑输入?/?输出路径很少时,第一种方法优于第二种方法。
3) 设计下层模块设计下层模块的方法随设计第一层模块的方法不同而不同,我们首先看第一种方法 。
为每个输入模块设计两个下层模块:一是,输入模块,,用于输入或接受所需的数据;另一个是,变换模块,,将输入的数据变换为所要求的数据 。 此过程递归重复进行,直到物理输入数据流为止 。 例如在图 4.10( b)
中,我们为第一层模块,输入 d”设计两个下层模块,一个是,输入 b”用于接收数据 b,另一个是,b变换为 d”。 由于数据流 b还不是物理输入数据流,
所以我们按照同样的方法为模块,输入 b”设计了两个下层模块 。
对于每个输出模块,我们同样为其设计两个下层模块:一个是,变换模块,,将调用模块提供的数据变换成要求的输出形式;另一个是,输出模块,,向下层的输出模块发送数据 。 此过程也是递归重复进行,直到物理输出为止 。 例如,图 4.10( b) 中的第一层模块,输出 g”,我们为其设计了两个下层模块,一个是将数据,g变换为 i”,另一个是,输出 i”。
为变换控制模块设计下层模块没有一定规则可以遵循,应根据数据流程图中处理的具体情况进行 。 一般来说,应为每一个基本处理设计一个功能模块 。 图 4.10
( b) 中即采取了此种方法 。
如果设计第一层模块时采取的是第二种方法,则设计下层模块时应按下面的方法进行:
先为数据流程图上的每个基本处理设计一个模块,直接把基本处理映射为模块。从数据流程图中变换中心的边界沿每个逻辑输入路径逆数据流方向向外移动,将逻辑输入路径上的每一个处理映射成软件结构中输入控制模块 CI的一个下层模块,直到物理输入为止。再从每一个逻辑输出出发,
沿逻辑输出路径顺数据流方向向外移动,将输出路径上的每个处理映射为输出控制模块 CO的一个下层模块,直到物理输出为止。最后将变换中心的每个处理映射成控制变换模块 CT的一个下层模块。读者可以对照图 4.10
( c)中的例子研究一下这里所讲的方法。
A B
C
D
E
F G
a b
c
d f
h
g i
( a )数据流程图
e
输入流 变换中心 输出流
( b )变换流类型数据流程图导出软件结构图的第一种方法主程序输入 d 输入 e
d,e 变换为 g 输出 g
d
e
e
d
g
g
c
b
d
e
c
b
i
i
ge
h
h
d
f f
g
b
变换为
d
ba
a
c
i
输入
c
输出
i
c
变换为
e
e
变换为
h
h

d
变换为
f
f
变换为
g
g
变换为
i
输入
b
a
输入
a
a
变换为
b
a
主程序
C
I
d
e
e
d
g
g
B C
A
d
e
b
c
D E F
G
h
e
h d
f f
g
g
i

c
)导出软件结构图的第二 种方法
C
T
C
O
3,事务流类型数据流程图的转换方法由事务流类型的数据流程图导出软件结构时,首先应设计一个顶层模块或称为总控模块 。 它有两个功能:一是接受事务数据,二是根据事务类型调度相应的处理模块,以实现处理该事务的动作序列 。 所以,事务流类型数据流程图导出的软件结构包括两个分支:
(1) 接收分支:负责接收数据,并将其按照事务所要求的格式实现输入数据的变换 。 接收分支的设计方法,可参照变换流类型数据流程图输入部分的设计方法 。
(2) 发送分支:通常包括一个调度模块。调度模块下层按照数据流程图上画出的事务种类数设计相应的处理模块。每个事务处理模块的下层模块,
则按照数据流程图上该事务的处理序列所形成的相应的数据流类型映射成相应的结构。
图 4.11是事务流类型数据流程图导出的软件结构的示意图,图中 T1、
T2,T3的下层模块未给出,可直接按照数据流程图中的处理一一映射。 总控模块调度
T
3
T
2
T
1
T
T
3
T
2
T
1
图 4.11 事务流类型数据流程图导出的软件结构
4.1.4 软件结构的优化从数据流程图导出软件的结构图之后,还需要进一步细化和改进以得到更为合理的软件结构 。 从数据流程图导出的软件结构图通常称为初始结构图,本节将介绍一些改进优化初始结构图的指导原则及基本方法 。
1,模块规模适中模块的规模是设计人员比较关心的问题 。 如果模块的规模过大,则不便于阅读,模块的可理解性降低;如果模块规模过小,系统的模块数目太多,
模块之间的相互调用频繁,会影响系统的运行效率 。
对模块规模的要求没有一个标准的规则,有人建议模块规模最好在
50~150条语句之间,因为这可以用 1~2页打印纸打印,便于阅读,而且编码工作也可以在较短的时间内完成 。
2,扇入和扇出适当在模块调用中,扇入指模块的上级模块数,即共有多少模块需要调用这个模块 。 扇出是指模块的直接下层模块的数目,
即模块调用多少个下层模块 。
当两个模块具有一部分相同的功能时,将这部分相同的功能分离出来形成一个单独的模块,可以免除对这一部分内容的重复编码和测试 。
图 4.12是消除模块重复功能的示意图,改进前模块 A,B中具有部分相同的功能 C,改进后将功能 C作为一个单独的模块,原来的 A,B模块中剩下的功能形成新的模块 A′,B′,它们均调用模块 C。
C
A ’ B ’
( b ) 改进后
A
C
B
C
( a ) 改进前图 4.12 消除模块重复功能模块的扇入数越高,则共享这一模块的上级模块越多,消除重复功能的效果也越明显 。 不过如果一个模块的扇入数很高,也应该检查一下该模块是否过于复杂,包含太多的功能 。
模块的扇出数同样应该适中,如果一个模块的扇出数太大,常常会暴露出初始结构图中存在的分解过快的缺点 。 对于这种情况,可采取增加一个中间层次的方法来解决 。
模块的扇出数过低同样也不可取 。 对扇出数为 1的模块,应考虑是否与上层模块合并 。 在实际的系统中,扇出数为 1~2的模块也较常见,不一定非要重新划分 。 一般来说,模块的扇出数以 3~4为宜,若扇出数较大,应控制在 5~9。
一个结构良好的软件结构图通常呈现“清真寺顶”式的形状,即中间逐渐变宽,底层模块扇入数较高。
3,作用范围与控制范围作用范围与控制范围是另外两个在评价软件结构是否合理时常用的概念 。
控制范围包括模块本身及其下属模块 ( 直接调用或间接调用的模块 ) 。 例如图 4.10( c) 中模块 CI的控制范围包括 CI,B,C,A。
作用范围是与模块中的条件判定相联系的概念 。 一个模块中判定的作用范围是指该判定所在的模块和以各种方式受该判定影响的模块的集合 。 所谓受判定影响的模块包括以下几种情况:
(1) 如果该模块中含有依赖于这个判定的操作,则该模块就在判定的作用范围之内 。
(2) 如果整个模块是否执行取决于判定的结果,则该模块和它的直接上级调用模块均在该判定的作用范围之内 。
一个良好的软件结构控制范围与模块中判定的作用范围应该满足下面的准则:
(1) 一个模块内条件判定的作用范围应该在该模块的控制范围之内;
(2) 判定所在的模块应与受判定影响的模块在层次上尽量靠近。
图 4.13( a)的软件结构图不满足上面的第一条准则,模块 H中包含一个判定,该判定的结果影响到模块 I是否执行。该判定的作用范围包括模块 H,E,I,判定的结果必须上传给模块 F,再由 F上传给模块 C,
再由 C将判定结果传递给模块 E,由模块 E根据判定结果决定是否调用模块 I。判定的结果其实对于模块 F,C并没有任何用途,这种软件结构使得模块之间的数据传递变多,耦合程度提高。
A
B C D
E F
G HI
( a ) ( b )
A
B C D
E F
G HI
图 4.13 不好的软件结构同样,如果判断所在的模块与受影响的模块在层次上较远也是不好的 。 图 4.13( b) 中模块 C包含一个判定,判定的结果决定模块 I是否执行,该结构虽然满足上面的第一条准则,但 C与 I之间隔了一个层次,判定的结果首先传递给 E,E根据判定的结果决定是否执行 I,模块 C与 E之间为控制耦合,耦合程度较高 。 判断所在模块与受影响的模块相距的层次越多,模块之间的信息传递也越复杂 。
如果在检查初始结构图时,发现有不满足上面两条准则的情况,可采取措施加以改进。例如,可以将进行条件判定的模块与它的调用模块(直接上级模块)合并(如图 4.14所示),从而使该判定所处层次升高;或者将判定上移到足够高的层次。
A
B C D
G H
C F
I
a( )优化前的结构
A
B

D
G
C
E
I
H

,判断所在模块层次升高( b ) C 与 F 合并形成 C ’
图 4.14 软件结构的优化
4.1.5 其它软件结构描述工具简介用于描述软件结构的工具除了上面介绍的软件结构图之外,还有其它一些工具,在本节中我们介绍一下 IBM公司 20世纪 70年代中期开发的 HIPO方法。
HIPO是英文 Hierachy Input Process Output的缩写,意即层次的输入处理输出。 HIPO方法是:首先使用一个层次图来表示软件的层次结构,层次图中用一个矩形框代表模块,方框之间的连线表示模块间的调用关系。图 4.15是一个层次图的示意图。
图 4.15 HIPO方法层次图的示意图层次图中的顶层模块没有编号,其它所有模块都分别有一个编号,
第一层各个模块的编号依次为 1,2,3…,编号为 1的模块的下层模块的编号分别为 1.1,1.2 …,编号方法类似于分层数据流程图中加工的编号方法 。
输入 处理 输出数据 1
数据 2
处理 1
处理 2
处理 3
数据 1
数据 2
数据 3
图 4.16 IPO图的形式
HIPO要有一整套的 IPO图,层次图中的每个模块都有对应的一张 IPO
图,每张图应用图号加以标识,图号即为对应的模块层次图中的编号。
4.1.6 软件结构设计举例劳资科车间科室总务工资卡扣款单考勤表工资变动单填写工资表计算工资工资结算单汇总工资工资汇总表分配工资工资费用分配表帐务系统职工工资单工资结算明细表票面统计表出纳逻辑输入部分 变换中心 逻辑输出部分发放工资图 4.17 工资管理系统的数据流程图图 4.18是采用前面介绍的变换流的第二种转换方法导出的软件结构图,其中模块之间传输的数据分别为:
a:工资变动单;
b:考勤表;
c:扣款单;
d:工资单;
e:工资结算明细单;
f:票面统计表;
g:工资费用分配表。
工资管理系统
a
b
c
a
b
c
a
b c
填写工资表计算工资汇总工资
a
b
c
发放工资分配工资
d e f
g
C
I
C
T
C
O
图 4.18 工资管理系统软件结构图由于原数据流程图分解不充分,所以该图中某些底层模块的功能仍然比较复杂 。 例如模块,填写工资表,,根据输入数据的不同,其处理方法也不一样,该模块实际上还可以进一步分解为三个模块 。 类似的模块还有,发放工资,
等 。 读者可练习对原数据流程图上的加工进行进一步分解后导出该系统的软件结构 。
该例数据流程图中一些加工之间通过文件传递数据信息,映射为软件结构后,对应的模块访问共同的数据文件,
在上面的结构图中没有明确表示出来。在结构设计阶段,应确定这些模块共同访问的数据文件的结构。
4.1.7 结构设计阶段的其它任务在结构设计阶段对软件结构进行优化和改进后,还要导出接口描述和全程数据结构,并进行复查和评审工作。
实际上,应在软件结构设计的同时就导出接口描述和全程数据结构,每设置一个新的模块,就应进行接口描述和定义 。
按照软件瀑布流开发模型的要求,在完成结构设计后,主要应做的工作是完成总体设计文档,并以此文档作为总体设计质量的评审和复查的依据 。
信息系统的结构化开发方法将总体设计和接下来的模块设计作为一个阶段,即系统设计阶段。系统设计阶段要求的文档称为系统设计报告,它包含了总体设计及模块设计的成果。不过我们还是建议按照瀑布流开发模型的要求首先完成总体设计文档,对其评审和复查后,
再进行模块的详细设计,以保证软件质量。
总体设计说明书,也称为概要设计说明书,它一般包括以下内容:
(1) 软件系统结构描述:用,结构图,或 HIPO图描述的软件系统结构 。
(2) 对每个模块的描述:
① 功能:模块完成什么功能;
② 界面:与调用模块之间的接口关系;
③ 算法:用 IPO图或其它工具 ( 如伪码 ) 简要描述各个模块的算法 。
(3) 测试计划:包括测试策略,测试方案,预期的测试结果,测试进度计划等 。
(4) 对数据库,文件结构和全程数据的描述 。
(5) 需求 /设计交叉表:通过表格的形式给出系统的功能需求与程序模块之间的关系。
4.2 网 络 设 计
4.2.1 局域网络的系统结构在计算机网络的发展过程中,出现了四种不同的系统结构,或称为运行环境 。 这四种结构是:主机 /终端系统,
工作站 /文件服务器系统,客户 /服务器系统和对等网络系统 。
应用系统在不同的系统结构下,运行的方式有所差别,这将影响到软件结构的设计 。 下面我们将对这四种系统结构进行简单的介绍 。
1,主机 /终端系统主机字符终端图 4.19 主机 /终端系统示意图传统的主机 /终端系统大多采用类 Unix系统,所有的应用程序均在主机上运行,终端只相当于一个字符显示器和一个键盘 。 主机系统在一些传统的信息系统中 ( 如金融行业等 ) 使用较多 。
近年来,随着图形用户界面的普及,传统的字符终端面临被淘汰的境地 。 传统的主机系统的终端通过串行通信接口连接到主机,通信速率很低 。 一种新型的基于 Windows环境的终端系统目前正被越来越多的使用,主机采用 Windows NT操作系统软件,终端一般通过以太网连接 。 与传统的主机 /终端系统一样,在基于 Windows环境的终端系统中,所有的应用程序均在主机上运行 。 国内实达公司推出的升腾系列终端就属于这一类产品 。
主机 /终端系统中一般主机负荷较重,需要采用高性能的计算机,
但系统的维护相对简单,所有的软件只需在主机上安装配置即可,对于基于 Windows的系统只需在 Windows NT服务器上安装应用软件即可。
2,工作站 /文件服务器系统工作站 /文件服务器方式是局域网络的基本工作方式,将由若干台微机组成的工作站与一台或多台文件服务器通过网络设备连接在一起,让各工作站共享文件服务器上的文件和设备 。
工作站 /文件服务器系统中应用程序的所有功能均在工作站上执行,文件服务器只是工作站存储文件的场所,工作站的用户可以通过磁盘映像,像使用本地磁盘一样使用文件服务器上的存储空间,在网络上传输的是文件的内容。常见的网络系统的基本工作模式都是工作站 /文件服务器方式,如 Novell
公司的 Netware、微软公司的 Windows NT系统等都是如此。工作站 /文件服务器系统的硬件环境可以运行工作站 /文件服务器系统,也可以运行客户 /服务器系统,其区别仅在于工作方式的不同。
3,客户 /服务器 ( Client/Server) 系统客户 /服务器系统,简称 C/S系统,是由工作站 /文件服务器系统发展而来 。 与工作站 /文件服务器系统不同的是,应用系统的处理功能不再全部在工作站上完成,它的一部分任务被分配在应用服务器上完成 。 当一个用户需要服务时,工作站发出请求,由应用服务器执行相应的功能,
并将服务结果返回到工作站 。 工作站此时变成了应用服务器的客户,应用服务器可以与文件服务器为同一台计算机,也可以是网络上的其它计算机,为客户机提供面向应用的服务 。
典型的客户 /服务器系统是数据库服务器系统。工作站中运行的应用程序(客户)不再直接访问数据库文件,当客户程序需要操作访问数据库时,向数据库服务器发出请求,由数据库服务器完成实际的操作。
例如,客户程序需要从数据库中查询符合某条件的记录,它只需向数据库服务器提交查询请求,数据库服务器接收到查询请求后进行数据库查询,将符合条件的记录返回给工作站。与工作站 /文件服务器方式相比,这种方式使得网络上传输的数据量大大减小。 工作站 /文件服务器方式在网络上传输的是数据库文件的内容,查询由工作站来完成。
而客户 /服务器方式在网络上传输的只是查询的结果。图 4.20是客户 /
服务器方式与工作站 /文件服务器方式的对比。
应用局域网操作系统文件工作站
D B M S
文件服务器整个文件应用局域网操作系统数据库客户机
D B M S
应用
D B M S 服务器图 4.20 工作站 /文件服务器结构与客户 /服务器结构的比较客户 /服务器模式将应用系统的部分功能分配给服务器来完成,减轻了工作站的负荷,因此工作站可以采用较低档的计算机。服务器一般采用高性能计算机,可将一些要求较高速度的任务分配给服务器完成。目前,客户 /服务器系统已成为一种主流的系统结构。
4,对等网络系统对等网络是一种适合于小规模局域网络的系统结构,与工作站 /文件服务器系统不同的是,对等网络不存在专门的文件服务器 。 对等网络中的每个工作站既可起客户机的作用,也可以起服务器的作用,为其它工作站提供服务 。
对等网络的优点是系统建设费用低,无需专门的服务器,
也无需专门的网络操作系统。常见的桌面操作系统如 Windows
95就可以作为对等网络操作系统,使用也相对简单。它的缺点是网络的安全性、保密性较差。
4.2.2 数据库访问方式信息系统一般要进行大量的数据库操作,选择不同的网络系统结构,则其所使用的数据库访问方式(或称为数据库模型)也不相同。常见的数据库模型有独立数据库、文件共享型数据库、客户 /服务器数据库、多层数据库和基于 Web的数据库应用模型。独立数据库一般不适合网络环境的数据库应用,
数据库存储在运行应用程序的本地计算机上,由本地应用程序直接访问。下面简单介绍一下其它几种适合网络环境的数据库模型。
1,文件共享型数据库文件共享型数据库几乎与独立数据库一样,只是被共享的数据库存储在局域网的文件服务器上,可被多个客户通过网络进行访问。这种数据库模型工作在工作站 /文件服务器环境下,在设计软件结构时不需要什么特殊的考虑。
文件共享方式在更新数据库之前通常需要锁定数据库,防止多个客户端同时更新数据库造成冲突。文件共享型的数据库应用也称为单层的数据库应用。
2,客户 /服务器数据库客户 /服务器数据库工作于客户 /服务器网络系统结构上,当信息系统的数据库容量很大需要较高的访问速度时,可考虑设置专用的数据库服务器 。 客户 /服务器数据库应用被称为两层数据库应用 。 单层数据库应用与两层数据库应用在软件结构上基本相同,只是在访问数据库时通过一些数据库访问接口 ( 如微软的
ODBC) 向数据库服务器提出请求,而不是由应用程序直接访问数据库文件 。 图 4.21是 Windows环境下采用 ODBC接口的数据库应用程序访问数据库服务器过程的示意图,ODBC驱动程序访问数据库服务器可以通过网络连接,也可以与数据库服务器在同一计算机中 。
应用程序 程序管理器 数据库服务器O D B C 驱动程序
O D B C 驱动图 4.21 客户 /服务器数据库程序示意图
3,多层数据库
C/S 结构对客户端软硬件要求较高,尤其是随着软件的不断升级,对硬件要求也不断提高,不仅增加了整个系统的成本,也使客户端越来越臃肿,系统维护越来越复杂,升级则更麻烦 。 如果应用程序要升级,必须到现场为客户机一一升级,每个客户机上的应用程序都需维护 。 多层数据库应用系统可以有效地避免这些缺点 。
多层数据库应用系统同样工作于客户 /服务器系统结构下,一个多层的客户 /服务器应用程序在逻辑上划分为几个部分,分别在不同的计算机上运行 。 这些计算机既可以在一个局域网内,也可以在 Internet上 。
多层体系结构最大的优势可以概括为两点,一是集中化的应用逻辑 ( 或称为商业规则 ),另一点是客户程序可以做得很,瘦,。 目前较常见的是三层的体系结构,一个完整的系统由客户程序,应用服务器,数据库服务器构成 。 其中最关键的是应用服务器,它在三层体系结构中起了承上启下的作用,所有的应用逻辑均在应用服务器上完成 。
客户程序主要为用户界面,并不直接访问数据库 。 当需要改变系统的逻辑时,只需对应用服务器进行维护,从而使系统维护工作变得相对简单 。 另外,由于客户端的工作比较简单,也不需要高性能的硬件支持,系统的整体成本下降 。
若采用多层体系结构的系统,在进行软件结构设计时,应注意将应用逻辑从用户界面中分离出来,形成不同的模块 。
4,基于 Web的数据库应用基于 Web的数据库应用 ( 或称为 Browser/Server,简称为 B/S) 本质上也是客户 /服务器或多层数据库体系结构,只是用户界面与传统的应用程序不同,用户只需通过 Internet浏览器来完成操作 。 这种形式的应用程序实质上是在 Web服务器上执行的 。 它的特点是系统容易维护,因为无需在客户端安装特定的软件,软件更新也只需在 Web服务器上完成 。
B/S模式的应用系统是目前信息系统发展的一个趋势,它采用的是基于 Internet的开发技术,易于实现组织内部与 Internet一体化的应用 。
B/S模式的应用系统开发技术目前有很多种,在划分模块时应注意所选择的开发工具的特点 。 有关 B/S模式系统的运行方式本书不再详细介绍,
请读者自行参阅有关资料 。
B/S及 C/S模式是目前使用较多的数据库模式,它们将在一个时期内共存,在一些信息系统中也可以混合采用两种模式。
4.2.3 网络总体结构规划在规划设计一个局域网时,首先必须考虑的一个重要因素就是网络的规模 。 通常可以从以下几个方面加以考察:
① 网络中结点的数目;
② 结点相互之间的距离;
③ 系统中使用的软件;
④ 对网络其它的一些特殊的要求;
⑤ 建立网络所需的费用。
1,结点的数目结点的数目在网络设计过程中是一个十分重要的因素。
网络是采用对等网络形式还是客户 /服务器形式,需要几个服务器等问题通常都由网络中结点的数目来确定。当然也不能完全以结点的数目确定网络形式,对一些有特殊要求的网络,可能虽然规模很小,也会采取客户 /服务器的形式而不是使用对等网络。下面介绍一下常见的几种网络结构与结点数量的关系。
1) 对等网络 ( 2~ 10用户 )
对等网络提供计算机之间的基本网络连接功能,但是它没有一个中央计算机作为服务器或者提供安全性保障,数据分布在各个客户机中,没有服务器提供集中存储空间 。 用户相互连接以共享文件或打印机,传递电子邮件等 。
如果网络只有很少的几个用户,并且网络的安全性不是特别重要,可以考虑使用对等网 。 大部 分 的 操 作 系 统如 微 软 公 司 的 Windows for
Workgroups,Windows 95,苹果公司的 Macintosh OS,IBM公司的 OS/2
Warp,Novell公司的 DR DOS等都内置了对等网功能,因此大部分情况下无需另购网络操作系统软件 。
对等网可以满足文件,打印机共享,电子邮件等需要,网络建设费用较低,安装简单 。 它的缺点主要有安全性差,不能实现数据的集中备份,数据组织困难,不适合数据库应用,网络规模小等,一般不能作为信息系统运行的平台 。
2) 单服务器网络 ( 10~ 50用户 )
如果网络的用户数不超过 50,则可以使用单个服务器提供集中存储功能 。 单服务器网络与对等网络相比,安全性更强,管理也更简单 。 图
4.22是一个单服务器网络的示意图 。
使用单服务器网络需要另外购买网络操作系统软件,例如微软公司的 Windows NT,Novell的 Netware,IBM的 OS/2 Warp Server。 服务器使用的操作系统与客户机不同 。
单服务器网络可以提供集中的文件存储归档服务、网络共享打印、
电子邮件、登录保密性等服务,数据组织方便,易于安装,网络管理简单,适合与 Internet或广域网连接,但是它不适合分布式的或者规模庞大的组织机构。
服务器图 4.22 单服务器网络示意图
3) 多服务器网络 ( 50~ 250用户 )
单服务器网络在 50个以下节点的网络中可以工作得很好,但是当网络规模进一步扩大时,必须使用多服务器网络。图 4.23是一个多服务器网络的示意图。
常见的多服务器网络可以如图 4.23中所示,按照组织机构的构成,各个部门使用各自的服务器,各部门服务器之间使用网间连接设备 ( 如路由器或网桥等 ) 连接在一起 。 这样在整个网络节点数目很多时,使用路由器可以减少部门之间节点的数据流量 。
多服务器网络结构可能很复杂,在规划时必须加以注意,防止网络传输瓶颈,广播风暴等现象的发生 。
多服务器网络适合于集中的文件服务,网络共享打印,电子邮件以及大型的数据库应用等 。 使用多服务器网络时,信息系统的数据库分布存储在网络上不同的数据库服务器上,在划分子系统时,应注意规划好不同数据库的存储位置,以减少网络上的数据流量 。
多服务器网络费用较高,安装也比较困难,数据的组织、网络的管理都比较难。
工程部服务器主服务器 市场部服务器路由器 / 网桥图 4.23 多服务器网络示意图对超过 250个用户的网络进行结构规划是一件较为困难的事,
一般这样的网络节点分布的地理范围比较大,不能由单一的中心机房来支持。这样的网络一般采用多服务器主干网络结构,图
4.24是一个简单的示意图。
高速主干网络可以提供集中的文件存储、网络共享打印、电子邮件、安全登录等服务,适合客户 /服务器数据库应用。其缺点是费用高、安装困难、数据组织较难。
FD D I - E t h e r n e t 路由器 FD D I - E t h e r n e t 路由器
FD D I - E t h e r n e t 路由器服务器 A
服务器 B 服务器 C
图 4.24 多服务器主干网络示意图
5) 企业级网络 ( 1000用户以上 )
企业级网络规模很大,因此一般不考虑使用单个网络的结构 。
对于超过 1000用户以上的局域网络通常按照自然物理界限 ( 如部门或建筑物 ) 分成若干相对独立的网络,每个网络可以采用上面介绍的结构,然后再将这些网络互连 。 图 4.25是一个企业级网络的结构示意图 。
企业级网络同样可以提供网络共享打印,电子邮件,登录安全等服务,也适合客户 /服务器数据库应用,它的缺点是费用高,
安装困难,数据组织较难,不能提供集中的文件服务 。
F D D I 环 F D D I 环部门网络部门网络部门网络部门网络部门网络部门网络图 4.25 企业级网络结构示意图
2,结点之间的距离在考虑网络结点数目的同时,还应该充分考虑客户机之间的距离,这将影响网络的协议以及传输介质的选择。即使网络规模很小,假设在 50个用户以下,如果一部分结点和另一部分结点之间的距离很远,这时就不能像前面所介绍的那样使用单服务器结构的网络。
3,系统所使用的软件一个组织机构的内部网络不可能仅仅用来运行信息系统软件,往往还会有其它各种基于网络的应用运行 。 不同的应用软件对网络上数据流量的影响不同,有些软件会造成网络上的数据流量的急剧增长,而有些软件则影响很小 。 因此在规划网络时还应该对网络上所使用的软件以及网络建成后可能会使用的软件加以考虑 。
常用的软件如文字处理或电子表格软件一般对网络数据流量影响较小,文件长度一般不太大,而且一次读入后通常在修改后保存时才会再次在网络上传输 。
图形图像处理以及一些计算机辅助设计软件对数据流量的影响较大,
一般这一类的数据文件都比较大,软件在读入或保存这类文件时,网络负载的增大比较明显。
信息系统中共享的数据库对网络的流量可能有持续的影响,因为这类数据库记录为多个用户共享,一般都保存在文件服务器中,查询或更新数据库记录都需要与服务器进行通信,只有很少的信息存储在客户端 。
如果网络中同时运行数据库软件和图形图像处理软件,建议使用高速计算机网络 。
另外,规划网络时还应该考虑网络建成后可能增加的一些新的应用软件,例如电子邮件、因特网服务、组件、视频会议等。如果网络中要运行视频会议一类的应用,则必须考虑高速网络,因为这类应用实时性很强,数据量也很大。
4,其它可能的特殊需要规划网络有时还必须考虑一些特殊的要求,例如网络的安全性要求,如果网络对安全性要求很高,即使只有很少的节点,也不能使用对等网络。另外,常常考虑的还有是否有少数节点距离你计划放置集线器的位置超过 100 m以上(这是无屏蔽双绞线段的最大距离);网络的外部环境中是否有较强的电磁干扰。
5,费用最后还必须考虑的一个重要的因素是网络建设的费用 。 通常以每个节点的平均费用来进行衡量,在计算时必须将网络接口卡,集线器,电缆以及安装等各个方面的费用全部计算进去 。 网络设备费用总的趋势是在不断降低 。
4.2.4 传输介质与数据链路层网络的数据链路层协议的选择也十分重要,它关系到网络硬件设备的选择安装 。 常见的数据链路层协议有以太网,快速以太网,令牌环等 。 下面分别简要介绍一下它们的特点 。
选择以太网意识到以下两点是十分重要的:
(1) 以太网不能保证计算机在重负载下总是能够及时传送数据;
(2) 一台计算机必须等到传输介质空闲时方能发送数据 。
因此应该保证每个网段不超过 30个节点 。 如果网络中超过 30个节点,
应该分段并使用网桥或其它设备连接这些网段 。
以太网能够使用各种传输介质,并且配置网络比较简单。一般情况下我们都可以选择以太网作为数据链路层协议,除非有特殊的要求、对网络带宽要求较高或者现有网络已安装使用了令牌环。
快速以太网近年来发展很快,100 Mb/s以太网的费用已与 10 Mb/s以太网价格相当,因此一般建议选择 100 Mb/s以太网,它可以提供更高的带宽 。 如果原有 10 Mb/s网络设备而暂时不想淘汰的话,可选择 10/100 Mb/s自适应的硬件设备 。 不过要注意的是,高速以太网对电缆布设要求比较严格 。
令牌环网络与以太网不同,它在网络负载很重的情况下网络的性能比较稳定,数据传输延迟稳定 。 令牌环作为与以太网同时代的网络技术,它的费用要高于以太网,因此其市场占有率远低于以太网 。 一般不建议选择令牌环产品,除非现有网络已经使用了令牌环产品 。
FDDI通常是高速主干网的选择,主要因为它的传输速度快,不过现在它面临快速以太网以及 ATM网络的挑战 。 快速以太网价格比 FDDI更便宜,
它和 ATM网络都有望达到很高的数据传输速率 。
选择了数据链路层协议,通常决定了选择什么样的拓扑结构和传输介质,
不过有些数据链路层 ( 如以太网 ) 可以选择多种拓扑结构和传输介质 。
早期的以太网使用粗同轴电缆,即粗缆以太网,通常称为 10Base5,每一电缆段的最大长度为 500 m。 图 4.26是粗缆以太网的结构示意图,WS表示工作站,FS代表文件服务器 。
粗缆以太网一个电缆段允许的节点数最多为 100个,当节点数超过 100
个或需要段长度超过 500 m时,可以采用中继器来延长距离。中继器起放大网络信号的作用,使用中继器的以太网结构如图 4.27所示。使用中继器时最大干线段的数量为 5个,但是只能有 3个段有节点。
TT
WS WS WS WS WS
图 4.26 粗缆以太网结构示意图
T
T
R
T
WS
WS WS
WS
WS
WS
T
T
R
T
图 4.27 粗缆以太网多个网段连接采用细同轴电缆作为传输介质的以太网称为便宜的以太网,即
10Base2。它与粗缆网络一样,为 10 Mb/s基带网络,电缆段的长度最长为 185 m。采用 RG-58A/U同轴电缆,价格便宜。采用 T型接头将两段同轴电缆与网络接口卡连接起来。图 4.28是细缆以太网的结构示意图。
图 4.28 细缆以太网结构示意图细缆以太网同样可以通过中继器来延长距离,最多为 5段,最大总长为 925 m,每段中的最大节点数为 30,最多可以由 3个段连接节点,工作站之间最小距离为 0.5 m。 每个段的两端都必须安装一个终端匹配器且一端必须接地 。 T型连接器与网卡上的 BNC接口之间必须直接连接,中间不能再接任何电缆 。
细缆以太网价格便宜且连接方便,但它的可靠性较差,T型接头的连接处因时间长久或接触不良,易出故障而影响效率 。 另外,由于在 T型接头与网卡之间直接连接,不能有距离 。 总线必须直接连接到每台计算机所在位置,因此布线不规则也很不方便,每一节点的故障就可能导致整个网络的瘫痪 。 因此,一般来讲,细缆网络用于规模较小,或节点地理位置相对集中的网络 。
10BaseT是使用无屏蔽双绞线来连接的以太网 。 与传统以太网不同的是,10BaseT使用总线和星型结合的结构,星型结构的中心是以太网集线器 。 以太网集线器的内部结构实际上仍然是总线形式的,一般由若干个双绞线连接的端口,把从一个端口接收到的数据转发到其它所有的端口 。
大部分以太网集线器除了双绞线端口外,一般还有一个粗缆连接端口或细缆连接端口。通常使用的 10BaseT网络的拓扑结构一般是将所有的工作站连接到以太网集线器,集线器之间通过同轴电缆总线连接起来。图 4.29是该结构的示意图。
集线器 集线器 集线器图 4.29 10BaseT总线和星型结构
10BaseT以太网采用两对无屏蔽双绞线作为传输介质,双绞线与工作站网络接口卡之间采用标准的 RJ 45标准接口;工作站与集线器之间的最大距离为 100 m;集线器与集线器之间也可以使用双绞线互连,一条通路最多可以串联 4个集线器,任何一条线路不能形成环形;集线器与集线器之间的最大距离为 100 m。
在实际应用中,100 m的距离限制有时是一个不利的因素,
不过大部分用户的工作站是以小组形式集中在几个区域内的,只要合理布置集线器,就可以克服 100 m的限制 。
100 Mb/s高速以太网组网形式与 10BaseT相似,可以从
10BaseT网络平滑过渡到 100 Mb/s网络 。 限于篇幅,本书不进行详细介绍 。
4.2.5 网络设计举例现在我们来看看第 2章例子中 X工贸公司的网络设计情况 。 该公司的各个部门主要分布于同一栋大楼的 20,21两个楼层,另外有一个业务部门位于该大楼的 8楼 。 每个业务部门有 1~ 2个结点,办公室,总经理室,
综合管理部门共有 10个结点 。
1,网络总体结构对于 X工贸公司的情况,网络节点总数在 30个以下,可以采用单服务器网络,由服务器提供文件共享服务以及保证登录的安全性。当然这种情况也可以采用单服务器网络与对等网络混合的方式,在具有多个结点的部门内部采用对等网的形式实现各个节点之间的相互访问,不过采用这种方式会使网络的安全管理变得比较复杂。
2,网络拓扑结构与数据链路层数据链路层可选择 100 Mb/s以太网络,采用星型与总线的混合结构,
由于公司楼层分布范围较小,无需在每个楼层放置集线器,可考虑使用两个 16端口集线器集中放置,各个部门采用双绞线直接连接到集线器即可 。
位于 8楼的业务部门虽然距离集线器较远,但未超过 100米,因此无需特别处理 。
3,数据库模型数据库访问模式可采取客户 /服务器方式,由数据库服务器统一处理对数据库的访问请求。与文件共享方式相比,可靠性更好,不会由于某个客户端的问题而影响整个系统的运行。在系统实施初期由于系统数据量相对较小,数据库服务器可与文件服务器安装在同一台计算机上。如果系统数据量上升,数据库服务器可安装在专用计算机上,以提高系统的响应速度。
图 4.30是 X工贸公司网络系统的示意图。
管理部门业务部门文件服务器数据库服务器集线器双绞线图 4.30 X工贸公司网络结构示意图
4.3 数据库设计
4.3.1 关系数据库设计原则信息系统通常采用数据库存储和管理大量的数据 。 所谓数据库是指按一定的组织方式存储在外存储器中的逻辑相关的数据集合 。 数据库系统不仅描述数据本身,还采用结构化的模型描述它们之间的联系 。 常用的数据模型有层次模型,网状模型,关系模型,目前大部分信息系统多采用关系数据库模型 。
关系数据库采用关系模型,关系模型的数据结构是一种二维表格结构 。 一个二维表由行和列构成,称为关系数据表 。 表 4.1是一个关系数据表的例子 。 关系数据表的每一行描述一个实体的属性,每一列描述不同实体的同一属性 。 实体是现实世界中事物的抽象 。
一个关系数据库中有多个相互关联的关系数据表,在建立数据库之前必须对关系数据表的数据结构进行规范重组,如消除冗余数据项、保证数据的完整性、一致性等。
学 号 姓 名 性 别 入学成绩
990602 张明 男 510
990603 李进 男 512
990604 王霞 女 520
表 4.1 关系数据表举例关系数据库的创始人之一 ——IBM公司的科德 ( E.F.Codd) 首先提出了关系数据库的规范化理论 。 他在 70年代撰写的一系列论文中提出了一整套数据规范化模式,这些模式已经成为建立关系数据库的基本范式 。
在规范化理论中,一个二维的关系表应具有下面四个性质:
(1) 在表中的任意一列上,数据项应属于同一属性 ( 例如表 4.1中每一列都存放着不同学生的同一属性数据 ) 。
(2) 表中所有行都是不相同的 。
(3) 在表中,行的顺序无关紧要 ( 如上面例子中每行存放的都是某一个学生的信息,先放哪一个都没有关系 ) 。
(4) 在表中,列的顺序也无关紧要,但不能重复 。
在设计关系数据库时每一个关系数据表必须有一个 ( 而且仅有一个 ) 数据元素为主关键词 ( primary key),该关键字唯一标识该行,例如表 4.1中的关系数据表中的学号即为该表的关键字 。 有时我们在设计数据库时会遇到表中任何一列数据都不唯一的情况 。 例如,一个表格记录学生的出席情况,如表 4.2所示,表中三列数据元素均可能重复出现 。 对于这种情况,一些关系数据库管理系统 ( 如 Access) 支持增加一个特殊的字段,
该字段在增加记录时由关系数据库管理系统自动给出,用以唯一标识该行 。 微机上常见的 XBASE类关系数据库系统 ( 包括
dBASE,FoxBASE,FoxPro等 ) 不支持此类字段,在编程时需要程序员自行处理此种情况 。
表 4.2 无主关键字的数据表学 号 日 期 出席情况
990602 99/10/23 迟到
990603 99/10/23 出席
… … …
990602 99/11/01 出席
990603 99/11/01 迟到一个关系数据库中可包含多个相关的表,表之间通过指定的列关联。例如,表 4.2与表 4.1中的数据表通过学号关联,此时学号称为表 4.2的外关键字。
关系数据库结构设计的另一个重要原则是,必须保证数据库的数据完整性 。 所谓数据库的完整性,是指数据库中数据的正确性和一致性 。 为了维护数据库中数据的正确性和一致性,
在对关系数据库执行插入,删除和修改操作时必须遵循三类完整性规则 。
(1) 实体完整性规则:要求主关键字不能为空值,否则主关键字起不到唯一标识表中对象的作用 。
(2) 引用完整性规则:不允许引用不存在的对象 。 例如,
如果在表 4.2中的数据表中插入一条记录,其学号在表 4.1中不存在,则破坏了引用完整性规则 。
(3) 用户定义的完整性规则:这是针对某一具体数据的约束条件,由应用环境决定。
4.3.2 关系数据库结构的建立
1,概念设计概念设计是指在对用户需求分析的基础上,建立整个系统的数据库概念结构 。 首先分析系统数据,确定实体和实体的属性,
标识出实体属性之间的依赖关系,确定实体之间的依赖关系 。
数据库的概念结构通常采用实体( Entity) —联系
( Relationship)方法来表示。这种方法简称为 E-R方法或 E-R图,
有时也称为 E-R模型。 E-R模型不依赖具体的数据库管理系统,它与前面提到的数据库的层次模型、网状模型和关系模型不同,只描述现实世界中实体之间的联系,不涉及实现的方法。因此不管系统最终采用什么数据库管理系统,这一步工作都是相同的。
图 4.31是 E-R图的基本符号 。 图 4.31( a) 为表示实体的长方形,
框内写上实体名 。 椭圆形或圆形表示实体的属性,圆内标上属性名,用连线将实体和实体的属性连接起来,如图 4.31( b) 所示,
表示实体 E的属性包括 a1,a2,……,an。 图 4.31( c) 中的菱形表示实体之间的联系,在菱形中标上联系名,并用连线将联系分别与有关的实体连接起来,图 4.31( c) 中连线旁的 1与 n表示这是
1对多的联系 。 联系可以是一对一 ( 1∶ 1),一对多 ( 1∶ n) 或多对多 ( n∶ m) 的 。
为了使 E-R图简洁、清晰,一般不将实体的属性画在 E-R图上,
而是采用专门的列表来表示。
RL
1
n
E
1
E
2
( c )
E
a
1
a
2
a
n
( b )
E
( a )
图 4.31 E-R图的基本符号姓名职工号 职称教师授课课程教材
n
k
m
编号课程名 学时书名作者 出版社
图 4.32 E-R图的例子
2,逻辑设计逻辑设计的主要任务是根据数据库管理系统的特征将概念结构转换为相应的逻辑结构 。 规范的关系数据表中的实体不应存在多对多的关系,因此如果概念结构存在多对多的联系,必须对概念结构进行简化,转换为一对多的联系 。 下面我们通过例子介绍简化多对多联系的方法 。
图 4.33是化简多对多关系后的 E-R图 。 消除多对多的方法其实很简单,只需在原来的两个数据表之间增加一个数据表,使原来的 m∶ n
的关系改为 m∶ 1,1∶ n的关系 。 上面的例子通过在教师与课程,教师与教材之间增加一个课程表来化简原来多对多的关系 。
姓名 职工号职称教师授课课程 教材
n k
m
编号 课程名学时书名 作者出版社课程表
1
安排 选用
11
图 4.33 化简多对多关系后的 E-R图下面我们再来看一个简单的例子。图 4.34列出了两个数据表:项目表和合同表,这两个表中的实体存在多对多的关系,一个大的项目可能会有多个合同,而一个大型合同也可能涉及多个项目。例如表中的项目 B3985涉及合同 584372,738284,合同号 858961涉及项目
D2839和项目 A4180。项目号 项目名,....
.
B 3 9 8 5 ******
.....
.
D 2 8 3 9 *******
.....
.
A 2 2 3 9 ******
.....
.
C 2 1 5 0 ******
.....
.
A 4 1 8 0 ******
.....
......
.
......
.
.....
.
合同号 合同名,,,,,,
5 8 4 3 7 2 * * * * * * *,,,,,,
8 5 8 9 6 1 * * * * * * *,,,,,,
7 3 8 2 8 4 * * * * * * *,,,,,,
5 1 6 6 4 6 * * * * * * *,,,,,,
8 6 7 1 2 4 * * * * * * *,,,,,,
.,,,,,,,,,,,,,,,,,
( a)项目表 ( b)合同表图 4.34 项目表与合同表的结构为了简化两个数据表间的多对多的关系,我们增加一个中间表即项目合同表(如图 4.35所示),列出项目号与合同号之间的对应关系,增加一个新的列项合号作为该表的主关键字。则新增加的项目合同表与原有的项目表和合同表之间都是一对多的关系。
项合号 项目号 合同号
XH2001 B3985 584372
XH2002 B3985 738284
XH2003 D2839 858961
XH2004 A4180 858961
......,.....,.....
图 4.35 增加的中间表
3,物理设计物理设计的目的是根据数据管理系统的特征,确定数据库的物理结构 ( 存储结构 ) 。 关系数据库的物理设计比较简单,具体的方法不再赘述 。 对于一般微机关系数据库,物理设计的主要任务有:
(1) 确定所有数据库文件的名称及其所含字段的名称,类型和宽度 。
(2) 确定各数据库文件需要建立的索引。
4.4 代 码 设 计为了便于计算机对信息进行汇总和排序处理,提高录入、
处理、存储和传输效率以及有利于安全保密,必须对信息进行统一分类编码,用数据或字符来代表客观存在的实体或属性的符号,称为代码。例如,在一个职工名册数据库中存储每个职工的性别,如果直接使用汉字“男”、“女”来表示需要占用两个字节的存储空间,而如果采用字符,F”、,M”
来表示只需要一个字节。
4.4.1 代码设计的原则代码设计是一项重要的工作,如果代码设计不合适,再修改代码设计方案的话将会引起程序的变化和数据库结构的重建 。 因此一定要进行全面考虑和仔细推敲,修改,逐步优化,最后确定,切忌草率行事 。
一般的现行系统已经存在一套代码系统,但是这种代码不一定适合计算机处理,因此应对系统使用的代码进行调查研究和统一规划,以便重新设计或修订。对重要代码的设计应依据国家有关的编码标准。
优化的代码系统应具有如下特点:
(1) 唯一确定性:每一代码都仅代表唯一的实体或属性 。
(2) 标准化与通用性:国家有关编码标准是代码设计的重要依据,
另外,系统内部使用的同一种代码应做到统一,使代码的使用范围越广泛越好 。
(3) 可扩充性和稳定性:要考虑系统的发展和变化 。 当增加新的实体或属性时,直接利用原代码加以扩充,而不需要改动代码系统 。
(4) 便于识别和记忆:为了同时适合计算机和人工处理使用,代码不仅要具有逻辑含义,而且要便于识别和记忆 。
(5) 短小精悍:代码的长度不仅会影响所占据的存储单元和信息处理的速度,而且也会影响代码输入时出错的概率和输入、输出的速度。
4.4.2 代码的分类常见的代码有以下几个主要种类:
(1) 有序码:用连续的数字代表编码对象的码 。 例如张三的职工号为 0001,黎明的职工号为 0002,…… 。
(2) 区间码:区间码将数据项分为若干组,每一区间代表一个组 。
码中的数字 ( 或字符 ) 和位置都代表一定的意义 。 区间码的每一个区间可以使用有序码或下面的助记码来表示 。
区间码使用比较广泛,例如学生的学号一般由入学年份,系,
专业,班,班内序号构成 。 目前大多数图书馆使用的图书分类法也采用区间码,码中的每一位数字代表一类,例如:
500,自然科学
510,数学
520,天文学
530,物理学
531,机构
531.1 机械
531.11 杠杆和平衡
(3) 助记码:将编码对象的名称、规格作为代码的一部分。
4.4.3 校验码为了防止代码出错,在一些系统中往往采取增加校验位的方法来检验输入的代码数据是否有错 。 例如,我国目前采用的 18位身份证号编码方案,前 6位表示地区编码,中间 8位表示出生年月日,
接着的 3位表示顺序号和其它状态 ( 如性别 ),最后是一个校验位 。
校验位也称校验码,它在原有代码的基础上,通过事先规定的数学方法计算出校验码,附加在原代码的后面,使它变成代码的一个组成部分;使用时与原代码一起输入,计算机按照事先规定的数学方法计算出校验位,与输入的校验位进行比较,以检验输入是否有错 。 校验位通常为 1~2位 。
校验码通常可采用加权取余的方法来获得,它的计算步骤如下:
(1) 对原代码的每一位加权求和
n位原代码,c1c2… cn
加权因子为,p1p2… pn
加权和为,c1p1+c2p2+… +cnpn
这里加权因子可选自然数 1,2,3,4,5,几何级数 2,4,8、
16,32或其它。最简单的加权因子可全为 1,即把原代码的所有位的数字相加得到加权和。
(2) 以模除和得到余数,模可选 10,11等数 。 例如以 10作为模,
则得到一个 0~ 9之间的余数,该余数即可作为校验码附加在原代码之后 。
得到校验码的算法还有其它多种,不同的算法发现错误的能力也各不相同,有兴趣的读者可参阅有关专著获取更多的信息。
4.4.4 代码设计举例下面是 X工贸公司管理信息系统中部分代码设计的例子 。
(1) 部门代码:公司各个部门的编码,例如:
总经理办公室 101
综合管理部 102
单证储运部 103
财务部 104
法律室 105
进出口一部 201
进出口二部 202
进出口三部 203
……
这里部门代码实际上分为两个部分,第一位表示部门为管理部门( 1)或业务部门( 2),后两位为顺序编号。
(2) 职工编号:每个职工有一个唯一的工号,采用顺序编号,如
0001,0002,0003,…… 。
(3) 业务立项号:系统为每一项业务设计一个唯一的代码,以便于管理、查询,同时也便于管理人员识别。业务立项号的形式为,XXXX-X-XXX,例如 1998-A-064表示 1998年度业务一部的第 64
项业务。前四位代表年度;中间的一位代表业务部门,A表示业务一部,B代表业务二部,依次类推;最后三位为顺序号。
4.5 输入输出设计系统输入输出设计是系统设计中一个重要的环节,它对于保证用户和今后系统使用的方便和安全可靠性来说十分重要 。
4.5.1 输入设计输入设计的目标是:在保证输入信息正确性和满足需要的前提下,
应做到输入方法简单,迅速,经济和方便使用 。 输入设计应使输入量保持在能满足处理要求的最低限度 。 输入量越少,错误率越小 。
常见的输入方式通常有键盘输入,数模 /模数转换方式 ( 如条码输入,
扫描仪输入,传感器输入等 ),网络传送数据和磁盘传送数据等 。 输入方式的选择应根据总体设计和数据库设计的要求来确定,应尽量利用已有的设备和资源,避免大量的数据重复多次地从键盘输入 。 因为键盘输入工作量大,速度慢,而且出错率很高 。
输入信息的内容设计包括输入数据项名称,数据类型,精度或位数,数值范围及输入格式等 。 这些内容大部分根据系统输出数据的要求加以确定,而输入数据的格式主要与数据的组织方式及具体的输入方式有关,同时要考虑输入人员操作的方便 。
系统还应尽早对输入数据进行检查,以便及时发现并改正错误 。
特别是针对数字,金额等字段应有一定的校对措施以保证数据的正确性 。 常用的校对方式有人工校对,二次键入校对,数据平衡校对等 。
人工校对方式即输入数据后再显示或打印出来由人来进行校对。
这种方法对于少量的数据或控制字符输入还有效,但对大批量的数据输入就显得太麻烦,效率太低。
二次键入校对是指将同一批数据两次键入系统,输入后系统内部再次比较这两批数据的方法 。 如果两次键入完全一致,则认为数据输入正确;反之,则将不同的部分显示出来进行人工校对 。
数据平衡校对方法常用在对财务报表和统计报表等一类数字型的报表的输入校对中 。 在原始报表每行每列中增加一位数字小计字段,然后在设计新系统的输入时再另设计一个累加值,由计算机将输入的数据累加起来,再与原始报表中的小计进行比较 。 如果一致,则接收输入数据;反之,则拒绝接受输入数据 。
输入设计的另一个重要内容就是用户界面的设计,目前的信息系统普遍采用图形用户界面,我们将在 4.5.3节中进行讨论。
4.5.2 输出设计计算机对输入的数据进行加工处理的结果,只有通过输出才能为用户所用,因此输出的内容与格式等是用户十分关心的问题 。
输出方式可以简单地分为两类,即中间输出和最终输出 。 中间输出是指子系统与主系统或另一个子系统之间的数据传送,最终输出则是指通过终端设备 ( 如显示器,打印机等 ) 向用户输出信息的方式 。 前面介绍输入方式时提到的网络传递,软磁盘传递等都是中间输出的例子,本节我们主要介绍一下最终输出的设计 。
最终输出的方式通常有报表输出和图形输出两种,选择何种输出形式应根据系统分析和管理业务的要求而定。一般来说,对于基层或具体事务的管理者,采用报表方式给出详细的记录数据;对于高层领导或宏观、综合管理部门,应使用图形方式给出比例或综合发展趋势的信息。
报表是一般信息系统中用得最多的信息输出工具 。 通常一个覆盖整个组织的信息系统,输出报表的种类都在百十种上下,对每种报表设计独立的输出程序工作量极大 。 在实际工作中,在确定了报表的种类和格式之后,通常开发一个通用的报表模块,由它来产生和打印所有的报表 。 报表模块从指定的文件中读取报表格式,并从指定的数据库中获得报表所需的数据,然后进行输出 。
目前很多软件开发系统都附带了类似的报表模块,可以满足一些格式比较简单的报表的输出要求,图 4.36是 Visual FoxPro中报表生成器的设计界面。程序员在编码阶段只需根据本阶段设计的报表格式给出报表的各个部分的格式定义,指定报表中数据的来源即可。不过由于这些工具大多为西方人所开发,有些报表形式往往不适合中国人的习惯。
图 4.36 Visual FoxPro的报表设计器采用图形方式输出系统的各类统计结果也很容易实现 。 目前大多数开发工具都提供了作图工具或图形函数,例如 C语言,BASIC语言等 。 在
Windows环境下还可以采用 DDE( 动态数据交换 ),OLE( 对象链接与嵌入 ) 等技术借用微软公司 Office系列软件中的 Excel及其所带的
Microsoft Graph 97图表程序的功能 。 有关技术的具体内容请读者参考有关 Windows的编程资料 。
4.5.3 用户界面设计用户界面又称为人机接口,它是实现用户与计算机之间通信,以控制计算机或进行用户和计算机之间数据传送的系统部件 。 用户界面是影响软件质量的一个重要因素,在计算机应用的早期阶段,软件的使用者往往是计算机方面的行家,软件的用户界面十分简单,往往使用很复杂的命令行参数 。 而信息系统的使用者通常只是普通的计算机操作人员,不可能要求他们记忆很复杂的操作程序或命令行参数,因此,
设计一个易于学习和使用的用户界面就显得十分重要 。
随着高分辨率的图形显示终端和鼠标器的应用以及计算机图形学技术的发展,已出现了许多基于图形的窗口系统。窗口系统的发展,
使得从 80年代中期出现了图形用户界面技术。 1984年美国 Apple公司的 Macintosh系统是第一个商品化的图形用户界面产品,它给出了许多构成图形用户界面的基本思想和构件。目前 PC机普遍使用的
Windows系列操作系统的图形界面的基本思想和构件与 Macintosh基本类似,在信息系统开发中常用的界面形式有菜单、对话框等。
界面设计包括菜单方式,会话方式,操作提示方式以及操作权限管理方式等内容的设计 。
菜单是信息系统的功能选择操作最常用的方式 。 目前常见的图形界面操作系统下的一些开发工具支持的菜单形式可以是下拉式或弹出式菜单 。 在 Windows环境下一般主程序窗口采用下拉式菜单,下拉式菜单的层次不宜超过 3层,否则用户选择对应功能的操作就显得太繁琐 。 Windows环境下通常通过鼠标右键激活弹出式菜单,提供与当前操作相关功能的快速选择操作 。
会话设计是用户界面设计的一个重要内容。在所有的用户界面中,几乎毫无例外地会遇到人机会话问题。例如,当用户操作错误时,系统向用户发出提示和警告性的信息。图形用户界面一般采取对话框的形式接受用户的输入,向用户发出提示信息。
同一系统中各个子系统用户界面的风格应该一致,减少用户学习的困难;在设计输入数据的窗口时,应明确提出对输入数据的要求,详细说明可用的选择和边界值;提示信息要准确,含义要确切,以便于用户理解 。
Windows环境下大部分开发工具都可以很方便地实现菜单和对话框,图 4.37是 Visual FoxPro的表单(即窗口)设计器,在编码阶段可以很容易地利用表单设计器提供的表单控件来设计出所需要的对话框。
图 4.37 Visual FoxPro的表单设计器一个良好的用户界面在设计时还应该考虑用户的操作习惯、
爱好、使用心理等,本书不再详细讨论这方面的内容。
4.5.4 输入输出设计举例本节我们给出前面章节中工资管理系统的输入输出设计的部分内容 。
1,输入设计输入模块是工资管理系统中使用较频繁的模块,在设计时应尽量使操作方便,安全,尽可能减少输入量 。 图 4.38是该系统不经常变化的固定数据的输入界面 。
图 4.38 工资管理系统固定数据输入界面
2,输出设计为了适应日常管理的需要和提供对内和对外的报告,系统提供三种形式的输出:屏幕输出,打印输出,磁盘输出 。
屏幕输出主要是为了满足日常管理的需要,用于显示查询结果。
磁盘输出主要是为了保存数据。打印输出应满足工资发放、工资分配的要求,因此打印输出的内容有工资明细表、个人工资条、部门汇总表和工资费用分配表等。表 4.3是部门汇总表的输出格式。
部门编号 部门名 基本工资 奖金 补贴 应发工资 扣款 实发工资表 4.3 工资管理系统,部门汇总表,输出格式
4.6 模 块 设 计
4.6.1 结构化程序设计方法模块设计是系统设计的最后一步,瀑布流开发模型又将它称之为详细设计,它的任务是模块内部逻辑结构的设计,要求得到可直接用于编程的逻辑结构的描述。结构化系统开发方法模块设计阶段所采用的设计方法称为结构化程序设计方法( SP)。本节我们首先介绍结构化程序设计的基本思想和基本方法。
早期的程序员将程序设计看成是一种艺术创作,刻意追求程序效率并强烈地表现个人设计技巧的高超,使得程序具有浓重的个人色彩。设计出来的程序逻辑结构杂乱无章,程序难以理解,无法阅读。这种程序设计技术显然不能适应大规模的软件生产的需要。
1965年,著名的计算机科学家 E.W.Dijkstra最早提出了结构化程序设计的概念,主张取消 goto语句。 1966年,Bohem和 Jacopim证明了只使用三种基本控制结构就能实现任何单入口单出口的程序,这三种基本控制结构即顺序、选择、循环。结构化程序设计方法发展至今已有 30多年的历史,它的基本思想可归纳为以下三点:
(1) 由顶向下逐步精细化的程序设计方法 。
(2) 使用三种基本控制结构构造单入口单出口的程序 。
(3) 采用主程序员组的开发人员的组织方式,来实施程序的具体开发 。
上述第三点涉及到开发工作的人员组织方式,我们在这里不详细介绍。下面就针对前两点通过一个例子来进行讨论。
自顶向下逐步精细的设计过程通常采用下面的步骤:
(1) 在高度抽象的顶层一级,首先将程序分解成几个具有黑盒子特性 ( 先不关心黑盒子的内部实现细节 ) 的部分,并用云形图记号表示黑盒子 。 用三种基本控制结构和黑盒子构成顶级抽象程序 。
(2) 对每一个黑盒子进行进一步的分解,逐步精细化 。 对黑盒子分解所产生的子成分,若:
① 各成分具有顺序关系,则形成图 4.39( a) 的模式;
② 各成分具有选择关系,则形成图 4.39( b) 的模式;
③ 各成分具有循环关系,则形成图 4.39( c) 的模式 。
(3) 重复精细化,直到每个部分的内容都十分简单,很容易翻译为程序设计语言语句时,则不再用云形图表示,而用矩形框表示。
现在我们来看一个例子:某商店对每天的售货记录清单形成一个
“售货记录文件”,该文件中的每一条记录是一张售货清单。每张售货单上可以有 20个销售项目,每一个售货项目由“货号”和“销售数量”两个数据项构成。要求对所有的销售记录作统计,汇总每种货物的销售总数。
( a )
A
B
( b )
A B
( c )
A
图 4.39 三种分解模式按照上面的步骤可以作如下的分解:
(1) 顶层的第一级分解如图 4.40所示 。
大部分程序在第一级分解中都可抽象为三个成分:输入和初始化、
处理主体、输出和终止。本例中处理主体很显然需要循环处理每一张清单,因而称为处理主循环。
初始化,读售货记录文件处理主循环输出统计结果和终止
( a )
初始化读售货记录
( c )
输出统计结果终止处理售货记录文件处理完?
Y
N
( b )
图 4.40 第一层分解 图 4.41 第二层分解
(2) 对顶级分解中的三个黑盒子分别进行进一步分解,如图 4.41所示 。 图 4.41( a) 为图 4.40中的第一个云形图的分解图,图 4.41( b) 为图 4.40中的第二个云形图的分解图,图 4.41( c) 为图 4.40中的第三个云形图的分解图 。
(3) 进行第三次精细化,分解结果如图 4.42所示 。 其中 EOF为真
( TRUE) 表示,文件处理完,,为假 ( FALSE) 表示,文件尚未处理完,; EOR为真表示,一张销售清单中的项目已全部处理,。 图 4.42( a)
为图 4-41( a) 精细化的结果,图 4.42( b) 为图 4.41( c) 精细化的结果,
图 4.42( c) 为图 4.41( b) 中处理销售记录的精细化结果 。
(4) 第三级分解中只剩下一个云形图,处理每张销售清单,,图
4.42( d) 是这,处理每张销售清单,精细化的结果 。
( b )
列表打印关闭销售记录文件关闭统计结果文件
( a )
打开销售记录文件打开统计结果文件读销售记录置 E O F =F A L S E
置 E O R =FA L S E
( d )
处理每个销售项目 E O R =FA L S E
Y
N
读入下一个销售项目
( c )
读入下一张销售清单处理每张销售清单图 4.42 第三级与第四级分解
(5) 第五级精细化的结果见图 4.43( a),“累加销售数或插入销售项目”进一步精细化的结果见图 4.43( b)。
第五级精细化( a )
检索统计结果文件累加销售数或插入销售项目第六级精细化( b )
货号匹配累加销售数 插入销售项目图 4.43,处理每个订数项目”的精细化结果
(6) 现在所有成分均分解为矩形框,将各部分组合在一起得到程序完整的流程图,如图
4.44所示。
列 表打 印关闭销售记录文件关闭统计结果文件
E O F = F A L S E
读入下一张销售清单
Y
N
检索统计结果文件货号匹配累加销售数 插入销售项目
Y
N
打开销售记录文件打开统计结果文件读销售记录置 E O F = F A L S E
置 E O R = F A L S E
读入下一个销售项目
E O R = F A L S E
图 4.44 完整的程序流程图
4.6.2 常用描述工具描述模块内部的逻辑结构有多种方法,上一小节例子中采用的是传统的程序流程图。除此之外,常用的描述工具还有 N-S盒图、
问题分析图以及过程设计语言等。
1,程序流程图程序流程图是最古老的程序逻辑结构的描述工具,也称为程序框图 。
图 4.45是结构化程序设计要求使用的三种基本控制结构的流程图表示方法 。 从图中可以看到,程序流程图的三种基本符号分别是:表示基本成分的矩形,表示判断的菱形符号和表示控制流的箭头 。
图 4.45( a) 为顺序结构的程序流程图;图 4.45( b) 和 4.45( c) 为选择结构的表示方法,选择结构可以分为单分支,多分支两种形式;
图 4.45( d) 和 4.45( e) 为循环结构的两种形式,分别相当于 C语言中的 while结构和 do-while结构,不过 C语言中的 do-while结构为条件满足继续循环,而直到型循环正好相反,当指定的条件为,真,时退出循环 。
程序流程图的主要优点是对程序的控制流描述很直观,便于初学者掌握。不过它也有很多缺点,目前使用的人越来越少。它的一个突出的缺点就是程序流程图可以不受约束地画带有箭头的控制流线,使用不当就会造成非结构化的程序设计。
( a ) 顺序
A
B
( b ) 选择
A B
条件
T
F

c
)多分支选择条件
A
1
A
2
A
n
( d )当型循环条件
A
T
F
条件
F
A
T
e( )直到型循环图 4.45 程序流程图表示的三种基本结构
2,?N-S盒图传统的程序流程图不能强迫程序员使用三种基本控制结构规范地设计程序,因而它不是支持结构化程序设计的理想工具 。 在结构化程序思想提出后,支持结构化程序设计的描述工具相继问世,
盒图就是其中影响较大的一种 。
盒图是由 Nassi和 Shneiderman两人于 1973年提出来的,因此又称为 N-S盒图。盒图描述三种基本控制结构的方法如图 4.46所示。
A
B
C
条件T F
A B
条件值 1 值 2?
值 n
A1 A2 An
DO - W H I L E B
A
A
R E P E A T U N T I L B
A
(盒内结构移出重画)
( d ) 当型循环
( a ) 顺序 ( b ) 选择
( e ) 直到型循环 移出标记多分支选择( c )
( f )
图 4.46 N-S盒图的基本结构在盒图中每个,程序的子成分,用盒子来表示 。 这里所说的子成分可以是语句,语句序列和模块 。 盒子中可以嵌套另一个盒子,嵌套深度没有限制 。 对模块的调用只能从盒子上部进入 ( 单入口 ),从盒子下部出去 ( 单出口 ) 。 盒图不提供任何随意转移控制的手段,可以保证程序只使用三种基本控制结构来构造单入口和单出口的程序 。
盒图与传统的程序流程图相比,具有很多优点,例如:
① 功能域可以从图中很明显地看出;
② 很容易确定局部数据与全局数据的作用域 ;
③ 很容易表示嵌套关系,程序的层次清晰;
④ 不能随意转移控制,迫使程序员设计出规范并具有良好风格的程序。
3,问题分析图问题分析图( Problem Analysis Diagram)是由日本日立公司于
1979年提出的一种二维展开的图形描述工具,它所表示的程序逻辑具有很强的结构化特征,而且 PAD的图形描述又方便计算机化,因而被广泛采用。图 4.47是 PAD图的基本图符。
列或模块
)( a 语句、语句序
A
( c ) 自上而下执行操作
A
( d ) 模块 A 定义为
(对 A 精细化)
( b ) 结束操作图 4.47 PAD图的基本图符
PAD图的基本控制结构如图 4.48所示。
A
B
C
A
B
W H I L E B A
U N T I L B A
A
1
( a )顺序 ( c )当型循环
( d )直到型循环 ( e )多分支选择
A
2
A
n
A
n - 1
( b )选择图 4.48 PAD图表示的三种基本结构由于 PAD图是二维展开的,其结构类似于一棵树 。 如果对
PAD图充分精细化,使树叶一级是语句级,则可以很容易地将 PAD图转换为相应语言的程序 。
与程序流程图相比,PAD图逻辑结构清晰,图形标准规范。它强制程序员设计结构化的程序,并且易于使用计算机来辅助模块设计工作。
4,过程设计语言除了图形描述工具之外,程序的逻辑结构还可以采用语言来描述 。 过程设计语言 ( PDL) 就是一种常用的描述工具,它是一种介于自然语言与形式化语言之间的语言,又称为伪码 。 过程设计语言的形式化程度要高于前面介绍的结构化语言,一般采用某些程序设计语言的语法作为其框架,来定义控制结构和数据结构 。 用灵活的自然语言作为其内层语法,使用自然语言中有确切含义的词汇和自然语言的语法来描述实际的操作和条件 。
下面介绍一种基于 PASCAL语言的 PDL语言的基本语法 。
1) 数据说明
declare <数据名 > as 限定词数据说明语句能够对简单或复杂的数据组织给出确切的描述,数据名为变量或常量名表,限定词为 scalar( 标量 ),array( 数组 ),
list( 表 ),char( 字符 ),structure( 结构 ) 等 。
2) 子程序结构
procedure <子程序名 >
interface <参数表 >
begin
<语句或分程序的序列 >
return
end <子程序名 >
子程序调用语句,call <子程序名 >
3) 分程序结构 ( 顺序结构 )
begin <分程序名 >
<语句序列 >
end <分程序名 >
4) 选择结构
① if <条件 > then
<语句 >
else
<语句 >
endif
② case <case变量名 > of
<值 1>,<case变量 =值 1的执行部分 >
<值 2>,<case变量 =值 2的执行部分 >
……
<值 n>,<case变量 =值 n的执行部分 >
end case
5) 循环结构
① 当型循环
while <条件 > do
<语句或分程序的序列 >
end while
② 直到型循环
repeat until <条件 >
<语句或分程序的序列 >
endrep
6) 输入输出
print
read
write
上面是 PDL的基本语法,其它一些语句如常量说明,类型定义等可采用 PASCAL语言的同类语句,这里不再详细列出 。 PDL描述的总体结构同一般程序完全相同,外层语法一致,只是在给出语法格式中,条件描述,和,语句和语句序列,中可以使用自然语言 。 与图形描述方法相比,PDL有以下优点:
(1) 由于内层语言是自然语言,所以便于描述各种应用中千差万别的实际操作和条件,并且便于理解 。
(2) 由于外层语法是严格的某种形式语言的语法,所以易于被计算机处理 。 用普通的正文编辑程序和文字处理系统就可以方便地完成 PDL的书写和编辑工作 。
现在已经有多个形式化的 PDL自动处理程序,可以由 PDL自动生成程序代码。
4.6.3 模块开发卷宗模块开发卷宗是设计和实现阶段的主要文档之一,它是在模块开发过程中逐步编写出来的,每完成一个模块或一组密切相关的模块的复审时编写一份,并把所有的模块开发卷宗汇集在一起 。 编写的目的是记录和汇总低层次开发的进度和结果,以便于对整个模块开发工作的管理和复审,并为将来的维护提供非常有用的技术信息 。
模块开发卷宗封面列出的主要内容有模块名,调用格式,程序员的姓名和单位,审核者的名字和单位,开始日期和完成日期,修改日期,测试的开始和完成日期,源程序行数,模块的简要描述,设计语言等信息 。 内部的内容主要有模块的功能说明,设计说明,源代码清单,测试说明等 。
表 4.4是我国国家标准中模块开发卷宗编写提纲的主要内容。
4.6.4 其它设计方法简介模块设计的方法除了上面介绍的以外还有多种,影响较大的有
Jackson程序设计方法和 Warnier图等。它们都是面向数据结构的设计方法,下面介绍一下它们的基本思想,欲详细了解这两种方法,
请读者参考相关资料。
1,面向数据结构的设计著名的计算机科学家 Wirth有一句名言,算法 +数据结构 =程序,。
由此可见,算法和数据结构是程序设计过程中不可分割的两个侧面 。
根据 Hoare的研究,算法的结构常常在很大程度上依赖于它要处理的数据结构 。 我们在介绍数据词典时曾经讲过,由数据元素组合成数据的方式有三种基本类型,即顺序,选择,重复 。 这三种类型与结构化程序设计所要求的三种基本控制结构相关 。 例如,当数据结构具有选择特征时,通常程序可以用选择结构来处理;如果数据结构具有重复性质,则可用循环结构来处理 。 在 4.6.1节统计销售记录的例子中,销售记录可以描述为:
销售记录 ={{货号 +销售数量 }201 }
这是一个两层的重复结构,从最后的程序流程图中可以看出,程序的逻辑结构是一个嵌套的循环结构。因此,只要事先知道一个问题的数据结构,就可以导出它的程序结构。这就是面向数据结构设计方法的根据与基本思想。
2,?Jackson程序设计方法
Jackson方法是英国人 M.A.Jackson首先提出的,同时他还提出了一种配套使用的表达工具,称为 Jackson图 。 下面我们首先介绍一下
Jackson图的基本形式 。
图 4.49是 Jackson图表达三种基本结构的方法,由方框、连线和一些附加标记组成。 Jackson图既可用于描述数据结构,也可用于描述程序的组成。图 4.50是一个用 Jackson图表示数据结构的例子,图 4.50
( b)表示图 4.50( a)中的表格。
A
CB D
A
B*
A
B 0 C 0
( c )选择( b )重复( a )顺序图 4.49 Jackson图用 Jackson图描述程序时,形式上与软件结构图类似,但意义不同于结构图。在结构图中上下方框表示上层模块对下层模块的调用关系,
而 Jackson方法中则表示上层操作由下层操作组成。图 4.51是产生图
4.50( a)中学生花名册的程序结构。
名册表头 表体表名行 栏名行 行 *
学号 姓名 性别
( b )
学号 姓名 性别学生名册表头表体
( a )
图 4.50 用 Jackson表示学生名册产生名册产生表头 产生表体产生表名行产生栏名行产生行 *
产生学号 产生姓名 产生性别图 4.51 用 Jackson图表示程序结构为了便于将 Jackson图描述的程序结构转换为逻辑结构,
Jackson还设计了一组与结构图相对应的伪码,图 4.52 是与图 4.49
中三种结构相对应的伪码,其中带下划线的字为保留字,cond表示条件。
A seqA select cond1 A Iter cond
B B B
C or cond2 end A
D C
end A end A
(a) 顺序 (b) 选择 (c) 重复图 4.52 Jackson伪码
Jackson程序设计方法基于输入输出的数据结构导出对处理过程的描述,由以下五个步骤构成:
(1) 分析问题,从而确定输入数据和输出数据的逻辑关系,并用
Jackson图来表示这些数据结构 。
(2) 找出输入数据结构与输出数据结构中有对应关系的数据单元 。
(3) 按一定的规则由输入,输出数据的数据结构及其对应关系,生成程序的结构图 。
(4) 列出所有操作和条件 ( 包括分支条件和循环结束条件 ),并且把它们分配到程序结构图的适当位置 。
(5) 用伪码表示程序。
3,?Jackson方法举例下面用一个例子来演示上面的过程:
一个信用卡记帐系统建立了两种帐册:顾客总帐和支付记录。
后者记录了每一顾客在本季度内每次付款的日期和金额,由顾客帐号( CNO)、日期( DATE)和付款额( PMT)三项组成;前者登记顾客在本季度扣除本季度购货贷款后的余额,正值表示顾客有盈余,
负值表示积欠。图 4.53( a)、( b)分别表示出了这两种帐册的格式。
C N O D A T E P M T
X XX

XXX
YYY

YYY
顾客组顾客组
C N O B A L A N C E
XXX?
YYY?
(a) 支付记录
(b) 总帐图 4.53 顾客帐册格式每季度末根据上述帐册产生一份会计报表,包括帐号、日期、
付款额、旧余额、新余额等内容,如图 4.54所示。
C N O D A T E P M T O L D B A L N E W B A L
XXX




YYY




T O T A L
图 4.54 信用卡帐目会计报表现在用 Jackson方法设计一个产生上述报表的程序 。
第一步,画出输入输出数据结构图。图 4.55( a)、( b)、( c)
分别为 Jackson图表示的输入数据和输出数据的数据结构。
支付文件顾客号组 *
支付记录 *
( a ) 支付记录总帐顾客号记录 *
结余
( b ) 总帐 ( c ) 输出会计报表记帐数据顾客数据 总计顾客号组 *
结余数据交易总计 结余总计顾客号 支付记录 顾客总计老结余 新结余支付记录行 *
图 4.55 输入输出数据结构第二步,找出输入输出数据结构之间的对应关系。每产生一份报表,就需将支付文件和顾客主文件分别打开一次。可参见图 4.55,
三个数据结构图的第一层是相互对应的。再往下找,图 4.55( c)中的“顾客号组”和“结余数据”分别与图 4.55( a)中的“顾客号组”
和图 4.55( b)中的“顾客号记录”相对应。继续往下,又可发现图
4.55( c)中的“支付记录”与图 4.55( a)中的“支付记录”相对应。图 4.55( b)中的“结余”与图 4.55( c)中的“老结余”相对应。
第三步,确定程序结构 。 在确定程序结构时,有三条规则:
(1) 为每对有对应关系的数据单元根据它们在数据结构中的层次,
在程序结构对应层次的适当位置画一个程序框 。
(2) 为输入数据结构中,每个在输出数据结构中没有对应关系的数据单元,在程序的适当位置画一个程序框 。
(3) 为输出数据结构中,每个在输入数据结构中没有对应关系的数据单元,在程序的适当位置画一个程序框 。
简单地说,每对有对应关系的数据单元合画一个框,没有对应关系的单元各画一个框。图 4.56是信用卡记帐系统产生会计报表的程序结构。
处理支付记录和总帐给出记帐报告处理顾客数据 处理总计处理顾客号组 *
计算结余计算交易总额 计算文件结余处理顾客号 处理支付记录 计算顾客支付总额处理老结余 处理新结余处理支付记录行 *
图 4.56 信用卡系统的程序结构第四步,列出所有操作和条件,然后将其分配到程序结构图中 。 下面是本例中用到的操作:
(1) 打开记帐报告;
(2) 打开支付记录文件;
(3) 打开总帐文件;
(4) 关闭记帐报告;
(5) 关闭支付记录文件;
(6) 关闭总帐文件;
(7) 生成报表的支付记录行;
(8) 累计支付金额;
(9) 读支付记录文件;
(10) 生成报表中顾客统计数据行;
(11) 生成报表中总计行内容 。
用到的条件有:
(1) 支付记录文件结束;
(2) 客户号组结束 。
将所有操作分配到程序结构图中,如图 4.57所示。
处理支付记录和总帐给出记帐报告处理顾客数据 处理总计处理顾客号组 *
计算结余计算交易总额 计算文件结余处理顾客号 处理支付记录 计算顾客支付总额处理老结余 处理新结余处理支付记录行
*
1 2 3 4 5 6
9
7 8 9
10
11
图 4.57 将操作分配到结构图中第五步,写出程序的伪码表示 。
处理支付记录和总帐给出记帐报告 seq
打开记帐报告;
打开支付记录文件;
打开总帐文件;
处理顾客数据 iter until 支付记录文件结束处理顾客号组 seq
读支付记录文件;
处理顾客号; {生成会计报表的,顾客号,行 }
处理支付记录 iter until 客户号组结束;
生成报表的支付记录行;
累计支付金额;
读支付记录文件;
end 处理支付记录;
计算客户支付总额;
计算结余 seq
处理老结余; {读顾客总帐,查找老结余 }
计算新结余;
生成报表中顾客统计数据行;
end 计算结余;
end 处理顾客号组;
end 处理客户数据;
处理总计 seq
计算总的支付额;
计算总的结余;
生成报表中总计行内容;
end 处理总计;
关闭记帐报告;
关闭支付记录文件;
关闭总帐文件;
end 处理支付记录和总帐给出记帐报告;
从上面的例子可以看出,对于规模不大的数据处理系统,如果在输入数据结构与输出数据结构之间存在清楚的对应关系,采用
Jackson设计方法可以一举得到系统的过程性说明 。 但有时输入数据结构与输出数据结构之间没有对应关系,单靠上述方式就难以处理了 。 对于这样的情况,Jackson方法称为结构冲突,提出了一系列的补充技术以解决这类问题 。 有关内容请读者参阅相关书籍,本书不再详细介绍 。
4.7 系统设计报告系统设计阶段的最终结果是系统设计报告 ( 也称为系统设计说明书 ),它是系统设计阶段的重要文档之一,是下一步系统实施的基础 。 系统设计报告的主要内容包括:
(1) 系统总体结构图:包括总体结构图,子系统结构图等 。
(2) 系统设备配置图:计算机系统设备配置图,设备在各部门的分布图,网络结构及网络设备的分布 。
(3) 系统分类的编码方案 。
(4) 数据库结构图:数据表的结构,数据表之间的关系方式 。
(5) 输入 /输出设计方案 。
(6) 软件结构图或 HIPO图描述的软件结构 。
(7) 系统详细设计方案说明书 。
1.引言
1.1 摘要:说明所设计的系统名称,目标和功能 。
1.2 背景
1.3 工作条件与限制
1.4 参考资料
1.5 专门术语定义
2.系统总体设计技术方案
2.1 总体结构图
2.2 软件结构图
2.3 模块设计说明
2.4代码设计
2.5 输入设计
2.6 输出设计
2.7 数据库设计说明
2.8 网络设计
2.9安全保密设计
3.方案实施说明表 4.5 系统设计报告的参考提纲
4.8 实 验 三
4.8.1 实验目的本章主要介绍了系统设计阶段的主要任务和使用的方法,安排本次实验的主要目的为:
① 熟悉系统设计阶段的主要任务;
② 掌握模块独立性的概念;
③ 能够熟练阅读软件结构图和用程序流程图,N-S盒图以及问题分析图和伪码描述的模块逻辑结构;
④ 掌握结构化程序设计的方法,熟练使用三种基本控制结构构造单入口单出口的模块,并能够使用程序流程图,N-S盒图以及问题分析图和伪码描述模块的逻辑结构;
⑤ 了解概要设计,模块设计阶段文档的基本格式 。
4.8.2 实验内容按照实验二中选定的项目,分析数据流程图的特点,然后按照相应类型的数据流程图的转换方法导出目标系统软件的结构图,并进行优化。然后根据模块的划分情况,小组成员分别对不同的模块进行详细设计,导出模块的逻辑结构。
4.8.3 实验步骤本实验按照以下步骤进行:
① 分析数据流程图的类型;
② 导出软件结构图;
③ 定义模块之间的接口;
④ 分析系统中的数据文件的结构及相互之间的关系,设计系统数据库结构;
⑤ 按照概要设计说明书的编写提纲编写概要设计说明书;
⑥ 模块的详细设计;
⑦ 编写模块设计说明书。