下半年下午 软件设计师 试题及答案与解析软考考试真题案例分析.docx
《下半年下午 软件设计师 试题及答案与解析软考考试真题案例分析.docx》由会员分享,可在线阅读,更多相关《下半年下午 软件设计师 试题及答案与解析软考考试真题案例分析.docx(18页珍藏版)》请在冰点文库上搜索。
![下半年下午 软件设计师 试题及答案与解析软考考试真题案例分析.docx](https://file1.bingdoc.com/fileroot1/2023-5/8/94eff220-e664-4b91-9804-513e9564f7d9/94eff220-e664-4b91-9804-513e9564f7d91.gif)
下半年下午软件设计师试题及答案与解析软考考试真题案例分析
2017年下半年下午软件设计师考试试题-
案例分析-答案
试题一(共15分)
阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。
【说明】
某公司拟开发一个共享单车系统,采用北斗定位系统进行单车定位,提供针对用户的APP以及微信小程序、基于Web的管理与监控系统。
该共享单车系统的主要功能如下。
1、用户注册登录。
用户在APP端输入手机号并获取验证码后进行注册,将用户信息进行存储。
用户登录后显示用户所在位置周围的单车。
2、使用单车。
①扫码/于动开锁。
通过扫描二维码或手动输入编码获取开锁密码,系统发送开锁指令进行开锁,系统修改单车状态,新建单车行程。
②骑行单车。
单车定时上传位置,更新行程。
③锁车结账。
用户停止使用或手动锁车并结束行程后,系统根据己设置好的计费规则及使用时间自动结算,更新本次骑行的费用并显示给用户,用户确认支付后,记录行程的支付状态。
系统还将重置单车的开锁密码和单车状态。
3、辅助管理。
①查询。
用户可以查看行程列表和行程详细信息。
②报修。
用户上报所在位置或单车位置以及单车故障信息并进行记录。
4、管理与监控。
①单车管理及计费规则设置。
商家对单车基础信息、状态等进行管理,对计费规则进行设置并存储。
②单车监控。
对单车、故障、行程等进行查询统计。
③用户管理。
管理用户信用与状态信息,对用户进行查询统计。
现采用结构化方法对共享单车系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。
【问题1】(3分)
使用说明中的词语,给出图1-1中的实体El~E3的名称。
【参考答案】
E1、用户
E2、商家
E3、单车
【问题2】(5分)
使用说明中的词语,给出图1-2中的数据存储D1~D5的名称。
【参考答案】
D1、存储用户信息
D2、记录单车位置及状态信息
D3、记录单车行程信息
D4、、存储计费规则
D5、记录单车故障信息
【问题3】(5分)
根据说明和图中术语及符号,补充图1-2中缺失的数据流及其起点和终点.
【参考答案】
1.起点:
p3终点:
E1数据流名称:
开锁密码
2.起点:
p3终点:
E1数据流名称:
锁车结帐
3.起点:
p7终点:
E2数据流名称:
单车状态
【问题4】(2分)
根据说明中术语,说明"使用单车"可以分解为哪些子加工?
【参考答案】
1、扫码/手动开锁
2、骑行单车
3、锁车结帐
试题二
阅读下列说明,回答问题1至4问题,将解答填入答题纸的对应栏内。
【说明】
M公司为了便于开展和管理各项业务活动,提高公司的知名度和影响力,拟构建一个基于网络的会议策划系统。
【需求分析结果】
该系统的部分功能及初步需求分析的结果如下:
(1)、M公司旗下有业务部、策划部和其他部门。
部门信息包括部门号、部门名、主管、联系电话和邮箱号;每个部门只有一名主管,只负责管理本部门的工作,且主管参照员工关系的员工号;一个部门有多名员工,每名员工属于且仅属于一个部门。
(2)、员工信息包括员工号、姓名、职位、联系方式和薪资。
职位包括主管、业务员、策划员等。
业务员负责受理用户申请,设置受理标志。
一名业务员可以受理多个用户申请,但一个用户申请只能由一名业务员受理。
(3)、用户信息包括用户号、用户名、银行账号、电话、联系地址。
用户号唯一标识用户信息中的每一个元组。
(4)、用户申请信息包括申请号、用户号、会议日期、天数、参会人数、地点、预算和受理标志。
申请号唯一标识用户申请信息中的每一个元组,且一个用户可以提交多个申请,但一个用户申请只对应一个用户号。
(5)、策划部主管为己受理的用户申请制定会议策划任务。
策划任务包括申请号、任务明细和要求完成时间.申请号唯一标识策划任务的每一个元组。
一个策划任务只对应一个已受理的用户申请,但一个策划任务可由多名策划员参与执行,且一名策划员可以参与执行,且在项策划任务。
【概念模型设计】
根据需求阶段收集的信息,设计的实体联系图(不完整)如图2-1所示。
【关系模型设计】
部门(部门和,部门名,部门主管,联系电话,邮箱号)
员工(员工号,姓名,(),联系方式,薪资)
用户(用户名,(),电话,联系地址)
用户申请(申请号,用户号,会议日期,天数,参会人数,地点,受理标志,())
执行(申请号,任务明细,())
【问题1】(5分)
根据问题描述,补充五个联系,完善图2-1的实体联系图。
联系名可用联系1、联系2、联系3、联系4和联系5,联系的类型为1:
1、1:
n和m:
n(或1:
1、1:
*和*:
*)。
【参考答案】
1、联系1:
部门和员工,1:
n
2、联系2:
业务员和用户申请,1:
n
3、联系3:
用户和用户申请,1:
n
4、联系4:
策划员和策划任务,n:
m
5、联系5:
策划任务和用户申请,1:
1
【问题2】(4分)
根据题意,将关系模型中的空(a)~(d)补充完整,并填入答题纸对应的位置上。
【参考答案】
A、职位,部门号
B、用户名,银行帐号
C、预算费用,业务员(员工号)
D、要求完成时间
【问题3】(4分)
给出“用户申请”和“策划任务”关系模式的主键和外键。
【参考答案】
1、用户申请:
主键:
申请号外键:
用户号,业务员
2、策划任务:
主键:
申请号外键:
申请号
【问题4】(2分)
请问“执行”关系模式的主键为全码的说法正确吗?
为什么?
【参考答案】
1、不正确。
2、All-key关系模型的所有属性组组成该关系模式的候选码,称为全码。
即所有属性当作一个码。
若关系中只有一个候选码,且这个候选码中包含全部属性,则该候选码为全码。
实际完成时间和用户评价为非主属性。
试题三
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某大学拟开发一个用于管理学术出版物(Publication)的数字图书馆系统,用户可以从该系统查询或下载已发表的学术出版物。
系统的主要功能如下:
1.登录系统。
系统的用户(User)仅限于该大学的学生(Student)、教师(Faculty)和其他工作人员(Staff)。
在访问系统之前,用户必须使用其校园账户和密码登录系统。
2.查询某位作者(Author)的所有出版物。
系统中保存了会议文章(ConfPaper)、期刊文章(JurnalArticle)和校内技术报告(TechReport)等学术出版物的信息,如题目、作者以及出版年份等。
除此之外,系统还存储了不同类型出版物的一些特有信息;
(1)对于会议文章,系统还记录了会议名称、召开时间以及召开地点;
(2)对于期刊文章,系统还记录了期刊名称、出版月份、期号以及主办单位;
(3)对于校内技术报告,系统记录了由学校分配的唯一ID。
3.查询指定会议集(Proceedings)或某个期刊特定期(Edition)的所有文章。
会议集包含了发表在该会议(在某个特定时间段、特定地点召开)上的所有文章。
期刊的每一期在特定时间发行,其中包含若干篇文章。
4.下载出版物。
系统记录每个出版物被下载的次数。
5.查询引用了某篇出版物的所有出版物。
在学术出版物中引用他人或早期的文献作为相关工作或背景资料是很常见的现象。
用户也可以在系统中为某篇出版物注册引用通知,若有新的出版物引用了该出版物,系统将发送电子邮件通知该用户。
现在采用面向对象方法对该系统进行开发,得到系统的初始设计类图如图3-1所示。
【问题1】(9分)
根据说明中的描述,给出图3-1中C1~C9所对应的类名。
【参考答案】
C1、Object
C2、User
C3、Student
C4、Faculty
C5、Staff
C6、Publication
C7、ConfPaper
C8、JournalArticle
C9、TechReport
【问题1】(4分)
根据说明中的描述,给出图3-1中类C6~C9的属性。
【参考答案】
C6、题目,作者,出版年份
C7、会议名称,召开时间,召开地点
C8、期刊名称,出版月份,期号,主办单位
C9、ID
【问题3】(2分)
图3-1中包含了哪种设计模式?
实现的是该系统的哪个功能?
【参考答案】
1、观察者模式,实现:
2、引用他人学术出版物发送电子邮件通知该用户。
试题四
阅读下列说明和C代码,回答问题1至问题2,将解答写在答题纸的对应栏内。
【说明】
一个无向连通图G点上的哈密尔顿(Hamiltion)回路是指从图G上的某个顶点出发,经过图上所有其他顶点一次且仅一次,最后回到该顶点的路劲。
一种求解无向图上哈密尔顿回路算法的基础私下如下:
假设图G存在一个从顶点V0出发的哈密尔顿回路V1——V2——V3——...——Vn-1——V0。
算法从顶点V0出发,访问该顶点的一个未被访问的邻接顶点V1,接着从顶点V1出发,访问V1一个未被访问的邻接顶点V2,..。
;对顶点Vi,重复进行以下操作:
访问Vi的一个未被访问的邻接接点Vi+1;若Vi的所有邻接顶点均已被访问,则返回到顶点Vi-1,考虑Vi-1的下一个未被访问的邻接顶点,仍记为Vi;知道找到一条哈密尔顿回路或者找不到哈密尔顿回路,算法结束。
【C代码】
下面是算法的C语言实现。
(1)常量和变量说明
n:
图G中的顶点数
c[][]:
图G的邻接矩阵
K:
统计变量,当期已经访问的定点数为k+1
x[k]:
第k个访问的顶点编号,从0开始
Visited[x[k]]:
第k个顶点的访问标志,0表示未访问,1表示已访问
(2)C程序
#include
#include
#defineMAX100
VidoHamilton(intn,intx[MAX,intc[MAX][MAX]){
int;
intvisited[MAX];
intk;
/*初始化x数组贺visited数组*/
for(i=0:
ix[i]=0;
visited[i]=0;
}
/*访问起始顶点*/
k=0
();
x[0]=0
K=k+1
/*访问其他顶点*/
while(k>=0){
x[k]=x[k]+1;
while(x[k]>if()&&c[x-[k-1]][x[k]=1){/*邻接顶点x[k]未被访问过*/
break;
}else{
x[k]=x[k]+1
}
}
if(x[k]for(k=0;kprinf(〝%d--〝,x[k];/*输出哈密尔顿回路*/
}
prinf(〝%d--〝,x[0];
return;
}elseifx[k]()
k=k+1;
}else{/*没有未被访问过的邻接顶点,回退到上一个顶点*/
x[k]=0;
visitedx[k]=0;
();
}
}
}
【问题1】(10分)
根据题干说明。
填充C代码中的空
(1)~(5).
【参考答案】
1、visited[0]=1
2、visited[x[k]]==0
3、c[x[0]][x[k]]
4、visited[x[k]]=1
5、k=k-1
【问题2】(5分)
根据题干说明和C代码,算法采用的设计策略为(6),该方法在遍历图的顶点时,采用的是(7)方法(深度优先或广度优先)。
【参考答案】
6、回溯法
7、深度优先
试题五
阅读下列说明和C++代码,将应填入()处的字句写在答题纸的对应栏内。
【说明】
某图像预览程序要求能够查看BMP、JPEG和GIF三种格式的文件,且能够Windows和Linux两种操作系统上运行程序需具有较好的扩展性以支持新的文件格式和操作系统。
为满足上述需求并减少所需生成的子类数目,现采用桥接(Bridge)模式进行设计,得到如图5-1所示的类图。
【问题1】
【C++代码】
#include
#include<:
string>;
Usingnamespacestd;
classMatrix{//各种格式的文件最终都被转化为像素矩阵
//此处代码省略
};
classImplementor{
public:
(1);显示像素矩阵m
};
classWinImp:
publicImplementor{
public:
VioddoPaint(Matrixm){
/*调用Windows系统的绘制函数绘制像素矩阵*/
};
classLinuxImp:
publicImplementor{/*调用Linux系统的绘制函数绘制像素矩阵*/}
};
classImage{
public:
viodsetImp(Implement*imp)?
{this->imp=imp;}
VirtualviodparseFile(stringfileName)=0
protected:
Implementor*imp;
};
classBMPImage:
publicImage{
//此处省略代码
};
classGIFImage:
publicImage{
Public:
viodparseFile(stringfileName){
//此处解析GIF文件并获得一个像素矩阵对象m
(2);显示像素矩阵m
}
};
classJPEGImage:
publicImage{
//此处代码省略
};
intmain(){
//在linux操作系统上查看demo.gif图像文件
Image*image=(3);
Implementor*imageImp=(4);
(5)
Image->parseFile(〝demo.gif〝);
return0;
}
【参考答案】
1、virtualvoiddoPaint(Matrixm)=0
2、imp->doPaint(m)
3、newGIFImage()
4、newLinuxImp()
5、image->setImp(imageImp)
试题六
阅读下列说明和Java代码,将应填入一且上一处的字句写在答题纸的对应栏内。
【说明】
某图像预览程序要求能够查看BMP、JPEG和GIF三种格式的文件,且能够在Windows和Linux两种操作系统上运行。
程序需具有较好的扩展性以支持新的文件格式和操作系统。
为满足上述需求并减少所需生成的子类数目,现采用桥接模式进行设计,得到如图6-1所示的类图。
【问题1】
【Jave代码】
Importjava.util.*;
classMatrix{//各种格式的文件最终都被转化为像素矩阵
//此处代码省略
};
abstractclassImplementor{
Public
(1);//显示像素矩阵m
};
classWinImpextendsImplementor{
publicvoiddoPaint(Matrixm){//调用Windows系统的绘制函数绘制像素矩阵
}
};
classLinuxImpextendsImplementor{
publicvoiddoPaint(Matrixm){//调用Linux系统的绘制函数绘制像素矩阵
}
};
abstractclassImage{
publicvoidsetImp(Implementorimp){this.imp=imp;}
publicabstractvoidparseFile(StringfileName);
protectedImplementorimp;
};
classBMPImageextendsImage{
//此处代码省略
};
classGIFImageextendsImage{
publicvoidparseFile(StringfileName){
//此处解析BMP文件并获得一个像素矩阵对象m
(2);//显示像素矩阵m
}
};
ClassMain{
Publicstaticviodmain(String[]args){
//在Linux操作系统上查看demo.gif图像文件
Imageimage=(3)
ImplementorimageImp=(4)
(5)
Image.parseFile(〝demo.gif〝);
}
}
【参考答案】
1、abstractvoiddoPaint(Matrixm)
2、imp.doPaint(m)
3、newGIFImage()
4、newLinuxImp()
5、image.setImp(imageImp)