版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模块功能与处理过程设计HIPO图
★层次模块结构图
★
IPO图描述处理逻辑的工具
★决策树
★判断表
★结构化英语
★算法描述语言HIPO图层次结构图:整个系统的设计结构以及各类模块之间的关系IPO图:某个特定模块内部的处理过程和输入/输出关系IPO图层次模块结构图基本算法:将系统划分为若干子系统,子系统下再划分为若干的模块。大模块内再分小模块,而模块是指具备有输入输出、逻辑功能、运行程序和内部数据四种属性的一组程序层次模块结构图主要关心的是模块的外部属性,即上下级模块、同级模块之间的数据传递和调用关系,而并不关心模块的内部。层次化模块结构图合格出入库单据其他模块(处理、输出等)出入库出入合格单据库单据标志修改库存文件C.5.3.2获得合格输入C.5.4.4读出入库单据C.5.5.7验证出入库单据C.5.5.8其他处理模块C.5.4.5IPO图IPO图是配合层次化模块结构图详细说明每个模块内部功能的一种工具包括输入(I)、处理(P)、输出(O),以及与之相应的数据库/文件、在总体结构中的位置等信息IPO图IPO图编号(模块编号)C.5.5.8HIPO图编号:C.5.0.0数据库设计文件编号:××××编码文件号:××编程要求文件号:×××模块名称:验证出入库单据设计者:××使用单位:××编程要求:××××输入部分(I)处理描述(P)输出部分(O)上组模块送入单据模块读单据存根文件读价格文件……..核对单据与单据存根记录计算并核实价格检查用户记录和信贷情况…….将合理标志送回上一级调用模块将检查的记录记入××文件……..模块结构的图形表示模块数据调用循环调用判断分支
baA调用BA判断调用A循环A带着数据a调
B、C、D调用B用B,返回时带回数据b模块名ABABCDABAB结构设计一、结构设计的原则:所划分的模块其内部凝聚性要好模块之间的联结只能存在上下级的调用关系,不能有同组之间的横向联系整个系统呈树状结构,不允许有网状结构或交叉调用关系出现所有模块都必须严格地分类编码并建立归档文件二、模块的联结方式:模块联结特征联结控制联结公共联结内容联结三、功能模块划分:用于描述模块内部处理过程主要有以下几种方法:1、决策树2、判断表3、结构化英语4、算法描述语言方法
描述处理逻辑的工具例题某公司产品销售业务过程中的折扣政策如下:如果交易额大于50000美元,并且最近三个月无欠帐记录,则给予15%的折扣;如果交易额大于50000美元,但是最近三个月有欠帐记录,则要考虑如下内容:如果是20年以上的老客户,给予10%的折扣,否则只给予5%的折扣。近三个月R=15%无欠帐交易额折20年以上扣>$50000近三个月老客户R=10%政有欠帐20年以下策交易额客户
R=5%
<$50000R=0%
决策树判断表1234条件交易额>5万YYYN3个月无欠款YNN/20年以上老客户/YN/结果R=15%
*R=10%*R=5%*R=0%*结构化英语一结构化英语的三种基本结构:顺序结构判断结构循环结构结构化英语的关键词:
ifthenelsesoandornot结构化英语二IFcustomerdoesmorethan$50000businessTHENIFthencustomerwasn’tindebttousthelast3monthesTHENdiscountis15%ELSE(wasindebttous)IFcustomerhasbeenwithusformorethen20yearsTHENdiscountis10%ELSE(20yearsorlessis5%)ELSE(customerdoes$50000orless)SOdiscountisnil结构化英语三IF交易额>$50000
IF近三个月无欠帐记录
THENR=15%ELSE(最近三个月有欠帐记录)
IF20年以上的老客户
THENR=10%ELSE(不是20年以上的老客户)
R=5%ELSE(交易额<$50000)
R=0%算法描述语言方法1、语法形式符号与表达式赋值语句控制转移语句循环语句其他语句
LOOP:ii+12、控制转移语句
GOTO和IFCTHENS1ELSES23、循环语句
WHILEcDOs和
FORi=initTOlimitBYstepDOs4、其他语句
EXITRETURNREAD(或INPUT)
OUTPUT(或PRINT,WRITE等)决策树优点:比较直观,容易理解缺点:条件较多时,不容易清楚的表达出整个判别过程判断表优点:可以清晰地表达条件、决策规则和应采取的行动之间的逻辑关系,容易为管理人员和系统分析人员所接受能够把所有的条件组合充分地表达出来缺点:判断表的建立过程较为复杂,且表达方式不如前者简便几种方法的比较一结构化英语优点:容易理解,转换成程序语言比较容易算法描述语言优点:形式上简单,非常容易转换成程序语言缺点:可能需要解释几种方法的比较二作业题某大学的录取政策如下:如果学生成绩在600分以上,录取;如果学生成绩在550-600之间,并且是市级以上三好学生,录取;如果学生成绩在550-600之间,并且是国家一级运动员,录取;成绩在500分以下的,不予录取.作业题答案可能方案1234条件600分以上Y/550-600/YY500分以下//Y市级以上三好学生/Y/国家一级运动员//Y结果录取×××不录取×系统设计报告系统总体结构图(总体结构图、子系统结构图、计算机流程图等)系统设备配置图(计算机系统图、设备在各生产岗位的分布图、网络和终端连接图等)系统分类编码方案(分类方案,编码和校对方式)数据库结构图包括数据库的结构(表与表之间的结构)、内部结构(字段、域)、数据字典等
I/O设计方案HIPO图(层次化模块结构图)、IPO图系统详细设计方案说明书系统实施、评价与运行管理系统实施系统运行管理制度信息系统的评价体系系统实施采用自底向上的逐步开发方法系统实施的主要任务:按总体设计方案购置和安装计算机网络系统建立数据库系统程序设计与调试整理基础数据;培训操作人员投入切换和试运行
程序设计与调试一程序设计方法:结构化法原形方法面向对象方法衡量编程工作的指标:可靠性规范性可读性可维护性常用的编程工具:c语言VFP
程序设计与调试二程序的调试:黑箱测试数据测试穷举测试操作测试模型测试程序调试的主要步骤:模块测试分调联调人员培训计划培训的内容人员以及岗位培训试运行和系统转换系统的试运行基础数据准备系统切换系统运行管理制度系统运行管理的组织机构基础数据的管理运行管理制度系统运行结果分析
第三节系统总体设计信息系统的评价体系信息系统质量的概念系统运行评价指标:预定的系统开发目标的完成情况系统运行实用性评价系统运行效率的评价一系统的分解方法系统分解的方法是把一个复杂的问题分解成简单的要素,把一个统一的整体分解为各个组成部分,然后对各个要素和组成部分分别进行研究。借助于目标系统的逻辑模型(DFD)并根据部门机构设置情况进行系统分解1.系统分解的原则明确系统分解前、后的功能尽量一致每次分解的结果是可以独立开发的子系统(或模块)各子系统(或模块)间的关联尽量少制定子系统(或模块)间的约束规范区别稳定的和易变的子系统(或模块)2.系统分解的方法
(一)按企业业务管理部门划分如:生产、销售、供应管理等;按部门设置
(二)按完成功能的类型来划分如:顾客服务、技术与生产数据管理;按实际职能设置二模块结构图
结构化设计方法的基本思想就是模块化。即对每一个系统按功能逐步由顶向下,由抽象到具体的逐层分解,将系统分解成为多层次的独立功能模块,一直分解到能简单地用程序实现为止。总体设计任务(一)模块模块的定义:
模块是可以组成、分解、更换的系统,是易于处理的基本单位,具有四种属性的一组程序语句称为一个模块,这四种属性分别是输入输出、逻辑功能;(外部特性)内部数据、程序代码。(内部特性)
(一)模块(续)模块的例子:
intmax(intx,inty){intz;z=x>y?x:y;return(z);}模块名数据内部数据内部语句模块化思想:模块化是好的系统设计的一个基本准则
高层模块从整体上把握问题,暂不考虑细节复杂问题较小问题
分解可减小解题所需的总的工作分解模块和子系统的区别模块和子系统的概念是有所区别的。子系统仍具有系统的特征(更大),模块则是指为完成某项功能的程序集合体(较小),它是一个不可分割的整体,但模块和子系统的概念有时又是兼容和不可绝对区分的。在日常工作中我们常将完成一个管理功能的程序集称为模块,而它常常由多个很小的程序子模块组成,所以有的地方可称为子系统。(二)模块结构图sc1.结构图的产生
程序流程图系统流程图和功能图HIPO技术(功能图和IPO图)结构图(StructureChart)。2.结构图的主要成分
模块——用方框表示,方框中写上模块名字,反映了这个模块的功能调用——从调用模块指向被调用模块的箭头数据——调用箭头旁的小箭头,表示从一个模块向另一个模块传送的数据,也指出了传送的方向3.结构图基本符号及表示法编辑学生记录读学生记录学生数据无此学生学号不加区分的数据数据信息控制信息模块调用的例子:
intmax(intx,inty){intz;z=x>y?x:y;return(z);}Main(){::max(3,4):}Main()求最大值ZxySC中的四种模块传入模块(a)(b)AA传出模块BB变换模块(c)CD协调模块E(d)EFFSC中的简单调用BACx,yz(a)表示法一(b)表示法二zBAC12入出12x,yzzA调用B和CSC中的选择调用ACBDA根据内部判断决定是否调用BA按另一判定结果选择调用C或DSC中的循环调用ABCA根据循环条件重复调用B、C等模块选择调用的例子:A(){:if(条件..)
B()else
C():}ABC循环调用的例子:
A(){:while(条件..){
B();:;}:}AB
4.模块结构类型
内导结构:是结构图中数据以最低层模块输入,并逐级向高层传递,高一层模块接收低一层模块的输入。
主模块
A1
A4
A3
A2外导结构:结构图中低一层模块接收上一层模块的数据信息,并把它们转换给下一级模块,直到输出给使用者。wu子模块1v主模块子模块2子模块2.1转换结构:数据要在模块内经过一定的处理,下层模块从相应的上层模块接收数据,经转换后返回同一上层模块中去。wu子模块1v主模块子模块2子模块2.1XMY4.结构图与数据流图的差别数据流程图是从数据流着眼,而结构图从程序模块着眼;数据流程图描述的是系统的逻辑模型,而结构图是描述系统的物理模型;数据流程图是用不同的图来表示不同的层次,是“平面图”,而结构图能反映系统的层次结构,是“立体图”;数据流程图是从具体到抽象,描述系统的要求,而结构图是从抽象到具体,描述系统的实现方法。(三)模块设计的原则系统的可维护性是系统评价的一个重要因素可维护性局部修改模块间的联系尽可能的少(耦合)而模块内的联系尽可能多(聚合)1.模块的独立性
模块独立的含义:模块完成独立、单一的功能符合信息隐蔽和信息局部化原则模块间关连和依赖程度尽量小
2.模块独立性的度量
模块独立性取决于模块的内部和外部特性。SD方法提出的定性的度量标准:
模块之间的耦合性(块间联系)模块自身的聚合性(块内联系)3.模块独立性的度量之一:耦合度
耦合度是模块间的联结关系,衡量不同模块间的相互依赖的紧密密程度,耦合的强弱取决于模块间接口的复杂程度;进入或访问一个模块的入口点;以及通过接口的数据。耦合度越高,模块独立性越弱无耦合-没有依赖关系松散耦合-有少量依赖关系紧密耦合-有很多依赖关系模块耦合度(续)耦合度强弱的因素:一模块对另一模块的引用一模块向另一模块传递的数据量一模块施加到另一模块的控制的数量模块间接口的复杂程度模块间耦合的类型:
低非直接耦合耦数据耦合合标记耦合性控制耦合
高内容耦合模块独立性弱(低耦合)强(中耦合)(较强耦合)(强耦合)公共耦合(1)非直接耦合两个模块没有直接关系(模块1和模块2),模块独立性最强。模块1模块2模块3模块4(2)数据耦合一模块调用另一模块时,被调用模块的输入、输出都是简单的数据。属松散耦合。数据耦合举例开发票计算水费单价数量金额数据耦合举例计算水电费计算水费计算电费用水量用电量水费电费(3)标记耦合(特征耦合)如两个模块通过传递数据结构(不是简单数据,而是记录、数组等)加以联系,或都与一个数据结构有关系,则称这两个模块间存在标记耦合。标记耦合举例计算水电费计算水费计算电费住户情况水费电费住户情况“住户情况”是一个数据结构,图中模块都与此数据结构有关.“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合.将标记耦合修改为数据耦合举例计算水电费计算水费计算电费本月用水量本月用电量水费电费(4)控制耦合一模块通过开关量、标志、名字等控制信息,明显地控制另一模块的功能。控制耦合举例A计算平均分或最高分B平均/最高成绩设想一下A()函数中调用B()的语句是怎样的?这个问题与前面的调用MAX()的例子不同。
在MAX()函数中,我们很清楚地看到:形式参数表是两个整数,表示要比较的两个数。函数说明为:MAX(intx,inty)
函数处理后,返回的结果为较大的那个数。所以,在主调函数中,我们只需以两个被比较的数作为实际参数,所以就可写出形如:
..=MAX(25,36)的调用语句。设想一下A()函数中调用B()的语句是怎样的?但在B()函数中,我们虽然知道:形式参数表是一个整数,表示要取得的成绩类型是平均或最高。函数说明为:
B(intx)
函数处理后,返回的结果为取出的成绩数据(平均或最高)。可是,在主调函数中,我们仍不知道以什么作为实际参数,是0?1?2?还是其他值,取决于B()中用什么值表示平均/最高标记。因此,就要去了解B()内部的语句,而不能仅凭函数说明就写出调用语句。所以B()就成为灰箱/白箱,而非黑箱。控制耦合举例读入分数输出结果计算平均分计算最高分平均/最高?调用逻辑性模块
B时,须先传递控制信号(平均分/最高分),以选择所需的操作。控制模块必须知道被控模块的内部逻辑,增强了相互依赖.B控制耦合增加了模块之间的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖。去除模块间控制耦合的方法:(1)将被调用模块内的判定上移到调用模块中进行控制耦合增加了理解和编程的复(2)被调用模块分解成若干单一功能模块改控制耦合为数据耦合举例A计算平均分B1平均成绩最高成绩计算最高分B2控制耦合举例A发奖牌
名次(开关量)奖牌控制耦合被调用模块内处理逻辑模式功能A功能B判别改控制耦合为数据耦合举例A发金牌发银牌发铜牌金牌银牌铜牌A取口令并核对B用户名、口令对/不对控制耦合举例A取口令B用户名口令将B中核对口令功能划分到
A(5)公共耦合(公共数据区耦合)一组模块引用同一个公用数据区(也称全局数据区、公共数据环境)。公共数据区指:
全局数据结构共享通讯区内存公共覆盖区等公共耦合举例Acommon公共数据区松散的公共耦合BAcommon公共数据区紧密的公共耦合B公共耦合举例A公共数据区CB模块A、B、C间存在错综复杂的联系公共耦合举例所有的公共耦合关系AEBCD6个模块共享一个公共数据区F(1)系统可理解性降低
(模块间存在错综复杂的连系)(2)系统可维护性差
(修改变量名或属性困难)(3)系统可靠性差(公共数据区及全程变量无保护措施)慎用公共数据区和全程变量!!!公共耦合存在的问题:(6)内容耦合一模块直接访问另一模块的内部信息(程序代码或数据)最不好内容耦合形式
!!!发生内容耦合的情形:(1)一模块直接访问另一模块的内部数据(2)一模块不通过正常入口转到另一模块内(3)两模块有一部分代码重叠(4)一模块有多个入口模块化设计对耦合度的要求:耦合是影响系统复杂程度和设计质量的重要因素目标:建立模块间耦合度尽可能松散的系统如何降低模块间耦合度:(1)如模块必须存在耦合,选择适当的耦合类型原则:尽量使用数据耦合少用控制耦合限制公共耦合的范围
坚决避免使用内容耦合如何降低模块间耦合度:(2)降低模块间接口的复杂性
接口复杂性与耦合类型的关系:接口复杂性接口方式接口数据的复杂性无接口关系直接引用过程调用语句数据项作参数数据结构,变量名作参数内容耦合其它耦合开关量,起控制变量作用公用数据区全程变量,数据耦合标记耦合控制耦合公共耦合非直接耦合4.
模块独立性的度量之二:聚合度衡量一个模块内部各成分之间彼此结合的紧密程度设计目标:高聚合(一模块的所有成分都直接参与并且对于完成同一功能来说都是最基本的)模块的聚合性类型:低偶然聚合内逻辑聚合聚时间聚合性过程聚合通信聚合
顺序聚合高功能聚合模块独立性弱(功能分散)强(功能单一)(1)功能聚合一个模块内的所有成分的处理动作全部为完成某个功能,且只执行一个功能,缺一不可,称为功能聚合。
聚合性最强如:计算实发工资,打印发票等(2)顺序聚合一个模块能完成多个操作,前一个操作处理的输出数据是下一个操作处理的输入数据,模块中各成份的工作是有次序的,各成份的关系也较紧密,则称为顺序聚合。顺序聚合模块例读入存贮打印累加读数模块1模块2(3)通信聚合模块内各部分使用相同的输入数据,或产生相同的输出结果,称为通信聚合通信聚合模块例产生工资报表计算平均工资职工工资记录职工工资报表平均工资产生职工工资报表并计算平均工资模块通信聚合模块例开领书单登记售书发票领书单售书登记表文件删除修改(4)过程聚合一个模块内各处理成分的动作各不相同,彼此也没什么关系,但它们都受一个控制流的支配,且决定了它们的执行次序。过程聚合模块建立方程组系数矩阵全部任务纳入一个模块,得到一过程性模块高斯消去法回代高斯消去法解题流程(5)时间聚合模块完成的功能必须在同一时间内执行,这些功能只因时间因素关联在一起。例如:初始化系统模块、系统结束模块、紧急故障处理模块等均是时间性聚合模块.(6)逻辑聚合把几种相关功能(逻辑上相似的功能)组合在一模块内,每次调用由传给模块的参数确定执行哪种功能。逻辑聚合模块例ABCEFGABCEFGA1B1C1EFG模块内部逻辑E、F、G逻辑功能相似,组成新模块EFG缺点:增强了耦合程度(控制耦合)
不易修改,效率低公用代码段公用代码段逻辑聚合缺点:不易修改增强了耦合程度(控制耦合)
效率低(7)偶然聚合
模块内各部分间无联系ABCMMOVEOTORREADFILEFMOVESTOT模块M中的三个语句没有任何联系缺点:可理解性差,可修改性差例:‘做杂事’模块聚合性的判断YNYY该模块功能单一各功能关系如何功能聚合通讯聚合顺序聚合逻辑相似次序重要次序重要过程聚合时间聚合逻辑聚合偶然聚合NNNY数据流控制流两者皆非5.耦合、聚合与模块独立性关系耦合与聚合都是模块独立性的定性标准,都反映模块独立性的良好程度。但耦合是直接的主导因素,聚合则辅助耦合共同对模块独立性进行衡量。控制耦合举例A计算平均分或最高分B平均/最高成绩逻辑聚合改控制耦合为数据耦合举例A计算平均分B1平均成绩最高成绩计算最高分B2功能聚合A取口令并核对B用户名、口令对/不对控制耦合举例顺序聚合A取口令B用户名口令将B中核对口令功能划分到
A功能聚合
聚合与耦合密切相关,同其它模块强耦合的模块意味着弱聚合,强聚合模块意味着与其它模块间松散耦合.
设计目标:力争强聚合、
弱耦合5.耦合、聚合与模块独立性关系(续)三数据流图导出初始结构图
从数据流程图导出系统的初始结构图,首先要区分数据流程图的结构类型,然后根据不同的类型采用不同的方法把数据流图映象成相应的模块结构。(一)数据流程图DFD的结构类型1.变换型DFD
一个数据流程图可以明显地分成输入、处理和输出三部分。2.事务型DFD
事务型数据流程图一般呈束状形。
(1)变换型结构由输入、变换中心(或称主加工)和输出三部分组成。基本模型:变换中心输入路径输出路径变换流示意图信息时间信息流输入流输出流变换流外部表示内部表示变换型数据流图输入信息物理输入格式检查处理显示正确信息结果物理输出数据变换中心输出逻辑输入逻辑输出输入(2)事务型结构特征:具有在多种事物中选择执行某类事物的能力基本模型:事务中心接受路径动作路径(3)大型系统DFD中,变换型和事务型结构往往共存:T事务中心传入变换传出(二)DFD导出初始SC的过程两种转换策略/技术变换分析事务分析一般过程
先设计模块结构顶端的主模块然后“由顶向下逐步细化”最后得到一个与数据流图相对应的程序结构SD方法的两种转换方法变换型DFD事务型DFD初始SC初始SC变换分析事务分析“由顶向下逐步细化”的思想找出“顶”在哪里,设计一个相应的主控模块每创建一个新的模块时,必须决定该模块的外部特征
该模块的功能,即该模块“做什么”该模块同其调用模块的界面,即调用时传送的参数对已创建的模块进行细化,考虑这个模块应该“怎样做”才能完成它的功能,于是又要创建下一层的新模块,再回到上一步通过这样“先决定做什么,再考虑怎样做”,循环往复,设计过程就有序地进行,
直至获得整个完整的结构层次。变换型事务型(三)变换分析设计方法
(TransformAnalysis)步骤:1找出主加工、逻辑输入和逻辑输出2设计模块结构的顶层和第一层3设计中、下层模块1区分输入、主加工、输出部分,在DFD上标明分界线(1)确定逻辑输入——离物理输入端最远的,但仍可被看作系统输入的那个数据流
方法:从物理输入端开始,一步步向系统的中间移动,直至达到这样一个数据流:它已不能再被看作为系统的输入,则其前一个数据流就是系统的逻辑输入。1区分输入、主加工、输出部分,在DFD上标明分界线(2)确定逻辑输出——离物理输出端最远的,但仍可被看作系统输出的那个数据流
方法:从物理输出端开始,一步步向系统的中间反方向移动,直至达到这样一个数据流:它已不能再被看作为系统的输出,则其后一个数据流就是系统的逻辑输出。1区分输入、主加工、输出部分,在DFD上标明分界线(续)(3)对系统的每一股输入和输出,都用上面的方法找出相应的逻辑输入、输出(4)确定主加工——位于逻辑输入和逻辑输出之间的加工,就是系统的主加工1区分输入、主加工、输出部分,在DFD上标明分界线(续)(5)几点说明:有的系统只有输入和输出两部分,没有主加工根据经验,几股数据流的汇合处往往是系统的主加工每个人都可以有自己的看法,找出来的主加工可能也不同,但一般不会相差太远。1234567abcedrpuwv变换中心输入部分输出部分输入输出加工2设计SC的顶层和第一层模块:(1)设计一个顶层模块(主模块),它的功能是完成整个程序要做的工作。(2)设计结构的第一层:为逻辑输入设计一个输入模块,它的功能是向主模块提供数据为逻辑输出设计一个输出模块,它的功能是输出主模块提供的数据为主加工设计一个变换模块,它的功能是将逻辑输入变换成逻辑输出
第一层模块同顶层主模块之间传送的数据应与数据流图相对应。这里主模块控制并协调一层的输入、变换、输出模块的工作,注意识别出选择或循环调用以及调用条件。第一级分解后的SCMCMTMAME第一层顶层c,ec,eu,wu,w传送信息第一级分解后的SC(另一种画法)MCMA1ceu,wc,pMA2456ME1ME2eprrw,uw3第二级分解(分解SC各分支)自顶向下分解,设计出每个分支(输入、加工、输出)的中、下层模块:(1)为每一个输入模块设计两个下层模块,一个是输入模块,接受数据来源;另一个是变换模块,模块调用时传送的参数应同数据流图相对应(2)输出模块也有两部分组成,一部分是变换模块,将数据变换成输出的形式;另一部分是输出模块上述设计过程由顶向下递归进行,直至达到系统的输入端或输出端(3)变换模块的下层模块,根据数据流图中相应加工的组成情况而定。输入分支的分解MAGetCbacReadDdec,eBtoCbcdeabGetEGetBDtoEAtoBReadADFD图输出分支的分解
MEWriteVuuw,uvvPutUUtoVWriteWwDFD图加工分支的分解MT546ec,pru,wprDFD图任何情况下都可使用变换分析方法设计软件结构,但如数据流具有明显的事务特点时(有一个明显的事务中心),以采用事务分析方法为宜。(四)事务分析设计方法事务分析设计方法步骤:(1)在DFD上确定事务中心。(2)为DFD上的事务中心设计主模块,再为每一种类型的事务处理设计一个事务处理模块。(3)为每个事务处理模块设计下面的操作模块,再为操作模块设计细节模块。某些操作模块和细节模块可以被几个上一层模块共用。事务型DFD的划分T事务中心传入变换传出接收部分发送部分a事务型SC的上层结构(1)事务控制Geta顶层第一层a事务1
事务型SC的上层结构(2)事务控制事务分析发送动作分支的典型结构PT2T1TiA2D2A1D1A3AjDk事务层操作层细节层处理层变换分析举例-DFD1格式检查3产生收据2计算汇费4记账汇款单合格的汇款单处理后的汇款单收据明细账变换中心输出输入业务数据变换分析举例-转换后的SC汇款处理系统取得合格汇款单计算汇费记账输出处理后的汇款单输入汇款单格式检查产生收据打印收据合格的汇款单处理后的汇款单合格的汇款单业务数据处理后的汇款单汇款单合格的汇款单汇款单处理后的汇款单收据收据业务数据要求类型处理图书管理要求无效输入1.1新书入库1.2还入库单罚款单1.5注销图书1.3还书1.4目录文件借书单书单注销单借书借书文件罚款单事务分析举例-DFD事务中心事务分析举例-转换后的SC图书处理系统取得图书处理要求修改目录文件操作层细节层新书入库注销图书借书还书打印罚款单修改借书文件………………图书管理要求入库单借书单还书单注销单练习一:将DFD用变换分析和事务型
分析导出初始SCAC1C2C3BDGEJFKLc1c2b2b1b3bac3dgfjheklm**初始SC系统主加工PutkGetdDGetcPutlKFEJGWritemLBtocGetbAReadaC1C3C2Ac1……Ac2Dt1Dt3Dt2AcN……操作层细节层dkkdmmlllkdccbbcaabb1b2c3c1c2b3e,fdg,jfe,ghh,jk练习二:将DFD用变换分析和事务型
分析导出初始SCAC1C2C3BDGEJFKLc1c2b2b1b3bac3dgfjheklm++初始SC系统主加工PutkGetdPutlKFEJGWritemLGetbAReadaC1C3C2Ac1……Ac2Dt1Dt3Dt2AcN……操作层细节层dkkdmmlllkbaabb1b2c3c1c2b3e,fdg,jfe,ghh,jk四设计优化将初始SC根据模块独立性原则进行精化,对模块进行合并、分解修改、调整,得到高内聚、低耦合模块,得到易于实现、易于测试和易于维护的软件结构,产生设计文档的最终SC。改进软件结构设计的指导原则(1)程序结构尽可能与问题结构相对应(2)模块功能的完整(3)消除重复功能(4)作用范围应在控制范围内(5)减少高扇出争取高扇入(6)模块大小适中(7)降低模块接口的复杂性(8)模块功能可预测
(1)程序结构尽可能与问题结构相对应两种典型的程序结构:变换型程序事务型程序(1)程序结构尽可能与问题结构相对应(续)两种程序结构的共同特征:
上层模块只负责控制、协调下层模块完成具体的操作变换型程序
变换型(即输入、加工、输出型,或称IPO型)的功能是从某输入设备(如键盘)获得数据,再对这些数据作处理,然后将结果送出(如屏幕显示)。
这类程序的标准SC图形如下图所示。变换型程序结构MAINGetcbacd
to
eddb
to
cbceeabPUTdGetbWrite
ea
to
bReadac
to
dcd事务型程序
事务型程序的功能是接受一项事务,然后根据事务的不同类型,选择进行某一类事务的处理。这里,模块结构有三个层次:事务层、操作层和细节层。主模块按接受的事务类型,选择调用某个事务处理模块。不同类型的事务处理模块可能含有一些相同的操作,所以可能共用一些操作模块;不同的操作又可能含有一些共同的细节,所以某些操作模块又可能共用一些细节模块。
这类程序的标准SC图形如下图所示。事务型程序结构MAINT2Get
TTiA2D2A1D1A3AjDk事务层操作层细节层处理层T1(2)模块功能的完整完整的模块应包括三部分:执行规定功能部分出错处理部分需返回一系列数据时,应返回是否正确结束(即“文件完/EOF”)标志。(3)消除重复功能
几个模块中含有重复的部分,应设法消去。因为同一功能重复多处,不仅浪费编程、测试时间,还会给修改带来麻烦。但消除重复功能并不是简单的合并。正确的方法是:先分析几个模块中相同功能的部分;然后把这个功能分离出来,构成它们的一个公共的下层模块。例子:消除重复功能ACBCA′B′C改进前改进后例子:消除重复功能XYABCCC改进前图1说明:如果A、B抽去公共部分C之后余下的模块A′、B′比较简单,则可以同它们的调用模块X、Y合并,所以改进后图2、图3都有可能。B′YCX′改进后图2X′Y′C改进后图3(4)作用范围应在控制范围内
(作用域应在控制域内)模块的控制范围(控制域):
包括模块本身和其下属模块的集合。模块的作用范围(作用域):
指受该模块内一个条件判定影响的所有模块的集合。只要模块中含有一些依赖于这个判定的语句,那么就称该模块在这个判定的作用范围内。控制域是从结构方面考虑的;作用域是从功能方面考虑的AFBCEMDG模块的控制范围和作用范围(例):条件判定模块A的控制范围:A、B、C、
D、E、FA的作用范围:
A、C、F:受判定影响的模块把一个条件判定的作用范围限制在判定所在模块的控制范围之内,且判定所在位置不能太高。(作用域是控制域的子集)图A——图D画出了作用范围和控制范围的四种情况。作用范围/控制范围原则:图A:判定位置违反作用范围/控制范围原则TOPABCDGE条件判定判定的作用范围有一部分(模块C)越出了判定所在模块G的控制范围GDBC1)将判定所需的数据从G向上传送到D、B,再向下传给C,C用这些数据再次作出判定。从而增加块间数据量。思考:图A中模块C怎么知道模块G中的判定结果2)将判定的结果(是/不是)从G向上传送到D、B,再向下传给C,C用这些开关量决定执行那些操作。这样也增加块间数据量,而且传送控制信息。图B:符合作用范围/控制范围原则,但判定位置太高TOPABCDGE条件判定TOPBDGTOPBC图C:符合作用范围/控制范围原则,判定位置适中TOPAGCDBE条件判定BDGBC图D:符合作用范围/控制范围的理想判定位置TOPAGEBDC条件判定DGDE将包含条件判定的模块合并到它的调用模块中,使判定处于较高位置将接受判定影响的模块下移到控制范围内把判定上移到足够的位置可以归结为:使判定同受其影响的操作尽可能靠近。修改模块结构方法:(5)减少高扇出,争取高扇入模块调用的直接下层模块的个数,称为扇出(Fanout)模块被其他各模块调用的个数,称为扇入(Fanin)原则:扇出不宜过大,<=7;扇入尽可能大些。但CASE(分类)型模块扇出可>7,因为属自然分类情况,易理解(4,0)(3,1)(5,1)(0,2)符号:(扇出,扇入)(5)减少高扇出,争取高扇入(续)清真寺型不够好,底层模块复用度低金字塔型(5)减少高扇出,争取高扇入(续)相关技巧:良好的结构图往往呈“清真状”,即“顶为尖—下层逐渐加宽—底层收窄”结构图的形态应该均衡,即从顶到底层的路径长短不该过于悬殊
(6)模块大小适中
模块过大:可理解程度下降
考虑对该模块分解模块过小:开销大于有效操作,
系统接口复杂
考虑是否同它的调用模块合并(6)模块大小适中(续)
几种情况下的小模块不合并:模块具有独立的功能模块功能可能会发生变化模块的复用性好,或者其调用模块很复杂(7)降低模块接口的复杂性接口传递信息应简单且和模块功能一致。例:求一元二次方程的根设求根模块调用形式为:(1)QUAD-ROOT(TBL,X)
传递系数的数组存放根的数组(2)QUAD-ROOT(A,B,C,ROOT1,ROOT2)
A,B,C为方程系数
ROOT1,ROOT2是两个根(8)模块功能可预测可将模块看成黑盒子,相同输入可产生相同输出,称其功能为可预测的。模块带有内部状态,其功能可能是不可预测的。这样的模块难理解、难测试、难维护。
实例1——银行贷款文件管理实例1——银行贷款文件管理本实例说明用SA方法进行分析,并用SD方法设计总体结构的过程。问题描述系统分析系统设计
1问题描述
本系统MFUP是银行贷款文件管理的一部分:对贷款文件进行修改。其主要功能是:根据对贷款账户的修改信息修改贷款文件中相应账户的记录内容,这些修改信息记在一叠按账号排列的修改卡片上。系统将被修改的记录打印一份报告,并报告修改中出现的错误信息。1问题描述(续)
贷款文件格式:每个账户在贷款文件中有一个记录,每个记录由14个数据项组成。(见下表)贷款文件按账号递增排列,文件存放在磁带(顺序文件!)上。每个账户的地址、电话、邮政编码、负责与账户联系的银行信贷员等都有可能发生变化。序号
内容长度(位)数据类型可否修改1234567891011121314账号户名地址省市邮政编码电话类型信贷员号最近一次业务日期最近一次付息日期余额业务总量限额530301015571566886数字数字字母数字字母字母字母数字数字字母数字数字数字数字数字数字否可可可可可可否可否否否否否1问题描述(续)
修改卡片格式:
卡片的第1-5位指出要修改的记录的账号,第6-9位为空,从第10位开始为如下格式:
xxabcd…pqr*xxabc…stu*xxabc…uvw**xx是两位数字,指出要修改的数据项序号,后面的abcd…pqr是这个数据项的修改值,*表示数据项的结束,每张卡片的最后一个数据项结束是**。例:
68371072692386*02HUADAXINXI01**
表示要修改账号为68371的记录,第7项改为2692386,第2项改为HUADAXINXI01。1问题描述(续)
修改规定:修改值的长度小于数据项的指定长度时,如果该项是数字项,则在其左边补零;否则在右边补空格。修改值的长度超过数据项的指定长度时,则需截短第6项邮政编码的修改值必须是5位
修改卡片按账号递增排列1问题描述(续)
基本过程:MFUP读入一叠修改卡片,检查卡片的排列次序以及卡片上的修改信息是否合理,然后对旧文件作修改,产生一个修改后的新文件,并将被修改的记录打印成一份报告。MFUP将拒绝以下不合理的修改信息,并报告错误:修改卡片的账号没有按递增次序排列,或贷款文件中没有这个帐号数据项序号不在1-14之间数据类型不符企图修改不准修改的数据项2系统分析0银行贷款文件修改MFUP0层图修改卡片(旧记录)(新记录)报告未修改的文件记录修改后的文件记录2系统分析(续)1检查顺序1层图修改卡片旧记录新记录报告2编辑卡片3账号相等?4修改记录5写记录顺序卡片要修改的记录不要修改的记录已修改的记录错误修改信息6产生报告已修改的记录修改信息,错误2系统分析(续)2.1抽出修改项2层图(加工2的子图)顺序卡片修改信息错误2.2第1项错误2.3第2项2.4第3项2.15第14项2.16收集修改项错误……3系统设计
1)转换策略:本系统结构是总体——变换型局部——事务型
(“编辑卡片”子加工)
所以采用的转换方法为对整个系统使用“变换分析”,对系统的局部用“事务分析”的方法。3系统设计(续)——方案11检查顺序1层图——变换型修改卡片旧记录新记录报告2编辑卡片3账号相等?4修改记录5写记录顺序卡片要修改的记录不要修改的记录已修改的记录错误修改信息6产生报告已修改的记录修改信息,输入部分主加工部分输出部分错误3系统设计(续)——方案21检查顺序1层图——变换型修改卡片旧记录新记录报告2编辑卡片3账号相等?4修改记录5写记录顺序卡片要修改的记录不要修改的记录已修改的记录错误修改信息6产生报告已修改的记录修改信息,输入部分主加工部分输出部分错误3系统设计(续)说明:
变换分析设计方法的第一步,首先要将DFD中的所有处理划分成主加工、输入和输出三个部分。这是根据DFD中的处理所完成的功能来确定的。DFD中的处理,如果“流入”和“流出”的数据流的内容没有发生改变,只是性质(即正确与否)或状态(格式的调整)等发生改变,则这个处理是属于输入处理或输出处理的部分。如果“流入”和“流出”的数据流的内容发生改变,则这个处理是属于主加工的部分。每个人对DFD中每个处理所作功能的理解都可以有自己的看法,找出来的主加工可能也不同,但一般不会相差太远。
3系统设计(续)说明(续):
处理数据a数据b数据a->b改变的是:处理属于:状态/性质输入/输出处理部分内容主加工部分检查正确性入库单正确的入库单计算电费用电量电费例如:流进-流出的数据流内容没变,所以是输入处理部分流进-流出的数据流内容变了,所以属于主加工部分3系统设计(续)说明(续):
例如,本例就可能有两种划分结果,得出了不同的“输入-主加工-输出”边界,都有道理。但是应注意的是,作了不同划分后,接下来产生的初始模块结构图就会有所不同。但是经过结构图的改进步骤后,得出的最终系统模块结构图也是差不多的。接下来以第一种划分方案,讲解转换策略及结构图的调整。第二种划分方案的转换怎么做,大家可作为课后思考。3系统设计(续)——方案12.1抽出修改项2层子图——事务型修改信息错误2.2第1项错误2.3第2项2.4第3项2.15第14项2.16收集修改项错误……事务中心3系统设计(续)2)系统初始模块结构图:
主模块MFUP取得旧记录取得修改信息记录匹配判断(账号相等?)修改记录输出修改后的记录写记录修改信息记录修改信息记录修改信息记录记录编辑卡片取得顺序卡片卡片卡片修改信息检查顺序读卡片打印报告产生报告卡片卡片ok记录报告报告3系统设计(续)
2)系统初始模块结构图:(“编辑卡片”分支)
编辑卡片抽出修改项编辑第1项卡片编辑第2项修改项调整项2第1项编辑第3项编辑第14项……第2项第3项第14项调整项3okokokok卡片修改信息3系统设计(续)
3)改进优化模块结构图:
消除重复的功能(共同的操作)
作用范围应是控制范围的子集3系统设计(续)
分析1——共同的操作:在对各个修改项的处理动作是类似的。3系统设计(续)
修改1-1:把逻辑上相似的模块合并起来,会形成“逻辑型”模块。如1、6、9项合并处理,但又各有不同。1项不允许改,6项必须5位,9项可补零等。模块中必须设开关量来区分不同的情况,且可维护性差。3系统设计(续)修改1-1:简单合并,形成“逻辑型”模块。编辑卡片抽出修改项编辑第1,6,9项卡片编辑第2,3项修改项调整项2,3第1,6,9项编辑第4项编辑第12,13项……第2,3项第4项第12,13项调整项4okokokok卡片修改信息3系统设计(续)
修改1-2:不合并“编辑卡片”的各个下层模块,但运用“消除重复操作”的技巧,抽出共同的操作,形成操作层和细节层。操作层如“拒绝非字母项”、“拒绝非数字项”“调整修改项的长度”(在数字项前补零、在字母项后补空格、截去过长的修改项等),它们可以由事务层的14个模块中的几个模块共用。操作层的模块又包含共同的细节,如“查字符类型”、“查字符串长度”、“显示出错信息”等。3系统设计(续)修改1-2:抽出共同操作。编辑卡片抽出修改项编辑第1项卡片编辑第2项修改项第1项编辑第3项编辑第14项……第2项第3项第14项ok卡片修改信息………拒绝非N非C项拒绝非N项拒绝非C项调整长度拒绝过长项拒绝过短项检查字符类型检查字符串长度操作层细节层报告错误信息……3系统设计(续)
分析2——模块大小:抽出共同操作模块后,模块“处理修改项1、8、10…”等的功能都只是显示出错信息,因此非常简单。
修改2:将它们合并到上层模块‘编辑修改项’中。3系统设计(续)修改2:将小模块合并到上层模块。(界面略)编辑卡片抽出修改项编辑第2项卡片编辑第3项修改项编辑第4项编辑第9项卡片修改信息编辑第5项编辑第6项编辑第7项包含“修改1,8,10,11-14项”的功能语句……………3系统设计(续)
分析3——作用范围:
MATCH模块中的判定影响到‘GET记录’和‘GET卡片’模块。
修改3:将判定往上层移动。3系统设计(续)修改3:将判定往上层移动。主模块MFUP取得旧记录取得修改信息记录包含(账号相等?)的匹配判断修改记录输出报告写记录修改信息记录修改信息记录报告卡片卡片修改信息记录报告报告…………
实例2——病人监护系统实例2——病人监护系统
本实例说明改进模块结构图的过程,在改进过程中运用了一些SC优化技巧。问题描述初始SCSC的改进进一步优化总结1问题描述本系统MNPA是某医院的一个病人监护系统,其功能如下:
所有的病人都由专门的设备进行监视,设备同病床相连,这些设备可以测量病人的脉搏、体温、血压、呼吸……等项目(下面称这些项目为因素)。系统每过一定的时间间隔从监视设备读入上述因素,并把它们存入数据库中。医生为每个病人指定了各种因素的安全范围(如312号病人的体温安全范围是36。C~38.5。C),如果系统发现某个因素值越出安全范围,或发现某个监视部件有故障,则向护理站发出通知:如果是因素越限则报告病人号;如果是监视部件故障则报告床位号。1问题描述(续)监视部件故障:两种可能的设备故障监视设备读出的数据由七个因素值及一个硬件故障标志字组成。1)硬件故障标志字:七个二进制位,说明测量这七个因素的硬件是否有效(如:某个硬件单元是否已接入电路中)如:1110101表示第4、6个硬件故障,其测出的因素值无效1-有效0-无效
1问题描述(续)监视部件故障(续):2)设备软件故障:即监视设备测出的因素值不合理(如:体温测出52。C的不合理值等)。故障处理在硬件故障标志字指出硬件无效或软件检查出因素值不合理时,都应作为监视设备故障向护理站报告将这些因素值存入数据库时应加上标志,指出它们是无效的1问题描述(续)数据存储:数据库中的数据应该可以按病人号进行检索。各因素是相互无关的,其格式和长度均不相同。在数据库中,不必标出个因素值是否安全。注:因素值无效与因素值安全是两个概念。比如体温为39。C是有效的,却是不安全的。
病人监护系统处理因素值检查因素值获得因素值检查不合理因素值读取病床因素值读取病人信息检查不安全因素读取安全值范围存入数据库报告错误设备报告不安全因素Pn,Factors,EOFErrorFlagsFactors,SafeRangesErrorFlagsUnsafeFlags,ErrorFlagsPn,Factors,ErrorFlagsPn,Factors,ErrorFlags,UnsafeFlagsPn,BednumEOFFactors,ErrorFlagsPn,FactorsErrorFlagsBednumPnFactorsErrorFlags2UnsafeFlagsSafeRangesPn,FactorsUnsafeFlagsPn,ErrorFlags参数说明:Pn-病人号Bednum-病床号Factors-七个因素值
SafeRanges-因素安全值范围EOF-本次巡视已处理过最后一个病人信息
ErrorFlags2-各因素值是否合理UnsafeFlags-因素值是否安全
*
ErrorFlags-硬件故障标志字;设备故障标志字2初始结构图2初始结构图(续)模块“检查因素值”调用三个下层模块分别完成三个功能:1)查出不合理的因素值(‘检查因素值’模块中再将ErrorFlags2和硬件故障标志字合并成设备故障标志ErrorFlags)2)查出某病人的因素安全值范围3)决定病人的因素值是否安全模块“处理因素值”将数据存入数据库,并在发现不安全因素或设备故障时通知护理站3结构图的改进使用技巧:减少块间联系,主要是减少模块之间传送的参数个数消除“管道性”模块消除重复的功能如果一个模块篇幅较大,可考虑分解如果一个模块篇幅较小,可考虑同其调用模块合并要考虑将来可能发生的变化和扩充3结构图的改进(续)病人监护系统处理因素值检查因素值获得因素值检查不合理因素值读取病床因素值读取病人信息检查不安全因素读取安全值范围存入数据库报告错误设备报告不安全因素Pn,Factors,EOFErrorFlagsFactors,SafeRangesErrorFlagsUnsafeFlags,ErrorFlagsPn,Factors,ErrorFlagsPn,Factors,ErrorFlags,UnsafeFlagsPn,BednumEOFFactors,ErrorFlagsPn,FactorsErrorFlagsBednumPnFactorsErrorFlags2UnsafeFlagsSafeRangesPn,FactorsUnsafeFlagsPn,ErrorFlags缺少Bednum3结构图的改进(续)改进一:减少块间联系,主要是减少模块之间传送的参数个数,简化模块之间的界面
分析:“病人监护系统”——“处理因素值”的界面1)“处理因素值”接收的参数unsafeflags,除了“报告不安全因素”要用到,其另两个下层模块不必用到这一参数;且“报告不安全因素”不返回任何参数给“处理因素值”;“报告不安全因素”所需的参数在主模块“病人监护系统”中都有;所以将它改成由主模块直接调用。这样又可简化unsafeflags这一参数。3结构图的改进(续)分析:“病人监护系统”——“处理因素值”的界面2)同理,主模块可以直接调用“存入数据库”,这样,主模块“病人监护系统”与“处理因素值”的界面又可以消去Factors这一参数。3结构图的改进(续)分析:“病人监护系统”——“处理因素值”的界面3)现在,“处理因素值”的功能仅仅是调用“报告错误设备”,所以它可以合并到主模块中去。3结构图的改进(续)分析:“病人监护系统”——“处理因素值”的界面
说明——“处理因素值”模块并没有做什么实质性的工作,而只是像“管道”一样,将一些参数从主模块传送到它的几个下层模块,而这些模块完全可以由主模块直接调用。3结构图的改进(续)改进二:消除重复的功能
分析:“报告错误设备”模块1)“报告错误设备”模块应该向护理站报告故障设备的床位号而不是病人号,所以应该在这个模块中包含从病人号查出床位号的功能。而模块“读取病人信息”已经含有这个功能。所以可把它提供的BedNum参数回送给主模块,再由主模块传送给“报告错误设备”模块,但这样增加了块间联系。如果改为由“读取病人信息”直接调用“报告错误设备”,则可将传送给主模块的参数BedNum消去,可减少块间联系。3结构图的改进(续)
分析:“报告错误设备”模块2)又因为无论是硬件故障或者测得的因素值不合理,都应作为设备故障通知护理站,所以应在通知护理站之前调用“检查不合理因素值”,于是改为由“读取病人信息”直接调用“检查不合理因素值”。这样一来,也简化了“检查因素值”的界面,因为它不必再回送ErrorFlags了。3结构图的改进(续)病人监护系统检查因素值获得因素值检查不合理因素值读取病床因素值读取病人信息检查不安全因素读取安全值范围存入数据库报告错误设备报告不安全因素Pn,Factors,EOFErrorFlagsFactors,SafeRangesErrorFlagsUnsafeFlags,ErrorFlagsPn,Factors,ErrorFlagsPn,BednumEOFFactors,ErrorFlagsPn,FactorsErrorFlagsBednumPnFactorsErrorFlags2UnsafeFlagsSafeRangesPn,FactorsUnsafeFlagsBednum,ErrorFlags3结构图的改进(续)检查因素值获得因素值检查不合理因素值读取病床因素值读取病人信息检查不安全因素读取安全值范围存入数据库报告错误设备报告不安全因素Factors,SafeRangesErrorFlagsPn,BednumEOFFactors,ErrorFlagsBednumPnFactorsErrorFlags2Unsa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 养生馆会员协议书
- 课程设计搅拌器功率型号
- 广东挡土墙课程设计
- 手柄轴夹具设计课程设计
- 湖北工业大学《算法分析与设计》2022-2023学年期末试卷
- 员工管理规章制度
- 红外收发器设计课程设计
- 工会管理制度
- 湖北工程学院《数据结构》2022-2023学年期末试卷
- 钢筋混泥土课程设计渡槽
- 金华市金投集团有限公司招聘笔试题库2024
- 2025高考语文步步高大一轮复习讲义65练答案精析
- 中国中煤笔试
- DLT5196-2016 火力发电厂石灰石-石膏湿法烟气脱硫系统设计规程
- 人教版pep五上《Unit 4 What can you do》说课稿
- 人教版四年级数学上册第八单元第1课《沏茶问题》备课组说课稿
- 2024高考数学九省联考数学试题
- 4.2+在实践中追求和发展真理 课件 高中政治统编版 必修四 哲学与文化
- Chat GPT 科普知识讲解
- 山西退役军人事务厅事业单位笔试真题2024
- 气压带和风带对气候的影响 课件 2024-2025学年高中地理人教版(2019)选择性必修1
评论
0/150
提交评论