软件设计师下午题附答案.docx
《软件设计师下午题附答案.docx》由会员分享,可在线阅读,更多相关《软件设计师下午题附答案.docx(20页珍藏版)》请在冰豆网上搜索。
软件设计师下午题附答案
软件设计师2016年05月下午题〔附答案〕
试题一
阅读以下说明和图,答复以下问题1至问题4,将解答填入答题纸的对应栏内。
[说明]
某会议中心提供举办会议的场地设施和各种设备,供公司与各类组织机构租用。
场地包括一个大型报告厅、一个小型报告厅以及诸多会议室。
这些报告厅和会议定室可提供的设备有投影仪、白板、视频播放/回放设备、电脑等。
为加强管理,该中心欲开发一会议预订系统,系统的主要功能如下。
(1)检查可用性。
客户提交预订请求后,检查预订表,判定所申请的场地是否在申请日内可用;如果不可用,返回不可用信息。
(2)临时预订。
会议管理员收到客户预定请求的通知之后,提交确认。
系统生成新临时预订存入预订表,并对新客户创建一条客户信息记录加以保存。
根据客户记录给客户临时预订确认信息和支付定金要求。
(3)分配设施与设备。
根据临时预订或变更预定的设备和设施需求,分配所需设备〔均能满足用户要求〕和设施,更新相应的表和预订表。
(4)确认预订。
管理员收到客户支付定金的通知后,检查确认,更新预订表,根据客户记录给客户发送确认信息。
(5)变更预订。
客户还可以在支付余款前提交变更预订请求,对变更的预订请求检查可用性,如果可用,分配设施和设备;如果不可用,返回不可用信息。
管理员确认变更后,根据客户记录给客户发送确认信息。
(6)要求付款。
管理员从预订表中查询距预订的会议时间两周内的预定,根据客户记录满足条件的客户发送支付余款要求。
(7)支付余款。
管理员收到客户余款支付的通知后,检查确认,更新预订表中的已支付余款信息。
现采用结构化方法对会议预定系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图〔不完整〕。
[问题1]
使用说明中的词语,给出图1-1中的实体E1~E2的名称。
[问题2]
使用说明中的词语,给出图1-2中的数据存储D1~D4的名称。
[问题3]
根据说明和图中术语,补充图1-2之中缺失的数据流及其起点和终点。
[问题4]
如果发送给客户确实认信息是通过Email系统向客户信息中的电子邮件地址进行发送的,那么需要对图1-1和1-2进行哪些修改?
用150以内文字加以说明。
试题二
阅读以下说明,答复以下问题1至问题3,将解答填入答题纸的对应栏内。
[说明]
某销售公司当前的销售业务为商场实体店销售。
现该公司拟开展网络销售业务,需要开发一个信息化管理系统。
请根据公司现有业务及需求完成该系统的数据库设计。
[需求描述]
(1)记录公司所有职工的信息。
职工信息包括工号、身份证号、、性别、出生日期和,并只登记一部。
(2)记录所有商品的信息。
商品信息包括商品名称、生产厂家、销售价格和商品介绍。
系统内部用商品条码唯一区别每种商品。
(3)记录所有顾客的信息。
顾客信息包括顾客、身份证号、登录名、登录密码和号码。
一位顾客只能提供一个号码。
系统生成唯一的顾客编号。
(4)顾客登录系统之后,在网上商场购买商品。
顾客可将选购的商品置入虚拟的购物车,购物车可长期存放顾客选购的所有商品。
顾客可在购物车内选择商品、修改商品数量后生成网购订单。
订单生成后,由顾客选择系统提供的备选第三方支付平台进行电子支付,支付成功后,系统需要记录唯一的支付凭证编号,然后由商城根据订单进行线下配送。
(5)所有的配送商品均由仓库统一出库。
为方便顾客,允许每位顾客在系统中提供多组收货地址、收货人及联系。
一份订单所含的多个商品可能由多名分检员根据商品所在仓库信息从仓库中进行分拣操作,分拣后的商品交由配送员根据配送单上的收货地址进行配送。
(6)新设计的系统要求记录实体店的每笔销售自己,包括营业员、顾客、所售商品及其数量。
[概念模型设计]
根据需求阶段收集的信息,设计的实体联系图〔不完整〕如图2-1所示。
[逻辑结构设计]
根据概念模型设计阶段完成的实体联系图,得出如下关系模式〔不完整〕:
职工〔工号,身份证号,,性别,出生日期,〕
商品〔商品条码,商品名称,生产厂家,销售价格,商品介绍,(a)〕
顾客〔顾客编号,,身份证号,登录名,登录密码,〕
收货地址〔收货ID,顾客编号,收货地址,收货人,联系〕
购物车〔顾客编号,商品条码,商品数量〕
订单〔订单ID,顾客编号,商品条码,商品数量,(b)〕
分检〔分拣ID,分拣职工号,(c),分拣时间〕
配送〔配送ID,分拣ID,配送职工号,收货ID,配送时间,签收时间,签收快照〕
销售〔销售ID,营业职工号,顾客编号,商品条码,商品数量〕
[问题1]
补充图2-1中的“配送”联系所关联的对象联系类型。
[问题2]
补充逻辑结构设计中的(a)、(b)和(c)三处空缺。
[问题3]
对于实体店销售,假设要增加送货上门服务,由营业员在系统中下订单,与网购的订单进行后续的统一管理。
请根据该需求,对图2-1进行补充,并修改订单关系模式。
试题三
阅读以下说明和图,答复以下问题1至问题3,将解答填入答题纸的对应栏内。
[说明]
某软件公司欲设计实现一个虚拟仿真系统。
系统中的虚拟世界用于模拟现实世界中的不同环境〔由用户设置并创建〕,用户通过操作仿真系统中的1~2个机器人来探索虚拟世界。
该系统的主要功能描述如下:
(1)机器探索虚拟世界〔RunRobots〕。
用户使用编辑器〔Editor〕编写文件以设置要模拟的环境,将文件导入系统〔LoadFile〕从而在仿真系统中建立虚拟世界〔SetupWorld〕。
机器人在虚拟世界中的行为也在文件中进行定义,建立机器人的探索行为程序〔SetupProgram〕。
机器人在虚拟世界中探索时〔RunProgram〕,有2种运行模式:
1)自动控制〔Run〕:
事先编好机器人的动作序列〔指令〔Instruction〕〕,执行指令,使机器人可以连续动作。
假设干条指令构成机器人的指令集〔InstructionSet〕。
2)单步控制〔Step〕:
自动控制方式的一种特殊形式,只执行指定指令中的一个动作。
(2)手动控制机器人〔ManipulateRobots〕。
选定1个机器人后〔SelectRobot〕,可以采用手动方式控制它。
手动控制有4种方式。
1)Move:
机器人朝着正前方移动一个交叉点。
2)Left:
机器人原地沿逆时针旋转90度。
3)Read:
机器人读取其所在位置的字符,并将这个字符的值赋给b1;如果这个位置没有字符,则不改变b1的当前值。
4)Write:
将b1中的字符写入机器人当前所在的位置,如果这个位置上已经有字符,该字符的值会被b1的值替代。
如果这时b1没有值,即在执行Write动作之前没有执行过任何Read动作,那么需要提示用户相应的错误信息〔ShowErrors〕。
手动控制与单步控制的区别在于,单步控制时执行的是指令中的动作,只有一种控制方式,即执行下一动作;而手动控制时有4种动作。
现采用面向对象方法设计并实现该仿真系统,得到如图3-1所示的用例图和图3-2所示的初始类图。
图3-2中的类”Interpreter”和”Parser”用于解析描述虚拟世界的文件以及机器人行为文件中的指令集。
[问题1]
根据说明中的描述,给出图3-1中U1~U6所对应的用例名。
[问题2]
图3-1中用例U1~U6分别与哪个〔哪些〕用例之间有关系,是何种关系?
[问题3]
根据说明中的描述,给出图3-2中C1~C5所对应的类名。
试题四
阅读以下说明和C代码,答复以下问题1至问题3,将解答写在答题纸的对应栏内。
[说明]
在一块电路板的上下两端分别有n个接线柱。
根据电路设计,用(I,π(i))表示将上端接线柱i与下端接线柱π(i)相连,称其为该电路板上的第i条连线。
如图4-1所示的π(i)排列为{8,7,4,2,5,1,9,3,10,6}。
对于任何1<=Iπ(j)。
在制作电路板时,要求将这n条连线分布到假设干绝缘层上,在同一层上的连接不相交。
现在要确定将哪些连线安排在一层上,使得该层上有尽可能多的连线,即确定连接集Nets={(I,π(i)),1<=I<=n}的最大不相交子集。
[分析问题]
记N[I,j]={t|(t,π(i))€Nets,t<=I,π(t),=j}。
N(I,j)是最大不相交子集为MNS(I,j),size(I,j)=|MNS(I,j)|。
经分析,该问题具有最优子结构性质。
对规模为n的电路布线问题,可以构造如下递归式:
(1)当i=1时,
(2)当i>1时,
[C代码]
下面是算法的C语言实现。
(1)变量说明
Size[i][j]:
上下端分别有i个和j个接线柱的电路板的第一层最大不相交连接数
Pi[i]:
π(i),下标从1开始
(2)C程序
#include“”
#include
#defineN10/*问题规模*/
Intm=0;/*记录最大连接集合中的接线柱*/
VoidmaxNum(intpi[],intsize[N+1][N+1],intn){/*求最大不相交连接数*/
IntI,j;
For(j=0;j(1)时*/
For(j=pi[i];j<=n;j++)
(1);/*当j>=π
(1)时*/
For(i=2;iFor(j=0;j(2);/*当jFor(j=pi[i];j<=n;j++){/*当j>=c[i]时,考虑两种情况*/
Size[i][j]=size[i-1][j]>=size[i-1][pi[i]-1]+1?
size[i-1][j]:
size[i-1][pi[i]-1]+1;
}
}
/*最大连接数*/
Size[n][n]=size[n-1][n]>=size[n-1][pi[n]-1]+1?
Size[n-1][n]:
size[n-1]pi[n]-1]+1;
}
/*构造最大不相交连接集合,net[i]表示最大不相交子集中第i条连线的上端接线柱的序号*/
VoidconstructSet(intpi[],intsize[N+1][N+1],intn,intnet[n]){
IntI,j=n;
M=0;
For(I=n;I>1;i--){/*从后往前*/
If(size[i][j]!
=size[i-1][j]){/*(I,pi[i])是最大不相交子集的一条连接*/
(3);/*将i记录到数组net中,连接线数自增1*/
J=pi[i]–1;/*更新扩展连线柱区间*、
}
}
If(j>=pi[1])net[m++]=1;/*当i=1时*/
}
[问题1]
根据以上说明和C代码,填充C代码中的空
(1)~(3)。
[问题2]
根据题干说明和以上C代码,算法采用了(4)算法设计策略。
函数maxNum和constructSet的时间复杂度分别为(5)和(6)〔用O表示〕。
[问题3]
假设连接排列为{8,7,4,2,5,1,9,3,10,6},即如图4-1所示,则最大不相交连接数为(7),包含的连线为(8)〔用(I,π(i))的形式给出〕。
试题五
阅读以下说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
[说明]
某软件系统中,已设计并实现了用于显示地址信息和类Address〔如图5-1所示〕,现要求提供基于Dutch语言的地址信息显示接口。
为了实现该要求并考虑到以后可能还会出现新的语言的接口,决定采用适配器〔Adapter〕模式实现该要求,得到如图5-1所示类图。
[C++代码]
#include
Usingnamespacestd;
ClassAddress{
Public:
Voidstreet(){/*实现代码省略*/}
Voidzip(){/*实现代码省略*/}
Voidcity(){/*实现代码省略*/}
//其他成员省略
};
ClassDutchAddress{
Public:
Virtualvoidstraat()=0;
Virtualvoidpostcode()=0;
Virtualvoidplaats()=0;
//其他成员省略
};
ClassDutchAddressAdapter:
publicDutchAddress{
Private:
(1);
Public:
DutchAddressAdapter(Address*addr){
address=addr;
}
Voidstraat(){
(2);
}
Voidpostcode(){
(3);
}
Voidplaat(){
(4);
}
//其它成员省略
};
VoidtestDutch(DutchAddress*addr){
Addr->straat();
Addr->postcode();
Addr->plaats();
}
Intmain(){
Address*addr=newAddress();
(5);
Cout<<“\nTheDutchAddress\n”<testDutch(addrAdapter);
return0;
}
试题六
阅读以下说明和Java代码,将应填入(n)处字句写在答题纸的对应栏内。
[说明]
某软件系统中,已设计并实现了用于显示地址信息的类Address〔如图6-1所示〕,面要求提供基于Dutch语言的地址信息显示接口。
为了实现该要求并考虑到以后可能还会出现新的语言的接口,决定采用适配器〔Adapter〕模式实现该要求,得到如图6-1所示类图。
[Java代码]
Importjava.util.*;
ClassAddress{
Publicvoidstreet(){//实现代码省略}
Publicvoidzip(){//实现代码省略}
Publicvoidcity(){//实现代码省略}
//其它成员省略
}
ClassDutchAddress{
Publicvoidstraat(){//实现代码省略}
Publicvoidpostcode(){//实现代码省略}
Publicvoidplaats(){//实现代码省略}
//其他成员省略
}
ClassDucthAddressAdapterextendsDutchAddress{
Private
(1);
PublicDutchAddressAdapter(addressaddr){
Addrss=addr;
}
Publicvoidstraat()[
(2q);
}
Publicvoidpostcode(){
(3r);
}
Publicvoidplaats(){
(4r);
}
//其他成员省略
}
ClassTest{
Publicstaticvoidmain(String[]args){
Addressaddr=newAddress();
(5t);
System.out.println(“\nTheDutchAddress\n”);
testDutch(addrAdapter);
}
StaticvoidtestDutch(DutchAddressaddr){
Addr.straat();
Addr.postcode();
Addr.plaats();
}
}
Answer:
试题一
[问题1]
E1:
客户
E2:
管理员
[问题2]
D1:
预订表
D2:
客户信息记录表
D3:
设备表
D4:
设施表
[问题3]
数据流起点终点
预订确认信息4确认预订E1
客户信息E12临时预定
客户记录D24确认预订
客户记录D25变更预订
预订信息D16要求付款
客户记录D26要求付款
[问题4]
增加外部实体“第三方Email系统”,将临时预订/预订/变更确认信息终点均修改至“第三方Email系统”。
试题二
[问题1]
[问题2]
(a)仓库ID
(b)支付凭证编号
(c)订单ID,商品条码
[问题3]
在营业员和订单之间增加一个“送货上门”的联系,在订单关系中增加“营业职工号”属性作为外键。
试题三
[问题1]
U1:
run
U2:
step
U3:
write
U4:
move
U5:
left
U6:
read
[问题2]
U1:
Runprogram泛化关系
U2:
Runprogram泛化关系
U3:
SelectRobotextend
U4:
SelectRobotextend
U5:
SelectRobotextend
U6:
SelectRobotextend
[问题3]
C1:
文件
C2:
机器人在虚拟世界的行为
C3:
instruction
C4:
InstructionSet
C5:
仿真系统
试题四
[问题1]
(1)Size[1][j]=1
(2)Size[i][j]=size[i-1][j]
(3)Net[m++]=i
[问题2]
(4)动态规划法
(5)O(n^2)
(6)O(n)
[问题3]
(7)4
(8)(9,π(9))(7,π(7))(5,π(5))(3,π(3))
试题五
(1)Address*address
(2)address->street()
(3)address->zip()
(4)address->city()
(5)DutchAddressAdapter*addrAdapter=newDutchAddressAdapter(addr)
试题六
(1)Addressaddress
(2)address.street()
(3)address.zip()
(4)address.city()
(5)DutchAddressAdapteraddrAdapter=newDuchAddressAdapter(addr)