1、软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 40及答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 阅读以下某房屋租赁服务系统的技术说明和数据流图,根据要求回答问题 1问题 4。 说明 某房屋租赁公司欲建立一个房屋租赁服务系统,统一管理房主和租赁者的信息,从而快速地提供租赁服务。该系统具有以下功能。 (1)登记房主信息:对于每名房主,系统需登记其姓名、住址和联系电话,系统还将为其分配一个唯一的身份标识 (ID)和密码,并将这些信息写入房主信息文件。 (2)登记房屋信息:所有在系统中 登记的房屋都有一个唯一的识别号 (对于新增加的房屋,系统会自动为其分配一个识别号 )
2、。除此之外,还需登记该房屋的地址、房型 (如平房、带阳台的楼房、独立式住宅等 )、最多能够容纳的房客数、租金及房屋状态 (待租赁、已出租 )。这些信息都保存在房屋信息文件中。一名房主可以在系统中登记多个待租赁的房屋。 (3)收取手续费:房主登记完房屋后,系统会生成一份费用单,房主根据费用单交纳相应的费用。 (4)登记租赁者信息:所有想通过该系统租赁房屋的租赁者,必须首先在系统中登记个人信息,租赁者信息包括姓名、现住址、电话号码、出生年月 、性别,以及系统分配的唯一身份标识 (ID)和密码。这些信息都保存在租赁者信息文件中。 (5)租赁房屋:已经登记在系统中的租赁者,可以得到一份系统提供的待租赁
3、房屋列表。一旦租赁者从中找到合适的房屋,就可以提出看房请求。系统将安排租赁者与房主见面的时间和地点,并将见面信息 (包含见面双方的基本信息 )通知租赁者和房主。对于每次看房,系统会生成一条看房记录并将其写入看房记录文件中。 (6)变更房屋状态:当租赁者与房主达成租房或退房协议后,房主向系统提交变更房屋状态的请求。系统将根据房主的请求,修改房屋信息文件。 该房 屋租赁服务系统的顶层数据流图如图 5-10所示,图 5-11是其第 0层数据流图。 1 请使用 说明 中给出的词汇,将该房屋租赁服务系统顶层数据流图 (见图 5-10)中(1) (4)空缺处的数据流补充完整。 2 请使用 说明 中给出的词
4、汇,将该房屋租赁服务系统第 0层数据流图 (见图 5-11)中的 (5) (8)空缺处的数据存储补充完整。 3 请将以下与租赁者信息相关的数据字典条目补充完整。 登录信息 =租赁者 ID+密码 注册信息 =(9) 租赁者信息 =(10) 4 该房屋租赁服务 系统第 0层数据流图 (见图 5-11)中缺失了一些数据流,请指出所缺失数据流的名称、起点和终点。 5 阅读以下某工厂人事信息管理系统数据库的设计说明,根据要求回答问题 1问题 4。 说明 某工厂有多个部门,每个部门有多位职工,每位职工属于并且仅属于一个部门,每个部门有一位负责人,每个办公室有一部电话。每位职工的月工资大致是: 800月工资
5、 4500元。 软件开发公司 A为该工厂开发的信息管理数据库的部分关系模式如下所示。 职工 (职工号,姓名,年龄,月工资,部门号,电话,办公室 ) 部门 (部门号,部门名,负责人代 码,任职时间 ) 其中 “职工 ”和 “部门 ”的关系示例分别见表 5-17和表 5-18。5 请使用 “关系模式标记规则 ”(见本题附录 ),给出上述各关系模式的主键和外键。 6 对于表 5-17和表 5-18所示的 “职工 ”和 “部门 ”关系,请指出表 5-19中第 、 和 行是否允许插入 ?请分别用 100字以内的文字简要说明理由。7 查询每个部门中月工资最高的 “职工号 ”的 SQL查询语句如下。 (1)
6、请用 30字以内文字简要说明该查询语句对查询效率的影响。 (2)对该查询语句进行修改,使它既可以完成相同功能,又可以提高查 询效率。 8 假定分别在 “职工 ”关系中的 “年龄 ”和 “月工资 ”字段上创建了索引,如下的 Select查询语句可能不会促使查询优化器使用索引,从而降低查询效率,请写出既可以完成相同功能又可以提高查询效率的 SQL语句。9 该数据库系统在设计时,采用了异构数据库技术。请给出目前 3种通用的异构数据库查询技术。 附 关系模式的标记规则如下 关系名 (属性名 1,属性名 2, ,属性名 n) 其中: 若该属性仅为主键属性时,则该属性名下画实下画线; 若该属性仅为外键属性
7、时,则该属性名 下画虚下画线; 若该属性既是主键属性,又是外键属性时,则在该属性名下画实下画线和虚下画线; 若该属性既不是主键属性,又不是外键属性时,则在该属性名下不做标记。 10 阅读以下 UML类图及其说明,根据要求回答问题 1问题 4。 说明 某客户信息管理系统中保存着两类客户的信息: 个人客户。对于这类客户,系统保存了其客户标识 (由系统生成 )和基本信息 (包括姓名、住宅电话和 E-mail)。 集团客户。集团客户可以创建和管理自己的若干名联系人。对于这类客户,系统除了保存其客户标识 (由系统生成 )之 外,也保存了其联系人的信息。联系人的信息包括姓名、住宅电话、 E-mail、办公
8、电话以及职位。 该系统除了可以保存客户信息之外,还具有以下功能: 向系统中添加客户 (addCustomer); 根据给定的客户标识在系统中查找该客户 (getCustomer); 根据给定的客户标识从系统中删除该客户(removeCustomer); 创建新的联系人 (addContact); 在系统中查找指定的联系人 (getContact); 从系统中删除指定的联系人 (removeContact)。 该系统采用面向对象方 法进行开发。在面向对象分析阶段,根据上述描述,得到如表 5-20所示的类。描述该客户信息管理系统的 UML类图如图 5-12所示。10 根据上述描述,图 5-12中类
9、 Customer的属性是 (1);类 Person的属性是 (2)。 (1) A客户标识 B姓名、住宅电话、 E-mail C客户标识、办公电话、职位 D姓名、住宅电户、办公电话、 E-mail、职位 (2) A客户标识 B姓名、住宅电话、 E-mail C客户标识、办公电话、职位 D姓名、住 宅电户、办公电话、 E-mail、职位 11 识别关联的多重度是面向对象建模过程中的一个重要步骤。根据说明中给出的描述,请将图 5-12中 (3) (8)空缺处的内容填写完整。 12 根据说明中的叙述,抽象出如表 5-21所示的方法。请指出图 5-12中,类 CustomerInformationSy
10、stem应具有的方法: (9);类InstitutionalCustomer应具有的方法: (10)。 13 关联 (Association)和聚集 (Aggregation)是 UML中两种非常重要的关系。请用 150字以内的文字简要说明关联和聚集的关系,并说明其不同之处。 14 阅读以下标准书号校验码的技术说明和程序流程图,根据要求回答问题 1至问题 3。 说明 为实现图书的国际统一编码,便于实现计算机化的图书管理,每本正式出版的图书都印有国际标准书号。标准书号由 “ISBN”、 10个数字 (0 9)组成,其格式如下。 ISBN 组号 -出版者号 -书名号 -校验码 其中,校验码是根据前
11、面 9个数字计算得到的,用于计算机自动校验。假设标准书号的 10个数字依次是 a(1),a(2), , a(10),则校验码 a(10)的设置应使 S=10*a(1)+9*a(2)+8*a(3)+1*a (10)能被 11整除。如果校验码 a(10)应设置成 10,则规定以 “X”表示之。 例如,软件设计师考试考前冲刺预测卷及考点解析的标准书号为: ISBN7-121-05027-5。第1段上的数字 “7”是国际 ISBN中心分配给中国 ISBN中心管理的组号;第 2段上的“121”表示电子工业出版社。标准书号的校验过程如图 5-13所示,计算校验码的过程如图 5-14所示。其中, Mod(S
12、, 11)表示 S除以 11得到的余数。14 请根据标准书号校验码的技术说明, 将图 5-13和图 5-14程序流程图中 (1) (4)空缺处的内容填补完整。 15 图 5-13(或图 5-14)中 Mod(S, 11)表示 S除以 11得到的余数。以下 C程序 实现不使用求余计算符号 “%”,求取被除数 p和除数 q之间的余数。 C程序 16 假设应试捷径 典型考题解析与考点贯通 _系统分析师考试书籍标准书号前 9个数字为 7-121-04715,请写出其对应的校验码。 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的
13、1道题解答有 效。 17 阅读以下算法说明和 C程序,根据要求回答问题 1至问题 2。 说明 算法 4-1的功能是:用来检查文本文件中的圆括号是否匹配。若文件中存在圆括号没有对应的左括号或者右括号,则给出相应的提示信息,如图 4-18所示。 在 算法 4-1中, stack为一整数栈。算法中各函数的说明如表 4-16所示。 算法 4-1 将栈 stack置空,置 EOF为false 为了识别更多种类的括号,对 算法 4-1加以改进后得到 算法 4-2。 算法 4-2能够识别圆括号、方括号和花括号 (不同类型的括号不能互相匹配 )。改进后,函数 kind(charch)的参数及其对应的返回值如表
14、 4-17所示。算法 4-2 问题 1 请将 算法 4-1和 算法 4-2中, (1) (7)空缺处的内容补充完整。 问题 2 请从以下选项中选择相应的判断逻辑填补 算法 4-2中的 “判断条件 1”至 “判断条件 3”。注意,若 “判断条件 2”的逻辑判断结果为假,就无需对 “判断条件 3”进行判断。 判断条件 1: (8) 判断条件 2: (9) 判断条件 3: (10) 供选择的答案 A栈顶元素表示的是与当前字符匹配的左括号 B栈顶元素表示的是与 当前字符匹配的右括号 C字符是左括号 D字符是右括号 E栈不空 F栈空 G字符是括号 18 请阅读以下技术说明、类图及 C+代码,根据要求将
15、(1) (5)空缺处的内容填写完整。 说明 已知对某载客车辆 (Car)进行类建模,如图 4-19所示。其中,类Engine表示发动机引擎,类 Wheel表示车轮,类 Body表示车身,类 Driver表示司机,类 Passenger表示乘客。 C+代码 car.run(); 19 请阅读以下技术说明、类图及 Java代码,根据要求将 (1) (5)空 缺处的内容填写完整。 说明 已知对某载客车辆 (Car)进行类建模,如图 4-20所示,其中类 Engine表示发动机引擎,类 Wheel表示车轮,类 Body表示车身,类 Driver表示司机,类Passenger表示乘客。软件水平考试(中级
16、)软件设计师下午(应用技术)试题模拟试卷 40答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【正确答案】 这是一道要求读者掌握分层 DFD父图与子图平衡原则和输入榆出平衡原则的综合分析题。本题的解答思路如下。 仔细阅读题干给出的 说明 信息,并注 意到关键信息 “收取手续费:房主登记完房屋后,系统会生成一份费用单,房主根据费用单交纳相应的费用 ”可知,在图 5-10中处理 “房屋租赁服务系统 ”应有一个 “费用单 ”数据流输出至外部实体 “房主 ”。这一点也体现在图 5-11中,即处理 “2登记房屋信息 ”有一条 “费用单 ”数据流输出至外部实体 “房主 ”,因此图 5-10中
17、 (1)空缺处的输出数据流是 “费用单 ”。 由题干给出的关键信息 “租赁房屋:已经登记在系统中的租赁者,可以得到一份系统提供的待租赁房屋列表 ” ,给合图 5-11中处理 “4查询待租赁房屋信息 ”有一条 “待租赁房 屋列表 ”数据流输出至外部实体 “租赁者 ”可知,在图 5-10中 (2)空缺处的输出数据流是 “待租赁房屋列表 ”。 由题干给出的关键信息 “租赁房屋:已经登记在系统中的租赁者 租赁者从中 (即待租赁房屋列表 )找到合适的房屋,就可以提出看房请求。系统会 ” 可知,在图 5-10中应有一条 “看房请求 ”数据流从外部实体 “租赁者 ”输入到处理 “房屋租赁服务系统 ”。因此图
18、 5-10中 (3)空缺处的输入数据流是 “看房请求 ”。 由题干给出的关键信息 “变更房屋状态:当租赁者与房主达成租房或退房协议后,房主向系统提交变更房屋状 态的请求。系统将 ” 可知,在图 5-10中应有一条 “变更房屋状态请求 ”数据流从外部实体 “房主 ”输入到处理 “房屋租赁服务系统 ”。因此图 5-10中 (4)空缺处的输入数据流是 “变更房屋状态请求 ”。 2 【正确答案】 这是一道要求读者掌握分层 DFD局部数据存储隐蔽性原则的综合分析题。本题的解答思路如下。 由于在图 5-11中 (5)空缺处的数据存储与处理 “1 登记房主信息 ”相关联,因此应重点阅读题干说明中 “登记房主
19、信息 ”相关的信息。由题干给出的关键信息 “登记房主信息:对于每名房主 并将这些信息写入房主信 息文件 ”可知,在图 5-11中处理 “1 登记房主信息 ”应有一条 “房主信息 ”数据流输出到数据存储 “房主信息文件 ”,即图 5-11中 (5)空缺处的数据存储是 “房主信息文件 ”。 由题干给出的关键信息 “登记房屋信息:所有在系统中登记的房屋 这些信息都保存在房屋信息文件中 ” 可知,在图 5-11中处理 “2 登记房屋信息 ”应有一条 “房屋信息 ”数据流输出到数据存储 “房屋信息文件 ”,因此图 5-11中 (7)空缺处的数据存储是 “房屋信息文件 ”。 另外,在图 5-11中 (7)
20、空缺处的数据存储也与处理 “6 变更房屋 状态 ”相关联。由题干给出的关键信息 “变更房屋状态:当租赁者与房主达成 系统将根据房主的请求,修改房屋信息文件 ”可知,在图 5-11中处理 “6 变更房屋状态 ”应有一条 “房屋变更信息 ”数据流输出给数据存储 “房屋信息文件 ”。 由题干给出的关键信息 “登记租赁者信息:所有想通过该系统租赁房屋的租赁者 这些信息都保存在租赁者信息文件中。 ”可知,处理 “3 登记租赁者信息 ”应有一个 “租赁者信息 ”数据流输出到数据存储 “租赁者信息文件 ”,因此图 5-11中 (6)空缺处的数据存储是 “租赁者信息文件 ”。 由题干 给出的关键信息 “租赁房
21、屋:已经登记在系统中的租赁者 对于每次看房,系统会生成一条看房记录并将其写入看房记录文件中 ”可知,处理 “5 安排租赁者看房 ”应有一条 “看房记录 ”数据流输出到数据存储 “看房记录文件 ”,因此图 5-11中 (8)空缺处的数据存储是 “看房记录文件 ”。 3 【正确答案】 由题干给出的关键信息 “登记租赁者信息:所有想 租赁者信息包括姓名、现住址、电话号码、出生年月、性别,以及系统分配的唯一身份标识(ID)和密码 ”,结合试题中已给出的信息 “登录信息:租赁者 ID+密码 ”可知,该系统将 “租赁者信 息 ”划分为 “登录信息 ”和 “注册信息 ”两部分,所以租赁者信息中除去登录信息就
22、是注册信息,将其表达成数据字典条目形式如下。 注册信息 =姓名 +现住址 +电话号码 +出生年月 +性别 租赁者信息 =登录信息 +注册信息 4 【正确答案】 这也是一道要求读者掌握分层 DFD父图与子图平衡原则和输入 /输出平衡原则的综合分析题。本题的解答思路如下。 结合 问题 1的分析结果可知,在图 5-10中与外部实体 “租赁者 ”相关的输入 /输出数据共有 5条 (即租赁者信息、待租赁房屋列表、看房请求、看房通知和查询房屋请求 ),而 在图 5-11中与外部实体 “租赁者 ”相关的输入 /输出数据仅画出了 3条(即待租赁房屋列表、看房通知和查询房屋请求 ),缺少了 “租赁者信息 ”和
23、“看房请求 ”这两条数据流。 由题干给出的关键信息 “登记租赁者信息:所有想通过该系统租赁房屋的租赁者,必须首先在系统中登记个人信息 这些信息都保存在租赁者信息文件中 ”可知,在图 5-11中应有一条 “租赁者信息 ”数据流从外部实体 “租赁者 ”输入到处理 “3 登记租赁者信息 ”,然后再将租赁者的相关信息保存到数据存储 “租赁者信息文件 ”中。 由题干给出的关键信息 “租赁房屋 :已经登记 一旦租赁者从中找到合适的房屋,就可以提出看房请求。系统会安排租赁者与房主见面的时间和地点,并将见面信息 (包含见面双方的基本信息 )通知租赁者和房主。对于每次看房,系统会生成一条看房记录并将其写入看房记
24、录文件中 ”可知,在图 5-11中应有一条 “看房请求 ”数据流从外部实体 “租赁者 ”输入到处理 “5 安排租赁者看房 ”,然后再将看房记录保存到数据存储 “看房记录文件 ”中。 同时注意到 “将见面信息 (包含见面双方的基本信息 )通知租赁者和房主 ”这一关键信息,见面双方的基本信息也被包含在 “见面信息 ”中,安排见 面时需要查询租赁者信息文件和房主信息文件以获得双方的基本信息,并将见面信息通知双方,因此在图 5-11中应有一条 “查询租赁者信息 ”数据流从处理 “5 安排租赁者看房 ”输出到数据存储 “租赁者信息文件 ”;在图 5-11中还应有一条 “查询房主信息 ”数据流从处理“5
25、安排租赁者看房 ”输出到数据存储 “房主信息文件 ”。 同理,在图 5-10中与外部实体 “房主 ”相关的输入 /输出数据共有 6条,而在图5-11中与外部实体 “房主 ”相关的输入 /输出数据仅画出了 5条,即缺少了数据流 “变更房屋状态请求 ”。 由题干给出的关 键信息 “变更房屋状态:当租赁者与房主达成租房或退房协议后,房主向系统提交变更房屋状态的请求。系统将根据房主的请求,修改房屋信息文件 ”可知,在图 5-11中应有一条 “变更房屋状态请求 ”数据流从外部实体 “房主 ”输入到处理 “6 变更房屋状态 ”。 5 【正确答案】 这是一道要求考生根据题目给定的关系模式,以及属性间的函数依
26、赖关系和给定的关系实例来确定各关系模式主键和外键的综合分析题。本试题的解答思路如下。 (1)由试题中给出的关键信息 “某工厂有多个部门,每个部门有多位职工,每位职工属于并且仅属于一个部门,每个部门 有一位负责人, 每位职工的月工资大致是: 800月工资 4500元 ”,可以整理出如表 5-24所示的关系模式主要属性、含义及约束。(2)设 K为 R(U,F)中的属性的组合,若 ,且对于 K的任何一个真子集 K,都有 K不能决定 U,则 K为 R的候选码 (候选关键字 )。若有多个候选码,则选一个作为主码 (主键 )。 (3)部门关系模式的主键和外键。由题目中给出的关键信息 “某工厂有多个部门,
27、每个部门有一位负责人 ”,并且结合试题所给出的 “部门 ”关系示例 (见表 5-18)可知,仅用 “部门号 ”作为主键,可以唯一区分部门关系中 的每一个元组。同时考虑到部门负责人应该来自职员,所以 “负责人代码 ”应为部门关系模式的外键。最后可得部门关系模式的主键和外键如下: 部门 (部门号,部门名,任职时间 ) (4)职工关系模式的主键和外键。由题干中给出的关键信息“每位职工属于并且仅属于一个部门 ”可知,仅用 “职工号 ”作为主键,可以唯一区分职工关系中的每一个元组。同时考虑到 “部门号 ”是部门关系模式的主键,所以它应是职工关系模式的外键。最后可得职工关系模式的主键和外键如下: 职工 (
28、职工号,姓名,年龄,月工资, ,电话,办公室 )。 6 【正确答案】 这是一道要求考生掌握完整性定义的约束性的综合分析题。本试题的解答思路如下。 (1)用 SQL定义关系模式的一个非常重要的问题是完整性控制。完整性控制应具有 定义功能、 检测功能和 处理功能等 3方面的功能。一旦发现违背了完整性约束条件,则应采取相关的动作来保证数据的完整性。数据库中最重要的约束是声明一个或一组属性形成关系的键。键的约束在 SQL的 CREATE TABLE命令中声明。在关系系统中,最重要的完整性约束条件是:实体完整性和参照完整性。 (2)实体完整性定义。在关系中只能有一个主键。声明 主键有以下两种方法: 将
29、PRIMARY KEY保留字加在属性类型之后; 在属性列表中引入一个新元素,该元素包含保留字 PRIMARY KEY和用圆括号括起的,形成该键的属性或属性组列表。 (3)参照完整性定义。定义格式如下: 参照完整性是通过使用保留字“FOREIGN KEY”定义哪些列为外码; REFERENCES用于指明外键对应于哪个表的主键; ON DELETE CASCADE指明删除被参照关系的元组时,同时删除参照关系中的元组; SET NULL表示置为空值方式。 (4)由于在职工表的定义中,职工号主码是 唯一标识每个元组 (记录 )的,而在表 5-19第 行中的职工号是 “1001”,在题目给出的表 5-1
30、7“职工 ”关系示例表中已经存在该职主号的记录,为了保证实体的完整性,该条记录不能插入。 (5)表 5-19第 行的元组可以插入到表 5-17“职工 ”关系表中,尽管部门号、电话和办公室为空,但是它表示该雇员暂时没有分配到某个部门。虽然职工表中部门号是外键,但在定义中也没有约束它不能为空。 (6)表 5-19第 行的元组不能插入到表 5-17“职工 ”关系表中,部门号是外键,而在部门关系中找不到部门号为 “6”的元组,违反了参照完 整性,所以不能做插入操作。 7 【正确答案】 这是一道要求考生分析查询效率的综合分析题。通常在涉及相关查询的某些情形中,构造临时关系可以提高查询效率。 (1)试题中
31、所给出的 SQL查询语句,对于外层的职工关系 E中的每一个元组,都要对内层的整个职工关系 M进行检索,因此查询效率不高。 (2)对该查询语句进行修改,使它既可以完成相同功能,又可以提高查询效率。 解答思路 : 改正后的 SQL语句使用了临时表。 解答思路 :8 【正确答案】 本试题所给出的原 Select查询语句中使用了条件 or,系统在查询的时候 将对全表进行扫描,不会促使查询优化器使用索引,从而降低了查询效率。 既可以完成相同功能又可以提高查询效率的 SQL语句修改如下。9 【正确答案】 这是一道要求考生掌握异构数据库的基本概念题。本题所涉及的知识点如下。 异构数据库系统是相关的多个数据库
32、系统的集合,可以实现数据的共享和透明访问,每个数据库系统在加入异构数据库系统之前本身就已经存在,拥有各自的DMBS。 异构数据库的各个组成部分具有自身的自治性,实现数据共享的同时,每个数据库系统仍保有各自的应用特性、完整性控制和安全性控制。目前通 用的异构数据库查询技术包括公共数据库网关技术、公共协议技术和公共编程接口技术。 10 【正确答案】 由试题关键信息 “ 对于这类客户 (个人客户 ),系统保存了其客户标识 对于这类客户 (集团客户 ),系统保存了其客户标识 ” 可知, “客户标识 ”是个人客户和集团客户的共同属性,因此该标识也必然是类 “客户 ”的一个属性。据此可先排除 (1)空缺处
33、的选项 B和选项 D。而选项 C的 “办公电话、职位 ”是类 InstitutionalCustomer(集团客户 )的属性,如果它们也是类 “客户 ”的属性,那么类 IndividualCustomer(个人客户 )也必然继承这两个属性,而试题中对于类 “个人客户 ”无此相关描述,可见选项 C不是正确答案。因此依据试题的描述,类 Customer(客户 )的属性只有 “客户标识 ”。因此 (1)空缺处的正确答案是选项 A。 在 UML类图中, “ ”表示其相连的两个类之间存在泛化关系,即在图 5-12中类 Person(人 )是类 Contact(联系人 )的基类; “ ”表示其相连的两个类
34、之间存在关联关系,即在图 5-12中类 Person与 IndividualCustomer(个人客户 )之间具有关联关系。由试题关键信息 “对于这类 客户 (个人客户 ),系统保存了其客户标识和基本信息 (包括姓名、住宅电话和 E-mail)”,以及对 (1)空缺处解析中类 “个人客户 ”继承了类 “客户 ”的“客户标识 ”属性,可见类 “个人客户 ”还有 “姓名、住宅电话和 E-mail”属性没有体现,在图 5-12中这些属性应该从类 Person(人 )中进行关联。 从试题关键信息 “联系人的信息包括姓名、住宅电话、 E-mail、办公电话和职位 ”可知,类 Contact (联系人 )
35、除了从类 “人 ”中继承了 “姓名、住宅电话和 E-mail”属性之外,还追加了 “办公电话、职位 ”属性。这一点分析也 证明了类 Person(人 )具有 “姓名、住宅电话和 E-mail”的属性。因此 (2)空缺处的正确答案是选项 B。 11 【正确答案】 关联表示了对象间的结构关系,它暗示两个类在概念上位于相同的级别。在 UML类图中,符号 “ ”表示其相连的两个类之间存在关联关系。 识别关联的多重度是面向对象建模过程中的一个重要步骤。即说明一个关联的实例中有多少个相互连接的对象是很重要的。其中,这个 “多少 ”被称为关联角色的多重度,把它写成一个表示取值范围的表达式或写成一个具体值。
36、指定关联一端的多重度,就是说明在关联另一端的类的每个 对象要求在本端的类必须有多少个对象。由题干给出的关键信息 “集团客户可以创建和管理自己的若干名联系人 ”可知,类InstitutionalCustomer (集团客户 )和类 Contact(联系人 )之间存在着一对多 (1:m)的联系。根据图 5-12类图中给出的关联导航, (7)空缺处应填入 “1”, (8)空缺处应填入“1*” 。 客户管理系统中必然包含若干个需要管理的客户信息,即类CustomerInformationSystem(客户信息管理系统 )与类 Customer(客户 )之间存在着一对多 (1:m)的联系。根据图 5-1
37、2类图中给出的关联导航, (3)空缺处应填入 “1”, (4)空缺处应填入 “0*” 。 根据 问题 1的解析可知,类 Person(人 )的属性有姓名、住宅电话和 E-mail,类 Customer(客户 )的属性是 “客户标识 ”。类IndividualCustomer(个人客户 )从类 Customer只能继承到属性 “客户标识 ”,其他的属性都要依靠与类 Person之间的关联关系来获取,即类 Person(人 )、类IndividualCustomer(个人客户 )端的关联多重度均为 “1”。因此 (5)空缺处应填入 “1”,(6)空 缺处应填入 “1”。 12 【正确答案】 类 C
38、ustomerInformationSystem(客户信息管理系统 )的作用是向用户提供与客户管理相关的操作接口,所以 addCustomer、 getCustomer和removeCustomer是类 CustomerInformationSystem(客户信息管理系统 )的方法。 由于联系人是由集团客户创建和管理的,按照面向对象的理念,与联系人相关的直接操作应由类 InstitutionalCustomer(集团客户 )来提供。因此 addContact、getContact和 removeContact是类 InstitutionalCustomer(集团客户 )的方法。 13 【正确答
39、案】 在 UML规范中,构成关系可以使用关联和聚集来表示。关联(Association)关系用于描述两个概念上位于相同级别的类的实例之间存在的某种语义上的联系。例如,售票员小张为某个长途汽车站工作, 1个汽车站有多辆长途汽车,那么售票员小张与长途汽车站、汽车站与汽车就存在着关联关系。 聚集 (Aggregation)关系是关联关系的一种特例 (即聚集是关联的一种 ),它代表两个类之间的 整体和局部关系。例如,一台电脑与键盘、鼠标、显示器之间就存在着聚集关系。 聚集暗示着整体在概念上处于比局部更高的一个级别,在实例图中不存在回路,即只能是一种单向关系;而关联暗示两个类在概念上位于相同的级别。换言
40、之,聚集表示部分与整体关系的关联。若从生命周期的角度考虑,则关联对象的生命周期一般无必然关系,聚集的整体对象往往对部分对象的生命周期负责。 另外,聚集和组装也是 UML中两种非常重要的关系,它们都表示实例之间的整体 /部分关系。组装 (Composition)关系是聚集关系的一种特殊形式,它暗 示 “局部 ”在 “整体 ”内部的生存期职责。例如,某电子商务公司与其销售部、财务部之间就存在着组装关系。 聚集是概念性的,只是区分整体与部分。组装具有很强的归属关系,而且整体与部分的对象生存周期是一致的。 14 【正确答案】 制订标准书号的目的是实现图书的国际统一编码,以便于实现计算机化的图书管理,使
41、出版社内的图书管理、书库中的图书管理以及书店的图书销售管理具有更高的工作效率和管理水平。标准书号由 “ISBN”、 10个数字 (0 9)组成,采用 “ISBN 组号 -出版者号 -书名号 -校验码 ”的格式。其中,出版者号 规定为 2-7位数字。对较大的出版社分配比较短的码,留出较长的书名号为较多的书进行编码。 标准书号的最后一位是校验码。设置校验码可以大大减少录入错误造成的管理混乱。校验码一般由计算机程序产生。当操作人员录入前 9个数字后,计算机就会自动启动计算校验码的过程,输出正确的校验码。在书店 (或书库 ),不论是建库还是查询检索,在手工输入带校验码的标准书号后,计算机就会自动启动校
42、验过程,判断是否输入错误。 在图 5-14计算校验码的过程中,首先要计算部分 S值,即 S=10*a(1)+9*a(2)+8*a(3)+2*a (9 )。此时需要使用循环处理。在循环开始之前,应设置初始值 S=0。在循环体内,应执行语句 “S+=(11-I) *a(I)”或“S+=(1+I)*a(10-I)”(注意,其中的乘号 “*”不要丢失 )。该循环应对循环变量 I=1 9进行 (步长默认为 1)控制,因此, (2)空缺处应填入 “9”, (3)空缺处所填写的内容是“S+(11-I)*aI- S”或 “S+(1+I)*a(10-I)- S”。 接着再计算该 S值除以 11的余数R。显然 。
43、由于 “校验码 a(10)的设置应使 S=10*a(1) +9*a(2)+8*a(3)+ +1*a(10)能被 11整除 ”,即余数 R与校验码之和应能被 11整除,因此校验码应等于 MOD(11-R, 11),即 (4)空缺处所填写的内容是 “MOD(11-R, 11)”。若读者该空缺处填入 “MOD (11-R)”,则是没有考虑 R=0这一情况。当校验码等于 10时,还应以符号 X表示之。 在对标准书号的校验过程 (图 5-13)中,首先要将校验码为 X的情况转换成数据 10,以便于后续计算。为了计算S=10*a(1)+9*a(2)+8*a(3)+1*a(10) ,需要使用循环处理。在循环
44、开始之前,应 0设置初始值 S=0,对循环变量 I从 1到 10(步长默认为 1)。在循环体内,应执行语句 “S+=(11-I)*a(I)”或 “S+=I*a(11-I)”。因此 (1)空缺处所填写的内容是 “(11-I)*a(I)”或“I*a(11-I)”。 在图 5-13中,计算出 S值之后,还应判断 S除以 11的余数是否为0。若余数为 0,说明 S能够被 11整除,表示校验结果正确;若余数非 0,则说明输入的标准书号有错 (可能是校验码输入有错,也可能是前面的数字输入有错 )。此时计算机应输出相应的错误提示信息,提醒信息录入人员仔细校对改正。 15 【正确答案】 不 使用求余计算符号
45、“%”,求取被除数 p和除数 q之间的余数的C程序如下。 C程序 1 16 【正确答案】 由题干说明可知,校验码可以是某个 “0” “9”的数字或者是符号“X”。软件设计师考试考前冲刺预测卷及考点解析的标准书号为: ISBN7-121-05027-5。该标准书号的校验过程如下。 余数为0,说明输入的标准书号正确。 结合 问题 1要点解析思路,若应试捷径 典型考题解析与考点贯通 _系统分析师考试书籍标准书号前 9个数字为 7-121-04715,则其对应的校验码 a(10)计算过程如下: S1=10a(1)+9a(2)+8a(3)+7a(4)+6a(5)+5a(6)+4a(7)+3a(8)+2a
46、(9) =107+91+82+71+60+54+47+31+25=163 由于 ,因此R=Mod(163,11)=9 a(10)=Mod(11-R,11)=Mod(2,11)=2 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 17 【正确答案】 这是一道要求读者用创建 Thread类的子类的方法实现多线程的编程题。本题的解答思路如下。 通常把限定只能在一端进行插入和删除操作的线性表称为栈,所以栈又称为运算受限的线性表。把可以进行插入和删除操作的一端称为栈顶 (习惯用 top指针指示 ),而另一端称之为
47、栈底。当栈中不包含任何数据元素时,这个栈就为空栈。 由于栈具有 “后进先出 ”的运算特点,因此在程序设计中应用十分广泛。例如,进制转换、括号匹配的检验、表达式求值以及迷宫求解等。 算法 4-1的功能是检查文本文件中的圆括号是否匹配。若文件中存在圆括号没有对应的左括号或者右括 号,则给出图 4-18所示的提示信息。从图 4-18所给出的信息可知,程序不但要求检查出是否有括号匹配错误,而且还需给出具体错在哪个括号。通常,括号匹配的规则是把最近的左右括号配成一对,所以括号匹配最常用的方法是遇到左括号则入栈,遇到右括号就出栈。这样,出栈的左括号与当前的右括号是匹配的。 算法 4-1分析: 栈置空,置
48、EOF为 FALSE,并从文件中读取第一个字符到 ch,然后进入循环。循环体执行一次处理一个 ch。进入循环,利用 kind函数算出 ch的类型 k。 虽然 算法 4-1中有 (1) (4)空缺处,但其基本结构却很明显,大致流程如下。 当 k等于什么的时候把什么入栈; 当 k等于什么的时候且栈不为空的时候,进行出栈操作。如果栈为空,则打印错误信息;如果都不是,则读文件的下一个字符再次进入循环。 根据以上所提及的算法可知,入栈操作应该发生在类型 k为 1(即 ch为左括号 )时,而出栈操作应该发生在类型 k为 2(即 ch 为右括号 )时。因此 (1)空缺处所填写的内容是 “1”, (4)空缺处所填写的内容是 “2”。 由于在 (4)空缺处之后的出栈操作中,并没有用到栈的内容。因此可能有些读者理所 当然地认为栈中的内容没有什么用,可以在 (2)、 (3)空缺处随便压个 ch,即两个空缺处所填写 “ch”。但换个角度思考,从逻辑上就可以推翻这种解答。如果 (2)、 (3)空缺处压的是同样的数据,又是在同一位置出栈,算法大可只用一个 PUSH、 POP就可以了。 由语句 “row -pop(); col -pop(); ”可知, (2)、 (3)空缺处应该把 row和 col压入堆栈。由于是先弹出 row后弹出 col,且根据栈的 “后进先出 ”操作规则