修改后的第五章习题答案.docx

上传人:b****6 文档编号:8771353 上传时间:2023-02-01 格式:DOCX 页数:24 大小:26.98KB
下载 相关 举报
修改后的第五章习题答案.docx_第1页
第1页 / 共24页
修改后的第五章习题答案.docx_第2页
第2页 / 共24页
修改后的第五章习题答案.docx_第3页
第3页 / 共24页
修改后的第五章习题答案.docx_第4页
第4页 / 共24页
修改后的第五章习题答案.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

修改后的第五章习题答案.docx

《修改后的第五章习题答案.docx》由会员分享,可在线阅读,更多相关《修改后的第五章习题答案.docx(24页珍藏版)》请在冰豆网上搜索。

修改后的第五章习题答案.docx

修改后的第五章习题答案

1.软件体系结构设计的原则有哪些?

答:

1)抽象的原则

抽象是人们认识复杂事物的基本方法。

它的实质是集中表现事物的主要特征和属性,隐藏和忽略细节部分,并用于概括普遍的、具有相同特征和属性的事物。

2)分而治之的原则

将大的问题分成几个小的问题,软件设计中的分解包括:

横向分解:

按照从底层基础到上层问题的方式,将问题分解成相互独立的层次。

每层完成局部问题并对上层提供支持。

纵向分解:

在每个层次上,将问题分解成多项,相互配合实现完整的解。

3)封装和信息隐藏原则

采用封装的方式,隐藏各部分处理的复杂性,只留出简单的、统一形式的访问方式。

这样可以减少各部分的依赖程度,增强可维护性。

4)模块化原则

模块是软件被划分成独立命名的,并可被独立访问的成分。

模块划分,粒度可大可小。

划分的依据是对应用逻辑结构的理解。

5)高内聚和低耦合

内聚性是指软件成分的内部特性。

成分中各处理元素的关联越紧密越好。

耦合性是指软件成分间关系的特性。

软件成分间的关联越松散越好。

6)关注点分离原则

软件成分被用于不同的场景时,会有对于不同场景的适应性问题。

但是,所必须适应的内容并非全部,只是一部分,即所谓的关注点。

软件设计要将关注点和非关注点分离,关注点的部分可以设定,而非关注点的部分用来复用,非关注点应选择与条件、场景独立的软件成分。

7)策略和实现的分离原则

策略指的是软件中用于处理上下文相关的决策、信息语义和解释转换、参数选择等成分。

实现指的是软件中规范且完整的执行算法。

8)接口和实现分离原则

软件设计要将接口和实现分离,这样可以保障成分的信息隐蔽性,以及提高可维护性。

2.简要描述一种常见的软件体系结构,并举例说明。

答:

C/S技术是20世纪90年代管理信息系统中较为先进的技术。

典型的C/S结构由三部分组成:

客户端组件、服务器组件和中间层组件。

客户端组件是用户前端部分,一般表示为图形用户界面;中间层组件是体系结构的连接器,一般由一些API和协议组成;服务器组件是C/S结构的核心,用于执行客户端请求。

C/S结构应用系统基本运行关系为“请求/响应”模式。

当需要服务时客户端发出“请求”,服务器接受“请求”并“响应”,然后执行相应的服务,把执行结果送回给客户端,由它进一步处理后再提交给用户。

C/S结构最鲜明的特征是共享资源,它可以分配处理任务和集中的数据给客户端和服务器,使系统可以共享从数据到处理能力的每一种资源。

C/S结构的缺点是客户端很庞大,应用程序升级和维护十分困难,对应用程序的一点小改动就必须对每台客户端更新,并且系统移植复杂,对于不同的操作系统要求有不同的客户端软件。

3.某系统需要进行身份认证,其需求描述如下:

系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。

身份认证一般与授权控制是相互联系的,授权控制是指一旦用户的身份通过认证以后,确定哪些资源该用户可以访问、可以进行何种方式的访问操作等问题。

本系统用户的合法性检查,包括基础信息检查、账户检查、账号可用性检查。

请画出MVC三层结构的数据传递示意图并作简要文字说明。

答:

 

4.与C/S风格相比较,B/S风格的体系结构有哪些的优缺点?

答:

与C/S风格相比,B/S风格的优点主要包括:

(1)操作使用简单。

用户在使用系统时,仅仅需要一个浏览器即可运行全部的模块。

(2)维护和升级方式简单。

系统安装、修改、和维护全在服务器端解决,可以在系统运行时自动升级。

(3)成本降低,选择更多。

系统开发成本降低,而且对于服务器的选择大大增多。

目前的B/S体系结构也存在许多不足之处,主要表现在:

(1)缺乏对动态页面的支持能力,也没有集成有效的数据库处理能力

(2)B/S体系结构的系统扩展能力差,安全性难以控制。

(3)系统在数据查询等响应速度上,远远低于C/S体系结构。

(4)数据动态交互性不强,不利于在线事务处理应用。

5.为什么软件设计中要应用架构样式?

答:

应用软件架构样式主要有如下几个优势:

(1)可以促进设计的复用,使得一些经过实践证实的已经被透彻理解了的解决方案能够被重新应用到新问题中并解决它们。

(2)能够带来显著的复用,使得软件架构中的不变部分可共享同一个解决方案。

(3)便于设计者之间的交流与理解,也使得系统组成让非设计者更易于理解。

(4)通过对标准样式的使用支持了系统的互操作性,以便于相关工具的集成。

(5)在限定了设计空间的情况下,能够对相关样式作出对应的体系结构分析。

(6)能够对特定的样式提供可视化支持,为体系结构设计师提供了图形和文本的描述工具来表达他们的想法。

6.现在要求你建造一个产品来确定银行结单是否正确。

需要得数据包括月初的余额,每张支票的号码、日期和数额,每笔储蓄的日期和数额及月末的余额。

用数据流分析设计这个产品,确定一个银行存款支付处理报告书是否正确。

答:

(1)编写规格说明确认一个银行结单是否正确,画数据流图。

先做如下假设:

没有服务费、ATM提款项目,仅有的交易只允许支票和储蓄,所有支票产生一个数据。

按支票号码处理。

对每张支票,在银行清单中找到一个与支票号码一致的记录(条目)。

如果没有找到,报告书报错。

根据储蓄日期整理到期的存款。

对每一个到期存款,在银行清单中找到一个与存款日期和数额一致的记录(条目)。

如果没有找到,报告书报错。

在处理所有支票和储蓄后,确认银行结单上所有的项目都已标记过。

如果没有,报告书报错。

在月初余额中加上所有储蓄金额,并从总额中扣去所有支票的金额。

如果扣除后得到的结果不等于月末余额,报告书报错,否则该银行存款支付处理报告书正确。

银行清单

支票

储蓄

核对银

行清单

支票明细

银行清单明细

储蓄明细

 

图1数据流图

(2)用数据流分析

结构设计如图2,模块化设计如图3。

(可以告诉学生这是否需要详细设计,如果不需要,必须要设计模块数)

 

核对银

行清单

输入银

行清单

月初余额

银行清单

支票

总额

银行

清单

支票

总额

Ok

储蓄

总额

银行清单

储蓄总额

Ok

核对

余额

储蓄、

支票总

额,银

行清单

Ok

输出银行报告书

Ok

支票

总额

支票

处理

输入

支票

支票

处理后的支票

银行清单

Ok

储蓄

总额

储蓄

处理

输入

储蓄

储蓄

处理后的支票

处理后的储蓄

处理后的储蓄

银行清单

Ok

 

 

图2银行存款支付处理报告书是否正确的结构图

模块名

支票总额

模块类型

函数,不返回值

返回类型

void

输入参数

银行清单:

清单类型

输出参数

银行清单:

清单类型

支票总额:

货币型

Ok:

布尔型

差错信息

文件存取

文件改变

模块调用

核对支票

参数:

银行清单:

清单类型

支票总额:

货币型

Ok:

布尔型

描述

这个模块是对核对支票的响应,返回ok(布尔型)和一系列处理过的支票,若ok返回值为真,模块接受处理过的支票并返回支票的总额。

否则,该模块不做任何处理,并返回ok的值。

图3银行存款支付处理报告书是否正确的其中一个模块的细节设计

7.考虑一个自动柜员机(ATM),用户将信用卡放入一个槽中,并输入4位数字的个人识别号(PIN)。

如果PIN不正确,将弹出该信用卡;如果PIN正确,用户可以对最多四个银行帐号进行下面的操作:

1)存钱,数额任意。

将打印出一个收据,显示日期、存入金额和账号。

2)以20美元为单位,最多提取200美元(不能超过该数额)。

除了现金,还将给用户打印出收据,显示日期、提取现金、账号、和提取后账号余额。

3)确定账户余额。

这将在屏幕上显示出来。

4)在两个账户之间传递资金。

被提取的账户中导出的金额还是不能超过最高限额。

用户得到一个收据,显示日期、传递的金额和两个账号。

5)退出。

弹出信用卡。

试用事务分析设计一个控制ATM的软件,在这个阶段省略错误处理能力。

答:

在存款时,仅当存款确认后客户账户才更新。

下图为使用事务分析ATM机的结构图。

处理事务

输入PIN

确定事务类型

确定账户

调度程序

处理退

出事务

处理存

款事务

处理传

递事务

处理余

额事务

编辑退

出事务

编译存

款事务

编辑传

递事务

编辑余

额事务

更新账户

更新账户

更新账户

写入审

查索引

写入审

查索引

写入审

查索引

 

8.选择你熟悉的编程语言,考虑本讲中给出的模块化的两个定义,确定这两个定义中的哪一个包含了你能直观理解的东西,使你能在你所选择的语言中建造一个模块。

答:

最早试图描述模块的是Stevens、Myers和Constantine,他们把模块定义为“一个或多个邻接的程序语句的集合,它有一个名称以便系统的其他部分调用它,并且最好具有自己的专用的变量名集。

Yourdon和Constantine给出了一个更广泛的定义:

“模块是一个词汇上邻接的程序语句序列,由边界元素限制范围,有一个集合标识符”。

例:

C语言中函数的调用符合了第一个定义,一个较大的程序应分为若干个程序模块,每个模块用于实现一个特定的功能,同一个函数可以被一个或多个函数任意调用多次。

在C语言中,将一个独立功能的代码段写在一个函数里作为一个模块,然后当其它函数中需要用到该功能时可直接利用调用函数,这样不仅做到功能独立,简洁易懂,还有效的避免了数据冗余。

Java中的方法和C/C++中的头文件。

9.维护时内聚的影响是什么,耦合的影响是什么?

答:

模块的设计需要遵循高内聚、低耦合heels一些启发式规则。

维护时仍需要高内聚,高内聚使得各模块功能相互独立,模块的内部交互程度高,具有较好的理解性、可维护性,维护工作量大大减少。

耦合也要求低耦合,软件结构不同的模块之间的相互关联程度尽可能弱,这样在维护的时候很容易,因为由于模块间的关联简单,发生在一处的错误传播到整个系统的可能性很小。

10.请对抽象和信息隐藏两个概念进行分析比较。

答:

(英)抽象是需要考虑实现什么而不是它如何实现的。

信息隐藏是对用户故意隐藏更多的细节。

抽象是信息隐藏的实例。

把一些相似的地方集中和概括起来,暂时忽略他们之间的差异,这就是抽象。

或者说抽象是抽出事物的本质特性而暂时不考虑他们的细节。

信息隐藏是在设计和确定模块时,要使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说是不能访问的,信息隐藏更准确的描述应是“细节隐藏”。

抽象就是抽取事物最基本的特性和行为,忽略非基本的细节。

采用分层次抽象的办法可以控制软件开发过程的复杂性,有利于软件的可理解性和开发过程的管理。

信息隐藏是与模块的独立性有关,将模块的软件设计决策封装起来的技术。

模块接口应尽量简洁,不要罗列可有可无的内部操作和对象。

按照信息隐藏的原则,系统中的模块应设计成“黑箱”,模块外部只能使用模块接口说明中给出的信息,如操作、数据类型等等。

由于对象或操作的实现细节被隐藏,软件开发人员便能够将注意力集中于更高层次的抽象上。

6.假设你是一个负责产品开发的工程师,管理者要求你研究一下确保你所在小组设计出的模块能够尽可能复用的途径,你将如何回答他?

答:

(英)保证模块内部具有高内聚和模块间的低耦合,同样信息隐藏技术对可复用性非常重要,使用面向对象编程也能促进可复用性。

抽象、信息隐藏、模块化、局部化、一致性、完整性和可验证性。

抽象就是抽取事物最基本的特性和行为,忽略非基本的细节。

采用分层次抽象的办法可以控制软件开发过程的复杂性,有利于软件的可理解性和开发过程的管理。

.信息隐藏是与模块的独立性有关,将模块的软件设计决策封装起来的技术。

模块接口应尽量简洁,不要罗列可有可无的内部操作和对象。

按照信息隐藏的原则,系统中的模块应设计成“黑箱”,模块外部只能使用模块接口说明中给出的信息,如操作、数据类型等等。

由于对象或操作的实现细节被隐藏,软件开发人员便能够将注意力集中于更高层次的抽象上。

模块是程序逻辑上相对独立的成份,它是一个独立的编程单位,应有良好的接口定义。

如,FORTRAN语言中的函数、子程序、Ada语言中的程序包、子程序、任务等。

模块化有助于信息隐藏和抽象,有助于表示复杂的软件系统。

模块的大小要适中,模块过大会导致模块内部复杂性的增加,不利于模块的调式和重用,也不利用模块的理解和修改。

模块太小会导致整个系统的表示过于复杂,不利于控制解的复杂性。

模块之间的关联程度用耦合度度量。

局部化要求在一个物理模块内集中逻辑上相互关联的计算资源。

从物理和逻辑两个方面保证系统中模块之间具有松散的耦合关系,而在模块内部有较强的内聚性。

这样有利于控制解的复杂性。

抽象和信息隐藏、模块化和局部化的原则支持软件工程的可理解性、可修改性和可靠性,有助于提高软件产品的质量和开发效率。

一致性是指整个软件系统的各个模块均应使用一致的概念、符号和术语:

程序内部接口应保持一致:

软件与硬件接口应保持一致;系统规格说明与系统行为应保持一致;用于形式化规格说明的公理系统应保持一致,等等。

一致性原则支持系统的正确性和可靠性。

实现一致性需要良好的软件设计工具、设计方法和编码风格的支持。

完整性是指软件系统不丢失任何重要成分,完全实现系统所需功能的成都;在形式化开发方法中,按照给出的公理系统,描述系统行为的充分性;当系统出于错或非预期状态时,系统行为保持正常的能力。

完整性要求人们开发必要且充分的模块。

为了保证软件系统的完整性,软件在开发和运行过程中需要软件管理工具的支持。

可验证性是指开发大型软件系统需要对系统逐步分解。

系统分解应该遵循系统容易检查、测试、评审的原则,以便保证系统的正确性。

采用形式化的开发方法或具有强类型机制的程序设计语言及其软件管理工具可以帮助人们建立一个可验证的软件系统。

10.确定以下模块的内聚类型:

1)编辑利润和税款记录

2)编辑利润记录和税款记录

3)读取交付记录并检查工资的支付

4)使用Aksen算法计算最佳成本

5)测量蒸汽压力并在必要时报警

答:

1)功能性内聚2)过程性内聚3)偶然性内聚4)功能性内聚5)过程性内聚

计算多个地点

的日平均温度

初始化变量Sum

并打开文件

创建新的

温度记录

存储温

度记录

关闭文件并

打印平均温度

读取地点、

时间和温度

计算特定地点

的日平均温度

11.分析下图所示的层次图,确定每个模块的内聚类型。

 

计算多地点日平均温度的程序

答:

从图所示的层次图可以看出,这个程序的功能是计算若干个指定地点的每日平均温度。

变量sum保存某地一天之内在指定的时间取样点的温度之和。

程序运行时首先初始化变量sum并打开文件,然后读取地点、时间和温度等原始数据,创建用于保存这些数据的温度记录,接下来计算特定地点的日平均温度,存储温度记录。

重复调用“读取地点、时间和温度”、“创建新的温度记录”、“计算特定地点的日平均温度”和“存储温度记录”等模块,直至计算出并保存好所有指定地点的日平均温度。

最后,打印平均温度并关闭文件。

从上述叙述可知,“计算多个地点的日平均温度”、“读取地点、时间和温度”、“创建新的温度记录”、“计算特定地点的日平均温度”和“存储温度记录”等5个模块,每个都完成一个单一的功能,模块内所有处理元素都为完成同一个功能服务,彼此结合得十分紧密。

因此,这5个模块的的内聚类型都是功能内聚。

初看起来,由于初始化变量sum和打开文件这两个操作都是在程序运行的初始阶段完成的,“初始化变量sum并打开文件”这个模块的内聚类型似乎是时间内聚。

但是,初始化变量sun是本程序特有的操作,而打开文件是硬件要求的操作,是任何使用文件的程序都包含的一个操作,并非本程序特有的操作。

当可以分配两个或更多个不同级别的内聚类型给一个模块时,规则是分配最低级别的内聚类型给该模块。

因此,“初始化变量sum并打开文件”这个模块的内聚类型是偶然内聚。

同理,“关闭文件并打印平均温度”这个模块的内聚类型也是偶然内聚。

编号

输入

输出

1

飞机类型

状态标志

2

飞机零件清单

3

功能代码

4

飞机零件清单

5

零件编号

零件制造商

6

零件编号

零件名称

12.分析下图,确定模块之间的耦合类型。

在图中给出模块之间的接口编了号码,下表描述了模块间的接口。

 

p

q

r

t

s

u

1

2

6

4

3

5

模块p、t

和u更新

同一个数

据库

答:

综合图和表所提供的信息可知各个模块之间的耦合情况。

如,当模块p调用模块q时(接口1),它传递了一个参数——分机类型。

当模块q把控制返给模块p时,它传回一个状态标志。

某些模块之间的耦合类型是明显的,例如,模块p和q之间(接口1)、模块r和t之间(接口5)及模块s和u之间(接口6)都是数据耦合,因为它们传递的都是一个简单变量。

如果两个模块中的一个模块给另一个模块传递控制元素,也就是说,如果一个模块明显的控制另一个模块的逻辑,则它们之间具有控制耦合。

例如,当给具有逻辑内聚的模块传递功能代码时就传递了控制元素。

另一个控制耦合的例子是把控制开关作为一个参数传递。

图中模块q调用模块r时(接口3)传递一个功能代码,因此,这两个模块之间是控制耦合。

图右侧文字说明,模块p、t和u更新同一个数据库,因此,他们之间具有公共环境耦合。

当模块p调用模块s时(接口2),如果模块s使用或更新模块p传递给它的零件清单中的所有元素,则模块p和s之间的耦合是数据耦合;但是,如果模块s只访问该清单中的一部分元素,则模块p和s之间的耦合式特征耦合。

模块q和s之间(接口4)的耦合情况与此类似。

由于图和表中给出的信息尚不足以准确的描述各个模块的功能,所以不能确定这两对模块之间的耦合是数据耦合还是特征耦合。

13.请对抽象和信息隐藏两个概念进行分析比较。

答:

(英)抽象是需要考虑实现什么而不是它如何实现的。

信息隐藏是对用户故意隐藏更多的细节。

抽象是信息隐藏的实例。

把一些相似的地方集中和概括起来,暂时忽略他们之间的差异,这就是抽象。

或者说抽象是抽出事物的本质特性而暂时不考虑他们的细节。

信息隐藏是在设计和确定模块时,要使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说是不能访问的,信息隐藏更准确的描述应是“细节隐藏”。

抽象就是抽取事物最基本的特性和行为,忽略非基本的细节。

采用分层次抽象的办法可以控制软件开发过程的复杂性,有利于软件的可理解性和开发过程的管理。

信息隐藏是与模块的独立性有关,将模块的软件设计决策封装起来的技术。

模块接口应尽量简洁,不要罗列可有可无的内部操作和对象。

按照信息隐藏的原则,系统中的模块应设计成“黑箱”,模块外部只能使用模块接口说明中给出的信息,如操作、数据类型等等。

由于对象或操作的实现细节被隐藏,软件开发人员便能够将注意力集中于更高层次的抽象上。

14.C++和Java支持抽象数据类型的实现,但却以放弃信息隐藏为代价。

请讨论这个观点。

答:

这个观点是错误的。

信息隐藏可以通过私有访问来实现。

15.假设你是一个负责产品开发的工程师,管理者要求你研究一下确保你所在小组设计出的模块能够尽可能复用的途径,你将如何回答他?

答:

(英)保证模块内部具有高内聚和模块间的低耦合,同样信息隐藏技术对可复用性非常重要,使用面向对象编程也能促进可复用性。

抽象、信息隐藏、模块化、局部化、一致性、完整性和可验证性。

抽象就是抽取事物最基本的特性和行为,忽略非基本的细节。

采用分层次抽象的办法可以控制软件开发过程的复杂性,有利于软件的可理解性和开发过程的管理。

.信息隐藏是与模块的独立性有关,将模块的软件设计决策封装起来的技术。

模块接口应尽量简洁,不要罗列可有可无的内部操作和对象。

按照信息隐藏的原则,系统中的模块应设计成“黑箱”,模块外部只能使用模块接口说明中给出的信息,如操作、数据类型等等。

由于对象或操作的实现细节被隐藏,软件开发人员便能够将注意力集中于更高层次的抽象上。

模块是程序逻辑上相对独立的成份,它是一个独立的编程单位,应有良好的接口定义。

如,FORTRAN语言中的函数、子程序、Ada语言中的程序包、子程序、任务等。

模块化有助于信息隐藏和抽象,有助于表示复杂的软件系统。

模块的大小要适中,模块过大会导致模块内部复杂性的增加,不利于模块的调式和重用,也不利用模块的理解和修改。

模块太小会导致整个系统的表示过于复杂,不利于控制解的复杂性。

模块之间的关联程度用耦合度度量。

局部化要求在一个物理模块内集中逻辑上相互关联的计算资源。

从物理和逻辑两个方面保证系统中模块之间具有松散的耦合关系,而在模块内部有较强的内聚性。

这样有利于控制解的复杂性。

抽象和信息隐藏、模块化和局部化的原则支持软件工程的可理解性、可修改性和可靠性,有助于提高软件产品的质量和开发效率。

一致性是指整个软件系统的各个模块均应使用一致的概念、符号和术语:

程序内部接口应保持一致:

软件与硬件接口应保持一致;系统规格说明与系统行为应保持一致;用于形式化规格说明的公理系统应保持一致,等等。

一致性原则支持系统的正确性和可靠性。

实现一致性需要良好的软件设计工具、设计方法和编码风格的支持。

完整性是指软件系统不丢失任何重要成分,完全实现系统所需功能的成都;在形式化开发方法中,按照给出的公理系统,描述系统行为的充分性;当系统出于错或非预期状态时,系统行为保持正常的能力。

完整性要求人们开发必要且充分的模块。

为了保证软件系统的完整性,软件在开发和运行过程中需要软件管理工具的支持。

可验证性是指开发大型软件系统需要对系统逐步分解。

系统分解应该遵循系统容易检查、测试、评审的原则,以便保证系统的正确性。

采用形式化的开发方法或具有强类型机制的程序设计语言及其软件管理工具可以帮助人们建立一个可验证的软件系统。

 

16.画出下列伪码程序的程序流程图和盒图。

START

IFPTHEN

WHILEqDO

f

ENDDO

ELSE

BLOCK

g

n

ENDBLOCK

ENDIF

STOP

 

答:

从伪码程序转变成的程序流图如图12.1所示。

由该伪码转变成的盒图如图12.2。

开始

p

g

n

F

T

q循环

WHILEq

f

q循环

停止

 

图12.1从伪码程序转变成的程序流图

P

FT

q

g

f

n

 

图12.2由伪码转变成的盒图

停止

开始

p

g

q

T

T

F

F

17.右图给出的程序流程图代表一个非结构化的程序,请问:

(1)为什么说它是非结构化?

(2)设计一个与它等价的结构化程序。

(3)在

(2)题的设计中你使用附加的标志标量flag了吗?

若没用,请再设计一个使用flag的程序;若用了,请再设计一个不用flag的程序。

答:

(1)通常所说的结构化程序是按照狭义的结构程序的定义衡量,符合定义规定的程序。

图所示的程序循环控制结构有两个出口,显然不符合狭义的结构程序的定义,,因此是非结构化的程序。

(2)使用附加的标志变量flag,至少有两种方法可以把程序改造为等价的结构化程序,图13.1所示盒图描绘了等价的结构化程序。

(3)不使用flag把该程序改造为等价的结构化程序的方法如图13.2所示。

Flag=TRUE

pANDflag

g

q

FT

Flag=FALSE

Flag=TRUE

FpT

flag=FALSEg

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1