上半年软件设计师下午卷试题及答案解析.docx
《上半年软件设计师下午卷试题及答案解析.docx》由会员分享,可在线阅读,更多相关《上半年软件设计师下午卷试题及答案解析.docx(15页珍藏版)》请在冰豆网上搜索。
上半年软件设计师下午卷试题及答案解析
2018年上半年软件设师
综合技能
试题一〔共15分〕
阅读下列说明,将解答填入题纸的对应栏内.
[说明]
某医疗护理机构为老年人或有护理需求者提供专业护理,现欲开发一基于web的医疗管理系统,以改善医疗护理效,该系统的主要要功能如下:
〔1〕通用信息查询,客广提交通用信息查询请求,意而通用信表表,返回查询结果
〔2〕医生聘用.医生提出成/职中申,交由去前行用事事,更新医生表,并给医生反聘用解聘结果:
聊除解聘医生的出诊发排
〔3〕预约处理.医生安排出诊时向间,存入医生出诊时间表,根据客户提交的预约查询请求,查在职医生与其出诊时间等约所需数据并返同问:
创建预约,提交预约请求,在在预约表中新增预约记录,更新所约医生出诊时间并给医生发送约通知给客户反馈预约结果.
〔4〕药品管理.医生提交处方,根据药品名称从药品数据中查询相关药品库存信息开出药品,更新对应药品的库存以与预约表中的治疗信息;给医生发送"药品已开出〞反馈.
〔5〕报表创建.根据主管提交的报表查询请求〔报表类型和时间段〕,从预的数、通用信息、药品库存数据、医生以与医生出诊时间中进行查询,生成报表返回给主管.
现采用结构化方法对医疗管理系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图.
[问题1]〔3分〕
使用说明中的词语,给出图1-1中的实体E1~E3的名称.
[问题2]〔5分〕
使用说明中的词语,给出图1-2中的数据存储D1~D5的名称.
[问题3〕〔4分〕
使用说明和图中术语,补充图1-2中缺失的数据流与其起点和终点.
[问题4]〔3分〕
使用说明中的词语,说明"预约处理〞可以分解为哪些子加工,并说明建模图1-1
和图1-2是如何保持数据流图平衡.
试题二〔共15分〕
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内.
[说明]
某海外代购公司为扩展公司业务,需要开发一个信息化管理系统.请根据公司现有业务与需求完成该系统的数据库设计.
[需求描述]
〔1〕记录公司员工信息.员工信息包括工号、##号、##、性别和一个手机号,工号唯一标识每位员工,员工分为代购员和配送员.
〔2〕记录采购的商品信息.商品信息包括商品名称、所在超市名称、采购价格、销
售价格和商品介绍,系统内部用商品条码唯一标识每种商品.一种商品只在一家超市代购.
〔3〕记录顾客信息.顾客信息包括顾客真实##、##号〔清关缴税用〕、一个手机号和一个收货地址,系统自动生成唯一的顾客编号.
〔4〕记录托运公司信息.托运公司信息包括托运公司名称、和和地址,系统自动生成唯一的托运公司编号.
〔5〕顾客登录系统之后,可以下订单购买商品.订单支付成功后,系统记录唯一的支付凭证编号,顾客需要在订单里指定运送方式:
空运或海运.
〔6〕代购员根据顾客的订单在超市采购对应商品,一份订单所含的多个商品可能由多名代购员从不同超市采购.
〔7〕采购完的商品交由配送员根据顾客订单组合装箱,然后交给托运公司运送.托运公司按顾客订单核对商品名称和数量,然后按顾客的地址进行运送.
[概念模型设计]
根据需求阶段收集的信息,设计的实体联系图〔不完整〕如图2-1所示.
[逻辑结构设计]
据概念模型设计阶段完成的实体联系图,得出如下关系模式〔不完整〕:
员工〔工号,##号,##,性别,手机号〕
商品〔条码,商品名称,所在超市名称,采购价格,销售价格,商品介绍〕
顾客〔编号,##,##号,手机号,收货地址〕
托运公司司〔托运公司编号,托运公司名称,,地址〕
订单〔订单ID,〔a〕,商品数量,运送方式,支付凭证编号〕
代购〔代购ID,代购员工号,〔b〕〕
运送〔运送D,配送员工号,托运公司编,订单D,发运时间〕
[问题1]〔3分〕
根据问题描述,补充图2-1的实体联系图.
[问题2]〔6分〕
补充逻辑结构设计结果中的〔a〕、〔b〕两处空缺.
[问题3]〔6分〕
为方便顾客,允许顾客在系统中保存多组收货地址.请根据此需求,增加"顾客地址〞弱实体,对图2-1进行补充,并修改"运送〞关系模式.
试题三〔共15分〕
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内.
[说明]
某ETC〔ElectronicTollCollection,不停车收费〕系统在高速公路沿线的特定位置上设置一个横跨道路上空的龙门架〔Tollgantry〕,龙门架下包括6条车道
〔Traficlanes〕,每条车道上安装有雷达传感器〔Radarsensor〕、无线传输器
〔Radiotransceiver〕和数码相机〔DigitalCamera〕等用于不停车收费的设备,以完成正常行驶速度下的收费工作.该系统的基本工作过程如下:
〔1〕每辆汽车上安装有车载器,驾驶员〔Driver〕将一X具有唯一识别码的磁卡插入车载器中.磁卡中还包含有驾驶员账户的当前信用记录.
〔2〕当汽车通过某条车道时,不停车收费设备识别车载器内的特有编码,判断车型,将收集到的相关信息发送到该路段所属的区域系统〔Regionalcenter〕中,计算通行费用创建收费交易〔Transaction〕,从驾驶员的专用账户中扣除通行费用.如果驾驶员账户透支,则记录透支账户交易信息.区域系统再将交易后的账户信息发送到维护驾驶员账户信息的中心系统〔Centralsystem〕
〔3〕车载器中的磁卡可以使用邮局的付款机进行充值.充值信息会传送至中心系统,以更新驾驶员账户的余额.
〔4〕当没有安装车载器或者车载器发生故障的车辆通过车道时,车道上的数码相机将对车辆进行拍照,并将车辆照片与拍摄时间发送到区域系统,记录失败的交易信息;并将该交易信息发送到中心系统.
〔5〕区域系统会获取不停车收费设备所记录的交通事件〔Trafficevents〕;交通广播电台〔Trafficadvicecenter〕根据这些交通事件进行路况分析并播报路况.
现采用面向对象方法对上述系统进行分析与设计,得到如表3-1所示的用例列表以与如图3-1所示的用例图和图3-2所示的分析类图.
[问题1]〔4分〕
根据说明中的描述,给出图3-1中A1~A4所对应的参与者名称.
[问题2〕〔5分〕
根据说明中的描述与表3-1,给出图3-1中UI-U5所对应的用例名称.
[问题3]〔6分〕
根据说明中的描述,给出图3-2中C1~C6所对应的类名.
试题四〔共15分〕
阅读下列说明和C代码,回答问题1和问题2,将解答填入答题纸的对应栏内.
[说明]
某公司购买长钢条,将其切割后进行出售.切割钢条的成本可以忽略不计,钢条的长度为整英寸.已知价格表P,其中中Pi〔i=1,2,...,m〕表示长度为i英寸的钢条的价格.现要求解使销售收益最大的切割方案.
求解此切割方案的算法基本思想如下:
假设长钢条的长度为n英寸,最佳切割方案的最左边切割段长度为i英寸,则继续求解剩余长度为n-i英寸钢条的最佳切割方案.考虑所有可能的i,得到的最大收益rn对应的切割方案即为最佳切割方案.rn的递归定义如下:
rn=max1≤i≤n对此递归式,给出自顶向下和自底向上两种实现方式
[C代码]
/*常量和变量说明
n:
长钢条的长度
P[]:
价格数组
*/
#defineLEN100
intTop_Down_Cut_Rod{/*自顶向下*/Intr=0
Inti;if{
retum0;
}
for{
inttmp=p[i]+Top_Down_Cut_Rod
r==tmp>?
r:
tmp;
}
returnr;
}
intBottom_Up_Cut_Road{/*自底向上*/
intr[LEN]={0};
inttemp=0;
inti,j;
for{
temp=0;
for;i++>{
temp=<3>;
}
〔4〕
}
returnr[n];
}
[问题1]〔8分〕
根据说明,填充C代码中的空〔1〕~〔4〕.
[问题2]〔7分〕
根据说明和C代码,算法采用的设计练略为〔5〕.
求解时,自顶向下方法的时间复杂度为〔6〕;自底向上方法的时间复杂度为〔7〕
〔用O表示〕.
从下列的2道试题<试题五至试题六>中任选1道解答.请在答题纸上的指定位置处将所选择试题的题号框涂黑.若多涂或者未涂题号框,则对题号最小的一道试题进行评分.
试题五<共15分>
阅读下列说明和C++代码,将应填入处的字句写在答题纸的对应栏内.
[说明]
生成器模式的意图是将一个复杂对象的构建与它的表示分离,使得同样的
构建过程可以创建不同的表示.图5-1所示为其类图.
[C++代码]#include#includeusingnamespacestd;
classProduct{private:
stringpartA,partB;public:
Product<>{}
voidsetPartA{PartA=s;}
voidsetPartB{PartB=s;}
∥其余代码省略
};
classBuilder{public:
<1>;
virtualvoidbuildPartB<>=0;
<2>;
};
classConcreteBuilder1:
publicBuilder{private:
Product*product;public:
ConcreteBuilder1<>{product=newProduct<>;}
voidbuildPartA<>{〔3〕<"ComponentA">;}
voidbuildPartB<>{〔4〕<"ComponentB">;}
Product*getResult<>{returnproduct;}
∥其余代码省略
};
classConcreteBuilder2:
publicBuilder{
/*代码省略*/
};
classDirector{private:
Builder*builder;public:
Director{builder*pBuilder;}
voidconstruct<>{
〔5〕
∥其余代码省略
}
∥其余代码省略
};
intmain<>{
Director*director1=newDirector>;
directorl->construct<>;
deletedirector1;
return0;
}
试题六<共15分>
阅读下列说明和Java代码,将应填入处的字句写在答题纸的对应栏内.
[说明]
生成器模式的意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.图6-1所示为其类图.
[Java代码]
importjava.util.*;
classProduct{
privateStringpartA;
privateStringpartB;
publicProduct<>{}
publicvoidsetPartA{partA=s;}
publicvoidsetPartB{partB=s;}
}
interfaceBuilder{
public<1>;
publicvoidbuildPartB<>;
public<2>;
}
classConcreteBuilder1:
implementsBuilder{
privateProductproduct;
publicConcreteBuilder1<>{product=newProduct<>;}
publicvoidbuildPartA<>{〔3〕<"ComponentA">;}
publicvoidbuildPartB<>{〔4〕<"ComponentB">;}
publicProductgetResult<>{returnproduct;}
}
classConcreteBuilder2implementsBuilder{
∥代码省略
}
classDirector{
privateBuilderbuilder;
publicDirector{this.builder=builder;}
publicvoidconstruct<>{
〔5〕
∥代码省略
}
}
classTest{
publicstaticvoidmain{
Directordirector1=newDirector>;
directorl.construct<>;
}
}
2018年上半年<软设>下午题答案与解析
试题一、
问题1:
E1:
客户E2:
医生E3:
主管问题2:
D1:
通用信息表
D2:
预约表
D3:
医生表
D4:
出诊时间表
D5:
药品库存表问题3:
数据流名称
起点
终点
删除解聘医生的出诊安排
P2
D4
查询相关药品库存信息
P4
D2
更新预约表中治疗信息
D5
P4
更新所约医生出诊时间
P3
D4
预约处理分解为:
安排出诊、创建预约、提交预约请求、发送预约通知.
即保持父图与子图之间的平衡:
父图中某个加工的输入输出数据流必须与其子图的输入输出数据流在数量上和名字上相同.父图的一个输入〔或输出〕数据流对应于子图中几个输入〔或输出〕数据流,而子图中组成的这些数据流的数据项全体正好是父图中的这一个数据流.
试题二、
问题1:
代购员
配送员
问题2:
(a)商品条码,顾客编号
(b)订单ID,商品条码
代购员
配送员
新增一个弱实体顾客地址,新增一个联系客户收货地址,,联连接顾客实体和顾客地址类型为1:
*;弱实体用双矩型
运送关系模式增加该订单收货地址
试题三、
问题1:
A1:
Centralsystem或中心系统
A2:
Driver或驾驶员
A3:
Regionalcenter或区域系统
A4:
Trafficadvicecenter或交通广播电台
其中A3、A4可以互换
问题2:
U1:
UnderpaidtransactionU2:
RecordIllegaluseU3:
CreatetransactionU4:
RecordtrafficeventU5:
Chargecard
其中U1、U2可以互换,用例名称必须为英文,因为表中的汉字是对用例的说明.问题3:
C1:
CentersystemC2:
TrafficeventsC3:
TollgantryC4:
RadarsensorC5:
RadiotransceiverC6:
DigitalCamera
其中C4、C5、C6可以互换
[解析]
问题1:
首先要识别出参与者,是人或组织.题干中表示参与者的有:
驾驶员、区域系统、中心系统、交通广播电台.由问题2得出A1为中心系统.
问题2:
填写用例,要先找到突破口,本题有两个突破口,一个是U1、U2是U3的扩展,而所给定的用例名称中,只有记录透支##交易信息和记录失败交易信息,是记录收费交易的扩展.二个是有一个孤立的用例,从题干中可知为记录交通事件,再加上问题1中的参与者,可以推出完整的用例图.
问题3:
先从C4、C5、C6与C3的一个多组合关系.题干中只有龙门架由三个部分组成.
C1与RegionalCenter对应关系是1个对象对应多个对象,C1只可能为中心系统.然后题干<5>中获取龙门架的所有记录叫交通事件.且一个RegionalCenter有多个C2对象与之对应.
试题四、
问题1:
<1>:
i<=n<2>:
i<=j
<3>:
temp==r[i]+r[j-i]>?
temp:
<4>:
r[j]=p[j]>?
temp:
p[j];
问题2:
<5>动态规划法
<6>O<2n>
<7>O
[解析]问题2:
题干中提到说考虑所有可能的i,得到最大收益的方式,而自底向上算法实现时,使用到数组把其中最优的解记录.是动态规划法.
试题五、
(1)virtualvoidbuildPartA<>=0
(2)virtualProduct*getResult<>=0
(3)product->setPartA
(4)product->setPartB
(5)builder->buildPartA<>;
builder->buildPartB<>;
Product*p=builder->getResult<>;
[解析]第5空,由于后面的代码省略,所以以上三个都可.
试题六、
(1)virtualvoidbuildPartA<>
(2)virtualProductgetResult<>
(3)product.setPartA
(4)product.setPartB
(5)builder.buildPartA<>;
builder.buildPartB<>;
Productp=builder.getResult<>;
[解析]第5空,由于后面的代码省略,所以以上三个都可.