1、2010年上半年软件水平考试(中级)软件设计师下午(应用技术)试题真题试卷及答案与解析 一、必答题(共 4道大题,每道大题 15分) 0 【说明】 某大型企业的数据中心为了集中管理、控制用户对数据的访问并支持大量的连接需求,欲构建数据管理中间件,其主要功能如下: (1)数据管理员可通过中间件进行用户管理、操作管理和权限管理。用户管理维护用户信息,用户信息(用户名、密码 )存储在用户表中;操作管理维护数据实体的标准操作及其所属的后端数据库信息,标准操作和后端数据库信息存放在操作表中;权限管理维护权限表,该表存储 用户可执行的操作信息。 (2)中间件验证前端应用提供的用户信息。若验证不通过,返回非
2、法用户信息;若验证通过,中间件将等待前端应用提交操作请求。 (3)前端应用提交操作请求后,中间件先对请求进行格式检查。如果格式不正确,返回格式错误信息;如果格式正确,则进行权限验证 (验证用户是否有权执行请求的操作 ),若用户无权执行该操作,则返回权限不足信息,否则进行连接管理。 (4)连接管理连接相应的后台数据库并提交操作。连接管理先检查是否存在空闲的数据库连接,如果不存在,新建连接;如果存在,则重用连接。 (5)后端数据库执 行操作并将结果传给中间件,中间件对收到的操作结果进行处理后,将其返回给前端应用。 现采用结构化方法对系统进行分析与设计,获得如图 ll所示的顶层数据流图和图 1-2所
3、示的 0层数据流图。1 使用说明中的词语,给出图 1-1中的实体 E1 E3的名称。 2 使用说明中的词语,给出图 1-2中的数据存储 D1 D3的名称。3 给出图 l-2中加工 P的名称及其输入、输出流。除加工 P的输入与输出流外,图 1-2还缺失了两条数据流,请给出这两条数据流的起点和终点。 注:名称使用说明中的词汇,起点和终点均使用图 l-2中的符号或词汇。 4 在绘制数据流图时,需要注意加工的绘制。请给出三种在绘制加工的输入、输出时可能出现的错误。 4 阅读下列说明,回答问题 1至问题 3,将解答填入答题纸的对应栏内。 【说明】 某学校拟开发一套实验管理系统,对各课程的实验安排情况进行
4、管理。 【需求分析】 一个实验室可进行多种类型不同的实验。由于实验室和实验员资源有限,需根据学生人数分批次安排实验型和实验员。一门课程可以为多个班级开设,每个班级每学期可以开设多门课程。一门课程的一种实验可以根据人数、实验室的可容纳人数和实验类型,分批次开 设在多个实验室的不同时间段。一个实验室的一次实验可以分配多个实验员负责辅导实验,实验员给出学生的每次实验成绩。 (1)课程信息包括:课程编号、课程名称、实验学时、授课学期和开课的班级等信息;实验信息记录该课程的实验进度信息,包括:实验名、实验类型、学时、安排周次等信息,如表 l-l所示。(2)以课程为单位制定实验安排计划信息,包括:实验地点
5、,实验时间、实验员等信息,实验计划如表 2-2所示。(3)由实验员给出每个学生每次实验的成绩,包括:实验名、学号、姓名、班级、实验成绩等信息,实验成绩如表 2-3所示。(4)学生的实验课程总成绩根据每次实验的成绩以及每次实验的难度来计算。【概念模型设计】根据需求阶段收集的信息,设计的实体联系图 (不完整 )如图 2-l所示。【逻辑结构设计】 根据概念模型设计阶段完成的实体联系图,得出如下关系模式 (不完整 ): 课程 (课程编号,课程名称,授课院系,实验学时 ) 班级 (班级号,专业,所属系 ) 开课情况 (1),授课学期 ) 实验 (2),实验类型,难度,学时,安排周次 ) 实验计划 (3)
6、,实验时间,人数 ) 实验员 (4),级别 ) 实验室 (实验室编号,地点,开放时间,可容纳人数,实验 类型 ) 学生 (5),姓名,年龄,性别 ) 实验成绩 (6),实验成绩,评分实验员 ) 5 补充图 2-1中的联系和联系的类型。 6 根据图 2-1,将逻辑结构设计阶段生成的关系模式中的空 (1)-(6)补充完整并用下划线指出这六个关系模式的主键。 7 如果需要记录课程的授课教师,新增加 “授课教师 ”实体。请对图 2-1进行修改,画出修改后的实体间联系和联系的类型。 7 阅读下列说明和图,回答问题 1至问题 3,将解答填入答题纸的对应栏内。 【说明】 某运输公司决定为新的售票机开发车票销
7、售的控制软件。图 3-1给 出了售票机的面板示意图以及相关的控制部件。 售票机相关部件的作用如下所述: (1)目的地键盘用来输入行程目的地的代码 (例如, 200表示总站 )。 (2)乘客可以通过车票键盘选择车票种类 (单程票、多次往返票和座席种类 )。 (3)继续取消键盘上的取消按钮用于取消购票过程,继续按钮允许乘客连续购买多张票。 (4)显示屏显示所有的系统输出和用户提示信息。 (5)插卡口接受 Mcard(现金卡 ),硬币口和纸币槽接受现金。 (6)打印机用于输出车票。 假设乘客总是支付恰好需要的金额而无需找零,售票机的维护工作 (取回现金 、放入空白车票等 )由服务技术人员完成。 系统
8、采用面向对象方法开发,使用 UML进行建模。系统的顶层用例图和类图分别如图 3-2和图 3-3所示。 8 根据说明中的描述,给出图 3-2中 A1和 A2所对应的参与者, U1所对应的用例,以及 (1)、 (2)处所对应的关系。 9 根据说明中的描述,给出图 3-3中缺少的 C 1-C4所对应的类名以及 (3) (6)处所对应的多重度。 10 图 3-3中的类图设计采用了中介者 (Mediator)设计模式,请说明该模式的内涵。 10 阅读下列说明和 C代码,回答问题 1至问题 3,将解答写在答题纸的对应栏内。 【说明】 对有向图进行拓扑排序的方法是: (1)初始时拓扑序列为空; (2)任意选
9、择一个入度为 0的顶点,将其放入拓扑序列中,同时从图中删除该顶点以及从该顶点出发的弧; (3)重复 (2),直到不存在入度为 0的顶点为止 (若所有顶点都进入拓扑序列则完成拓扑排序,否则由于有向图中存在回路无法完成拓扑排序 )。 函数int*TopSort(LinkedDigraph G)的功能是对有向图 G中的顶点进行拓扑排序,返回拓扑序列中的顶点编号序列,若不能完成拓扑排序,则返回空指针。其中,图 G中的顶点从 1开始依次编号,顶点序列为 vl, v2, , vn,图 G采用邻接表表示,其数据类型定义如下: #define MAXVNUM 50 *最大顶点数 * typedef struc
10、t ArcNode *表结点类型 * int adjvex; *邻接顶点编号 * struct ArcNode*nextarc; *指示下一个邻接顶点 * ArcNode; typedef struct AdjList *头结点类型 * char vdata; *顶点的数据信息 * ArcNode*firstarc; *指向邻接表的第一个表结点 * AdjList; typedef struct LinkedDigraph *图的类型 * int n: *图中顶点个数 * AdjList VheadMAXVNUM; *所有顶点的头结点数组 * LinkedDigraph; 例如,某有向图 G如
11、图 4-1所示,其邻接表如图4-2所示。 函数 TopSort中用到了队列结构 (Queue的定义省略 ),实现队列基本操作的函数原型如下表所示:【 C代码】int*TopSort(LinkedDigraph G) ArcNode*P; *临时指针,指示表结点 * Queue Q; *临时队列,保存入度为 0的顸点编号 * int k=0; *临时变量,用作数组元素的下标 * int j=0, w=0; *临时变量,用作顶点编号 * int*topOrder,*inDegree; topOrder=(int*)malloc(G n+1)*sizeof(int); *存储拓扑序列中的顶点编号 *
12、 inDegree=(int*)malloc(G n+1)*sizeof(int); *存储图 G中各顶点的入度 * if(!inDegree !topOrder) return NULL; (1); *构造一个空队列 * for(j=1; jnextarc) inDegreeP-adjvex+=1; for(j=i; jnextarc) (3)-=1; if(0= (4) ) EnQueue(&Q, P-adjvex); *for* / * while*/ free(inDegree); if( (5) ) return NULL; return topOrder; /*TopSort*/
13、11 根 据以上说明和 C代码,填充 C代码中的空 (1) (5)。 12 对于图 4-1所示的有向图 G,写出函数 TopSort执行后得到的拓扑序列。若将函数 TopSort中的队列改为栈,写出函数 TopSort执行后得到的拓扑序列。 13 设某有向无环图的顶点个数为 n、弧数为 e,那么用邻接表存储该图时,实现上述拓扑排序算法的函数 TopSort的时间复杂度是 (6)。 若有向图采用邻接矩阵表示(例如,图 4-1所示有向图的邻接矩阵如图 4-3所示 ),且将函数 TopSort中有关邻接表的操作修改为针对邻接矩阵的操作,那么对于有 n个顶点、 e条弧的有向无环图,实现上述拓扑排序算法
14、的时问复杂度是 (7)。 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 14 阅读下列说明和 c+代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 某软件公司现欲开发一款飞机飞行模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征。需要模拟的飞机种类及其特征如表 5-l所示。为支持将来模拟更多种类的飞机,采用策略设计模式 (Strategy)设计的类图如图 51所示。图5-l中, AirCraft为抽象类,描述了抽象的飞机,而类 Helicopter、 AirPlane、 Fight
15、er和 Harrier分别描述具体的飞机种类,方法 fly( )和 takeOff( )分别表示不同飞机都具有飞行特征和起飞特征;类 FlyBehavior与 TakeOffBehavior为抽象类,分别用于表示抽象的飞行行为与起飞行为;类 SubSonicFly与 SuperSonicFly分别捕述亚音速飞行和超音速飞行的行为;类 Verti calTakeOff与 LongDistanceTakeoff分 别描述垂直起飞与长距离起飞的行为。 【 C+代码】 #include using namespace std; class FlyBehavior public: virtual voi
16、d fly( )=0; ; class SubSonicFly: public FlyBehavior public: void fly( )cout 15 阅读下列说明和 Java代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】某软件公司现欲开发一款飞机飞行模拟系统,该系统主要模拟不同种类飞机的飞行特征与 起飞特征。需要模拟的飞机种类及其特征如表 6-1所示。为支持将来模拟更多种类的飞机,采用策略设计模式 (Strategy)设计的类图如图 6-l所示。图 5-11中, AirCraft为抽象类,描述了抽象的飞机,而类 Helicopter、 AirPlane、 Fighter
17、和 Harrier分别描述具体的飞机种类,方法 fly( )和 takeOff( )分别表示不同飞机都具有飞行特征和起飞特征;类FlyBehavior与 TakeOffBehavior为抽象类,分别用于表示抽象的飞行行为与起飞行为;类 SubSonicFly与 SuperSonicFly分别描述亚音速飞行和超音速飞行的行为;类 VerticalTakeOff与 LongDistanceTakeOff分别描述垂直起飞与长距离起飞的行为。【 Java代码】 interface FlyBehavior public void fly( ); ; class SubSonicFly implement
18、s FlyBehavior public void fly( )System out println(“亚音速飞行 !“); ; class SuperSonicFly implements FlyBehavior public void fly( )System out println(“超音速飞行 !“); ; interface TakeOffBehavior public void takeOff( ); ; class VerticalTakeOff implements TakeOffBehavior public void takeOff( )System out println
19、(“垂直起飞 !“); ;class LongDistanceTakeOff implements TakeOffBehavior public void takeOff( )System out println(“长距离起飞 !“); ; abstract class AirCraft protected (1); protected (2); public void fly( ) (3); public void takeOff( ) (4); ; ; class Helicopter (5) AirCraft public Helicopter( ) flyBehavior=new (6
20、) ; takeOffBehavior=new (7) ; ; 其它代码省略 2010年上半年软件水平考试(中级)软件设计师下午(应用技术)试题真题试卷答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【正确答案】 E1:前端应用 E2:数据管理员 E3:后端数据库 【试题解析】 由说明的 (2)(3)条可以得出 E1是前端应用;由说明的 (1)可以得出E2是数据管理员;由说明的 (5)得出 E3是后端数据库。 2 【正确答案】 Dl:用户表 D2:操作表 D3:权限表 【试题解析】 由说明的 (1)条可以得出, Dl是用户 表, D2是操作表, D3是权限表。 3 【正确答案】
21、P名称:操作结果处理缺失的数据流:【试题解析】 由图 1-1可以得出输入输出流。 对于缺失的数据流根据说明 (1)中 “操作管理维护数据实体的标准操作及其所属的后端数据库信息,标准操作和后端数据库信息存放在操作表中 ”得到缺失的数据流有 D2-格式检查。 根据说明 (L)中 “权限管理维护权限表,该表存储用户可执行的操作信息 ”得到缺失的数据流有 D3-权限验证。 4 【正确答案】 (1)加工间各层之间对应的输入输出流的数量不一致。 (2)输入输出方向不对。 (3)加工间的关系不正确。 【试题解析】 只需说出常见的三点错误即可。 5 【正确答案】 * 【试题解析】 根据题意的描述和三个表格,可
22、以比较容易地画出缺失的联系和联系的类型。 6 【正确答案】 (1)课程编号 (2)序号,实验名 (3)实验编号 (4)实验员 (5)学号,班级号 (6)学号 【试题解析】 空 (1)为开课情况,已经有一个属性为授课学期,则必须有课程编号作为主码。 空 (2)为实验,由表 2-1可知,应该填序号、实验名。 空 (3)为实验计划,可以得出实验编号应为主码。 空 (4)为实验员,那么主码应该是实验员。 空 (5)为学生,那么主码显然是学号、班号。 空 (6)为实验成绩,主码为学号。 7 【正确答案】 * 【试题解析】 新增 “授课教师 ”实体,授课教师与课程的对应关系是 1: m,表示一个授课教师可
23、以教授不同的课程。 8 【正确答案】 A1乘客 A2服务技术人员 U1取消购票过程 (1) (2) 【试题解析】 根据说明 (2)可知 Al为乘客; 题目中有提到 “售票机的维护工作由服务技术人员完成 ”,可得出 A2为服务技术人员; 根据说明 (3)可知 U1为取消购票过程。 用例中的 include是指用例中的包含关系,通常发生在多个用例中,选择目的地和车票类型包含在购票用例中,所以 (1)填 include; 用例中的 extend是指从一个用例扩展另外一个用例的功能,构成新用例,根据说明 (3)可知道取消购买需要另外用到继续取消键盘上的取消按钮,这是购票用例的扩展,所以在 (2)中填入
24、 extend。 9 【正确答案】 C1售票机面板 C2目的地键盘 C3车票键盘 C4继续取消键盘 (3)1 (4)1 * (5)0 * (6)1 【试题解析】 Cl对应的是获取选择购票信息,所以其类名为售票机面板; C2对应的是获取目的地编码,所以其类名为目的地键盘; C3对应的是获取车票种类,所以其类名为车票键盘; C4对应的是获取继续取消购票的动作,所以其类名为继续取消键盘。一般目的地唯一,所以 (3)中的多重度为 1; 票的种类在一种以上乃至多种,所以 (4)中的多重度为 1 *; 获取继续取消购票的动作存在多种情况,或者无动作,或者继续,或者取消,所以 (5)中的多重度为 0 *;
25、当一切确定以后,显示屏显示文本也就随之确定,所以 (6)中的多重度为 l。 10 【正确答案】 用 个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。简单来说,将原来两个直接引用或者依靠的对象拆开,在中间加入一个 “中介 ”对象,使得两头的对象分别和 “中介 ”对象引用或者依靠。 【试题解析】 中介者设计模式 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。简单点来说,将原来两个直接引用或者依靠的对象拆开,在中间加入一个 “中介 ”对象,使得两头
26、的对象分别和 “中介 ”对象引用或者依靠。 11 【正确答案】 (1)InitQueue(&Q) (2)DeQueue(&Q, &w) (3)inDegreep-adjvex (4)inDegreep-adjvexj (5)k!=G N 【试题解析】 根据空 (1)的后面注释是构造一个空队列,程序的开始已经定义了一个队列 Q,那么此处只需初始化这个队列即可,所以空 (1)应填InitQueue(&Q)。 根据空 (2)后面的解释,如果队列不空,那么就将队列的元素依次出队列,所以空 (2)应为 DeQueue( Q, w)。 空 (3)、 (4)上下端的功能是将顶点 w的所有邻接顶点的入度减 l
27、,数组 inDegree中存放各个顶点的入度,所以空 (3)应为 inDegreep-adjvex,并判断与顶点 w相邻的顶点有没有入度为零的顶点,如果有,就把这个顶点入队列, 所以空 (4)也填inDegreep-adjvex。 最后,最外层循环结束,如果拓扑序列中元素的个数 k不等于定点数 n,那么就说明有向图中存在环,返回 NULL上,所以空 (5)填 k!=G n。 12 【正确答案】 队列: vl、 v2、 v5、 v4、 v3、 v7、 v6 栈: v1、 v2、 v5、 v4、 v7、 v3、 v6 【试题解析】 首先根据原图,可以得出本题中只有 V3和 V7是同时入队或入栈的。
28、 13 【正确答案】 (6)O(n+e) (7)O(n2) 【试题解析】 邻接表:对有 n个顶点和 e条弧 的有向图而言,在拓扑排序中,若有向图无环,则每个顶点进出队列各一次,共执行 e次,搜索算法时间复杂度是由 n和 e共同决定的,所以总的时间复杂度为 O(n+e)。 当用邻接矩阵:对于每个顶点,查找相邻边的时间复杂度是 O(n),一共有 n个顶点,所以总的时间复杂度是 O(n2)。 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 14 【正确答案】 (1)FlyBehavior flyBehavio
29、r (2)TakeOffBehavior takeOffBehavior (3)flyBehavior fly( ) (4)takeOffBehavior takeOff( ) (5)SuperSonicFly( ) (6)VerticalTakeOff( ) (7)Helicopter( ) 【试题解析】 Helicopter类继承 AirCraft类,引用了 FlyBehavior类的对象flyBehavior和 TakeOffBehavior类的对象 takeOffBehavior。 因 为 AirCraft类没有实现 fly( )和 takeOff( ),所以需要在 Helicopte
30、r类中添加FlyBehavior类的对象和 TakeOffBehavior类的对象,故空 (1)、空 (2)应填FlyBehavior flyBehavior和 TakeOffBehavior takeOffbehavior。 空 (3)要实现 flny行为故调用对象 flyBehavior fly( ),同理空 (4)要实现takeOffBehavior行为故调用 takeOffBehavior takeOff()。 空 (5)、空 (6)考查多态调用,因为 Helicopter类为垂直起飞和亚音速飞行,故应分别添 SuperSonicFly( )和 VerticalTakeOff( )。
31、空 (7)应添写 Helicopter类的析构函数,实现内存释放。 15 【正确答案】 (I)FlyBehavior flyBehavior (2)TakeOffBehavior takeOffBehavior (3)flyBehavior fly( ) (4)takeOffBehavior takeOff( ) (5)extends (6)SuperSonicFiy( ) (7)VerticalTakeOff( ) 【试题解析】 Helicopter类继承 AirCraft类, fly行为实现 FlyBehavior接口,takeOff行为实现 TakeOffBehavior接口。 因为 A
32、irCraft类没有实现 fly( )和 takeOff( )行为,故空 (1)空 (2)应填 FlyBehavior flyBehavior和 TakeOffBehavior takeOffBehavior。 空 (3)要实现 fly行为故调用对象 flyBehavior fly( ),同理空 (4)要实现takeOffBehavior行为故调用 takeOffBehavior takeOff( )。 空 (5)因为 Helicoptel“继承自 AirCraft所以要填写关键字 extends。 空 (6)空 (7)考查多态调用,因为 Helicopter类为垂直起飞和亚音速飞行,故应分别 SuperSonicFly( )和 VerticalTakeOff( )。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1