[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷6及答案与解析.doc

上传人:syndromehi216 文档编号:507240 上传时间:2018-11-29 格式:DOC 页数:14 大小:175KB
下载 相关 举报
[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷6及答案与解析.doc_第1页
第1页 / 共14页
[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷6及答案与解析.doc_第2页
第2页 / 共14页
[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷6及答案与解析.doc_第3页
第3页 / 共14页
[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷6及答案与解析.doc_第4页
第4页 / 共14页
[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷6及答案与解析.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 6及答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【说明】 某超市的销售业务由一个销售业务管理系统进行管理,该系统每完成一次交易都需要提供顾客发票,其格式如表 1-1所示。 对于这样一个销售业务管理系统,分别给出了以下两种关系数据库的设计 (下划线表示主关键字 ) 设计一: 顾客 Customer(顾客代码 Cno,姓名 name,住址 address,联系电话 phone) 收银员 Salesman(收银员代码 Sno,身份证号 idno,姓名 flame,住址 address,联系电话 phone) 商品 Merc

2、handise(商品代码 Milo,商品名称Mname,价格 price) 发票 Invoice(发票号码 Ino,交易日期 Idate,顾客代码 Cno,收银员代码 Sno,商品代码 Mno,单价 unitprice,数量 amount) 设计二: 顾客Customer(顾客代码 Cno,姓名 name,住址 address,联系电话 phone) 收银员Salesman(收银员代码 Sno,身份证号 idno,姓名 name,住址 address,联系电话吵one) 商品 Merchandise(商品代码 Mno,商品名称 mllame,价格 pnce) 发票Invoice(发票号码 In

3、o,交易日期 Idate,顾客代码 Cno,收银员代码 Sno) 发票明细Invoicedetail(发票号码 Ino,商品代码 Uno,单价 unitprice,数量 amount) 1 设计一的关系模式 Invoice最高满足第几范式 ?为什么 ?设计一和设计二哪个更加合理 ?为什么 ? 2 根据设计二中关系模式,以下 SQL语句是用于 “建立 2005年 1月期间每张发票的发票号,交易日期,交易商品件数和交易总金额的视图 ”的不 完整语句,请填补其中的空缺。 CREATE VIEW Invoice_total(1) SELECT Invoice. Ino, Idate, (2), (3)

4、 FROM Invoice, Invoicedetail WHERE(4)AND Idate BETWEEN2005-01-01AND2005-01-31 GROUP BY(5); 3 根据设计二中关系模式,以下 SQL语句是用于 “查询从未售出的商品信息 ”的不完整语句,请填补其中的空缺。 SELECT Mno, Mname, price FROM Merchandise(1) WHERE(2) (SELECT(3) FROM Invoice, detail WHERE A.Mno=Invoice, detail. Mno); 4 设计二中关系 Merchandise中由属性 price表示

5、商品价格,关系 Invoice, detail中的属性 unitprice也表示商品价格。两个是否有必要同时存在 ?为什么 ? 5 【说明】 下面是某租车信息管理系统的介绍:该车库中备有若干车辆,每 辆车有车号、车牌、车名、价格等属性。车库不定期地购买并注册新车供用户借用,也可将报废的旧车注销以停止租用。 车库可为众多用户提供服务。每个用户在借车之前需注册姓名、地址等内容。每个用户最多可同时借 3辆车。每辆车借期 7天:若有一辆车超期,则不可再借其他车。一辆车超期一天罚款 250元。若一辆车超期 3周不归还,则发布通告。若用户借的车丢失,在罚款处理之前不能借车,每辆报失的车罚款该车目前市价 (

6、包括折旧 )的 1.2倍。注册新用户不受限制;而注销用户之前,该用户必须归还所有借的车,或者报失并接受罚款。 5 分析 车辆的状态和事件,指出图 2-1中的 (1)、 (2)、 (3)、 (4)分别是什么 ? 6 分析用户的状态和事件,指出图 2-2中的 (5)、 (6)、 (7)、 (8)分别是什么 ?(注意,用户与车辆在状态图中的关系 )。 7 指出 UML中活动图的含义,并说明活动图和状态图的区别与联系。 8 阅读下列说明和流程图 2-3,将应填入 (n)的字句写在答题纸的对应栏内。 【说明】 下面的流程图描述了对 8位二进制整数求补的算法。 该算法的计算过程如下:从二进制数的低位 (最

7、右位 )开始,依次向高位逐位查看,直到首 次遇到 “1”时,停止查看。然后,对该 “1”位左面的更高位 (如果有的话 ),逐位求反,所得的结果就是对原二进制数求补的结果。 例如:对二进制整数 10101000求补的结果是 01011000。 设 8位二进制整数中的各位,从低位到高位,依次存放在整型数组 BIT的B1T1 BIT8中。例如,二进制整数 10101000存放在数组 BIT后,就有BIT1=0, BIT2=0, , BIT7 =0, BIT8=1。若流程图中存在空操作,则用NOP表示。 【流程图】 注:流程图中 (1)处按 “循环变量名:循环初值,增量,循环终值 ”格式描述。 9 阅

8、读下列算法说明和算法,将应填入 (n)的字句写在答题纸的对应栏内。 【说明】 下列最短路径算法的具体流程如下:首先构造一个只含 n个顶点的森林,然后依权值从小到大从连通网中选择不使森林中产生回路的边加入到森林中去,直至该森林变成一棵树为止,这棵树便是连通网的最小生成树。该算法的基本思想是:为使生成树上总的权值之和达 到最小,则应使每一条边上的权值尽可能地小,自然应从权值最小的边选起,直至选出 n-1条互不构成回路的权值最小边为止。【算法】 /*对图 定义一种新的表示方法,以一维数组存放图中所有边,并在构建图的存储结构时将它构造为一个 “有序表 ”。以顺序表 MSTree返回生成树上各条边。 *

9、/ typedef strnct VertexType vex 1; VertexType vex2; VRType weight; EdgeType; typedef ElemType EdgeType; typedefstruct / 有向网的定义 VertexType vexsMAX_VERTEX_NUM; / 顶点信息 EdgeType edgeMAX_EDGE_NUM; / 边的信息 Mt vexnum,arcnum; / 图中顶点的数目和边的数目 ELGraph; void MiniSpanTree_Kruskal(ELGraph G, SqList InitSet(F, G.ve

10、xnum); / 将森林 F 初始化为 n 棵树的集合 InitList(MSTree, G.vexaum); / 初 始化生成树为空树 i=O; k=l; while( k (1) e = G.edgei; / 取第 i条权值最小的边 rl = fix_mfset(F, LocateVex(e.vexl); r2 =(2) / 返回两个顶点所在树的树根 if(ri (3) r2) / 选定生成树上第 k条边 if (Listlnsert(MSTree, k, e) (4); / 插入生成树 mix_mfset(F, ri, r2); / 将两棵树归并为一棵树 (5); /继续考察下一条权值最

11、小边 Destroy Set(F); 10 阅读下列程序说明,将应填入 (n)处的字句写在答卷纸的对应栏内。 【程序说明】 对于一个公司的雇员来说,无非有 3种:普通雇员、管理人员和主管。这些雇员有共同的数据:名字、每小时的工资,也有一些共同的操作:数据成员初始化、读雇员的数据成员及计算雇员的工资。但是,他们也有不同。例如,管理人员除有这些共同的特征外,有可能付固定薪水,主管除有管理人员的共同特征外,还有其他物质奖励等。 3种雇员中,管理人员可以看作普通雇员的一种,而主管又可以看作管理人员的一 种。我们很容易想到使用类继承来实现这个问题:普通雇员作为基类,管理人员类从普通雇员类中派生,而主管人

12、员类又从管理人员类中派生。 下面的程序 1完成上述各个类的定义,并建立了 3个雇员 (一个普通雇员、一个管理人员和一个主管 )的档案,并打印出各自的工资表。将 “程序 1”中的成员函数定义为内联函数, pay成员函数定义为虚函数,重新完成上述要求。 【程序 1】 /普通雇员类 class Employee public: Employee(char *theName, float thePayRate); char *getName0 const; float getPayRate0 const; float pay,(float hours Worked) eonst; protected:

13、 ehar *name; /雇员名称 float payRate; /薪水等级 ; Employee:Employee(char *theName, float thePaRate) name = the Name; payRate = the PayRate; char *Employee:getName0 eonst return name; float Employee:getPayRate0 const return payRate; float Employee:pay(float hoursWorked) const return hours Worked * payRate; c

14、lass Manager: public Employee public: /is Salaried 付薪文方式: true 付薪固定工资, false 按小时付薪 Manager(char *the Name, float the Pay Rate, bool is Salaried); bool getSalaried0 const; float pay(float hoursWorked) const; protected: bool salaried; ; Manager:Manager(ehar *theName,fioat thePayRate,bool isSalaried) :

15、 Employee(theName, thePayRate) salaried = isSalaried; bool Manager:getSalaried0 eonst return salaried; float Manager:pay(float hoursWorked) eonst if (salaried) return payRate; /* else */ return Employee:pay(hoursWorked); /主管人员类 class Supervisor: public Employee public: Supervisor(char *theName, floa

16、t thePayRate, float theBouns): Employee (theName, thePayRate,(1.) ,bouns(theBouns) float getBouns0 const return bouns; float pay(float hoursWorked) const return (2); protected: float houris; #include “iostream.h“ void main() Employee e(“Jack“,50.00); Manager m(“Tom“,8000.00,tme); Supervior sCTanya“,

17、8000.00,8000.00); cout “Name:“ e.getName0 endl; cout “Pay: “ e.pay(80) endl; /设每月工作 80小时 cout “Name: “ m.getName0 endl; cout “Pay: “ m.pay(40) endl; cout “Name: “ s.getName0 endl; cout “Pay: “ s.pay(40) endl; /参数 40在这里不起作用 #include “employee.h“ class Employee public: Employee(string theName, float t

18、hePayRate): name(theName),payRate(thePayRate) string getName0 const return name; float getPayRate0 const return payRate; virtual float pay(float hoursWorked) const return (3); protected:, string name; /雇员名 Boat payRate; /薪水等级 ; /管理人员类 /继承普通雇员类 class Manager: public Employee public: /构造函数 /isSalaried

19、标识管理人员类的付薪方式 /true 按阶段付薪 (固定工资 ) /false 按小时付薪 Manager(string theName, float thePayRate, bool isSalaried): Employee(theName,thePayRate),salaried(isSalaried) bool getSalaried0 const return salaried; virtual float pay(float (4) const; protected: bool salaried; ; float Manager :pay(float hoursWorked) co

20、nst if (salaried) /固定付薪方式 return payRate; else /按小时付薪 return (5); /主管人员类 class Supervisor: (6) public: /构造函数 Supervisor (string theName, float thePayRate, float theBouns) : Manager(theName, thePayRate, true), bouns(theBouns) /取奖金数额 float getBouns0 const return bouns; /计算薪水 virtual float pay(float ho

21、urs Worked) const (7) float bouns; #include “employee.h“ #nclude “iostream.h“ void main() (8) *ep3; ep0=new Employee(“Jack“ ,“50.00“); ep1=new Manager(“Tom“, “8000.00“,true); ep2=new Supervior(“Tanya“,“8000.00“,“8000.00“); for (int i=0;i 3;i+) Cout “Name: “ (9) endl; Cout “Pay: “ (10) endl; /设每月工作 8

22、0小时 软件水平考试(中级)软件设计师下午(应用技术)试题 模拟试卷 6答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【正确答案】 设计一中 Invoice最高满足第一范式。 根据题意可得出以下函数依赖: InoSno , Cno, Idate 而关系 Invoice的主码是 Ino和 Mno。非主属性 Sno、 Cno和 Idate并非完全依赖于主码,因此关系 Invoice不满足第二范式,最高满足第一范式。 设计二更加合理。因为设计二解决了设计一中由于非主属性不完全依赖于主码而造成的数据冗余等问题。 【试题解析】 关系数据库设计的方法之一就是 设计满足适当范式的模式,通常可

23、以通过判断分解后的模式达到第几范式来评价规范化的程度。 1 1NF(第一范式 ):若关系模式 R的每一个分量是不可再分的数据项,则关系模式 R属于第一范式。 2 2NF(第二范式 ):若关系模式 R 1NF,且每一个非主属性完全依赖于码,则关系模式属于第二范式。当 1NF消除了非主属性对码的部分函数依赖,则称为 2NF。 3 3NF(第三范式 ):若关系模式 R(U, F)中若不存在这样的码 X,属性组 Y及非主属性 Z(Z Y)使得 XY , (YX)YZ 成立,则关系模式属于3NF。即当 2NF消除了 非主属性对码的传递函数依赖,则称为 3NF。 4 BCNF(巴克斯范式 ):若关系模式

24、R lNF,若 XY 且 Y X时, X必含有码,则关系模式属于 BCNF。即当 3NF消除了主属性对码的部分和传递依赖,则称为 BCNF。 5 4NF(第四范式 ):关系模式 ReINF,若对于 R的每个非平凡多值依赖 XY 且 Y X时, X必含有码,则关系模式属于 4NF。 4NF时限制关系模式的属性间不允许有非平凡且非函数依赖的多值依赖。 设计一中根据题意可得出以下函数依赖: InoSno , Cno, Idate 而关系 Invoice的主码是 Ino和 Milo。非主属性 Sno、 Cno和 Idate并非完全依赖于主码,因此关系 Invoice不满足第二范式,最高满足第一范式。

25、关系 Invoice的设计的不合理在于该关系中将发票的单值属性 (发票号码 Lno,交易日期 Idate,顾客代码 Cno,收银员代码 Sno)和多值属性 (商品代码 Mno,单价 unitprice,数量 amount)混合在一个关系中,造成关系Invoice的冗余异常、修改异常和删除异常。而设计二则将设计一中关系 Invoice分解,使得发票的单值属性和多值属性分开,避免了异常。因此,设计二明显 比设计一要好。 2 【正确答案】 (1)AS (2)SUM(amount) (3)SUM(unitprice*amount) (4)Invoice.Ino=invoice detail. Ino

26、(5)Invoice.Ino,Idate或 Invoice detail. Ino,Idate 【试题解析】 本题是要建立 2005年 1月期间每张发票的发票号,交易日期,交易商品件数和交易总金额的视图。 首先建立视图的格式为 CREATEVIEW视图名 AS视图定义,因此 (1)空的答案为 AS。 本查询是从 Invoice和 Invoice detail两个关系中查询,两关系的连接条件是两关系的 Ino相等,因此 (4)空的答案是 Invoice.ino=Invoice detail.Ino。 统计每张发票的信息需要按发票将数据分组,也就是按发票号 Ino分组,但因为查询关系 Invoic

27、e和 lnvoice detail都有属性 Ino。为了避免二义性,所以分组属性是 Invoice.Ino或者是 Invoice detail. Ino。因为在包含聚合运算的 Select子句中,只有在 Group By子句中出现的 属性才能在 SELECT子句中以非聚合形式出现,而 SELECT子句中有非聚合形式的属性 Idate出现,所以 (5)空的答案是 Invoice.Ino,Idate或Invoicedetail.Ino,Idate。 需要查询的是每张发票的交易商品件数和交易总金额。交易商品件数是发票商品数量的总和,因此 (2)空的答案是 SUM(amount)。交易总金额是每条交易

28、商品明细中每条记录商品金额的总和,每条记录商品金额是 unitprice*amount,因此 (3)空的答案是 SUM (unitprice*amount)。 3 【正确答案】 (1)A和 ASA (2)NOT EXISTS (3) * 【试题解析】 本题是查询从未售出的商品信息。 SQL语句中有两种格式为表或视图取别名: “表名 AS别名 ”或 “表名别名 ”。由题中可以看出 Memhandise的别名是 A,因此填空 (1)的答案是 A或者 ASA。 要查询 “从未出售 ”的商品,也就是要查询的商品在交易记录中不存在,因此 (2)空的答案是 NOTEXISTS。 4 【正确答案】 有必要。

29、 Merchandise中由属性 price表示的是商品的当前价格,超市中的 价格是有可能变动的,而关系 Invoicedetail中的属性 unitprice表示的是在开具发票时该商品的单价。 【试题解析】 Merchandise中由属性 price表示的是商品的当前价格,超市中的价格是有可能变动的,而关系 Invoicedetail中的属性 unitprice表示的是在开具发票时该商品的单价。如果缺少其中任意一个,将导致商品单价不能进行调整,否则,当商品的单价发生变化时,销售历史中的商品价格就随着发生变化。 5 【正确答案】 (1)cancel register(注销旧车的注册 ) (2)

30、register(车辆注册 ) (3)return(归还 ) (4)lost report(遗失报告 ) 【试题解析】 根据题意可以分析出车辆的状态和事件,例如根据 “车库不定期地购买并注册新车供用户借用,也可将报废的旧车注销以停止租用 ”,可以得出 (1)、(2)空分别是注销旧车的注册和车辆注册。 (3)空可以从在库状态和在借状态的合理推断,得出从在借状态到在库状态只有一种事件 “归还 ”。从在借状态到终结状态,也只有一种可能性,那就是遗失。 6 【正确答案】 (5)cancel register(注 销用户的注册 ) (6)borrow/n+1(借车 /拥有车的数量 +1) (7)pena

31、lty and n=0(罚款并且拥有车的数量为 0) (8) 3 【试题解析】 根据题意 “注销用户之前,该用户必须归还所有借的车,或者报失并接受罚款 ”,得出从 “No Car到终结状态的事件 (5)空是 cancel register(注销用户的注册 )。根据从 “No Car”到 “Has Car”的事件 (6)空是 borrow(借车 ),同时已知用户可以借多辆车,当前拥有车 n辆,所以需要 n+1。根据 “若用户借的车丢失,在罚款处 理之前不能借车 ”可知 (7)空是 penalty(罚款 ),同时状态从 “Has Car”到达“No Car”说明 n=0。根据 “每个用户最多可同时

32、借 3辆车 ”,可以得出 (8)空为 3。 7 【正确答案】 活动图 (activity diagram)显示动作及其结果。活动图着重描述操作(方法 )实现中所完成的工作以及用例实例或对象中的活动。活动图是状态图的一个变种,与状态图的目的有一些小的差别,活动图的主要目的是描述动作 (执行的工作和活动 )及对象状态改变的结果。当状态中的动作被执行 (不像正常的状态图,它不需指定任何事件 )时,活动图中的状态 (称为动作状态 )直接转移到下一个阶段。活动图和状态图的另一个区别是活动图中的动作可以放在泳道中。泳道聚合一组活动,并指定负责人和所属组织。活动图是另一种描述交互的方式,描述采取 【试题解析

33、】 所有的系统均有静态结构和动态行为。结构可以用静态模型元素来描述,如类、关系、节点和构件。行为描述结构内的元素如何交互。通常情况下,这些交互是确定的且可以建立模型。抽象系统的动态行为也称为动态建模,UML支持动态建模。在 UML中有 4类图,每一类用于不同的目的:状态、序列、协作和活动。状态图被用来 描述类 (也可以用于子系统或整个系统 )中的行为和内部状态。它着眼于描述随着时间的改变,对象如何改变其状态。状态的改变起决于出现的事件,状态中执行的行为和动作,状态转移等。事件可能是条件成真,接收一个信号或一个操作调用或经过指定时间。序列图主要用来描述在指定情节中一组对象是如何交互的。它着眼于消

34、息序列,也就是说,在对象间如何发送和接收消息。序列图有两个坐标轴:纵坐标轴显示时间,横坐标轴显示有关的对象。序列图中最基本的东西是时间。协作图主要用来描述对象在空间中的交互,即除了动态交互,它也直接描述对象是如何链接在一 起的。在协作图中没有时间轴,因而将消息按序编号。 8 【正确答案】 (1)i: 1, 1, 8 (2)1sw (3)0BITi (4)NOP,或空操作 (5)1BITi 【试题解析】 根据题意,从二进制数的低位 (最右位 )开始,依次向高位逐位查看,直到首次遇到 “1”时,停止查看。然后,对该 “1”位左面的更高位 (如果有的话 ),逐位求反,所得的结果就是对原二进制数求补的

35、结果。所以 (1)空是 8次循环根据 BITi的值判断相应补数的值, (2) (5)空是分支处理的结果。 9 【正确答案】 (1)G.vexnum (2)fix_mfset(F,Locate Vex(e.vex2) (3) != (4)k+ (5)i+ 【试题解析】 本题考查的是克鲁斯卡尔 (Kmskal)算法。理解该算法的关键在于:由于生成树上不允许有回路,因此并非每一条居当前权值最小的边都可选。例如,如图 7-1所示的连通网 G5,在依次选中了 (e,f), (b,c), (e,d)和 (f,g)的 4条边之后,权值最小边为 (g,d),由于 g和 d已经连通,若加上 (g,d)这条边将使

36、生成树上产生回路,显然这条边不可取。同理,边 (f,d)也不可取,之后则依次取 (a,g)和 (a,b)两条边加入到生成树。 那么在算法中如何判别当前权值最小边的两个顶点之间是否已经连通 ?从生成树的构造过程可见,初始态为 n个顶点分属 n棵树,互不连通,每加入一条边,就将两棵树合并为一棵树,在同一棵树上的两个顶点之间自然相连通。由此判别当前权值最小边是否可取只要判别它的两个顶点是否在同一棵树上即可。 10 【正确答案】 (1)true (2)payRate+bouns (3)hours Worked*payRate (4)hours Worked (5)hours Worked*payRat

37、e (6)public Manager (7)protected: (8)Employee (9)epi- getName() (10)epi- pay(80) 【试题解析】 (1)普通雇员类是所有类的基类,描述了雇员的一些基本信息,管理人员类从普通雇员类中派生,管理人员的付薪方式与普通雇员可能相同,所以该类添加了一个成员变量标识,并覆盖了基类的 pay()函数。主管类从管理人员类中派生,主管人员是管理人员的一种,他们不仅支付固定薪水,而且还有奖金。所以在 主管类中添加了 bonus成员,保存他们的奖金数额,并覆盖了管理人员类的 pay()函数重新计算工资。 (2)程序中建立了 3个雇员 (一个普通雇员、一个管理人员和一个主管 )的档案,并打印出各自的工资表。事实上,将 3种雇员分开处理会很繁琐,如果能够把他们看作同一种类型,都看成雇员类 (他们本来都是雇员 )统一处理,但在计算工资时再调用各自的 pay()函数,那程序会简单得多。这就需要利用多态特性,只要将 pay()函数定义成虚函数,便可以实现了。

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

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1