1、中级软件设计师下午试题-85 及答案解析(总分:117.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)说明C 市刚开通了地铁线,为方便乘客,计划开发自动售票系统。该公司在每一个地铁站放置了多台自动售票机,每一台售票机有一唯一编号,售票记录统一汇总主机。自动售票机只发售从该站起始的各种地铁票,因此乘客只需输入目的站,起始站默认为该站,售票机给出从该站到达目的站的单程票。打印地铁票时为其编一个唯一的流水号,并同时打印自动售票机的编号及票价。售票机的状态变化如下:“空闲”时,显示地铁线路图,等待乘客输入目的站;当乘客输入目的站后,转入“目的站确认/票数输入”状态,同时给出票价
2、,此时若目的站有误,可返回到空闲状态重新输入,否则,输入票数;乘客输入票数后,转入“票数确认/付款”状态,同样此时若票数有误,可返回到上一状态重新输入,否则,投入钱币付款;当付款金额足够时,“出票/找零”(有必要时进行找零);然后转入“空闲”等待输入目的站状态。该系统采用面向对象方法开发,系统中的类以及类之间的关系用 UML 类图表示,图 1-1 是该系统类图的一部分,图 1-2 描述了自动售票机的状态转换图。(分数:15.00)(1).根据题意,给出“自动售票机”类的主要属性。(分数:5.00)_(2).根据题意,给出“地铁票”类的主要属性。(分数:5.00)_(3).根据题中所述术语,指出
3、图 1-2 中状态 1 到状态 4 分别是什么?(分数:5.00)_二、试题二(总题数:1,分数:15.00)说明图书管理系统详细记录图书库存情况、读者信息以及读者借阅记录(包括借书日期和还书日期)。新书入库时要为该书编制图书卡片,包括分类目录号、图书流水号(要保证每本书都有唯一的流水号,即使同类图书也是如此)、书名、作者、内容摘要、价格和购书目期。同一个书名由于版次、作者等不同有可能存在多“种”图书,其间用“分类目录号”区分。系统为每一位合法读者编制一个唯一的借书证号,读者需要提供姓名、单位。一个读者最多可以同时借阅 5 本图书。借阅图书时,新添借阅记录,并将对应的“归还标记”字段置为“fa
4、lse”,表示“尚未归还”;归还图书时,将相应的“归还标记”字段置为“true”,表示“已经归还”。一本书可能供多位读者借阅,同一本书读者可以重复借阅。图 2-1 为该系统的 E-R 图。图 2-1(分数:15.00)(1).实体间的联系有“一对一”、“一对多”和“多对多”,指出“借阅”联系属于哪一种?“借阅”关系模式的外键是什么?有主键吗?为什么?(分数:5.00)_(2).由于同一个分类目录号(同一种图书)有多个副本,若用表 Book(图书流水号,分类目录号,书名,作者,内容摘要,价格,购书日期)存储图书信息则有很多的冗余信息,该如何分解使之满足 BCNF,并指出分解后的关系模式的主键。(
5、分数:5.00)_(3).若用表 Reader 存储读者信息,Book 表存储图书信息,Borrow 表存储借阅情况。以下 SQL 语句是“查询证号为 12345 的读者当前所借阅的图书书名(即尚未归还的图书)”,请补充完整。SELECT 书名 FROM Book WHERE 流水号 (1) (SELECT 流水号 FROM (2) WHERE 证号=“12345“ AND (3) 以下 SQL 语句是“查询书名包含软件设计师的图书情况”,请补充完整。SELECT * FROM Book WHERE 书名 (4) “%软件设计师%/(分数:5.00)_三、试题三(总题数:1,分数:15.00)
6、1. 根据判定覆盖、条件覆盖、判定/条件覆盖、多重条件覆盖(条件组合覆盖)、路径覆盖 5 种覆盖标准,从供选择的答案中分别找出满足相应覆盖标准的最小的测试数据组(用回答)。供选择的答案:(分数:15.00)_四、试题四(总题数:1,分数:27.00)说明当一元多项式 中有许多系数为零时,可用一个单链表来存储,每个节点存储一个非零项的指数和对应系数。为了便于进行运算,用带头节点的单链表存储,头节点中存储多项式中的非零项数,且各节点按指数递减顺序存储。例如:多项式 8x5-2x2+7 的存储结构为:(分数:27.00)_五、试题五(总题数:1,分数:15.00)说明对多个元素的聚合进行遍历访问时,
7、需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(Book)放到书架(BookShelf)上并依次输出书名。这样就要涉及到遍历整个书架的过程。使用迭代器 Iterator 实现。图 5-1 显示了各个类间的关系。以下是 C+语言实现,能够正确编译通过。图 5-1(分数:15.00)_六、试题六(总题数:1,分数:15.00)说明对多个元素的聚合进行遍历访问时,需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(Book)放
8、到书架(BookShelf)上并依次输出书名。这样就要涉及到遍历整个书架的过程。使用迭代器 Iterator 实现。图 6-1 显示了各个类间的关系。以下是 JAVA 语言实现,能够正确编译通过。图 6-1(分数:15.00)_七、试题七(总题数:1,分数:15.00)说明对多个元素的聚合进行遍历访问时,需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(Book)放到书架(BookShelf)上并依次输出书名。这样就要涉及到遍历整个书架的过程。使用迭代器 Iterator 实现。图 7-1 显示了各个类间的
9、关系。以下是 JAVA 语言实现,能够正确编译通过。图 7-1(分数:15.00)_中级软件设计师下午试题-85 答案解析(总分:117.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)说明C 市刚开通了地铁线,为方便乘客,计划开发自动售票系统。该公司在每一个地铁站放置了多台自动售票机,每一台售票机有一唯一编号,售票记录统一汇总主机。自动售票机只发售从该站起始的各种地铁票,因此乘客只需输入目的站,起始站默认为该站,售票机给出从该站到达目的站的单程票。打印地铁票时为其编一个唯一的流水号,并同时打印自动售票机的编号及票价。售票机的状态变化如下:“空闲”时,显示地铁线路图,等待
10、乘客输入目的站;当乘客输入目的站后,转入“目的站确认/票数输入”状态,同时给出票价,此时若目的站有误,可返回到空闲状态重新输入,否则,输入票数;乘客输入票数后,转入“票数确认/付款”状态,同样此时若票数有误,可返回到上一状态重新输入,否则,投入钱币付款;当付款金额足够时,“出票/找零”(有必要时进行找零);然后转入“空闲”等待输入目的站状态。该系统采用面向对象方法开发,系统中的类以及类之间的关系用 UML 类图表示,图 1-1 是该系统类图的一部分,图 1-2 描述了自动售票机的状态转换图。(分数:15.00)(1).根据题意,给出“自动售票机”类的主要属性。(分数:5.00)_正确答案:(“
11、自动售票机”类的主要属性有:编号、所在地铁站名)解析:“每一台售票机有一唯一编号”,因此自动售票机应有属性“编号”。“自动售票机只发售从该站起始的各种地铁票”,亦即自动售票机只发售其所在站为起始站的地铁票,故应有属性“地铁站名”。(2).根据题意,给出“地铁票”类的主要属性。(分数:5.00)_正确答案:(“地铁票”类的主要属性有:起始站、目的站、票价、流水号、自动售票机编号。)解析:地铁票应有属性:起始站、目的站、票价、流水号、自动售票机编号。(3).根据题中所述术语,指出图 1-2 中状态 1 到状态 4 分别是什么?(分数:5.00)_正确答案:(状态 1:“目的站确认/票数输入” 状态
12、 2:“票数确认/付款”状态 3:“出票/找零” 状态 4:“空闲”)解析:根据售票机状态变化的描述,易于得出答案。状态 1 应为“目的站确认/票数输入”,状态 2 应为“票数确认/付款”,状态 3 应为“出票/找零”,状态 4 应为“空闲”。二、试题二(总题数:1,分数:15.00)说明图书管理系统详细记录图书库存情况、读者信息以及读者借阅记录(包括借书日期和还书日期)。新书入库时要为该书编制图书卡片,包括分类目录号、图书流水号(要保证每本书都有唯一的流水号,即使同类图书也是如此)、书名、作者、内容摘要、价格和购书目期。同一个书名由于版次、作者等不同有可能存在多“种”图书,其间用“分类目录号
13、”区分。系统为每一位合法读者编制一个唯一的借书证号,读者需要提供姓名、单位。一个读者最多可以同时借阅 5 本图书。借阅图书时,新添借阅记录,并将对应的“归还标记”字段置为“false”,表示“尚未归还”;归还图书时,将相应的“归还标记”字段置为“true”,表示“已经归还”。一本书可能供多位读者借阅,同一本书读者可以重复借阅。图 2-1 为该系统的 E-R 图。图 2-1(分数:15.00)(1).实体间的联系有“一对一”、“一对多”和“多对多”,指出“借阅”联系属于哪一种?“借阅”关系模式的外键是什么?有主键吗?为什么?(分数:5.00)_正确答案:(“借阅”联系是“多对多”联系,外键有:借
14、书证号、图书流水号。“借阅”关系模式不存在主键,因为同一本书读者可以重复借阅,即使加上“借书日期”亦不能唯一标识,读者可以在同一天借阅并归还再借阅,应增加一个属性(如借阅流水号)来标识。)解析:“一个读者最多可以同时借阅 5 本图书,一本书可能供多位读者借阅,同一本书读者可以重复借阅”,因此联系“借阅”是多对多联系。要特别分清“一本图书”与“一种图书”,一本图书是由流水号标识的,一种图书是由分类目录号标识的。对借阅联系,借阅的是具体的某本书,因此外键有:借书证号、图书流水号。“借阅”关系模式不存在主键,因为同一本书读者可以重复借阅,即使加上“借书日期”亦不能唯一标识,读者可以在同一天借阅并归还
15、再借阅,应增加一个属性(如借阅流水号)来标识。(2).由于同一个分类目录号(同一种图书)有多个副本,若用表 Book(图书流水号,分类目录号,书名,作者,内容摘要,价格,购书日期)存储图书信息则有很多的冗余信息,该如何分解使之满足 BCNF,并指出分解后的关系模式的主键。(分数:5.00)_正确答案:(图书(分类目录号,书名,作者,内容摘要,价格,购书日期),主键:分类目录号副本(图书流水号,分类目录号),主键:图书流水号)解析:由于同一个分类目录号(同一种图书)有多个副本,同一个分类目录号具有相同的很多信息:书名、作者,内容摘要,价格等,同一种书中的不同副本由图书流水号区分。故可分解如下:图
16、书(分类目录号,书名,作者,内容摘要,价格,购书日期),主键:分类目录号副本(图书流水号,分类目录号),主键:图书流水号(3).若用表 Reader 存储读者信息,Book 表存储图书信息,Borrow 表存储借阅情况。以下 SQL 语句是“查询证号为 12345 的读者当前所借阅的图书书名(即尚未归还的图书)”,请补充完整。SELECT 书名 FROM Book WHERE 流水号 (1) (SELECT 流水号 FROM (2) WHERE 证号=“12345“ AND (3) 以下 SQL 语句是“查询书名包含软件设计师的图书情况”,请补充完整。SELECT * FROM Book WH
17、ERE 书名 (4) “%软件设计师%/(分数:5.00)_正确答案:(IN (2) Borrow (3) 归还标记=“false“ (4) LIKE)解析:是引出子查询的,该类连接词有:IN、NOT IN、EXISTS、NOTEXISTS,EXISTS 引出的子查询一般是SELECT*型,故排除;再据语意分析应填 IN。子查询的语意是“查询当前所借阅的图书流水号(即尚未归还的图书)”,因此应从 Borrow 表中查询,而且归还标记应为 false,故空(2)应填 Borrow,空(3)应填:归还标记=“false“。对字符串进行的操作通常是使用操作符 LIKE 的模式匹配,正符合题意,故空(
18、4)应填“LIKE”。三、试题三(总题数:1,分数:15.00)1. 根据判定覆盖、条件覆盖、判定/条件覆盖、多重条件覆盖(条件组合覆盖)、路径覆盖 5 种覆盖标准,从供选择的答案中分别找出满足相应覆盖标准的最小的测试数据组(用回答)。供选择的答案:(分数:15.00)_正确答案:(判定覆盖 条件覆盖 判定/条件覆盖多重条件覆盖路径覆盖 )解析:本题考察的是测试用例的设计。软件测试的目的是希望以最少的人力和时间发现潜在的各种错误和缺陷。这样测试用例就显得尤为重要。软件测试大体上可分为两大类:基于“白盒”的路径测试技术和基于“黑盒”的事务处理流程测试技术(又称功能测试)。白盒测试依据的是程序的逻
19、辑结构,而黑盒测试技术依据的是软件行为的描述。 路径测试(PX):执行所有可能的穿过程序的控制流程路径。在路径测试中,该策略是最强的,一般不可实现。 语句测试(PI):至少执行程序中所有语句一次。100%语句覆盖率用 CI 表达。语句覆盖是最弱的逻辑覆盖准则。 分支测试(P2):至少执行程序中每一分支一次。100%分支覆盖率用 C2 表达。 条件组合测试:使每个判定中的所有可能的条件取值组合至少执行一次。只要满足条件组合覆盖,就一定满足分支覆盖。四、试题四(总题数:1,分数:27.00)说明当一元多项式 中有许多系数为零时,可用一个单链表来存储,每个节点存储一个非零项的指数和对应系数。为了便于
20、进行运算,用带头节点的单链表存储,头节点中存储多项式中的非零项数,且各节点按指数递减顺序存储。例如:多项式 8x5-2x2+7 的存储结构为:(分数:27.00)_正确答案:(p=NULL)解析:_正确答案:(pC-next=C-head-next)解析:_正确答案:(tp=NULL)解析:_正确答案:(Del(C,tp)解析:_解析:根据注释,Del 函数当 p 是空指针时,删除头节点,因此易知(1)空应填 p=NULL。(2)空是插入头节点的特殊情况,应填 pC-next=C-head-next。由注释可知空(4)是删除操作,需调用 Del 函数,进一步确定实参。此处需要删除节点 t,结合
21、 Del 函数的说明,实参 p 需要空指针(NULL)或 t 节点的前驱指针,由 if(t-epC-e)tp=t;t=t-next;五、试题五(总题数:1,分数:15.00)说明对多个元素的聚合进行遍历访问时,需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(Book)放到书架(BookShelf)上并依次输出书名。这样就要涉及到遍历整个书架的过程。使用迭代器 Iterator 实现。图 5-1 显示了各个类间的关系。以下是 C+语言实现,能够正确编译通过。图 5-1(分数:15.00)_正确答案:(1)Object)解析:_正确答案:(virtual)解析:_正确答案:(IteratorObject)解析:_正确答案:(可得,fun2 应该定义了与 BSnext 函数同参数的函数指针,函数指针的定义原型为:函数返回类型函数指针变量名(参数列表),又知函数 BSnext 的定义为 struct Book*BSnext(),故空(1)应填 struct Book*。