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

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

1、2014年上半年软件水平考试(中级)软件设计师下午(应用技术)真题试卷及答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 阅读下列说明和图,回答【问题 1】至【问题 4】,将解答填人答题纸的对应栏内: 【说明】 某巴士维修连锁公司欲开发巴士维修系统,以维护与维修相关的信息,该系统的主要能如下: (1)记录巴士 ID和维修问题。巴士到车库进行维修,系统将巴士基本信息和 ID记录在巴士列表文件中,将待维修机械问题记录在维修记录文件中,并生成维修订单。 (2)确定所需部件,根据维修订单确定维修所需部件,并在部 件清单中进行标记。 (3)完成维修,机械师根据维修记录文件中的待维修机械问题,

2、完成对巴士的维修,登记维修情况;将机械问题维修情况记录在维修记录文件中,将所用部件记录在部件清单中,并将所用部件清单发送绘库存管理系统以对部件使用情况进行监控,巴士司机可查看已维修机械问题。 (4)记录维修工时,将机械师提供的维修工时记录在人事档案中,将维修总结发送给主管进行绩效考核。 (5)计算维修总成本。计算部件清单中实际所用部件、人事档案中所用维修工时的总成本;将维修工时和所用部件成本详细信息给会计进行计费。 现采用结构化方 法对巴士维修系统进行分析与设计,获得如图 1一 l所示的上下文数据流图和图 1-2所示的 0层数据流图。【问题 1】使用说明中的词语,给出图 11中的实体 E1 E

3、5的名称。 【问题 2】使用说明中的词语,给出图 12中的数据存储 D1 D4的名称, 【问题 3】说明图 12中所存在的问题。 【问题 4】根据说明和图中术语,采用补充数据流的方式,改正图 12中的问题。要求给出所补充数据流的名称、起点和终点。 2 阅读下列说明和图,回答【问题 1】至【问题 3】,将解答填入答题纸的对应栏内。 【说明】某家电销售电子商务公司拟开 发一套信息管理系统,以方便对公司的员工、家电销售、家电厂商和客户等进行管理。【需求分析】 (1)系统需要维护电子商务公司的员工信息、客户信息、家电信息和家电厂商信息等,员工信息主要包括:工号、姓名、性别、岗位、身份证号、电话、住址,

4、其中岗位包括部门经理和客服等,客户信息主要包括:客户 ID、姓名、身份证号、电话、住址、账户余额。家电信息主要包括:家电条码、家电名称、价格、出厂日期、所属商,家电厂商信息包括:厂商 ID、厂商名称、电话、法人代表信息、厂址。 (2)电子商务公司根据销售情况,由部门经理向家电厂商 订购各类家电,每个家电厂商只能由一名部门经理负责。 (3)客户通过浏览电子商务公司网站查询家电信息,与客服沟通获得优惠后,在线购买。 【概念模型设计】 根据需求阶段收集的信息,设计的实体联系图 (不完整 )如图 21所示。【逻辑结构设计】 根据概念模型设计阶段完成的实体联系图,得出如下关系模式【不完整】 客户 (客户

5、 ID、姓名、身份证号、电话、住址、账户余额 ) 员工 (工号、姓名、性别、岗位、身份证号、电话、住址 )家电 (家电条码、家电名称、价格、出厂日期、 (1) 家电厂商 (厂商ID、厂商名称、电话、法人代表信 息、厂址、 (2) 购买 (订购单号、 (3)、金额 ) 【问题 1】 补充图 21中的联系和联系的类型。 【问题 2】 根据图 21,将逻辑结构设计阶段生成的关系模式中的空 (1)一 (3)补充完整,用下划线支出 “家电 ”、 “家电厂商 ”和 “购买 ”关系模式的主键。 【问题 3】 电子商务公司的主营业务是销售各类家电,对账户有余额的客户,还可以联合第二方基金公司提供理财服务,为此

6、设立客户经理岗位。客户通过电子商务公司的客户经理和基金公司的基金经理进行理财,每名客户只有一名客户经理和一名基金经理负责,客户经理和基金经理均可负责多名客户。请根据该要求,对图 21进行修改,画出修改后的实体间联系和联系的类型。 3 阅读下列说明和图,回答【问题 1】至【问题 3】,将解答填入答题纸的对应栏内。 【说明】 某高校图书馆欲建设一个图书馆管理系统,目前已经完成了需求分析阶段的工作,功能需求均使用用例进行描述,其中用例 “借书 (Check Out 800ks)”的详细描述如下。 参与者:读者 典型事件流: 1输入读者 ID: 2确认该读者能够借阅图书,并记录读者 ID; 3输入所要

7、借阅的图书 ID; 4根据图书目录中的图书 ID确认该书可以借阅,计 算归还时间,生成借阅记录; 5通知读者图书归还时间; 重复步骤 3 5,直到读者结束借阅图书。 备选事件流: 2a若读者不能借阅图书,说明读者违反了图书馆的借书制度 (例如,没有支付借书费用等 )。 告知读者不能借阅,并说明拒绝借阅的原因; 本用例结束。 4a读者要借阅的书无法外借。 告知读者本书无法借阅; 回到步骤 3。 说明:图书的归还时间与读者身份有关。如果读者是教师,图书可以借阅一年:如果是学生,则只能借阅 3个月,读者 ID中包含读者身份信息,现采用面向对象方法开发该系统,得到如图 31所示的系 统类模型 (部分

8、);以及如图 32所示的系统操作。“Checkout(bookID) (借书 )“通信图 ”(或协作图 )。【问题 1】 根据说明中的描述,以及图 31和图 32,给出图 31中 C1一 C4处所对应的类名 (类名使用图 31和图 32中给出的英文词汇 )。【问题 2】 根据说明中的描述,以及图 31和图 32,给出图 32中 M1一 M4处所对应的方法名 (方法名使用图 3一 l和图 32中给出的英文词汇 )。【问题 3】 用例 “借书 ”的备选事件流4a中,根据借书制度来判定读者能否借阅图书,随着图书馆的借书制度会不断地扩 充,并需要根据图书馆的实际运行情况来调整具体使用哪些制度,为满足这

9、一要求,在原有类设计的基础上,可以采用何种设计模式 ?简要说明原因。 4 阅读下列说明和 C代码,回答【问题 1】至【问题 3】,将解答写在答题纸的对应栏内。 【说明】 采用归并排序对 n个元素进行递增排序时,首先将 n个元素的数组分成各含 n2个元素的两个子数组,然后用归并排序对两个子数组进行递归排序,最后合并两个已经排序的子数组得到排序结果。 下面的 C代码是对上述归并算法的实现,其中的常量和变量说明如下: arr: 待排序数组 P, q, r:一个子数组的位置从 P到 q,另一个子数组的位置从 q+1到 r begin, end:待排序数组的起止位量 left, right:临时存放待合

10、并的两个子数组 n1, n2:两个子数组的长度 i, j, k:循环变量 mid:临耐变量 【 C代码】 #inciude stdio h #inciude stdlib h Define MAX 65536 void merge(int arr(, int P, int q, int r) int*left, *right; int nl, n2, I, J, k; n1=qP+1: n2=rq: If(left=(int*)malloc(nl+1)*sizeof(int)=NULL)( Perror(“malloc error”): exit(1); If(right=(int*)mall

11、oc(n2+1)*sizeof(int)=NULL) Perror(“malloc error”); exit(1); for(i=0; i nl; i+) lefti=arrp+i; lefti=MAX; for(i=0; i n2; i+) righti=arrq+i+1 righti=MAX; i=0; j=0; For(k=p; (1); k+)( If(1efti rightj (2) j+; )else arrk1=lefti; i+: Void merge Sot-t(int arr(), int begin, int end) int mid: if( (3) ) mid=(b

12、egin+end) 2; merge Sort (arr, begin, mid); (4) ; Merge(arr, begin, mid, end); 【问题 1】 根据以上说明 和 C代码,填充 (1)一 (4)。 【问题 2】 根据题干说明和以上 C代码,算法采用了 (5)算法设计策略,分析时间复杂度时,列出其递归式位 (6) ,接触渐进时间复杂度 (7) (用 O符号表示 )。空间复杂度为 (8) 。 (用 O符号表示 ) 【问题 3】 两个长度分别为 n1和 n2的已经排好序的子数组进行归并,根据上述 C代码,则元素之间比较次数为 (9) 。 二、选答题(共 3道大题,每道大题 1

13、5分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号 小的 1道题解答有效。 5 阅读下列说明和 C+代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】某实验室欲建立一个实验室环境监测系统,能够显示实验室的温度、湿度以及洁净度等环境数据。当获取到最新的环境测量数据时,显示的环境数据能够更新现在采用观察者 (observer)模式来开发该系统,观察者模式的类图如图 51所示。(c+代码 )#include#includeUsing namespace std; Class ObserverPublic: Virtual void update(float t

14、emp, float humidity, float cleanness)=0; ); Class SubjectPublic:Virtual void registerObserver(Observer*o)=0;注册对主题感兴趣的观察者Virtual void removeObserver(Observer*o)=0;删除观察者 Virtual void notifyObservers()=0;当主题发生变化时通知观察者 Class EnvironmentData:publ ic (1) Private: Vectorobservers: Float temperature, humidi

15、ty, cleanness;Public: Void registerobserVer(0bserVer* o)observers pushback(o); )Void removeObserver(Observer*O): const iterator it=observers begin();it!=observers end(); it+) (2) ; Void measurementsChanged() (3) ; Void setMeasurements(float temperature, float humidity, float cleanness)this-temperatu

16、re=temperature: this-humidity=humidity; this一 cleanness=cleanness: (4) ; ; Class CurrentconditionsDisplay: publ ic (5) private: float temperature,humidity, cleanness; Subject*envData; Public: CurrentConditionsDisplay(Subject* envData)this一 envData=envData; (6) : Void update(float temperature, float

17、humidity, float cleanness)(this一 temperature=temperature; This-humidity=humidity; This一 cleanness=cleanness; display(); Void display() *代码省略 * ) ; int main() EnvironmentData*envData。 new EnvironmentData0: CurrentConditionsDisplay*currentDisplay=new CurrentConditionsDisplay(envData): envData-setMeasu

18、rements(80, 65, 30 4f); return 0; 6 阅读下列说明和 Java代码,将应填入 (n)址的字句写在答题纸的对应栏内。 【说明】 某实验室欲建立一个实验室环境监测系统,能够显示实验室的温度、湿度以及洁净度等环境数据。当获取到最新的环境测量数据时,显示的环境数据能够更新现在采用观察者 (observer)模式来开发该系统,观察者模式的类图如图 6-1所示。【 Java代码】 import java util *interface ObserverPublic void update(float temp, float humidity, float cleannes

19、s); interface SubjectPublic void registerobserver(Observer o);注册对主题感兴趣的观察者 Public void removeobserver(Observer o);删除观察者Public void notifyObservers0;当主题发生变化时通知观察者 Class EnvironmentDataimplements (1) Private ArrayLjst observers; Private float temperature, humidity, cleanness; Publ ic EnvironmentData0o

20、bservers=new ArrayListO; )Public void registerObserver(Observer o)observers add(o); )Public void removeObserver(Observer o) *代码省略 * )publ ic void notifyObservers()For(int i=0; i observers size(); i+)Observer observer=(0bserVer)obserVers get(i); (2) ; public void measurementsChanged() (3) ; )public v

21、oid setMeasurements(float temperature, float humidity, float cleanness)this temperature=temperature:this humidity=humidity; this cleanness=cleanness; (4) ; Class CurrentConditionsDisplay implements (5)private float temperature; private float humidity; private float cleanness; private Subj ect envDat

22、a; public CurrentCondit ionsDisplay(Subj ect envData)this envData=envData; (6) ; Publ ic void update(float temperature, float humidity, float cleanness)this temperature=temperature; this humidity=humidity;this cleanness=cleanness; Display(); Public void display0( *代码省略 * )Class EnvironmentMonitorPub

23、lic static void main(Stringargs)Env ironmentData envData=new EnvironmentData0; CurrentCondit onsDisplay currentDisplay= new CnrrentConditionsDisplay(envOata); envData setMeasurements(80, 65,30 4f); )Public void display()( *代码省略 * )Class EnvironmentMonitorPublic static void main(Stringargs)Env ironme

24、ntData envData=new EnvironmentData0;CurrentConditionsDisplay currentDisplay= new CnrrentConditionsDisplay(envData);envData setMeasurements(80, 65, 30 4f); 2014年上半年软件水平考试(中级)软件设计师下午(应用技术)真题试卷答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【正确答案】 【问题 1】 E1:巴士司机 E2:机械师 E3:会计 E4:主管 E5:库存管理系统 【问题 2】 D1:巴士列表文件 D2:维修记录文件 D

25、3:部件清单 D4:人事档案 【问题 3】 缺失以开吻邑 流: 缺失以下数据流: (1)名称:待维修机械问题;起点: D2;终点: 3完成维修。 (2)名称:实际所用部件;起点: D3;终点: 5计算总成本。 【问题 4】 补充以下数据流: (1)名称:待维修机械问题;起点: D2;终点: 3完成维修。 (2)名称:实际所用部件;起点: D3;终点: 5计算总成本。 【试题解析】 本题考查数据流图 (DFD)的应用,采用结构化方法进行系统分析与设计,是一道传统题目,要求考生细心分析题目中所描述的内容。 DFD是一种便于用户理 解、分析系统数据流程的图形化建模工具,是系统逻辑模型的重要组成部分。

26、 【问题 1】 本问题考查顶层。 DFD。顶层 DFD一般用来确定系统边界。结合图 11上下文数据流图以及根据系统功能的描述 (3)“巴士司机可查看已维修问题 ”可知, E1为“巴士司机 ”;根据系统功能描述 (4)“机械师提供的维修工时记录在人事档案中 ”和“维修总结发送给主管进行考核 ”可知, E2为 “机械师 ”, E4为 “主管 ”;根据系统功能描述 (5)“维修工时和所用成本详细信息给会计进行计费 ”可知, E3为 “会计师 ”,由 “所用部件清单发送给库存 管理系统 ”可推断, E5为库存管理系统。 【问题 2】 本问题考查 DFD中数据存储的确定。本题涉及的数据存储有 5个,即巴

27、士列表文件、维修记录文件、部件清单和人事档案。接下来需要结合图 12所示的 O层数据流进行确定。 D1与 “记录巴士 ID和维修问题 ”有关,根据题意, D1是 “巴士列表文件 ”;待维修机械问题记录在 D2中,可知, D2为 “维修记录文件 ”;所需部件记录在 D3中,由题意可知 D3为 “部件清单 ”; D4记录的是工时,由题意, D4是 “人事档案 ”。 【问题 3】 本问题考查 DFD中的数据流。 在分查 DFD中,需要保持父图和子图的平衡,即父图中某加工的输入输出数据流必须与其子图的输入输出数据流在数量和名字上相同,或者父图的一个输入 (或输出 )数据流对应于子图中几个输入 (或输出

28、 )数据流,而子图中组成这些数据流的数据项全体正好是父图中的一个数据流。由 (5)的描述 “计算部件清单中实际所用部件、人事档案中所用维修工时的总成本 ”可知,缺少关于实际所用部件数据流,因此增加一个数据流实际所用部件,起点:D3,终点: 5计算总成本。根据 “完成维修 ”功能中的描述,机械师可根据维修记录文件中的待维修机械问题,完成巴士 维修,因此缺少数据流 “待维修机械问题 ”,起点: D2,终点: 3完成维修。 【问题 4】 根据问题 3解析,补充以下数据流:实际所用部件,起点: D3,终点: 5计算总成本;待 “维修机械问题 ”,起点: D2,终点: 3完成维修。 2 【正确答案】 【

29、问题 1】【问题 2】 (1)厂商 ID(2)工号 (3)家电条码,客户 ID,工号 (4)家电关系的主键:家电条码 (5)家电厂商关系的主键:厂商 ID(6)购买关系的主键:订购单号【问题 3】【试题解析】 本题考查数据库设计。设计考点有数据库的概念结构设计和逻辑结构设计。 【问题 1】 根据题意,每个家电厂商可以购买多种家电,因此家电厂商和家电之间是一对多的联系。一种家电可由多个客户购买,一个客户可购买多件家电,因此家电和客户之间是多对多的联系,由此可画出完整的实体联系图。 【问题 2】 电子商务公司根据销售情况,由部门经理向家电厂商订购各类家电,每个家电厂商只能由一名部门经理负责,家电厂

30、商中需要保存是由哪名部门经理负责的,因此这里需要有员工的工号,这样才能在员工中找到唯一对应的员工。 【问题 3】 由题意可知,可增设实体客 户经理和基金经理,客户和客户经理、基金经理都有联系,且客户经理和客户、基金经理和客户都是一对多的联系,由此可补充图21。 3 【正确答案】 【问题 1】 C1: Patron C2: Book C3: Catalog C4: CheckoutSessioncontrolIer 【问题 2】 M1(): getforcheck(b00kID)M2(): isFacultyo M3(): circulateso M4():recordBookLoan 【问题

31、3】 应采用策略模式,策略 模式的优势在于可以灵活的添加对同一问题的不同处理方案,这与题目要求非常吻合。 【试题解析】 【问题 1】 根据系统类模型,我们可以各个类之间的关联关系。 首先从类 Acoonts中的 canCheckOut(patronID: string)方法,可以看出 Accouts关联 Patron,因此图中 C1为 Patron。 C1为 Patron,则 CI必会与书关联,从 C1中的 recordBookLoad(b, C2),可以看出 C1关联 C2。因此 C2为 Book。 C2为 Book,根据系统操作 checkOut的通信图,可以看出与 Book关联的是Cat

32、alog,因此 C3为 Catalog。 结合两图,则可以得出 C4为 CheckoutSessioncontroller. 【问题 2】 结合典型事件流: 1输入读者 ID; 2确认该读者能够借阅图书,并记录读者 ID; 以上两步实际上就是判断读者是不是老师,也就是 isFaculty(),因此 M2为isFaculty(); 3输入所要借阅的图书 ID;对应的操作就是 M1: getforcheck(bookID); 4根据图书目录中的图书 ID确认该书可以借阅,计算归还时间,生成借阅记录;对应的操作就是 M3: circulates( ); 5通知者图书归还时间,对应的操作就是 M4:

33、recordBookLoan()。 4 【正确答案】 【问题 1】 (1)k =r (2)arrk=rightj (3)begin end (4)mergeSort(arr, mid+1, end) 【问题 2】 (5)分治 (6)T(n)=2T(n 2)+O(n) (7)O(nlogn) (8)O(n) 【问题 3】 (9)n1+n2 【试题解析】 【问题 1】 首先,函数 void merge(int arr, int P, int q, int r)的意思是:对子数组arrpq3 和子数组 arrq+L r3进行合并。因此第一空为 k =q;由于是采用归并排序对 n个元素进行递增排序,所

34、以第二空是将 lefti和 rightj的小者存放到 arrk中去,即 arrk=rightj:当数组长度为 1时,停止 递归,因为此时该数组有序,则第三空为 begin end,即数组至少有两个元素才进行递归。合并了begin到 mid之间的元素,继续合并 mid+1到 end之间的元素,则第四空为mergeSort(arr, mid+1, end)。 【问题 2】 归并算法实际上就是将数组一直往下分割,直到分割到由一个元素组成的 n个子数组,再往上两两归并。 将数组进行分割需要 logN步,因为每次都是讲数组分割成两半 (2x=N,x=logN)。 合并 N个元素,需要进行 N步,也就是

35、O(N),则总的时间复杂度为O(NlogN)。 合并过程中,使用了 n个中间变量存储, left=(int*)malloc(nl+1)*sizeof(int)。所以空间复杂度为 O(n)。 推导递归式: 假设 n个元素进行归并排序需要 T(n),可以将其分割成两个分别有 n 2个元素的数组分别进行归并,也就是 2T(n 2),在将这两个合并,需要 O(n)的时间复杂度,则推导公式为 T(n)=2T(n 2)+O(n)。 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题 号小的 1道题解答有效。 5 【正确答案】 (1)Subje

36、ct (2)(*it)一 update(temperature, humidity, cleanness) (3)notifyObservers() (4)measurementsChanged() (5)Observer() (6)this一 envData- registerObserver(this) 【试题解析】 当主题中的环境发生变化,也就是调用measurementsChanged(),会 通知观察者,即调用 notifyObservers(),在notifyObservers()方法中,观查者会调用自身的 update(float temperature, float humid

37、ity, float cleanness)。在主题的 registerobserver(0bserve*o)中会注册对主题感兴趣的观察者。 6 【正确答案】 (1)Subject (2)observer update(temperature, humidity, cleanness) (3)notifyObservers() (4)measurementsChanged() (5)Observer() (6)envData registerObserver(this) 【试题解析】 EnvironmentData是环境数据,也就是我们要监测的对象,即主题 (Subject),因此 (1)处为 Subject。 (2)处为通知观察者,因此遍历观察者容器,遍历到一个观察者对象,则更新该观察者的数据,即调用观察者的 update()方法,当环境数据变化时,需要通知观察者,因此 (4)处是调用环境变化 方法measurementsChanged(),通过此方法通知观察者更新数据,因此, (3)处为notifyObservers()。 根据 CurrentConditionsDisplay类中的 update()方法可知:CurrentConditionsDisplay是个观察者,因此 (5)处为 Observer(6)是将观察者添加到主题中去。

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

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

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