1、软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 56及答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 阅读下列说明,回答问题 1问题 4。【说明】 某超市的销售业务由一个销售业务管理系统进行管理,该系统每完成一次交易都需要提供顾客发票,其格式见表 6所示。 对于这样一个销售业务管理系统,分别给出了以下两种关系数据库的设计 (下划线表示主关键字 ) 设计一: 顾客 Customer(顾客代码 Cno,姓名 name,住址 address,联系电话 phone) 收银员 Salesman(收银员代码 Sno,身份证号 idno,姓名 name,住址 address,联系电
2、话 phone) 商品 Merchandise(商品代码 Mno,商品名称 Mname,价格 price) 发票 Invoice(发票号码 Ino,交易日期 Idate,顾客代码 Cno,收银员代码 Sno,商品代码 Mno,单价 unitpfice,数量 amount) 设计二: 顾客 Customer(顾客代码 Cno,姓名 name,住址 address,联系电话 phone) 收银员 Salesman(收银员代码 Sno,身份证号 idno,姓名 name,住址 address,联 系电话 phone) 商品Memhandise(商品代码 Mno,商品名称 Mname,价格 price
3、) 发票 Ivoice(发票号码Ino,交易日期 Idate,顾客代码 Cno,收银员代码 Sno) 发票明细 Invoicedetail(发票号码 Ino,商品代码 Mno,单价 unitprice,数量 amount) 1 设计一的关系模式 Invoice最高满足第几范式 ?为什么 ?设计一和设计二哪个更加合理 ?为什么 ? 2 根据设计二中关系模式,以下 SQL语句是用于 “建立 2005年 1月期间每张发票的发票号,交易日期,交易 商品件数和交易总金额的视图 ”的不完整语句,请填补其中的空缺。 CREATE VIEW Invoice -total(1) SELECT Invoice.
4、ino, ldate,(2), (3) FROM Invoice, lnvoicedetail WHERE(4)AND ldate BETWEEN 2005-01-01AND 2005-01-31 GROUPBY(5); 3 根据设计二中关系模式,以下 SQL语句是用于 “查询从未售出的商品信息 ”的不完整语句,请填 补其中的空缺。 SELECT Mno, Mname, price FROM Merchandise(1) WHERE(2) (SELECT(3) FROM lnvoicedetail WHERE A. Mno=lnvoicedetail. Mno); 4 设计二中关系 Merch
5、andise中由属性 price表示商品价格,关系 lnvoicedetail中的属性 unitprice也表示商品价格。两个是否有必要同时存在 ?为什么 ? 5 阅读以下说明,回答问题 1 3,将解答填入对 应的解答栏内。 说明 下图是有关学生 (student)和学习 (study)信息的对象关联图。5 试解释这个对象联系图。 6 试用 ORDB的定义语言,定义这个数据库。 7 使用 ORDB的查询语言,分别写出下列查询的 SELECT语句; 1)检索每个学生的学习课程和成绩。 2)检索至少有一门课程的求学地与籍贯在同一城市的学生的学号和姓名。 8 阅读以下说明和图,回答问题 1和问题 2
6、,将答案写在答卷的对应栏内。 【说明】 银行客户需要从 ATM取 100元,他向 ATM的读卡机插卡,读卡机读取卡 号,然后 ATM屏幕初始化, ATM提示输入 PIN(密码 ),客户输入 PIN(123456), ATM打开他的账户,密码有效,因此 ATM提示选择事务,客户选择取钱, ATM提示输入金额,客户输入 100元, ATM验证账户上有足够的钱,就从账上减去 100元, ATM吐出 100元,并退出客户的卡。 8 根据上面的描述,完成下述的时序图。9 比较时序图和协作图,说明区别和联系。 10 阅读以下某建账软件的技术说明和数据流图,根据要求回答问题 1问题 6。 说明 某商业银行已
7、有一套基于客户机 /服务器 (C/S)模式 的储蓄系统 X和一套建账软件 Y。建账软件 Y主要用于将储蓄所手工处理的原始数据转换为系统 X所需的数据格式。该建账软件具有以下功能。 (1)分户账录入:手工办理业务时建立的每个分户账数据均由初录员和复录员分别录入,以确保数据的正确性。 (2)初录 /复录比对:将初录员和复录员录入的数据进行一一比较,并标记两套数据是否一致。 (3)数据确认:当上述两套数据完全一致后,将其中任一套作为最终进入系统 X的原始数据。 (4)汇总核对和打印:对经过确认的数据进行汇总,并和会计账目中的相关数据进行核对,以确保数据的整体正确性,并 打印输出经过确认的数据,为以后
8、核查可能的错误提供依据。该建账软件需要打印的分户账清单样式如表 3-8所示。(5)数据转换:将经过确认的数据转换为储蓄系统 X需要的中间格式数据。 (6)数据清除:为加快初录和复录的处理速度,在数据确认之后,可以有选择地清除初录员和复录员录入的数据。 该软件的数据流图如图 3-17图 3-19所示,图中部分数据流数据文件的格式如下。 初录分户账 =储蓄所号 +账号 +户名 +开户日 +开户金额 +当前余额 +性质 复录分户账 =储蓄所号 +账号 +户名 +开户日 +开户金额 +当前余额 +性质 会计账目 =储蓄 所号 +总户数 +总余额 操作结果 =初录操作结果 +比对操作结果 +复录操作结果
9、 10 不考虑数据确认处理 (加工 2),请指出图 3-17图 3-19数据流图中可能存在的错误。 11 请使用 说明 中的词汇,给出数据确认处理所需的数据流,在图 3-19建账软件第 1层数据流图中的全部可选起点。 12 请使用 说明 中数据字典条目定义形式,将以下 (1)和 (2)空缺处的内容填写完整。 初录数据 =(1) 复录数据 =(2) 13 请使用 说明 中数据字典条目定义形式,给出图 3-18中的 “手工分 户账 ”数据流和图 3-19中的 “初录分户账 ”和 “复录分户账 ”的关系。 14 加工 1(录入比对处理 )除能够检查出初录数据和复录数据不一致之外,还应检测的错误有 (
10、3)。 A显示器无法显示 B输入的无效字符 C输入数据的格式 D输入数据的界限 E打印机卡纸 F重复录入同一账户 G输入的半个汉字 H汇总数据与会计账目不符 15 打印分户账清单 (表 3-8)时,必须以 “(4)”作为关键字进行排序才能满足系统需求。 A储蓄所 B账号 C开户日 D户名 E其他分户账数据 F总户数和总余额 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 16 阅读以下说明和 JAVA 2代码,将应填入 (n)处的字句写在对应栏内。 说明 以下程序为类类型的变量应用实例,通过异常处理检验
11、了类 CCircle的变量的合法性,即参数半径应为非负值。仔细阅读代码和相关注释,将程序补充完整。 JAVA代码 /定义自己的异常类 class CCircleException extends Exception / 定义类 CCircle class CCircle private double radius; public void setRadius ( double r ) (1) if ( r 0 ) (2) else (3) Public void show ( ) System. out. println ( “area=“+3.14*radius*radius ); publ
12、ic class ciusample public static void main ( String args ) CCircle cir=new CCircle( ); (4) cir. setRadius ( -2.0 ) (5) System. out. println ( e+“ throwed“ ) ; cir. show( ) ; 17 阅读下列程序说明和 C代码,将应填入 (n)处。 【程序 5说明】 著名的四色定理指出任何平面区域图均可用四种颜色着色,使相邻区域着不同的颜色。本程序对给定的区域图找出所有可能的不超过四种颜色的着色方案。 程序中用 1 4表示四种颜色。要着色的
13、N个区域用 0 N-1编号,区域相邻关系用 adj矩阵表示,矩阵的 i行 j列的元素为 1,表示区域 i与区域 j相邻;矩阵的 i行 j列的元素为 0,表示区域 i与区域 j不相邻。数组 color用来存储着色结果,colori的值为区域 i所着颜色。 【程序 5】 #include stdio.h #define N 10 void output(int color)/*输出一种着色方案 */ int i; for(i=0; i N; i+) printf(“%4d“, colori); printf(“n“); int back (int * ip, int color)/*回溯 */ i
14、nt c=4; while(c=4) if(*ip =0)return 0; (*ip); c=(1); color*ip=-1; return c; /*检查区域 i,对 c种颜色的可用性 */ int colorOk(int i, int c, int N, int color int j; for(j=0; j i; j+) if(2) return 0; return 1; /*为区域 i选一种可着的颜色 */ int select (int i, int c, int adjN, int color) int k; for(k=c; k =4; k+) if(colorOK(3) r
15、eturn k; return 0; int coloring(int adjN)/*寻找各种着色方案 */ int colorN, i, c, cnt; for(i=0; i N; i+)colori =-1; i=c=0; cnt=0; while(1) if(c=(4)=0) c=back( ; class V1Drawing: public Drawing public: void drawLine(double x1,double y1, double x2, double y2) DP1: draw_a_line(x1, y1, x2, y2); ; class V2Drawing
16、: public Drawing public: void drawLine(double x1, double y1,double x2, double y2) (2) ; class Shape privatc: (3) dp; public: Shape(Drawing*dp); virtual void draw()=0; void drawLine(double x1, double y1,double x2, double y2); ; Shape: Shape(Drawing*dp) _dp=dp; void Shape:drawLine(double x1, double y1
17、, double x2, double y2) /画一条直线 (4); class Rectangle: public Shape privatc: double_x1, _y1, _x2, _y2; public: Rectangle(Drawing *dp, double x1, double y1, double x2, double y2); void draw(); ; Rectangle: Rectangle(Drawing*dp, double x1, double y1, double x2, double y2) : (5) _x1=x1; _y1=yl;_x2=x2; _y
18、2=y2; void Rectangle:draw() /省略具体实现 18 (1) 19 (2) 20 (3) 21 (4) 22 (5) 软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 56答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【正确答案】 设计一中 Invoice最高满足第一范式。 根据题意可得出以下函数依赖: InoSno , Cno, Idate 而关系 Invoice的主码是 Ino和 Mno。非主属性 Sno、 Cno和 Idate并非完全依赖于主码,因此关系 Invoice不满足第二范式,最高满足第一范式。 设计二更加合理。因为设计二解决了设
19、计一中由于非主属性不完全依赖于主码而造成的数据冗余等问题。 2 【正确答案】 (1)AS(2)SUM(amount)(3)SUM(unitpnce * amount) (4)Invoice. Ino=Invoicedetail. Ino(5)Invoice. Ino, Idate或 Invoicedetail. Ino. Idate 3 【正确答案】 (1)A和 AS A (2)NOTEXISTS (3)* 4 【正确答案】 有必要。 Merchandise中由属性 price表示的是商品的当前价格,超市中的价格是有可能变动的,而关系 Invoicedetail中的属性 unitprice表示
20、的是在开具发票时该商品的单价。 【试题解析】 设计一中根据题意可得出以下函数依赖: InoSno , Cno, ldate 而关系 Invoice的主码是 Ino和 Mno。非主属性 Sno、 Cno和 Idate并非完全依赖于主码,因此关系 Invoice不满足第二范式,最高满足第一范式。 关系 Invoice的设计的不合理在于该关系中将发票的单值属性 (发票号码 Ino ,交易日期 Idate,顾客代码 Cno,收银员代码 Sno)和多值属性 (商品代码 Mno ,单价 unitprice,数量 amount)混合在一个关系中,造成关系 Invoice的冗余异常、修改异常和删除异常。而设计
21、二则将设计一中关系 Invoice分解,使得发票的单值属性和多值属性分开,避免了异常。因此,设计二明显比设计一要好。 问题 2是要建立 2005年 1月期间每张发票的发票号,交易日期,交易商品件数和交易总金额的视图。 首先建立视图的格式为 CREATE VIEW视图名 AS视图定义,因此 (1)空的答案为 AS。 本查询是从 Invoice和 Invoicedetail两个关系中查询,两关系的连接条件是两关系的 Ino相等,因此 (4)空的答案是 Invoice. Ino=Invoice- detail.Ino。 统计每张发票的信息需要按发票将数据分组,也就是按发票号 Ino分组,但因为查询关
22、系 Invoice和 Invoicedetail都有属性 Ino。为了避免二义性,所以分组属性是 Invoice. Ino或者是 Invoieedetail. Ino。因为在包含聚合运算的 Select子句中,只有在 Group By子句中出现的属性才能在 SELECT子句中以非聚合形式出现,而 SELECT子句中有非聚合形式的属性 Idate出现,所以 (5)空的答案是 Invoice. Ino. Idate或 Invoicedetail. Ino. Idate。 需要查询的是每张发票的交易商品件数和交易总金额。交易商品件数是发票商品数量的总和,因此 (2)空的答案是 SUM(amount)
23、。交易总金额是每条交易商品明细中每条记录商品金额的总和,每条记录商品金额是 unitprice*amount,因此 (3)空的答案是 SUM(unitprice*a- mount)。 问题 3是查询从未售出的商品信息。 SQL语句中有两种格式为表或视图取别名: “表名 AS别名 ”或 “表名 别名 ”。由题 中可以看出 Merchandise的别名是 A,因此填空 (1)的答案是 A或者 AS A。 要查询 “从未出售 ”的商品,也就是要查询的商品在交易记录中不存在,因此 (2)空的答案是 NOT EXISTS。 Merchandise中由属性 price表示的是商品的当前价格,超市中的价格是
24、有可能变动的,而关系 Invoicedetail中的属性 unitprice表示的是在开具发票时该商品的单价。如果缺少其中任意一个,将导致商品单价不能进行调整,否则,当商品的单价发生变化时,销售历史中的商品价格就随着发生变化。 5 【正确答案】 对象 student 包含身份证号,姓名,籍贯和学习 (studies)等属性,对象 study 包含课程名,成绩,求学地,大学以及学生 (student )等属性。对象student 和 study 之间联系为 1:N。 基本表的创建,修改和撤销语句语法为: CREATE TABLE SQL 模式名 . 基本表名 (列名类型, 完整性约束, ) ;
25、其中,完整性约束包括主键子句,检查子句和外键子句。 6 【正确答案】 CREATETYPE MyString char vaiying; CREATE TABLE student( sno integer, shame MyString, city MyString studies setoff( ref (study); CREATETABLE study(cours 7 【正确答案】 1) SELECT A. sname, B. coursename, B. grade FROM student as A, A. studies as B; 2) SELECT A. sno, A. sna
26、me FROM student as A, A. student as B WHERE A. ciy = B. ciy 8 【正确答案】 1插卡 2读卡号 3提示输入 PIN 4输入 PIN 5验证 PIN 6选择事务 (取钱 ) 7扣钱 (100元 ) 8提供钱 (100元 ) 9退卡 9 【正 确答案】 时序图和协作图都可以用来描述系统对象之间的交互。时序图强调一组对象之间调用的时间顺序,协作图强调这组对象之间的关系。 【试题解析】 时序图用来描述对象间的交互行为。它注重消息的时间顺序,即消息的发送和接收的顺序。 时序图的图形组成成分为:对象、生存线、消息和对象激活期 (本题中省略 )。
27、试题中要求的就是完成消息,所以要根据消息的时间顺序,和消息发出与接收的对象。由于已经给出了详细明晰的动作过程描述,未完成的时序图中也标识出对象和部分消息,所以,应该比较容易地完成其它的消息。 10 【正确答案】 这是一道要求考生掌握分层数据流图输入 /输出平衡原则的分析题。本题的解答思路如下。 每个加工必须既有输入数据流,又有输出数据流。但一个加工的输入数据流不要与输出数据流同名。在整套数据流图中,每个数据存储必须既有读的数据流,也有写的数据流。但在某张子图中,可能只有读没有写,或者是只有写而没有读。 在数据流图 (DFD)中,加工处理是对输入数据进行相关处理并生成输出数据的过程,因此,对于
28、DFD中的每个加工处理至少要有一个输入数据流和一个输出数据流。根据这一原则仔细检查图 3-17图 3-19可知,在建账软件第 0层数据流图 (见图 3-18)中,数据确认处理 (加工 2)和数据清除处理 (加工 6)只有输出数据流而没有输入数据,这是图 3-18中存在的错误之处。由于题目中已说明 “不考虑数据确认处理 (加工 2)”,因此,本试题的正确答案是 “在建账软件第 0层数据流图 (图 3-18)中,数据清除处理 (加工 6)没有输入数据流 ”。 11 【正确答案】 这也是一道要求考生掌握分层数据流图输入 /输出平衡原则的综合分析题。本题的解答思路如下。 在本试题说明中关于 “数据确认
29、 ”功能的描述 “数据确认:当上述两套 数据 (即初录员和复录员录入的数据 )完全一致后,将其中任一套作为最终进入系统 X的原始数据 ”中, “进入系统 X”其对应于建账软件第 0层数据流图 (见图 3-18)中 “数据确认 ”处理。由此可知,在图 3-19建账软件第 1层数据流图中,无论是 “初录数据 ”数据存储还是 “复录数据 ”数据存储都可作为 “数据确认 ”处理的数据源。 12 【正确答案】 由题干中给出的关键信息 “分户账录入:手工办理业务时建立的每个分户账数据均由初录员和复录员分别录入 ” 和 “初录 /复录比对:将初录员和复录员录入的数据进行一一比较,并标记两套数据是否一 致 ”
30、可知,初录员录入的 “初录数据 ”中应包含 “初录分户账 ”和 “一致性标志 ”,而复录员录入的 “复录数据 ”中应包含 “复录分户账 ”和 “一致性标志 ”。然后将它们表达成 说明 中数据字典条目定义形式如下。 初录数据 =初录分户账 +一致性标志 (或初录数据 =手工分户账 +一致性标志 ) 复录数据 =复录分户账 +一致性标志 (或复录数据 =手工分户账 +一致性标志 ) 13 【正确答案】 这是一道要求考生掌握分层数据流图中父图与子图平衡原则的综合分析题。本题的解答思路如下。 任何一个数据流子图必须与它上一层父图的某个加 工相对应,即父图中某加工的输入 /输出数据流必须与它的子图的输入
31、 /输出数据流在数量和名字上相同。但如果父图中的数据流是由子图中的几个数据流合并而成,即子图中组成这些数据流的数据项全体正好是父图中的这一个数据流,这种情况下也认为是平衡的。 在建账软件第 0层数据流图 (见图 3-18)中, “手工分户账 ”数据流是 “1录入比对 ”处理的输入数据流,而 “1录入比对 ”处理包含了建账软件第 1层数据流图 (见图 3-19)中的 “1.1初录 ”处理、 “1.2复录 ”处理和 “1.3比对 ”处理。在图 3-19中, “1.1初录 ”处理的输入数据 流是 “初录分户账 ”, “1.2复录 ”处理的输入数据流是 “复录分户账 ”,因此, “手工分户账 ”数据流
32、包含了 “初录分户账 ”和 “复录分户账 ”,将其表达成本试题 说明 所示例的数据字典条目定义形式如下。 手工分户账 =初录分户账 +复录分户账 14 【正确答案】 由 问题 3要点解析可知,建账软件第 0层数据流图 (见图 3-18)中“1录入比对 ”处理包含了第 1层数据流图 (图 3-19)中的 “1.1初录 ”、 “1.2复录 ”和 “1.3比对 ”这 3个处理。结合题干给出的关键信息 “初录 /复录比对:将初录员和复录员录入的数据进行一 一比较,并标记两套数据是否一致 ”和常识可知,加工 1(录入比对处理 )除能够检查出初录数据和复录数据不一致之外,还应检测的错误有 输入的无效字符
33、(如在 “账号 ”数据项中输入了小数点、 $和 等其他字符 )、 输入数据的格式 (如 “账号 ”数据项规定每 4位数字后加一位半角空格字符等 )、 输入数据的界限 (例如 “开户日 ”的数值是否超过了当前日期等 )、 输入的半个汉字 (在某些运行环境中 (或输入法 )中可能存在这种情况 )和 (初录员 /复录员 )重复录入同一账户等。 由题干给出的关键信息 “汇总核对和打印:对经过确认的数据进行汇总, 并和会计账目中的相关数据进行核对 ” 可知,检查汇总数据和会计账目是否相符是在图 3-18中处理 “3汇总核对 ”所完成的功能;数据打印是在图 3-18中处理 “4打印清单 ”所完成的功能。同
34、时根据常识可知, “1录入比对 ”处理通常未涉及检查 “显示器无法显示 ”和 “打印机卡纸 ”等硬件故障的功能。 15 【正确答案】 仔细阅读分户账清单样式表 (见表 3-8)可知,表中数据是按照 “储蓄所 ”这一数据字段进行分组的,每一分组中均通过 “共 XXXX户,总余额YYYYYYY.YY元 ”格式给出了储蓄所的统计数据。这就要求在数据查询 /打印 操作中,至少要按照 “储蓄所 ”这一数据字段进行排序才能实现。在实际应用中,在软件实现时也可以按照 “账号 ”和 “开户日 ”等数据字段进行排序,但从表 3-8数据格式中无法确定是否需要这些排序工作。 二、选答题(共 3道大题,每道大题 15
35、分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 16 【正确答案】 (1)throws CCircleException (2)throw new CCircleException(); /抛出异常 (3)radius=r; (4)try (5)catch(CCircleException e) /捕捉由 setRadius()抛出的异常 【试题解析】 本题主要考查 JAVA语言中 Class类型的变量应用。本段代码中对于类 Ccircle的半径变量进行合法性检验,如果圆 Ccircle的半径为负值,则抛出异常处理。 17 【正确答案】 (1
36、)color*ip(2)adjij!=0 & colorj=c (3)i, k, adj, color(4)select(i, c+1, adj, color) (5)colori=c 【试题解析】 (1)Back()函数将 color数组中紧邻 *ip位置的,颜色值为 4的一个连续区域的元素赋值为 -1。 (2)colorOK()判断区域 i对其之前的所有区域是否可以着色 c。该句是检查 i的相邻区域是否已有颜色为 c的。 (3)这是 colorOK的参数列表。 Select为区域 i选择一种颜色,使用 colorok函数对各种颜色 (值为 c 4的一种,不一定是所有颜色 )分别进行检查。
37、(4)Coloring()函数寻找各种着色方案。它先从区域 0开始,检查颜色,并着色 (着色的顺序总是从小色值的颜色开始的 )。当发现某一区域无法着色时,就使用 back()函数,将该区域之前的一个连贯区域进行洗色 (对应 color数组中赋值为 -1)并回溯,并从回溯后的位置,重新开始进行颜色检查和赋色,但使用的色值比该位置洗色前的颜色值更大。若所有区域均已着色,则输出该着色方案。然后,使用 back函数,重新进行着色。当所有颜色方案均已找到后,函数结束。 (5)该句对区域 i赋颜色 c。 c为之前 select函数所选出的可以用的颜色。 18 【正确答案】 virtual 【试题解析】 由
38、函数 drawLine()结尾的 “=0”易知,空 (1)应填 virtual。 19 【正确答案】 DP2: drawline(x1, x2, y1, y2) 【试题解析】 是调用 DP2系统的相应方法,可参照 DP1的对应函数的函数体,但要注意参数不完全相同,应填 DP2:drawline(x1,x2, y1, y2)。 20 【正确答案】 Drawing 【试题解析】 _dp属性是用来存储 Drawing对象的,参照 shape的构造函数可确认这一点,空 (3)应填 Drawing*。 21 【正确答案】 _dp- drawLine(x1, y1, x2, y2) 【试题解析】 Shape类的 drawLine方法是通过调用 Drawing对应的方法来实现所需要的功能,因此空 (4)应填 dp- drawLine(x1,y1,x2,y2)。 22 【正确答案】 Shape(dp) 【试题解析】 显然是基类构造函数,应填 Shape(dp)。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1