1、软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 32及答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 阅读下列说明和流程图,回答问题 1至问题 3,将解答写在对应栏内。 【说明】 流程图描述了某宽带数据专线管理系统的部分处理流程。 (1)凡申请宽带数据专线使用者,均需填写专线申请表。系统把申请表存储在专线申请登记文件中,等待分配专线号。 (2)系统为申请者指定专线号,并根据通信距离 (按地区计算 )、通信计算初装费和月租费,然后发初装通知单送给用户,并产生施工单交有关部门施工。同时产生专线处理文件。专线号是专线的唯一标识。 (3)施工结束后,系统更新用户文件,并产生专
2、线计费文件,作为以后收费的依据。 (4)一个用户可以租用多条专线,用户可用现金或银行托付两种方式支付租金,但一个用户只能使用一种付款方式。系统每月按用户 (而不是专线 )为单位计费出账。 (5)流程图中各数据文件及有关单据所含的数据项如下。 专线申请表及专线中请登记文件: 申请号、用户名称、付款方式,开户银行代码、账号、主端名称、主端地址、对端地址、对端所在地区、通信速率、设备接口、申请日期。 专线处理文件; 申请号、专线号、用户名 称、付款方式、开户银行代码、账号、初装费、月租费、完工日期。 初装费收据: 专线号、初装费、交费日期。 施工单: 施工单号、专线号、主端名称、主端地址、对端所在地
3、区,通信速率、设备接口、完工期限。 完工单: 施工单号、专线号、完工日期。 用户文件: 用户编号、用户名称、付款方式、开户银行代码、账号。 专线计费文件: 专线号、用户编号、月租金、开通日期。 【问题 1】 宽带数据专线价目文件由哪些数据项组成 ? 【问题 2】 为了避免在用户尚未支付初装费时就去施工,有人提议将图中从处理 2产生的施工单改成从处理 3产生施 工单。试问从处理3能否产生施工单 ?为什么 ? 【问题 3】 当一个用户使用多条专线时,若允许该用户对其中的一些专线采用现金支付,对另一些专线采用银行托付方式,则在尽量减少数据冗余的前提下,应如何调整有关的数据文件。 2 阅读下列说明,回
4、答问题 1和问题 2,将解答写在答卷的对应栏内。 【说明】 供应商 零件 工程项目数据库由以下 4个关系模式构成: S(SNO, SNAME, STATUS, CITY) P(PNO, PNAME, COLOR, WEIGHT, CITY) J(JNO, TNAME, CITY) SPJ(SNO, PNO, JNO, QTY) 其中,供应商 S,零件 P和工程项目 J 分别由供应商号 (SNO),零件号 (PNO)和工程项目号 (JNO)唯一标识。供货 SPJ是指由某个供应商向某个工程项目供应某些数量的某种零件。 【问题 1】 请用 SQL语言完成如下的操作。 找出给北京的工程项目提供不同的零
5、件号: 将没有供货的所有工程项目从 J中删除; 查询这样的工程项目号:供给该工程项目的零件 P1的平均供应量大于供给工程项目 n的任何一种零件的最大供应量。 【问题 2】 定义一个视图,它由所有这样的工程项目 (工程项目号与所在城市名称 )组成:它们由供应商 S1供货且使用零件 P1。 3 阅读下列说明和图,回答问题 1至问题 3,将解答写在答卷的对应栏内。 【说明】 “进货库存信息管理系统 ”是 ERP系统中一个重要的子系统,下面是该系统的一个简化了的主结构功能图。 其中一些各系统功能描述如下: 进货信息管理系统 进货单据建立文件维护管理工作。 进货查询统计管理工作。 进货过账工作。 在进货
6、管理系统中,要处理 “成本计算和费用摊消 ” 的问题。处理方式如下 所述。 进口货物的成本计算: (1)先算出本次进货货物的原币总成本金额。 (2)再依照当时原币 (如:美金 US$,英镑、港币 HK$等 )的汇率乘以本次进货原币总成本金额,算出本次进货台币总成本金额。 (3)再计算出本次进货所产生的全部费用总金额 (包含:关税、报关费、运费、其他费用等费用 )。 (4)将 “本次进货台币总成本金额 ”加上 “全部费用总金额 ”算出本次实际的 “总成本金额 ”。 (5)再利用下述公式算出各单项货物的 “单项货物的成本金额 ”。 (6)最后一个步骤,再将“单项货物的成本金额 ”除以单项货物本次进
7、货的 数量,即可算出 “单一货物本次进货实际的成本金额 ”。 【问题 1】 将此 “进口货物的成本计算方式 ”利用UML的类图米设计结构,要求使用到抽象和继承。写出类 1和类 2名称 (中文、英文皆可,但要说明其主要功能 ) 【问题 2】 说明类图都包括什么。 【问题 3】 解释依赖与泛化,请举例。 4 阅读下列 C函数和函数说明,将应填入 (n)处的字句写在对应栏内。 【说明】 函数 DeleteNode (Bitree *r, int e)的功能是:在树根结点指针为 r的二叉查找 (排序 )树上删除键值为 e的结点,若删除 成功,则函数返回 0,否则函数返回 -1。二叉查找树结点的类型定义
8、为: typedef struct Tnode int data; /*结点的键值 */ struct Tnode *Lchild, *Rchild; /*指向左、右子树的指针 */ *Bitree: 在二叉查找树上删除一个结点时,要考虑 3种情况: 若待删除的结点 p是叶子结点,则直接删除该结点; 若待删除的结点 p只有一个子结点,则将这个子结点与待删除结点的父结点直接连接,然 后删除结点 p; 若待删除的结点 p有两个子结点,则在其左子树上,用中序遍历寻找关键值最大的结点 s,用结点 s的值代替结点 p的值,然后删除结点 s,结点 s必属于上述 、 情况之一。 【函数】 int Delet
9、eNode (Bitree *r, int e) Bitree p=*r,pp, s, c; while ( (1) ) /*从树根结点出发查找键值为 e的结点 */ pp=p; if(e p- data) p=p- Lchild; else p=p- Rchild; if(!P) return-1; /*查找失败 */ if(p- Lchild p- data=s- data; p=s; /*处理情况 、 */ if ( (4) ) c=p- Lchild; else c=p- Rchild; if(p=*r) *r=c; else if ( (5) ) pp- Lchild=c; else
10、 pp- Rchild=c; free (p); return 0; 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 5 阅读下列 C+程序和程序说明,将应填入 (n)处的字句写在对应栏内。 【说明】 Point是平面坐标系上的点类, Line是从 Point派生出来的直线类。 #include iostream.h class Point public: Point (int x, int y) ; Point (Point Point(); void set (double x, double y)
11、 ; void print(); private:double X,Y; ; Point:Point (int x, int y) /Point 构造函数 X=x; Y=y; Point:Point ( (1) ) /Point 拷贝构造函数 X=p.X; Y=p.Y; void Point:set (double x, double y) X=x; Y=y; void Point:print() cout ( X “,“ Y “) “ endl; Point: Point() cout “Point 的析构函数被调用 ! “ endl; class Line: public Point pu
12、blic: Line (int x, int y, int k) ; Line (Line Line(); void set (double x, double y, double k) void print(); private:double K; ; (2)/Line 构造函数实现 K=k; (3)/Line 拷贝构造函数实现 K=s.K; void Line:set (double x, double y, double k) (4); K=k; void Line:print() cout “ 直线经过点 “; (5); cout “斜率为 : k=“ K endl; Line: :
13、Line() cout “Line 析构函数被调用 ! “ endl; void main() Line 11 (1,1,2) ; 11 .print(); Linel2 (11) ; 12.set (3,2,1) ; 12.print(); 6 阅读下列 Java程序和程序说明,将应填入 (n)处的字句写在对应栏内。 【说明】一条直线是由两个点组成的,代码如下。 public class Point private int x, y; /coordinate public Point (int x, int y) (1)=x; (2); public int GetX() return x;
14、 public int GetY() return y; class Line /line segment private (3); /extremc points Line (Point a, Point b) /constructor p1 =(4); p2=(5); public double Length() return Math.sqrt (Math.pow (p2.GetX()-pl.GetX(),2) +Math.pow (p2.GetY()-p1.GetY(),2) ; 软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 32答案与解析 一、必答题(共 4道大题,每道
15、大题 15分) 1 【正确答案】 问题 1 对端所在区、通信速率、初装费、月租费 问题 2 不能,因为处理 3的输入文件及单据中缺少施工单中所需的主端名称、主端地址、对端地址、对端所在地区、通信速率、设备接口等数据项。 问题 3 在专线计费文件中 加上付款方式数据项,取消用户文件中的付款方式数据项。 【试题解析】 专线价目文件只在处理 2为专线登记文件提供数据项,可能影响到处理 2输出的初装单通知、施工单和专线处理文件。初装单通知在说明中没有提到,不予考虑。检查施工单和专线处理文件的数据项,可发现初装费、月租费没有出处,所以它们应由专线价目文件提供。同时,专线价目文件与专线申请登记文件配套时,
16、应有一个共同的数据项用以关联,综合考虑,这个数据项应该是帮助选择初装费、门租费,根据常识,应该是对端所在地区 (决定初装费 )、通信速率(决定月租费 )。 对 于问题 2,首先看处理 3的输入数据源,它们是专线处理文件和初装费收据,它们的数据项不能完全生成施工单。 如果要满足问题 3的要求,取消限制,允许租用多条专线的用户对具体的专线采用不同的付款方式,那么付款方式就不再是某个用户的属性,而是某条专线的属性。所以,应该在专线计费文件中加上付款方式数据项,取消用户文件中的付款力式数据项。 2 【正确答案】 问题 1 SELECTDISTlNCT SPJ PNO FROM SPJ, J WHERE
17、 SPJ JNO=J JNO AND J CITY 北京 DELETE FROM J WHERE JNO NOT IN ( SELECT JNO FROM SPJ); SELECT DISTINCT JNO FROM SPJ WHERE 【试题解析】 “找出给北京的工程项目提供不同的零件号 ”需要两个表 (工程项目 J和供货 SPJ)的联合查找,要使用 DISTINCT 来消除重复项。 “将没 有供货的所有工程项目从 J中删除 ”,首先要在于查向内从供货 (SPJ)表内将所有供货的工程项目号 (JNO)查山,然后使用 NOTIN在工程项目表 (J)内将不含有这些 JNO的记录删除。 问题 1中
18、 这个查询需要使用条件语句 having,还需要使用数学函数 AVG、MAX。 考生还要熟悉视图、索引的语句,请参考有关教材,这里不做说明。 3 【正确答案】 问题 1 类 1是抽象类 “单一货物成本计算 ”,类 2是继承类 “进口货物成本计算 ”。 问题 2 类、接口、关系 (合作、依赖、泛化、关联 )、限制 和批注 问题 3 依赖 (Dependency):依赖关系显示一个模型元素需要另一个模型元素来达到某种目的,即一个事物 (独立事物 )发生变化会影响另一个事物 (依赖事物 )的语义。程序中的引用 (Import)就是一种依赖关系。 泛化 (Generalization);描述的是两组某
19、些方面具有共性的事务之间存在的一种关系。父类到子类的继承就是一种泛化。 【试题解析】 题中描述的是进口货物成本计算的方式,要求使用抽象和继承来设计类,根据面向对象设计方法和题意可以得到:应建立一个抽象类 “甲一货物成本计算 ”,而 “进口货物成本计算 ”类则继承并实现这个抽象类。 所以,根据图示中泛化的表示方向,类 1是抽象类 “单一货物成本计算 ”,类 2是继承类 “进口货物成本计算 ”。 类图根据系统中的类,以及各个类之间的关系描述系统的静态视图。 类图的结构,简单的分析一般包括下列的事物和组件: .类 (CLASS) .接口 (Interface) .合作 (Collaboration)
20、 .依赖 (Dependency) .泛化 (Generalization) .关联 (Association) .限制和批注 4 【正确答案】 (1)p &p- data!=e;或 p!=NULL&p- data!=e或p&(*p).data!=e (2)p- Lchild或 (*p).Lchild (3)p- Rchild或 (*p).Rchild (4)p- Lchild或 (*p).Lchild (5)pp- Lchid p或 p (*pp).child 【试题解析】 本程序的功能是删除二叉查找树的一个结点。题目中对怎样删除结点有着比较详细的说明。 第 1种情况就是删除叶子结点,叶子结
21、点可以 直接删除,这一点很好理解,因为叶子结点删除后并不会打乱查找树的顺序。 第 2种情况是删除只有一个子结点的结点,只需把其子结点代替父结点即可。若子结点下有子树,子树结构不变。 第 3种情况要复杂一点,要用到二叉查找树的一些性质,就是结点右子树的所有结点都大于根结点,左子树所有结点都小于根结点。所以,当删除了有左右子树的结点时,要在左子树找最大的结点,来替换被删结点。 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 5 【正确答案】 (1)Point &p (2)Linc: Line(int x,
22、int y, int k): Point(x, y) (3)Line: Line(Line &s): Point(s) (4)Point: set(x, y) (5)Point: print() 【试题解析】 (1)Point &p Point拷贝构造函数的形参必须是 Point对象的引用。 (2)Linc: Line(int x, int y, int k): Point(x, y) Line的构造函数必须先调用 Point构造函数构造 Line的基类 Point。 (3)Line: Line(Line &s): Point(s) Line的拷贝构造函数必须先调用 Point拷贝构造函数来构
23、造并复制 Line对象的基类 Point部分。 (4)Point: set(x, y) Line的 set成员函数必须通过 Point的 set成员函数才能访问基类的私有成员。而且在 set名前必须加成员名限定 Point:,以区别 Line的 set函数。 (5)Point: print() Line的 print成员函数必须通过 Point的 print成员函数才能访问打印基类的私有成员。而且在 print名前必须加成员名限定 Point:,以区别 Line的 print函数。 6 【正确答案】 (1)this X (2)this y=y (3)Point p1,p2 (4)new Poi
24、nt(a GetX(), a GetY() (5)new Point (b.GetX(), b, GetY() 【试题解析】 (1)this x 构造函数 Point将形参 x和 y赋值给当前对象成员 x和 y,因此必须用 this指针区别。 (2)this y=y 构造函数 Point将形参 x和 y赋值给当前对象成员 x和 y,因此必须用 this指针区别。 (3)Point p1,p2 Point类的 p1,p2 两个点对象指针,组合成 Line对象。 (4)new Point(a GetX(), a GetY() 给 Line对象的两个点对象指针各自生成对象 Point,并用 a和 b点对象为其赋初值。 (5)new Point (b.GetX(), b, GetY() 给 Line对象的两个点对象指针各自生成对象 Point,并用 a和 b点对象为其赋初值。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1