【计算机类职业资格】中级软件设计师下午试题-93及答案解析.doc

上传人:ownview251 文档编号:1323216 上传时间:2019-10-17 格式:DOC 页数:13 大小:68KB
下载 相关 举报
【计算机类职业资格】中级软件设计师下午试题-93及答案解析.doc_第1页
第1页 / 共13页
【计算机类职业资格】中级软件设计师下午试题-93及答案解析.doc_第2页
第2页 / 共13页
【计算机类职业资格】中级软件设计师下午试题-93及答案解析.doc_第3页
第3页 / 共13页
【计算机类职业资格】中级软件设计师下午试题-93及答案解析.doc_第4页
第4页 / 共13页
【计算机类职业资格】中级软件设计师下午试题-93及答案解析.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、中级软件设计师下午试题-93 及答案解析(总分:70.00,做题时间:90 分钟)一、试题一(总题数:1,分数:5.00)1.【说明】某考务处理系统具有以下功能:(1)输入报名单;(2)自动编制准考证号;(3)输出准考证;(4)输入成绩清单;(5)输出成绩通知单;(6)输出成绩分布表;(7)输入合格标准、输出录取通知单;(8)试题难度分析,并输出试题难度分析表。这里给出了实现上述要求的部分不完整的数据流图,其中部分数据流的组成如下所示。报名单=报名号+姓名+通信地址考生名册=报名号+准考证号+姓名+通信地址成绩册=准考证号+(课程号+成绩)(其中 W 表示 W 重复多次)准考证=报名号+姓名+

2、准考证号【问题 1】指出 0 层图中可以删去的部分。【问题 2】在加工 1 子图中将遗漏的数据流添加在答题纸上。【问题 3】加工 2 子图分解成如图所示的 4 个子加工及相关的文件(即数据存储)。试在此基础上将相关的 DFD 成份添加在答题纸上,以完成该加工子图。(分数:5.00)_二、试题二(总题数:1,分数:5.00)2.【说明】请设计一个图书馆数据库,此数据库中对每个借阅者保存的读者记录包括:读者号、姓名、地址、性别、年龄、单位。对每本书存有:书号、书名、作者、出版社。对每本书被借出的书存有读者号、借出日期和应还日期。(分数:5.00)_三、试题三(总题数:1,分数:15.00)3.【说

3、明】某公司的用品采购流程如下所述。(1)由营业部门提出需求用品清单。(2)将需求用品清单交采购部门建立采购采买单据。(3)采购部门建立采购采买单据后,交财务部门,向财务部申请款项,预支定金。(4)财务部建立应付帐款单据后,核支款项。(5)采购部门再收到款项后,进行采买。(6)采买完成,执行:发票核剩余款项交财务部,即由财务部门处理。用品点交营业部门发放,即由营业部门处理。(7)进行财务结算处理,执行:采购部门:采购单据结案。财务部门:帐款冲销结案。【问题】完成下面的 UML 活动图对象流分析,111 为活动,设计此采购活动的流程。(分数:15.00)_四、试题四(总题数:1,分数:15.00)

4、4.【说明】函数 int Toplogical(LinkedWDigraph G)的功能是对图 G 中的顶点进行拓扑排序,并返回关键路径的长度。其中图 G 表示一个具有 n 个顶点的 AOE 一网,图中顶点从 1n 依次编号,图 G 的存储结构采用邻接表表示,其数据类型定义如下:typedef struct Gnode /*邻接表的表结点类型*/int adivex; /*邻接顶点编号*/int weight; /*弧上的权值*/bstmct Gonde*nextare; /*指示下一个弧的结点*/Gnode;typedef struct Adjlist /*邻接表的头结点类型*/char v

5、data; /*顶点的数据信息*/struct Gnode*Firstadj; /*指向邻接表的第 1 个表结点*/Adjlist;typedef struct LinkedWDigraph /*图的类型*/int n, e; /*图中顶点个数和边数*/struct Adjlist head; /*指向图中第 1 个顶点的邻接表的头结点*/LinkedWDigraph;【函数】int Toplogical(LinkedWDigraph G)Gnode *p;int j,w,top=0;int *Stack,*ve,*indegree;ve=(int *)mallloc(G.n+1)* size

6、of(int);indegree=(int *)malloc(G.n+1)*sizeof(int);/*存储网中个顶点的入度*/Stack=(int *)malloc(G.n+1)*sizeof(int); /*存储入度为 0 的顶点的编号*/if(!ve!indegree!Stack)exit(0);for(j=1;j=G.n;j+)vej=0; indegreej=0;/*for*/for(j=1;j=G.n;j+) /*求网中各顶点的入度*/p=G.headj.Firstadj;while(p)(1) ; p=p-nextarc;/*while*/*for*/for(i=1;j=G.n;

7、j+) /求网中入度为 0 的顶点并保存其编号*/if(!indegreej) Stack+top=j;while(top0)w= (2) ;printf(“%c“, G.headw.vdata);p=G.headw.Firstadj;while(p)(3) ;if(!indegreep-adjvex)Stack+top=p-adjvex;if( (4) )vep-adjvex=vew+p-weight;p=p-nextarc;/*while*/return (5) ;/*Toplogical*/(分数:15.00)_五、试题五(总题数:1,分数:15.00)5.【说明】通常情况下,用户可以对

8、应用系统进行配置,并将配置信息保存在配置文件中,应用系统在启动时首先将配置文件加载到内存中,这些内存配置信息应该有且仅有一份。下面的代码应用了单身模式(Singleton)以保证 Configure 类只能有一个实例。这样,Configure 类的使用者无法定义该类的多个实例,否则会产生编译错误。# include iostream.hclass Configure(1) ;Configure(); /构造函数public:static Configure *Instance();public:int GetConfigureData()return data; /获取配置信息int SetC

9、onfigureDate(int m_data)data=m_data; return data; /设置配置信息private:static Configure* _instance;int data; /配置信息;(2) =NULL;Configure * ConfigureInstance()if(_instance=NULL)_instance= (3) ;/加载配置文件并设置内存配置信息,此处省略return (4) ;void main()Configure *t=NULL;t= (5) ;int d=t-GetConfigureData();/获取配置信息后进行其它工作,此处省略

10、(分数:15.00)_六、试题六(总题数:1,分数:15.00)6.【说明】类 Queue 表示队列,类中的方法如下表所示。isEmpty() 判断队列是否为空。如果队列不为空,返回 true;否则,返回 falseenqueue(Object newNode) 入队操作dequeue() 出队操作。如果队列为空,则抛出异常类 Node 表示队列中的元素;类 EmptyQueueException 给出了队列操作中的异常处理操作。public class TestMain /主类public static viod main (String args)Queue q=new Queue();q

11、.enqueue(“first!“);q.enqueue(“second!“);q.enqueue(“third!“);(1) while(true)System.out.println(q.dequeue();catch( (2) ) public class Queue /队列Node m_FirstNode;public Queue()m_FirstNode=null;public boolean isEmpty()if(m_FirstNode=null)return true;else return false;public viod enqueue(Object newNode) /

12、入队操作Node next=m_FirstNode;if(next=null)m_FirstNode=new Node(newNode);elsewhile(next.getNext()!=null)next=next.getNext();next.setNext(new node(newNode);public Object dequeue() (3) /出队操作Object node;if (isEempty()(4) ; /队列为空, 抛出异常elsenode=m_FirstNode.getObject();m_FirstNode=m_FirstNode.getNext();return

13、 node;public class Node /队列中的元素Object m_Data;Node m_Next;public Node(Object data) m_Data=data; m_Next=null;public Node(Object data, Node next) m_Data=data; m_Next=-next;public void setObject(Object data) m_Data=data;public Object getObject(Object data) return m_data;public void setNext(Node next) m_

14、Next=next;public Node getNext() return m_Next;public class EmptyQueueException extends (5) /异常处理类public EmptyQueueException() System.out.println(“队列已空! “);(分数:15.00)_中级软件设计师下午试题-93 答案解析(总分:70.00,做题时间:90 分钟)一、试题一(总题数:1,分数:5.00)1.【说明】某考务处理系统具有以下功能:(1)输入报名单;(2)自动编制准考证号;(3)输出准考证;(4)输入成绩清单;(5)输出成绩通知单;(6)

15、输出成绩分布表;(7)输入合格标准、输出录取通知单;(8)试题难度分析,并输出试题难度分析表。这里给出了实现上述要求的部分不完整的数据流图,其中部分数据流的组成如下所示。报名单=报名号+姓名+通信地址考生名册=报名号+准考证号+姓名+通信地址成绩册=准考证号+(课程号+成绩)(其中 W 表示 W 重复多次)准考证=报名号+姓名+准考证号【问题 1】指出 0 层图中可以删去的部分。【问题 2】在加工 1 子图中将遗漏的数据流添加在答题纸上。【问题 3】加工 2 子图分解成如图所示的 4 个子加工及相关的文件(即数据存储)。试在此基础上将相关的 DFD 成份添加在答题纸上,以完成该加工子图。(分数

16、:5.00)_正确答案:(【问题 1】成绩册文件可删。【问题 2】补充后的加工 1 子图如下所示。【问题 3】完成后的加工 2 子图如下所示。)解析:解析 0 层图中的成绩册文件只被加工成绩处理使用,是个局部文件,按照数据隐蔽的规则,不应出现在 0 层图中。加工 1 子图中,对比 0 层图,很明显缺少输入数据流“报名单”,输出数据流“准考证”。问题 3 是要完善加工 2 子图,显得比较繁杂。这种题的出现频率应该非常低,但它是对考生实际处理问题能力的一个非常有效的检验,要比问题 1、2 复杂,容易发生遗漏和错误。所以,建议考生在做模拟试题时,在基本完成试题的情况下,还要多加思考,考虑如果遇到像问

17、题 3 这样,应该如何解决,这将对考生的应试能力和实际工作有相当大的帮助。完善加工子图,其实就是要补充数据流图的基本成分。数据流图的基本成分是:加工、数据流、数据存储(数据文件)、外部实体。其中,在这个题目中,外部实体不用考虑。首先考虑加工。加工 2 子图中,目前有 4 个子加工,即:(1)成绩清单录入,(2)制作成绩通知单,(3)制作录取通知单,(4)试题难度分析。根据说明中关于功能的第 8 项,很明显缺少一个实现“输出试题成绩分布表”的子加工。现在这 5 个加工已经全面实现了加工 2。接着,看是否还缺少数据文件,经过对说明的分析,可以肯定没有其它的数据文件。最后,就是要补充数据流。这一步最

18、为复杂,容易遗漏和错画。必须把握一个原则:围绕数据文件,按加工顺序,依据说明逐步进行。加工 1.1 需要输入考生名册的数据,经过加工,向成绩册输出数据。加工 2.2 需要输入考生名册和成绩册的数据,经过加工,输出成绩通知单。加工 2.3 需要输入考生名册和成绩册的数据,经过加工,输出合格标准和录取通知单。加工 2.4 只需要输入成绩册的数据,经过加工,输出试题难度分析表。加工 2.5 需要输入成绩册的数据,经过加工,输出成绩分布表。二、试题二(总题数:1,分数:5.00)2.【说明】请设计一个图书馆数据库,此数据库中对每个借阅者保存的读者记录包括:读者号、姓名、地址、性别、年龄、单位。对每本书

19、存有:书号、书名、作者、出版社。对每本书被借出的书存有读者号、借出日期和应还日期。(分数:5.00)_正确答案:(【问题 1】)解析:解析 这个数据库的设计比较简单,但需要考生对一些基本知识有所掌握。通过分析,可以得到:有 2 个实体和一个联系。实体:读者、书。联系:借书。读者和书之间是“一对多”的借书联系。实体“读者”应该有如下属性:读者号,姓名,年龄,单位,地址,性别。实体“书”应该有如下属性:书号,书名,作者,出版社。联系“借书”应该有如下属性:借出日期,应还时期。由以上分析画出的 E-R 图如下所示。三、试题三(总题数:1,分数:15.00)3.【说明】某公司的用品采购流程如下所述。(

20、1)由营业部门提出需求用品清单。(2)将需求用品清单交采购部门建立采购采买单据。(3)采购部门建立采购采买单据后,交财务部门,向财务部申请款项,预支定金。(4)财务部建立应付帐款单据后,核支款项。(5)采购部门再收到款项后,进行采买。(6)采买完成,执行:发票核剩余款项交财务部,即由财务部门处理。用品点交营业部门发放,即由营业部门处理。(7)进行财务结算处理,执行:采购部门:采购单据结案。财务部门:帐款冲销结案。【问题】完成下面的 UML 活动图对象流分析,111 为活动,设计此采购活动的流程。(分数:15.00)_正确答案:(1送出需求用品清单(营业部门)。2建立采购采买单据(采购部门)。3

21、向财务部门申请款项:预支定金(财务部门)。4财务部建立应付账款单据后:核支款项(财务部门)。5收到款项,进行采买(采购部门)。6采买完成(采购部门)。7用品点交发放(营业部门)。8发票及剩余款项交财务(财务部门)。9采购单据结案(采购部门)。10账款冲销结帐(财务部门)。11关闭采购单据(采购部门)。)解析:解析 活动图(Active Diagram)是一种用来设计系统动态视图的图形,是 UML 中的流程图,而且可以设计活动与活动之间的流程控制,因此运用活动图可以设计系统的动态角度。利用活动图设计系统的动态视图时,应用的方式有两种:(1)设计工作流程(对象流程)。(2)设计操作。对象流(Obj

22、ect Flow):是将对象放置在活动图上,来指定参与此活动图的事务,接着将建立、修改或销毁这些对象的活动或转换,运用依赖关系连在一起,这种对象和依赖关系的使用方式称为“对象流”。问题中有 11 个活动,3 个对象:营业部门,采购部门,财务部门。其中营业部门有 2 个活动,采购部门有 5 个活动,财务部门有 4 个活动。分析已知的采购流程描述,先区分出各个对象独自的活动,和对象之间联系的活动,从整个活动图的“初始状态”和“最终状态”入手,再从每个对象的第一个活动和最后一个活动入手,注意并发的活动。通过这些方法,可以比较顺利的得到结果。这道题需要考生对 UML 知识的扎实掌握,并且有一定的软件工

23、程和面向对象的实践,才能很好的解决这类问题。最后给出完整的采购流程活动图对象流分析中的 11 个动作。四、试题四(总题数:1,分数:15.00)4.【说明】函数 int Toplogical(LinkedWDigraph G)的功能是对图 G 中的顶点进行拓扑排序,并返回关键路径的长度。其中图 G 表示一个具有 n 个顶点的 AOE 一网,图中顶点从 1n 依次编号,图 G 的存储结构采用邻接表表示,其数据类型定义如下:typedef struct Gnode /*邻接表的表结点类型*/int adivex; /*邻接顶点编号*/int weight; /*弧上的权值*/bstmct Gond

24、e*nextare; /*指示下一个弧的结点*/Gnode;typedef struct Adjlist /*邻接表的头结点类型*/char vdata; /*顶点的数据信息*/struct Gnode*Firstadj; /*指向邻接表的第 1 个表结点*/Adjlist;typedef struct LinkedWDigraph /*图的类型*/int n, e; /*图中顶点个数和边数*/struct Adjlist head; /*指向图中第 1 个顶点的邻接表的头结点*/LinkedWDigraph;【函数】int Toplogical(LinkedWDigraph G)Gnode

25、*p;int j,w,top=0;int *Stack,*ve,*indegree;ve=(int *)mallloc(G.n+1)* sizeof(int);indegree=(int *)malloc(G.n+1)*sizeof(int);/*存储网中个顶点的入度*/Stack=(int *)malloc(G.n+1)*sizeof(int); /*存储入度为 0 的顶点的编号*/if(!ve!indegree!Stack)exit(0);for(j=1;j=G.n;j+)vej=0; indegreej=0;/*for*/for(j=1;j=G.n;j+) /*求网中各顶点的入度*/p=

26、G.headj.Firstadj;while(p)(1) ; p=p-nextarc;/*while*/*for*/for(i=1;j=G.n;j+) /求网中入度为 0 的顶点并保存其编号*/if(!indegreej) Stack+top=j;while(top0)w= (2) ;printf(“%c“, G.headw.vdata);p=G.headw.Firstadj;while(p)(3) ;if(!indegreep-adjvex)Stack+top=p-adjvex;if( (4) )vep-adjvex=vew+p-weight;p=p-nextarc;/*while*/ret

27、urn (5) ;/*Toplogical*/(分数:15.00)_正确答案:(解析 (1)indegreep-adjvex+及其等价形式此填空在 for(j=1;j=G.n;j+)中,求网中各顶点的入度。遍历邻接表 G.headj.Firstadj,将每个结点 p-adjvex 的入度 indegreep-adjvex加 1。邻接表是 j 的出度结点表。(2)Stacktop-及其等价形式栈 Stack 中存放的是入度为 0 的结点号,此 while 循环中,w 取栈顶值开始搜索打印这些结点。(3)indegreep-adjvex-及其等价形式由于 p=G.headw.Firstadj;因此

28、 while 循环是遍历这个邻接链表,将每个结点的入度减 1。将入度为 0的结点号入栈 Stack 中。(4)vew+p-weightvep-adjvex及其等价形式若 vew+p-weight 大于 vep-adjvex,则 vew+p-weight 是最长路径,用 vew+p-weight 取代 vep-adjvex。(5)vew及其等价形式最终返回的是 w 结点的 vew值作为整个 AOE网的最长路径值。)解析:五、试题五(总题数:1,分数:15.00)5.【说明】通常情况下,用户可以对应用系统进行配置,并将配置信息保存在配置文件中,应用系统在启动时首先将配置文件加载到内存中,这些内存配

29、置信息应该有且仅有一份。下面的代码应用了单身模式(Singleton)以保证 Configure 类只能有一个实例。这样,Configure 类的使用者无法定义该类的多个实例,否则会产生编译错误。# include iostream.hclass Configure(1) ;Configure(); /构造函数public:static Configure *Instance();public:int GetConfigureData()return data; /获取配置信息int SetConfigureDate(int m_data)data=m_data; return data; /

30、设置配置信息private:static Configure* _instance;int data; /配置信息;(2) =NULL;Configure * ConfigureInstance()if(_instance=NULL)_instance= (3) ;/加载配置文件并设置内存配置信息,此处省略return (4) ;void main()Configure *t=NULL;t= (5) ;int d=t-GetConfigureData();/获取配置信息后进行其它工作,此处省略(分数:15.00)_正确答案:(解析 (1)publicC+类中,构造函数属于公有成员函数,因此应该

31、填入:public。(2)Configure *Configure_instanceC+类中静态成员变量赋初值,只能在函数和类外进行。(3)new ConfigureInstance 是类 Configure 的静态成员函数,它只能访问类的静态成员_instance,当指针_instance 为NULL 时,应该给_instance 动态分配内存,所以此处应该填入:new Configure。(4)_instance类 Configure 的静态成员函数 Instance 的返回值是 Configure*,即 Configure 类指针类型,由于此函数只能访问类的静态成员_instance,因

32、此返回值应当是指针_instance。所以此处应该填入:_instance。(5)ConfigureInstance()t 是一个 Configure 类指针,初值为 NULL,因此此处必须首先动态开辟一个 Configure 类对象,让 t 指向这个对象,下面才能进行 d=t-GetConfigureData()访问对象的成员函数。所以此处应该填入:new Configure。)解析:六、试题六(总题数:1,分数:15.00)6.【说明】类 Queue 表示队列,类中的方法如下表所示。isEmpty()判断队列是否为空。如果队列不为空,返回true;否则,返回falseenqueue(Obj

33、ect newNode)入队操作dequeue()出队操作。如果队列为空,则抛出异常类 Node 表示队列中的元素;类 EmptyQueueException 给出了队列操作中的异常处理操作。public class TestMain /主类public static viod main (String args)Queue q=new Queue();q.enqueue(“first!“);q.enqueue(“second!“);q.enqueue(“third!“);(1) while(true)System.out.println(q.dequeue();catch( (2) ) pu

34、blic class Queue /队列Node m_FirstNode;public Queue()m_FirstNode=null;public boolean isEmpty()if(m_FirstNode=null)return true;else return false;public viod enqueue(Object newNode) /入队操作Node next=m_FirstNode;if(next=null)m_FirstNode=new Node(newNode);elsewhile(next.getNext()!=null)next=next.getNext();n

35、ext.setNext(new node(newNode);public Object dequeue() (3) /出队操作Object node;if (isEempty()(4) ; /队列为空, 抛出异常elsenode=m_FirstNode.getObject();m_FirstNode=m_FirstNode.getNext();return node;public class Node /队列中的元素Object m_Data;Node m_Next;public Node(Object data) m_Data=data; m_Next=null;public Node(Ob

36、ject data, Node next) m_Data=data; m_Next=-next;public void setObject(Object data) m_Data=data;public Object getObject(Object data) return m_data;public void setNext(Node next) m_Next=next;public Node getNext() return m_Next;public class EmptyQueueException extends (5) /异常处理类public EmptyQueueExcepti

37、on() System.out.println(“队列已空! “);(分数:15.00)_正确答案:(解析 (1)try从紧随其后的 catch 可以断定这是异常处理的 try-catch 结构。(2)Exception e 或者 EmptyQueueException e其中 e 是对象名,可用任意合法标识符替换,这是 catch 要捕获的信息。(3)throw EmptyQueueException当队列为空时,抛出错误信息 EmptyQueueException。(4)throw(new EmptyQueueException()当队列为空时,抛出异常。动态生成 EmptyQueueException 对象,出错处理。(5)ExceptionEmptyQueueException 对象是从异常处理类 Exception 扩展而来。)解析:

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

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

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