第_7章-结构化系统设计_第1页
第_7章-结构化系统设计_第2页
第_7章-结构化系统设计_第3页
第_7章-结构化系统设计_第4页
第_7章-结构化系统设计_第5页
已阅读5页,还剩155页未读 继续免费阅读

下载本文档

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

文档简介

第7章结构化系统设计 本章主要内容 系统设计的任务总体设计结构化设计的概念 基本原则从数据流图导出结构图详细设计代码设计输出设计输入设计人机对话设计模块详细设计数据库设计 网络设计系统设计说明书 转换 从分析到设计 现实领域的各种需求 计算机领域的具体实现 针对需求 进行计算机信息系统的物理模型设计 7 1系统设计的任务 通俗地说 设计就是要回答 怎么做 完成技术实现方案的制定 即信息系统的物理模型一个逻辑模型 可以提出多个物理模型根据物理模型进行实施 得到最终的物理系统 设计系统之前 先看看评价信息系统的标准 这些标准对任何设计方法都适用 信息系统的功能 是否满足用户的需求系统的效率 响应时间 操作的方便性系统的可靠性 抗干扰能力 故障恢复系统的工作质量 准确性 使用效果系统的可变更性 修改和维护的难易程度系统的经济性 系统收益与支出比 7 1 1设计标准 信息系统的可变更性 变化是不变的真理 统计表示 在信息系统的整个生命周期中 系统维护成本占总成本的80 左右 因此 可变更性是衡量信息系统设计的重要指标 如何提高系统变更性 结构简单系统各组成元素分工明确 易于理解元素之间的关系清晰简洁变动灵活软件维护中的 水波效应 使系统各组成元素内部的改变容易实现 改动对其他部分的影响尽量减少提前考虑将来最易出现的扩展和变更设计方法 结构化设计和面向对象设计 7 1 2系统设计的内容 一般划分为两部分 总体设计也称概要设计明确软件的组成元素及其结构 structure 体系结构 architecture 详细设计各项具体细节 设计硬件软件的各个方面 结构化方法的总体设计主要包括 将系统划分成程序模块 决定每个模块的功能 决定模块的调用关系 决定模块的界面 即模块间信息的传递 简单地说 就是绘制模块结构图 结构化系统总体设计 面向对象系统总体设计 面向对象方法的总体设计主要包括 识别系统中的对象 设计类 决定每个类的属性和操作 功能 决定对象之间的协作关系 将类划分为组件 决定组件的依赖关系 最重要的图是类图和协作图 UML模型 详细设计 包括代码设计输入设计输出设计人机交互设计 用户界面设计 模块处理过程设计 模块详细设计 数据库设计网络设计 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表示需要的工作量 模块化的基本思想 使用结构化设计方法一定程度上能够简化系统结构 使系统容易修改和理解 具体做法 把整个软件划分为部分 其中每一部分的功能简单明确 即程序模块 可以是子过程或函数 划分模块的工作按层次进行 上层模块调用下层模块每一个模块应尽可能独立模块间的调用接口要阐明 模块名称 输入数据 输出数据 接口成本 成本 模块数量 单元模块成本 软件总成本 模块数量和软件成本 粒度太大 单个模块复杂度升高 维护困难粒度太小 管理与运行成本升高试想一下 每个经理管理协调多少个下级合适 7 2 1模块的概念 模块 Module 一词使用很广泛 通常对应于用一个名字就可以调用的一段程序语句 子程序或函数 模块具有输入和输出 逻辑功能 运行程序 内部数据四种属性 计算工资 模块的图形表示方法 7 2 2模块结构图 结构图 StructuredChart 描述系统的模块结构及模块间的联系结构图中的主要成分有 模块 用长方形表示调用 从一个模块指向另一模块的箭头表示前一个模块调用后一个模块 有循环调用和条件调用数据 用带圆圈的小箭头表示从一个模块传递给另一模块的数据 有实义 控制信息 带涂黑圆圈的小箭头表示一个模块传送给另一模块的控制信息 主调模块 被调模块 被调模块 主调模块 被调模块 被调模块 循环调用 条件调用 1 结构图无严格的模块调用顺序 但一般习惯从左至右2 因为约定遵从从上向下的调用 调用关系也可以不使用箭头 而直接使用直线3 模块间传递的信息如果出现在数据字典中 则视为数据 否则为控制信息 结构图的画法 一个完整的结构图 模块设计的度量标准 为了衡量模块的相对独立性 提出了模块间的耦合 Coupling 与模块的内聚 Cohesion 两个标准内聚 模块内部各元素之间的联系程度耦合 模块和模块之间的联系程度设计目标 模块内的联系越紧越好模块间的联系越少越好为什么 7 2 3模块的耦合 doubleCalculateAvg intn doubletotal average value scanf inputvalue 影响耦合度的因素 如果使用模块A需要了解模块B 那么A和B是耦合的 影响模块间耦合程度有三方面的因素 联系方式 模块间通过什么方式联系来往信息的作用 模块间来往信息作什么用数量 模块间来往信息的多少 混合控制数据 用过程直接引用语句调用 少 多 数量 方式 作用 0 离坐标原点越远 耦合程度越高 模块联系方式 直接引用 一个模块直接存取另一个模块的某些信息 例如全程变量 FORTRAN的common量 语言的extern量 共享的通信区等 也称为公共环境耦合 commonenvironmentcoupling 降低这种耦合程度的办法是使数据局部化 即使用局部变量过程语句调用 一个模块调用另一个模块 所有数据来往都以参数或返回值方式传递并使用 来往信息的作用 模块间的来往信息可以作数据用 也可以作控制信息用 A 取平均成绩或最高成绩 平均 最高B a 控制耦合 成绩 取最高成绩 取平均成绩 A 平均成绩 最高成绩 b 数据耦合 来往信息的数量 模块间传递的信息量越大 它们之间的耦合程度越高 一个模块最好只了解它确实需要使用的数据 而完全不知道其他数据的存在 独立性好 耦合的类型 根据以上因素 对耦合分类如下 数据耦合 采用子程序调用 调用模块将需要进行处理的数据传递给被调模块 数据耦合是不可避免的 标记耦合 如果调用模块将整个数据记录传递给被调模块 而被调模块只使用了部分数据项 则称为标记耦合或特征耦合 控制耦合 一个模块将控制信息传递给另一个模块 以控制被调模块的内部处理逻辑 可以分解 公共环境耦合 如果两个模块共享同一全局数据 称为公共耦合 内容耦合 两个模块之间的内部属性有直接关联 也称病态耦合 某些GOTO语句 减低耦合的设计原则 结构化设计要求模块间的耦合程度尽可能小 为此应 用过程语句调用其他模块模块间的参数作数据用模块间的参数尽可能少 7 2 4模块的内聚 模块的内聚反映模块内部联系的紧密程度 一个模块只需要做好一件事情 不要过分关心其他任务 高内聚性的好处是可以提高程序的可靠性 有一个调查表明 50 的强内聚性子程序是没有错误的 而只有18 的弱内聚性子程序才是无错的 弱内聚性子程序的出错机会要比强内聚性出错机会高6倍 而修正成本则要高19倍 代码大全 内聚的类型 模块的内聚可以分以下七类 偶然内聚 coincidentalcohesion 逻辑内聚 logicalcohesion 时间内聚 temporalcohesion 步骤内聚 proceduralcohesion 通信内聚 communicationalcohesion 顺序内聚 sequentialcohesion 功能内聚 functionalcohesion 当同一个子程序中的操作之间无任何联系时 为偶然内聚性 也叫作 无内聚性 比如只是为了将程序中某几处凑巧相同的一些语句组合起来形成的一个模块 P Q R S 1 偶然内聚 B A read Cardfile D C T 将几个逻辑上相似的功能放在一个模块中 比如常见的出错处理模块 工作模块发现错误后 调用错误处理模块 将错误号作为控制参数传入 然后出错处理模块根据不同的错误号执行相应的操作 2 逻辑内聚 将在有限时间单元内处理的成分组合为同一模块比如在程序初始化时所作的处理 m Medirecno psPerson MedirecnotxtMedirecno psPerson MedirecnotxtTel psPerson TeltxtContact psPerson ContacttxtAddr psPerson AddrtxtMedirecno Enabled False 可视化程序设计中在窗口打开时初始化窗口中得控件内容 如列表框的项目 文本框或单选钮的缺省取值还比如 C 的构造函数 析构函数 3 时间内聚 4 步骤内聚 当子程序中的操作是按某一特定过程结构进行的 就是步骤内聚 例如 用户想按一定的顺序打印告 子程序设计成是用于按顺序打印销售收入 开支 雇员电话表的 步骤内聚在时间内聚的基础上增加了次序的约束 模块划分示例 PREP PLANLOOP STMRO 主模块 TYPDECID 准备好的矩阵指示标记 准备好的矩阵指示标记 矩阵指示标记 部分结果 标签等 模块PERP是一个初始化模块 属时间内聚 模块PLANLOOP和TYPDECID都属于步骤内聚 前者的元素用于控制主循环 后者的元素负责主循环的整个判定执行过程 绘制划分后的模块图 当模块内的成分引用共同的数据 而不存在其他联系时 称为通信内聚 修改库存 购货单 开发货单 库存 A 销售模块 B 产生留退名单模块 期末不及格统计 累计不及格统计 5 通信内聚 模块中某个成分的输出是另一成分的输入 比如显示期末成绩通知 取科目补考安排 显示数据 6 顺序内聚 读入学号 读取成绩 判断留退级 取不及格科目 6 顺序内聚 顺序内聚有较强的内聚性是步骤内聚和通信内聚的结合例如 一个模块用于计算高于平均分的人数 步骤是先循环累计总分 然后计算得到平均分 最后循环统计高于平均分的人数有步骤的先后 而且前一个步骤的结果要用于后一步骤的运算中但仍然不是最高的内聚类型 7 功能内聚 一个模块包括并且仅仅包括为完成一个具体任务所需要的所有成分 称为功能内聚 功能内聚性是最强也是最好的一种内聚例如 打印职工名单 PrintStaffList 例如 计算平均分 CalculateAvg 仅用一个动宾词组能明确指出这个模块的所有功能 内聚的评分 耦合和内聚的概念是Stevens等人提出的 是测量一个模块化系统好坏的标志 按他们的观点 给上述七种内聚评分如下 功能内聚 分顺序内聚 分通信内聚 分步骤内聚 分时间内聚 分逻辑内聚 分偶然内聚 分可以给一个软件的所有模块打分 最后计算平均分 作为软件结构质量评价的参考 耦合和内聚的关系 二者就像连体兄弟 存在紧密相关的关系 模块内的高内聚往往意味着模块间的松耦合反之 低内聚一般会带来紧耦合 7 2 5作用范围与控制范围 一个设计原则 对于任何一个判断 其作用范围应该是这个判断所在模块的控制范围的一个子集该原则的目的 消除控制耦合 降低耦合度想象一下 假设某个控制标志在系统的很多部分发挥作用 那么可能会产生这样一种情况 错误发作的位置离产生错误的源头很远 这给程序调试和维护带来极大困难 作用范围与控制范围 一个判断的作用范围是所有这样的模块的集合 这些模块内含有依赖于这个判断结果的处理 或称影响范围 一个模块的控制范围是指它本身及其所有下属模块的集合 D计算总工资 C计算职工工资 B计算临时工工资 A计算工资 模块A的控制范围是 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则调用查补考安排模块 显示结果模块 调用显示成绩模块如果标志1 True则调用不及格显示模块 显示不及格处理模块 如果标志2 True则调用留退通知模块否则调用补考通知模块 子模块 学生期末成绩查询 读入学号 显示成绩 查询成绩 显示成绩 不及格处理 确定留退 显示补考 显示留退 改写后的模块图 7 2 6模块的扇入与扇出 模块的扇入是指有多少个上级模块调用它 模块的扇出是指模块的直属下层模块的个数 扇出系数不宜过大 A的扇出为2 A B C B1 C1 C2 C3 B的扇出为1 C的扇出为3 T T的扇入为2 总体设计原则 设计功能内聚的模块模块使用过程语句调用其他模块 传递的参数作数据用 并且尽可能少模块内语句数一般为50 100平均扇出系数最好是3 5高层模块高扇出 最低层模块高扇入一个判断的作用范围是判断所在模块的控制范围的子集 7 2 7模块总体设计举例 问题描述 病人监护系统中的实时监测模块 该模块使用病床专用设备测量病人的若干生理参数 如体温 脉搏 血压等等 每个病人各种指标的安全范围由医生预先指定 每经过一定的时间间隔 监测模块从监视设备读入这些数据 并存入数据库中 若发现某个指标超出合理范围 则向维修站发出设备故障通知 报告床号 若发现某个指标越出安全范围 则向护理站发出通知 报告病人号 分析产生的DFD 病历 合理数据 数据 不安全因素 读取数据 存储数据 检查数据 通报不安全因素 不合理数据 FS2 病人监护 采集数据 检查数据 处理数据 获取下一个病人 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次改进 处理数据 模块没有实质性的功能 所包含的三个子模块相互之间没有什么关联 内聚程度很低 该模块只是充当了 管道 改进如下 废除 处理数据 模块 直接由主模块调用 通报设备故障 通报不安全因素 和 写数据库 三个模块 病人监护 写数据库 通报不安全因素 通报设备故障 检查数据 采集数据 第1次改进结果 第2次改进 通报设备故障时应通报床位号而不应是病人号 因此要传递床位号 床位号BN可由 采集数据 模块传给主模块 再由主模块传递给 通知设备故障 模块 但这样做增加了模块间的联系 改为由 采集数据 模块直接调用 PN FS 病人监护 采集数据 检查数据 通报不安全因素 获取下一个病人 PN FS EOF EF PN BN EOF FS EF USF USF PN 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次改进 获取下一个病人 模块的界面要返回病人号和床位号 如果使 读取数据 模块包括从病人号查床位号的功能 则 获取下一个病人 模块的接口可以简化 第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 从床号读数据 通报设备故障 检查不合理因素 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 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 PN FS 一行 一行 一行 结构图优化方法 减少模块间的联系 减少参数传递 特别是控制信息的传递消除重复功能消除 管道 模块考虑变化控制模块大小整体考虑参照系统分析说明书 7 2 8对已有程序进行重构 重构 Refactoring 在不改变程序代码功能的前提下 对程序结构所进行的改造因为不是总能提前做出最好的设计 或者对遗留系统的维护过程中提高品质而做出的结构变化参见 重构 改善既有代码的设计 VoidprintOwing Enumeratione orders elements doubleoutstanding 0 0System out println System out println CustomerOwes System out println While e hasMoreElements Ordereach Order e nextElement outstanding each getAmount System out println name name System out println amoutn outstanding 模块重构例1 重构后的例1 voidprintOwing Enumeratione orders elements doubleoutstanding 0 0printBanner while e hasMoreElements Ordereach Order e nextElement outstanding each getAmount printDetails outstanding 或者 voidprintOwing printBanner doubleoutstanding getOutstanding printDetails outstanding 模块重构例2 voidsetValue Stringname intvalue if name equals height height value return if name equals width width value return 为长方形的长和宽设置新值 是一个逻辑内聚的例子 重构后的例2 voidsetHeight intvalue height value voidsetWidth intvalue width value 模块重构例3 获取某个数并且修改它以作其他用途 比如 voidgetTotalOutstandingAndSetReadyForSummaries 这是一个顺序内聚的模块 重构后 doublegetTatalOutstanding voidsetReadyForSummaries doublex 7 3从数据流图导出结构图 转换 设计模型 物理模型 转换存在鸿沟 数据流图着眼于现实世界 结构图着眼于计算机世界 数据流图反映数据流 反映系统的逻辑功能 即系统能够 做什么 结构图反映程序控制层次 反映系统的物理模型 即怎样逐步实现系统的总功能 简单地说 数据流图描述线性的工作流程 结构图描述工作的分配 谁负责做什么 转换有规律可循吗 数据流图中存在两种典型的结构 变换型 Transform 结构事务型 Transaction 结构 这两种结构可以分别通过变换分析和事务分析方法导出标准形式的结构图 变换分析 用来描述输入 处理 输出数据流 事务分析 用来描述多种事务类型的处理 7 3 1变换分析 对线性结构的DFD作分析 步骤 划分数据流图的输入 主加工和逻辑输出套用固定格式生成第1 2层模块结构图对第2层模块进一步分解 构造完整的模块结构图 第1步划分输入 加工 输出 原始数据 机内数据 正确数据 解 格式化解 输出解 逻辑输出 逻辑输入 物理输入 物理输出 第2步构造第1 2层模块 正确数据 求解编辑数据 计算 获得正确数据 输出解 编排格式 打印解 编辑数据 读入数据 正确数据 原始数据 原始数据 解 格式化解 解 正确数据 格式化解 解 第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 打印清单 事务分析结果 上图存在控制耦合 消除后 业务处理 分配处理 输入数据 判别业务 处理事务C 处理事务A 处理事务B 事务A 更新P 事务B 更新Q 事务C 更新R 打印清单 7 3 3层次的对应关系 数据流图的层次和结构图的层次存在一定的对应关系 但不是机械照搬 32 P1 4 7 4一体化设计方法 从数据流图导出结构图通常依赖于设计人员的经验以上两种分析方法如同八股 虽然可以套用 但能够符合套用标准的DFD并不多有没有一套规范的转换方法能够帮助经验不足的设计人员从数据流图导出结构图呢 这就是本章所探讨的方法 有章可循的一体化设计方法 7 5代码设计 什么是代码 用来表征客观事物的一个或一组有序的符号 它应易于计算机和人识别与处理 一般用数字 字母或它们的组合来表示 代码设计是科学管理的体现 代码无处不在 车牌号码 商品编码 身份证号 学号 专业代码 代码的作用 1 鉴别功能2 分类3 排序4 专用含义 代码的特性 唯一化 规范化 系统化 为事物提供一个概要而不含糊的认定 便于数据的存储和检索 即编码要有规律 符合某一类事物的聚集 提高处理的效率和精度 也即标准化 符合国家或行业标准 提高数据全局一致性 代码的种类 代码的类型 代码的类型指代码符号的表示形式 一般有 数字型 结构简单 使用方便 也便于排序 但对象特征的描述不直观字母型 便于记忆 人们有使用习惯 与同样长度的数字码相比 容量大得多 但会出现重复和冲突数字字母混合型 兼有前两种代码的优点 但是其组成形式复杂 计算机输入不便 人工录入效率低 错误率高 代码举例 身份证号国际书号会计科目考研报考的学校代码 专业代码 如何保证代码输入的正确性 代码不允许出错 那么如何避免代码错误 输入技术 如磁卡 IC卡 读卡器 列表选择输入 少量 界面中采用下拉表选择 不需要键盘输入利用数据库中的代码表对照检查 较多 代码量很多时 下拉选择不可取 可在数据库中为代码及其含义建立数据表 手工输入后 在数据库中进行查询 如果存在则可显示详细内容 否则表示输入有误代码中设置校验位 上述方法都不适用时 代码自身具有一定的验证功能 代码中的校验位 校验码的生成过程如下 1 对代码本体的每一位加权求和 设代码本体为 C1C2 Cn权因子为 P1P2 Pn加权求和 S CiPi 2 以模除和得余数 R Smod M 3 运算后得校验位 如模减去余数 Cn 1 M R 身份证中的校验位 比如 34052419800101001 ai Wi mod11i 表示号码字符从由至左包括校验码在内的位置序号Ai 表示第i位置上的号码字符值Wi 示第i位置上的加权因子Ai34052419800101001 Wi7910584216379105842根据公式进行计算 ai Wi 21 36 0 25 16 16 2 9 48 0 0 9 0 5 0 0 2 ai Wi mod11 189Mod11 2余数 012345678910校验码 10X98765432得出代码设计的原则 代码设计必须遵循以下基本原则 1 唯一性2 合理性3 可扩充性 想想千年虫问题 4 简单性5 适用性6 规范性7 系统性 代码设计的步骤 代码设计可按下列步骤进行 确定代码对象考查是否已有标准代码根据代码的使用范围 使用时间 根据实际情况选择代码的种类与类型 考虑检错功能编写代码表 输入 输出设计 哪些地方需要进行输入 输出设计呢 输出设计 当DFD图中有数据流从系统流出到外部实体的地方 报表 人机交互的查询 发送邮件等到其他系统 消息 数据库 文件等 输入设计 外部实体的数据流进入到系统的地方 本系统操作人员的输入来自于其他系统的输入 其他的数据库或文件 其他系统的实时响应结果 高度自动化的输入 条码扫描仪 传感器等 7 6输出设计 系统中的数据输出到人 组织 其他系统 报表 商品查询结果 付款信息 输出设计的内容 确定输出内容 首先确定用户在使用信息方面的要求 包括使用目的 输出速度 频率 数量 安全性要求等等 然后设计输出信息的内容 信息形式 表格 图形 文字 数据结构 数据类型 位数及取值范围等等 选择输出设备与介质 常用的输出设备有显示终端 打印机 磁带机 磁盘机 绘图仪 缩微胶卷输出器 多媒体设备 输出介质有纸张 磁带 磁盘 缩微胶卷 光盘 多媒体介质等等 确定输出格式 输出报表或图形 清晰直观 满足需求和习惯 符合行业标准 什么是高质量的输出设计 以下因素确定了输出质量 易存取Accessibility 很容易被使用及时Timeliness适当Relevance 有使用价值正确Accuracy可用Useability 有合适的格式 输出设备输出介质 输出设备和输出介质 Printers 打印机 VideoDisplayUnit 显示器 Plotters 绘图仪 COMEquipment 串行端口设备 Speakers 喇叭 Paper 纸 VideoScreen 屏幕 Microfilm Microfiche 胶片 AirWaves Sound 声音 Disk 存储设备 IC卡 输出格式 表格清单 如各种收费单 汇总表 月报表 对照表 年度对照 图形折线图 股票走势 柱状图 产品销售业绩 饼图 产品区域分布比例 文字 图形类型 离散点线条 水平 垂直 三维 扇 7 7输入设计 外部产生的数据如何输入到系统中 贷款审批意见 订单 新生档案 1 输入设计的内容 确定输入数据内容 包括确定输入数据项名称 数据内容 精度 数值范围 确定数据的输入方式 联机终端输入还是脱机批量输入 与数据发生地点 时间 紧急程度有关 记录格式设计 记录格式设计得好 能减少数据冗余 降低错误率和操作员劳动强度 输入数据的正确性校验 可能的话直接从已有数据中选择确定输入设备 键盘 鼠标 触摸屏 读卡机 字符识别机 光电阅读器 条形码识别机 语音识别仪 图像扫描仪 输入设计的重要性 输入是垃圾 输出是垃圾 GIGO 批量输入联机输入混合方式 2 输入模式 批量输入的优点 收集和输入可以脱机输入可以由受过专门训练的人员完成处理的速度很快处理可以安排在非高峰时间进行保险单的录入人口普查数据的输入比如国内一些科研项目申请的数据都是各个单位自行录入 保存在盘中上交 批量输入的不足 数据收集通常是集中式的数据录入一般需要受过专门训练的人员完成处理过程有延迟 因此可能造成数据过时 或等到处理完后已经不适用了因为处理通常在业余时间进行 因此在处理时发现的输入错误 只能在下一次处理时才能纠正 录入人员不熟悉业务 如果程序发生故障 业余计算机操作员没有能力处理 不得不报告系统分析员或程序员 录入人员不熟悉技术 联机输入的优点 数据能够由拥有者进行录入数据的录入可以尽可能地与他们的源头靠近对于数据的正确性和可接受性 可以获得快速的反馈输入的数据能及时更新数据库 从而使数据在最新状态比如北京市房地产开发企业与购房者签订房屋预售合同时 通过网上签约并下载打印合同文本 实现与政府网的联机备案 保护了消费者权益 联机输入的不足 为了完成录入 设备的花费更多使用者繁杂 不总是受过良好训练对用户数据录入的程序控制要求高数据经常在交易时间录入 因此对正常的机器运行工作量有影响同样的数据 其录入会比批量录入过程要慢 总的效率低 MagneticInkCharacterRecognition MICR OpticalCharacterRecognition OCR OpticalMarkRecognition OMR ImageScanner Facsimile Fax MachinesPoint of SaleDevice POS AutomaticTellerMachine ATM IntelligentCard KeyboardMouseJoystickPensScalesVoiceRecognitionTouchScreen 3 输入设备 4 输入的记录格式 很多数据在输入到系统之前 通常来源于纸质的记录 原因 数据提供者只负责提供数据 而不负责数据录入到计算机系统出于安全考虑 需要有纸质档案 如会计数据因此需要进行数据记录格式的设计 数据记录格式的设计直接关系到系统输入数据的质量 因此要考虑计算机录入的特点 格式设计例子 中国邮政汇款单邮编 用户填写 邮局填写写 业务种类 普通汇款 加急汇款 电子汇款 特急汇款 礼仪 自行通知 划拨 附言 入帐 支票 附加种类 收款人姓名 汇款金额 佰拾万千佰拾元角分 收款人地址 开户局及帐号 汇款人地址 汇款人姓名 汇票号码 汇款金额 汇费 手续费 收汇日期 经办员 复核员 检查员 5 输入设计的原则 最小量原则仅输入必要的数据 尽量让系统计算或导出数据简单性原则输入的准备 输入过程应尽量容易 以减少错误的发生 并在适当的地方使用代码早检验原则对输入数据的检验尽量接近原数据发生点少转换原则输入数据尽量用其处理所需形式记录 以免数据转换时发生错误 直接使用已有的数据 比如采用EDI 电子数据交换 XML 从一个系统到另一个系统数据直接使用 不需要再次输入 输入数据的错误 没有药可以阻止死亡 也没有规则能防止错误 弗洛伊德不管怎样设计 总是免不了会有错误 可以针对不同的错误采取一定程度的防范措施 错误有以下几类 数据内容错 这是由于原始单据有错或录入时发生错误数据多余或不足 这是收集中的错误 如原始单据丢失或重复数据的延误 由于输入数据迟缓导致处理推迟 不仅影响业务工作 还可能使输出结果变得无价值 数据校验的方法 重复验证 如由两个或更多操作员录入相同的数据视觉验证 如从终端上键入数据 在屏幕上校验之后再送到计算机处理分批汇总校验 分批计算 累计总数验证控制总数校验 数据类型校验 按照数据类型进行输入验证格式校验 比如合同号编码有固定的格式 可按位检测逻辑校验 如月份应是 日期应是 界限校验 如一次取款为50 2000记录计数校验 平衡校验 如借贷要平衡匹配校验 如在主表中验证指定代码是否存在代码自身校验 信息系统界面 接口 信息系统与外界环境之间的输入输出就可以称为信息系统的界面 根据输入输出操作对象和设备划分为两种 系统界面 系统中包含的不需要人员干预的输入和输出部分 例如 自动捕获的输入数据和自动输出的数据 人机界面 信息系统中需要用户交互的输入和输出部分 例如 查询书目 下订单 7 8人机对话设计 信息系统是一个人 机系统 大量的输入和输出面对的是人 抽取这部分进行人机对话设计 多数场合指图形用户界面设计少数使用字符界面 如命令行 要了解图形用户界面的基本元素 控件 及其使用特点 下拉菜单弹出菜单列表框 组合列表框选择钮 复选框文本输入框命令按钮滚动条表格 图形用户界面元素 图形用户界面设计步骤 了解用户的特点 岗位职责 学历水平 计算机熟悉程度 确定输入和输出的数据内容确定设计目标 易用性 数据校验要求 选择适当的界面元素 将设计排练出来评价设计结果 可反复修改 用户界面设计策略 BenShneiderman所著的 用户界面设计 有效的人机交互策略 总结了三项原则 考虑用户的多样性八条黄金设计规则 适用于大多数交互系统的基本定律预防出错 八条黄金设计规则 尽量保持一致 布局 颜色 词汇 允许熟练用户使用快捷键提供积极的有价值的反馈设计完整的对话过程 每次对话有明确的结束信息 包括窗口的切换 提供预防错误和简单的错误处理手段允许撤销动作提供控制的内部轨迹 让用户感觉控制了系统 而不是被控制减轻短期记忆负担 7 9模块详细设计 区分模块总体设计和模块详细设计模块详细设计是要确定每个模块的内部特征 即内部的处理过程的设计 处理过程设计可以采用以下工具表达 程序流程图 程序框图 盒图 NS图 程序设计语言 PDL 1 程序流程图 三种结构 a 顺序 b 循环 c 选择 d 条件 2 盒图 NS图 Nassi Shneiderman 在NS图中 每个处理步骤用一个盒子表示 盒子可以嵌套 盒子只能从上头进入 从下头走出 除此之外别无其他出入 a 顺序 d 循环 c 选择 b 条件 程序流程图举例 a b x1 x2 x5 x6 x3 x4 x7 x8 h i g f e d c j a b x1 CASExii 2 3 4 x2 f Fx6T x3 x4 x5 d e c x8 j g h x7 i 等价的盒图 流程图和盒图的比较 与流程图相比 NS图的优点在于 第一 它强制设计人员按结构化程序设计方法进行思考并描述他的方案 第二 图象直观 容易理解设计意图 为编程 复查 测试 维护带来方便 第三 简单易学 3 程序设计语言PDL ProgramDesignLanguage是用来描述模块内部具体算法的非正式的比较灵活的语言 或称类语言 等价的PDL 类Pascal 执行aREPEATUNTIL条件x8执行bIF条件x1THENBEGIN执行fIF条件x6THENREPEATUNTIL条件X7执行iENDREPELSEBEGIN执行g执行hENDENDIFELSECASEOF条件xiWHEN条件x2SELECTDOWHILE条件x5执行CENDDOWHEN条件x3SELECT执行dWHEN条件x4SELECT执行eENDCASEENDIFENDREP执行j 7 10数据库设计 选择RDBMSSybaseOracleDB2MSSQLServerFoxProAccessMySQL 建立关系数据模型 关系数据模型 用关系 二维表格数据 表示实体和实体之间联系的模型称为关系数据模型为每个实体类型创建一张二维表 为每张表选择或发明一个主键 添加外键来表示实体间一对多的关系 创建一张新表来表示尚未分解的多对多的关系 拆为两个一对多关系 确定各个关系模式中属性的数据类型 约束 规则和默认值 考虑域完整性 根据用户需要设计存储过程 触发器 视图等 7 10 1ER模型到关系模型 E R图向关系数据模型的转换1 E R图中每个实体 相应转换为一个关系 该关系包括对应实体的全部属性 并确定出该关系的主关键字 一个关系是一张二维表 2 对于 联系集 根据联系方式不同 采取不同手段以使被它联系的实体所对应的关系彼此实现某种联系 一般通过外部关键字 ER模型到关系模型 E R图向关系数据模型的转换转换过程示意图 E R图 关系模型 RDBMS 每个实体对应一个表 E R图的转换将E R图转换成相应的表表是行和列的集合 实体被表示成表的形式 用列标题表示实体的属性用行表示每个实体的实际数据 属性值 关于表和属性的命名规则属性名和表名中不能包含空格表名对实体的描述应该是有意义的 如student cStuID cStuName nStuAge 表名只能描述一个主题 举例1 一名厂长管理一个工厂 一个工厂由一位厂长管理或者 厂长号 姓名 年龄 厂长 厂号 厂名 地点 工厂 管理 1 1 厂长 厂长号 厂号 姓名 年龄 工厂 厂号 厂名 地点 主关键字 外部关键字 工厂 厂号 厂名 地点 厂长号 举例2 一个仓库可以存放多种零件 每种零件只能保存在一个仓库中 仓库号 地点 面积 仓库 货号 品名 价格 产品 存放 1 n 仓库 仓库号 地点 面积 产品 货号 品名 价格 仓库号 数量 数量 仓库号为主关键字 多的一端设置外部关键字 举例3 一名学生可以选修多门课程 每门课程有多个学生选修 多对多的关系分解为两个1对多关系 学号 姓名 年龄 学生 课程号 课程名 学时数 课程 学习 m n 学生 学号 姓名 年龄 课程 课程代码 课程名 学时数 成绩 学习 学号 课程代码 成绩 学号为主关键字 课程代码为主关键字 学号 课程代码为复合关键字 7 10 2关系数据库规范化 数据库设计规范化必要性 解决在关系模式设计时 存在的数据存储异常现象 数据冗余 修改异常 插入异常 删除

温馨提示

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

最新文档

评论

0/150

提交评论