软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷
72 (题后含答案及解析)
题型有:1. 必答题
必答题(共4道大题,每道大题15分)
阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。 现准备为某银行开发一个信用卡系统CCMS,该系统的基本功能如下。 (1)信用卡申请。非信用卡客户填写信用卡申请表,说明所要申请的信用卡类型及申请者的基本信息,提交CCMS。如果信用卡申请被银行接受,CCMS将记录该客户的基本信息,并发送确认函给该客户,告知客户信用卡的有效期及信贷限额;否则该客户将会收到一封拒绝函。非信用卡客户收到确认函后成为信用卡客户。 (2)信用卡激活。信用卡客户向CCMS提交激活请求,用信用卡号和密码激活该信用卡。激活操作结束后,CCMS将激活通知发送给客户,告知客户其信用卡是否被成功激活。 (3)信用卡客户信息管理。信用卡客户的个人信息可以在CCMS中进行在线管理。每位信用卡客户可以在线查询和修改个人信息。 (4)交易信息查询。信用卡客户使用信用卡进行的每一笔交易都会记录在CCMS中。信用卡客户可以通过CCMS查询并核实其交易信息(包括信用卡交易记录及交易额)。 图1和图2分别给出了该系统的顶层数据流图和0层数据流图的初稿。
1. 根据说明,将图1中的E1~E3填充完整。
正确答案:E1:非信用卡用户 E2:信用卡用户 E3:银行 2. 图1中缺少3条数据流,根据说明分别指出这3条数据流的起点和终点。(注:数据流的起点和终点均采用图中的符号和描述)
正确答案:缺少的3条数据流 3. 图2中有两条数据流是错误的,请指出这两条数据流的名称并改正。(注:数据流的起点和终点均采用图中的符号和描述)
正确答案:错误的数据流改正后的数据流
4. 根据说明,将图2中P1~P4的处理名称填充完整。
正确答案:P1:交易信息查询 P2:信用卡客户信息管理P3:信用卡激活 P4:信用卡申请
解析:说明的第(1)条是关于非信用卡用户申请信用卡的,有描述“如果信用卡申请被银行接受,CCMS将记录该客户的基本信息,并发送确认函给改客户,
告知客户信用卡的有效期及信贷限额;否则改客户将会收到一封拒绝函”,再结合图1,显示E1是非信用卡用户。从这一描述还可以看出,信用申请是要被银行审核的,银行接受申请后把申请验证结果发送给CCMS系统,所以E3是银行。【问题2】由说明的第(1)条可知,非信用卡用户是要先向CCMS提交申请的基本信息,然后CCMS才有反馈信息,所以这里缺少一条由E1到P0的数据流。 信用卡客户向CCMS发出交易记录查询请求后,CCMS还得把查询到的交易记录结果反馈给信用卡客户,所以这里缺少由P0到E2的数据流。 由说明的第(2)条“信用卡客户向CCMS提交激活请求,用信用卡号和密码激活该信用卡”可知对应这一描述缺少一条由E2到P0的数据流。 【问题3】 知道了E2~E3以及P1~P4所代表的含义,找错误的数据流就比较简单了。比较说明的是P4到E1的信用卡申请表这一条,这显然是错误的,而且也违背了数据平衡原则。应该是由非信用卡客户向P4发信用卡申请,即起点是E1,终点是P4。 “激活请求”是信用卡客户向CCMS发送的请求,而不是P4和P3之间的活动,所以这条由P4到P3的数据流是错误的,应修改为起点E2、终点为P3的数据流。【问题4】 首先分析问题4,如果问题4的结果出来后错误的数据流就比较明显了。显然P1~P4指的是说明中的(4)条。P1显然对应的是第(4)条一交易信息查询,P2对应的是第(3)条——信用卡客户信息管理,P3对应的是第(2)条——信用卡激活,P4对应的是第(1)条——信用卡申请。
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某集团公司拥有多个大型连锁商场,公司需要构建一个数据库系统以方便管理其业务运作活动。 【需求分析结果】 (1)商场需要记录的信息包括商场编号(编号唯一)、商场名称、地址和联系电话。某商场信息见表1。 (2)每个商场包含不同的部门,部门需要记录的信息包括部门编号(集团公司分配)、部门名称、位置分布和联系电话。某商场的部门信息见表2。 (3)每个部门雇佣多名员工处理日常事务,每名员工只能隶属一个部门(新进员工在培训期不隶属于任何部门)。员工需要记录的信息包括员工编号(集团公司分配)、姓名、岗位、电话号码和工资。员工信息见表3。(4)每个部门的员工中有一名是经理,每个经理只能管理一个部门,系统需要记录每个经理的任职时间。 【概念模型设计】 根据需求阶段搜集的信息,设计实体联系图(如图3)和关系模式(不完整)。 【关系模式设计】 商场(商场编号,商场名称,地址,联系电话) 部门[部门编号,部门名称,位置分布,联系电话,(a)] 员工[员工编号,员工姓名,岗位,电话号码,工资,(b)] 经理[(c),任职时间]
5. 根据问题描述,补充4个联系,完善图3所示的实体联系图。联系名可用联系1、联系2、联系3和联系4代替,联系的类型分为1:1、1:n和m:n。
正确答案:
6. 根据实体联系图,将关系模式中的空(a)~(c)补充完整,并分别给出部门、员工和经理关系模式的主键和外键。
正确答案:(a)所在商场编号 (b)所在部门编号 (c)员工编号
7. 为了使商场有紧急事务时能联系到轮休的员工,要求每位员工必须且只能登记一位紧急联系人的姓名和联系电话,不同的员工可以登记相同的紧急联系人。则在图3中还需添加的实体是______(1),该实体和图3中的员工存在______(2)联系(填写联系类型)。给出该实体的关系模式。
正确答案:(1)紧急联系人 (2)1:n关系模式为:紧急联系人(紧急联系人编号,姓名,联系电话)。
阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某公司的主要业务是出租图书和唱碟。由于业务需求,该公司委托希赛公司开发一套信息管理系统。该系统将记录所有的图书信息、唱碟信息、用户信息、用户租借信息等。希赛公司决定采用面向对象的分析和设计方法开发此系统。图4所示为某类图书或唱碟被借阅时应记录的信息,图5描述了系统定义的两个类Book和CD,分别表示图书和唱碟的信息。
8. 经过进一步分析,设计人员决定定义一个类Items_on_loan,以表示类Book和CD的共有属性和方法。请采用图5中属性和方法的名称给出类Items-0n.10an应该具有的属性和方法。(注意:不同名称的属性和方法表示不同的含义,如CD中的composer与Book中的author无任何关系)
正确答案:属性:title方法:Reference Title
9. 为了记录每种图书或唱碟租借的历史记录,引入类CirculationHistory,类中存储的信息是图4中所表示的内容。请采用UML表示法将下列四个类之间的关系表示出来。
正确答案:如“4个类之间的关系”图所示。
10. 现需了解十大最畅销(借出次数最多)图书或唱碟。为此,引入TenPopulate类以存储所有十大畅销图书或CD的名称及其被借出的次数。图6的顺序图描述了某类图书或唱碟被借出后成为十大畅销图书或唱碟时对象间的消息交互。系统在一次运行过程中,有_______(1)个TenPopulate实例对象最合适,一个TenPopulate类实例对象最多需要和______(2)个Items_on_loan实例对象交互。
正确答案:(1)1 (2)图书和唱碟种类数
解析:本题主要涉及类的设计、类之间的关系和顺序图。 在面向对象的程序设计当中,类的设计是非常重要的,类设计的合理性直接影响到整个系统的性能。 【问题1】 问题1要求考生写出类Items_on.loan的属性和方法,由于题目已经说明此类的属性和方法是Book类和CD类的公共属性和方法;又因为Book类和CD类中,不同名的属性、方法表示的含义不同,所以公共属性和方法就是同名属性和方法,因此,Items_on_loan的属性有title,方法有Reference
title。 【问题2】 问题2引入了Circulation History类,此类用于记录每种图书或者光碟的租借记录。现要求Circulation History类、Book类、CD类及Items_on_loan类之间的关系,根据【问题1】可以知道,Items_on_loan是类Book和CD的公共部分,用面向对象的术语来说,类Items_on_loan是类Book和CD的父类,所以它们之间存在继承关系。 再看Circulation History类和其他类的关系,Circulation History类只需要记录图书或唱碟的名称及借阅记录,而不需要其他详细资料,这样,Circulation History不必和Book与CD产生关系,只需要与Items_on_loan产生关系即可。由于Circulation History中除记录图书或唱碟名称以外,还需要记录借出时间、归还时间及用户名,这些数据无法从Items_on_loan中获取。一个Circulation History只包含一个Items_on_loan,存在1:1的关系,这说明Items_on_loan其实只是Circulation History的组成部分,但Items_on_loan可脱离Circulation History而独立存在,也就是说,一本图书或一张CD可以没有记录其借阅历史的Circulation History,但有记录其基本信息的一Items_on_loan,所以它们之间又存在聚集关系(而不是那种部分随整体销毁而销毁的组合关系)。综上所述,4个类的关系如右图所示。 聚合关联中涉及到重复度,当没有指定重复度时,默认重复度为1,那么,右图中两个类Circulation History、Items_on_loan所在端的重复度都为1。 【问题3】 题目中说“引入TemPopulate类以存储所有十大畅销图书或CD的名称及其被借出的次数”,可见TemPopulate类的功能是存储所有十大畅销图书或CD的名称及其被借出的次数。既然如此,系统在一次运行中只需要1个TenPopulate实例对象就可以了,因为它存储所有十大畅销图书或CD的名称及其被借出的次数。每当有图书或唱碟被借出时,都需要和TenPopulate类的对象发生交互,因此,当所有图书或CD都被借阅时,TenPopulate类实例对象需要跟所有这些Items_on_loan实例对象交互更新借出次数以评出十大最畅销图书或CD,一个TenPopulate类实例对象最多需要和“图书和唱碟种类总数”个Items_on_loan实例对象交互。
阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。 【说明】 设有n个货物要装入若干个容量为C的集装箱以便运输,这n个货物的体积分别为{S1,S2,…,Sn},且有si≤C(1≤i≤n)。为节省运输成本,用尽可能少的集装箱来装运这n个货物。 下面分别采用最先适宜策略和最优适宜策略来求解该问题。 最先适宜策略(firstfit)首先将所有的集装箱初始化为空,对于所有货物,按照所给的次序,每次将一个货物装入第一个能容纳它的集装箱中。 最优适宜策略(bestfit)与最先适宜策略类似,不同的是,总是把货物装到能容纳它且目前剩余容量最小的集装箱,使得该箱子装入货物后闲置空间最小。 【C代码】 下面是这两个算法的C语言核心代码。 1.变量说明 n:货物数 C:集装箱容量 s:数组,长度为n,其中每个元素表示货物的体积,下标从0开始 6:数组,长度为n,b[i]表示第i+1个集装箱当前已经装入货物的体积,下标从0开始 i,j:循环变量 k:所需的集装箱数 min:当前所用的各集装箱装入了第i个货物后的最小剩余容量 m:当前所需要的集装箱数 temp:临时变量 2.函数firstfit int firstfit( ) { int i,j; k=0; for(i=0;i<n;i++) { b[i]=0; } for(i=0;i<n;i++) { ______(1); while(C-b[j]<s[i]){ j++; } ______(2); k=k>(=i+1)?k;(j+1); } return k; } 3.函数bestfit int bestfit( ) { int i,j,min,m,temp;
k=0: for(i=0;i<n;i++) { b[i]=0; }for(i=0;i<n;i++){ min=C; m=k+1; for(j=0;j<k+1;j++) { temp=C-b[j]s[i]; if(temp>0 && temp<min) { ______(3); m=j; } } ______(4); k=k>(m+1)?k:(m+1);}return k; }
11. 根据说明和C代码,填充C代码中的空(1)~(4)。
正确答案:(1)j=0 (2)b[j]=b[j]+s[i] (3)min=temp (4)b[m]=b[m]+s[i]
12. 根据说明和C代码,该问题在最先适宜和最优适宜策略下分别采用了______(5)和______(6)算法设计策略,时间复杂度分别为______(7)和______(8)(用O符号表示)。
正确答案:(5)贪心 (6)贪心 (7)O(n2) (8)O(n2)
13. 考虑实例n=10,C=10,各个货物的体积为{4,2,7,3,5,4,2,3,6,2}。该实例在最先适宜和最优适宜策略下所需的集装箱数分别为______(9)和______(10)。考虑一般的情况,这两种求解策略能否确保得到最优解?______(11)(能或否)
正确答案:(9)5 (10)4 (11)否 解析:本题考查最先适宜策略和最优适宜策略。这两种策略在题目的描述中给出了清楚的解析,对于最先适宜策略,其关键是每次将一个货物装入第一个能容纳它的集装箱中;而对于最优适宜策略,则总是把货物装到能容纳它且目前剩余容量最小的集装箱。 下面我们来具体分析程序。函数firstfit( )是实现最先适宜策略的,从程序不难看出,第(1)空所在的for循环,就是要将n个货物装入到集装箱。根据算法的描述,是依次从第一个集装箱找,找到合适的就装入货物,依次每装入一个货物,都是依次从第一个集装箱找。结合后面的程序不难知道j标识这当前是第几个集装箱。因此每装入一个货物后,要将j清0,标识从头再找,因此第(1)空的答案是j=0。而接下来的while循环,从其条件表达式C-b[j]<s[i]不难知道,是比较当前集装箱和当前货物的体积大小,如果当前集装箱体积小,则比较下一个集装箱,否则,就应该将货物装入该集装箱,并且调整集装箱剩余体积的大小,在本题中,这个是通过数组b来实现的,因此第(2)空的答案应该为b[j]=b[j]+s[i]。 第(3)和第(4)空是在函数bestfit( )下,这个函数是实现最优适宜策略的。 从程序中不难看出,for(j=0;j<k+14;j++)就是要在众多的集装箱中找到最合适的集装箱,而第(3空是条件if(temp>0 && temp<min)成立时,执行的语句,该条件成立,表示当前找到的集装箱比原来确定的集握箱更合适,而最合适的集装箱的剩余体积存放在min中,因此第(3)空的答案为min=temp,而循环缮束后,就应该找到了合适的集装箱,这时应该将货物存放到集装箱里面,即第(4)空的答案为b[m]=b[m]+s[i]。 在本题中,不管是采用最先适宜策略,还是最优适宜策略,他们都是根据不同策略选择目前看来最优的情况,这都属于贪心算法的思想。从两个函数不难看出,其时间复杂度是一样的,都是O(n2)。 笫3个问题,其实是这个题目中最简单的问题,也是算法的一
个实际应用。对于这个实例,如果采用最先适宜策略,那么货物{4,2,3}存放在第一个集装箱,而{7,2}存放在第二个集装霜,{5,4}存放在第三个集装箱,{3,6}存放在第四个集装箱,而{2}存放在第五个集装箱。 如果采用最优适宜策略,那么货物{4,2,4}存放在第一个集装箱,而{7,3}存放在第二个集装箱,{5,2,3}存放在第三个集装箱,{6,2}存放在第四个集装箱。 因为这两种方法都是采用的贪心策略,那么在一般情况下,是不能确保得到最优解的。
14. 阅读下列说明和C++代码,填写程序中的空(1)~(6),将解答写入答题纸的对应栏内。 【说明】 以下C++代码实现一个简单绘图工具,绘制不同形状以及不同颜色的图形。部分类及其关系如图7所示。 【C++代码】 #include<iostream> #include<string> using namespace std;class DrawCircle{ //绘制圆形,抽象类public: ______(1); ∥定义参数为 int radius,int x,hat y virtual~DrawCircle( ) {} }; class RedCircle:public DrawCircle{ ∥绘制红色圆形 public: void draw Cirele(int radius,hatX,hat y){ cout<<’’Drawing Circle[red,radius:’’<radius; cout<<’’,x:’’<<x<<’’,y:’’<<y<<’’]’’<<end1; } }; class GreenCircle:public DrawCircle{ //绘制绿色圆形 public: void draw Circle(in tradius,int x,int y){ tout<<’’Drawing Circle[green,radius:’’<<radius; tout<<’’,x:’’<<x<<’’,y:’’<<y<<’’]’’<<end1; } }; class Shape{ //形状,抽象类 protected: ______(2);public: Shape(DrawCircle*drawCircle){ this->drawCircle=drawCircle; } virtual~shape( ){}public: virtual void draw( )=0; }; class Circle:public Shape{ //圆形 private: int x,y,radius;public: Cirele(int x,int y,int radius,Draw Circle*draw Circle) ______(3); { this->x=x; this->y=y; this->radius=radius; }public: void draw( ){ draw Circle->______(4); }};int main( ){ Shape*red Circle=new Circle(100,100,10,_____(5)); //绘制红色圆形 Shape*greenCircle=new Circle(100,100,10,_____(6));//绘制绿色圆形 redCircle->draw( ); greenCircle->draw( ); return 0:}
正确答案:(1)void drawCircle(int radius,int x,int y) (2)DrawCircle*drawCircle (3)drawcircle(4)drawCirele(radius,x,y) (5)new RedCircle( ) (6)new GreenCircle( )
解析:第(1)空是填接口里面的方法,在接口的实现里面找,可以发现应该填void drawCircle(int radius,int x,int y)。第(2)空可以根据后面this drawCircle=drawCircle判断,这里应该有一个drawCircle属性,因此应该填DrawCircle drawCirele。第(3)空这里填drawcircle,用->drawcircle来引用父类的成员。第(4)空调用drawCircle(radius,x,y)方法。第(5)、(6)空分别创建一个红色圆形对象和一个绿色圆形对象作为Circle里面的实参。
15. 阅读以下说明和Java代码,填写程序中的空(1)~(6),将解答写入答题纸的对应栏内。 【说明】 以下Java代码实现一个简单绘图工具,绘制不同形状以及不同颜色的图形。部分接口、类及其关系如图8所示。 【Java代码】 interface DrawCircle{ //绘制圆形 public _____(1); }
class RedCircle implements DrawCircle{ //绘制红色圆形 public void drawCircle(int radius,int x,int y) { System.out.println(‘‘Drawing Circle[red,radius:’’+radius+’’,x:’’+x+’’,y:’’+y+’’]’’); } } class GreenCircle implements DrawCircle{ ∥绘制绿色圆形 public void drawCircle(int radius,int x,int y){ System.out.println(‘‘Drawing Circle[green,radius:’’+radius+’’,x:’’+x+’’,y:’’+y+’’]’’); } } abstract class Shape{ //形状 protected _____(2); public Shape(DrawCircle drawCircle){ this.drawCircle=drawCircle; } public abstract void draw( );}class Circle extends Shape{ ∥圆形 private int x,y,radius; public Circle(int x,int y,int radius,DrawCircle drawCircie){ _____(3); this.x=x: this.y=y; this.radius=radius; } publicvoiddraw( ){ drawCircle._____(4); }}public class Draw CircleMain{ public static void main(String[]args){ Shape red Circle=new Circle(100,100,10, _____(5)); //绘制红色圆形 Shape green Circle=new Circle(200,200,10,_____(6)); //绘制绿色圆形 red Circle.draw( ); green Circle.draw( ); }}
正确答案:(1)void drawCircle(int radius,int x,int y) (2)DrawCircle drawCircle(3)super.drawcircle=drawcircle (4)drawCirele(radius,x,y)(5)new RedCircle( ) (6)new GreenCircle( )
解析:第(1)空是填接口里面的方法,在接口的实现里面找,可以发现应该填void drawCircle(int radius,int x,int y)。 第(2)空可以根据后面this drawCircle=drawCircle判断,这里应该有一个(drawCircle属性,因此应该填)DrawCircle drawCircle。 第(3)空这里用super,用super.drawcircle来引用父类的成员。 第(4)空调用drawCircle(radius,x,y)方法。 第(5)、(6)空分别创建一个红色圆形对象和一个绿色圆形对象作为Circle里面的实参。
因篇幅问题不能全部显示,请点此查看更多更全内容