中级软件设计师下半年下午试题附答案解析Word格式.docx
《中级软件设计师下半年下午试题附答案解析Word格式.docx》由会员分享,可在线阅读,更多相关《中级软件设计师下半年下午试题附答案解析Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
每个部门只有一名主管,只负责本部门的工作,且主管参照员工关系的员工号:
一个部门有多名员工,每个员工属于且仅属于一个部门。
(2)员工信息包括员工号,姓名,职位,联系方式和薪资。
职位包括主管,业务员,策划员等。
业务员负责受理用户申请,设置受理标志。
一名业务员可以受理多个用户申请,但一个用户申请只能由一个业务员受理。
(3)用户信息包括用户号,用户名,银行账号,电话,联系地址。
用户号唯一标识用户信息中的每一个元组。
(4)用户申请信息包括申请号,用户号,会议日期,天数,参会人数,地点,预算费用和受理标志。
申请号唯一标识用户申请信息中的每一个元组,且一个用户可以提交多个申请,但一个用户申请只对应一个用户号。
(5)策划部主管为已受理的用户申请制定会议策划任务。
策划任务包括申请号,任务明细和要求完成时间。
申请号唯一标识策划任务的每一个元组。
一个策划任务只对应一个已受理的用户申请,但一个策划任务可由多名策划员参与执行,且一名策划员可以参与执行多项策划任务。
【概念模型设计】
根据需求阶段收集的信息,设计的实体联系图(不完整)如图2-1所示。
【关系模式设计】
部门(部门号,部门名,部门主管,联系电话,邮箱号)
员工(员工号,姓名,(a),联系方式,薪资)
用户(用户名,(b),电话,联系地址)
用户申请(申请号,用户号,会议日期,天数,参会人数,地点,受理标志,(c))
策划任务(申请号,任务明显,(d))
执行(申请号,策划员,实际完成时间,用户评价)
根据问题描述,补充五个联系,完成图2-1的实体联系图,联系名可用联系1,联系2,联系3,联系4和联系5表示,联系的类型为1:
1,1:
n和m:
n(或1:
1,1:
*和*:
*)
(4分)
根据题意,将关系模式中的空(a)~(d)补充完整,并填入答题纸的位置上。
给出“用户申请”和“策划任务”关系模式的主键和外键。
请问“执行”关系模式的主键为全码的说法正确吗?
为什么?
试题三(共15分)
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
某大学拟开发一个用于管理学术出版物(Publication)的数字图书馆系统,用户可以从该系统查询或下载已发表的学术出版物。
系统的主要功能如下:
1.登录系统。
系统的用户(User)仅限于该大学的学生(Student),教师(Faculty)和其它工作人员(Staff)。
在访问系统之前,用户必须使用其校园账号和密码登录系统。
2.查询某位作者(Author)的所有出版物。
系统中保存了会议文章(ConfPaper),期刊文章(JournalArticle)和校内技术报告(TechReport)等学术出版物的信息,如题目,作者以及出版年份等。
除此之外,系统还存储了不同类型出版物的一些特有信息;
(1)对于会议文章,系统还记录了会议名称,召开时间以及召开地点;
(2)对于期刊文章,系统还记录了期刊名称,出版月份,期号以及主办单位;
(3)对于校内技术报告,系统还记录了由学校分配的唯一ID。
3.查询制定会议集(Proceedings)或某个期刊特定期(Edition)的所有文章。
会议集包含了发表在该会议(在某个特定时间段,特定地点召开)上的所有文章。
期刊的每一期在特定时间发行,其中包含若干篇文章。
4.下载出版物。
系统记录每个出版物被下载的次数。
5.查询引用了某篇出版物的所有出版物。
在学术出版物中引用他人或早期的文献作为相关工作或背景资料是很常见的现象。
用户也可以在系统中为某篇出版物注册引用通知,若有新的出版物引用该出版物,系统将发送电子邮件通知该用户。
现在采用面向对象方法对该系统进行开发,得到系统的初始设计类图如图3-1所示。
(9分)
根据说明中的描述,给出图3-1中C1~C9所对应的类名。
根据说明中的描述,给出图3-1中类C6~C9的属性。
图3-1中包含了那种设计模式?
实现的是该系统的哪个功能?
试题四(共15分)
阅读下列说明和C代码,回答问题1至问题2,将解答写在答题纸的对应栏内
一个无向连通图G上的哈密尔顿(Hamilton)回路是指从图G上的某个顶点出发,经过图上所有其他顶点一次且仅一次,最后回到该顶点的路径。
一种求解无向图上的哈密尔顿回路算法的基本思想如下:
假设图G存在一个从顶点u0出发的哈密尔顿回路u0—u1—u2—u3—...—u0—un-1—u0。
算法从顶点u0出发,访问该顶点的一个未被访问的领接顶点u1,接着从顶点u1出发,访问u1的一个未被访问的领接顶点u2,...。
对顶点ui,重复进行以下操作:
访问ui的一个为被访问的领接顶点ui+1;
若ui的所有领接顶点均已被访问,则返回到顶点ui-1,考虑ui-1的下一个未被访问的领接顶点,仍记为ui;
直到找到一个哈密尔顿回路或者找不到哈密尔顿回路,算法结束。
【C代码】
下面是算法的C语言实现。
(1)常量和变量说明
n:
图G中的顶点数
c[][]:
图G的领接矩阵
k:
统计变量,当前已经访问的顶点数为k+1
x[k]:
第k个访问的顶点编号,从0开始
visited[x[k]]:
第k个顶点的访问标志,0表示未访问,1表示已访问
(2)C程序
#include<
stdio.h>
stdlib.h>
#defineMAX4
VoidHamilton(intn,intx[MAX],intc[MAX][MAX]){
inti;
intvisited[MAX];
intk;
/*初始化x数组和visited数组*/
for(i=o;
i<
n;
i++){
x[i]=0;
Visited[i]=0;
}
/*访问起初顶点*/
K=0;
(1);
x[0]=0;
k=k+1;
/*访问其它顶点*/
while(k>
0){
x[k]=x[k]+1;
while(x[k]<
n){
if(
(2)&
&
c[x[k-1]][x[k]]==1){/*领接顶点x[k]未被访问过*/
break;
else{
if(x[k]<
n&
k==n-1&
(3)){/*找到一条哈密尔顿回路*/
for(k=0;
k<
k++){
printf(“%d--”,x[k]);
/*输出哈密尔顿回路*/
printf(“%d\n”,x[0]);
return;
elseif(x[k]&
n-1){/*设置当前顶点的访问标志,继续下一个顶点*/
(4);
else{/*没有未被访问过的领接顶点,回退到上一个顶点*/
x[k]=0;
visited[x[k]]=0;
(5);
(10分)
根据题干说明,填充C代码中的空
(1)~(5)。
根据题干说明和C代码,算法采用的设计策略是(6),该方法在遍历图的顶点时,采用的是(7)方法(深度优先或广度优先)。
试题五(共15分)
阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
某图像预览程序要求能够查看BMP,JPEG和GIF三种格式的文件,且能够在Windows和Linux两种操作系统上运行。
程序需具有较好的扩展性以支持新的文件格式和操作系统。
为满足上述需求并减少所需生成的子类数目,现采用桥接(Bridge)模式进行设计,得到如图5.1所示的类图。
【c++代码】
iostream>
string>
Usingnamespacestd;
classmatrix{//各种格式的文件最终都被转化为像素矩阵
//此处代码省略
};
classImplement{
Public:
//显示像素矩阵m
classWinImp:
publicImplementor{
VoiddoPaint(Matrixm){/*调用Windows系统的绘制函数绘制像素矩阵*/}
};
classLinuxImp:
publicImplementor{
public:
VoiddoPaint(Matrixm){/*调用Linux系统的绘制函数绘制像素矩阵*/}
classImag{
voidsetImp(Implementor*imp){this.imp=imp;
virtualvoidparseFile(StringfileName)=0;
protected:
Implenentor*imp;
classBMPImage:
publicImage{
classGIFImage:
voidparseFile(StringfileName){
//此处解析GIF文件并获取一个像素矩阵对象m
(2);
classJPEGImage:
intmain(){
publicstaticvoidmain(String[]args){
//在Linux操作系统上查看demo.gif图像文件
Imagimag=(3);
ImplementorimageImp=(4);
(5);
image.parseFile(“demo.gif”);
}
试题六共15分)
阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。
【Java代码】
importJava。
Util。
*;
abstractclassImplement{
public
(1);
publicVoiddoPaint(Matrixm){/*调用Windows系统的绘制函数绘制像素矩阵*/}
public