近几年软考真题

本文涉及软件设计中的充电桩检定云端软件开发,包括数据接收、分析、检定等功能,以及数据库设计中的分公司、专卖店和职员管理。同时,讨论了面向对象设计中的温度控制模块和设计模式的应用,以及排序算法的堆排序实现。
摘要由CSDN通过智能技术生成

2022年下半年软件设计师下午案例分析真题答案完整版

试题一(共15分)

阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。

【说明】

随着新能源车数量的迅猛增长,全国各地电动汽车配套充电桩急速增长,同时也带来了充电桩计量准确性的问题。充电桩都需要配备相应的电能计量和电费计费功能,需要对充电计量准确性强制进行检定。现需开发计量检定云端软件,其主要功能是:

(1)数据接收。接收计量装置上报的充电数据,即充电过程中电压、电流、电能等充电监测数据和计量数据(充电监测数据为充电桩监测的数据,计量数据为计量装置计量的数据,以秒为间隔单位),接收计量装置心跳数据,并分别进行存储。

(2)基础数据维护。管理员对充电桩、计量检定装置等基础数据进行维护。

(3)数据分析。实现电压、电流、电能数据的对比,进行误差分析,记录充电桩的充电误差,供计量装置检定。系统根据计量检测人员给出的查询和统计条件展示查询统计结果。

(4)充电桩检定。分析充电误差:计量检测人员根据误差分析结果和检定信息记录,对充电桩进行检定,提交检定结果:系统更新充电桩中的检定信息(检定结果和检定时间),并存储于检定记录。

(5)异常告警。检测计量装置心跳,当心跳停止时,向管理员发出告警。

(6)检定信息获取,供其它与充电桩相关的第三方服务查询充电桩中的检定信息。

现采用结构化方法对计量检定云端软件进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。

【问题1】(4分)

使用说明中的词语,给出图1-1 中的实体E1~ E4的名称。

【问题2】(5分)

使用说明中的词语,给出图1-2中的数据存储D1~D5的名称。

【问题3】(4分)

根据说明和图中未语,补充图1-2中缺失的数据流及其起点和终点。

【问题4】(2分)

根据说明,给出“充电监测与计量数据”数据流的组成。

试题二(共15分)

阅读下列说明和图,回答问题1至问愿3,将解答填入答题纸的对应栏内。

【说明】

某营销公司为了便于对各地的分公司及专卖店进行管理,拟开发一套业务管理系统,请根据下述需求描述完成该系统的数据库设计。

【需求描述】

(1) 分公司信息包括:分公司编号、分公司名、地址和电话。其中,分公司编号唯一确定分公司关系的每一个元组。每个分公司拥有多家专卖店,每家专卖店只属于一个分公司。

(2) 专卖店信息包括:专卖店号、专卖店名、店长、分公司编号、地址、电话,其中店号唯一确定专卖店关系中的每一个元组。每家专卖店只有一名店长,负责专卖店的各项业务:每名店长只负责一家专卖店:每家专卖店有多名职员,每名职员只属于一家专卖店。

(3)职员信息包括:职员号、职员名、专卖店号、岗位、电话、薪资。其中,职员号唯一标识职员关系中的每一个元组。岗位有店长、营业员等。

【概念模型设计】

根据需求阶段收集的信息,设计的实体联系图(不完整)如图2-1所示。

【逻辑结构设计】

根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整):分公司(分公司编号,分公司名,地址,电话)

专卖店(专卖店号,专卖店名,___(a)__,职员,地址,电话)

职员(职员号,职员名,____(b)___,岗位,电话,薪资)

【问题1】(6分)

根据需求描述,图21实体联系图中缺少三个联系。请在答题纸对应的实体联系图中补充三个联系及联系类型。

注:联系名可用联系1、联系2、联系3:也可根据你对题意的理解取联系名。

【问题2】 (6分)

(1)将关系校式中的空____(a)___、____(b)___的属性补充完整,并填入答题纸对应的位置上。

(2)专卖店关系的主键:____(c)___ 和外键:____(d)___。

职员关系的主键:____(e)___ 和外键:____(f)___。

【问题3】(3分)

为了在紧急情况发生时,能及时联系到职员的家人,专卖店要求每位职员至少要填写位紧急联系人的姓名、与本人关系和联系电话。根把这种情况,在用2-1中还需来机的实体是____(g)___ ,职员关系与该实体的联系类型为____(h)___。

(3)给出该实体的关系模式。

试题三(共15分)

阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。

【说明】

图3-1所示为某软件系统中一个温度控制模块的界面。 界面上提供了两种温度计量单位,即华氏度(Farechet)和摄氏度(Celsius)。软件支持两种计量单位之间的自动换算,即若输入一个华氏度的温度,其对应的摄氏度温度值会自动出现在摄氏度的显示框内,反之亦然。

用户可以通过该界面上的按钮Raise (升高温度)和Lower (降低温度)来改变温度的值。界面右侧是个温度计, 将数字形式的温度转换成温度计上的制度比例进行显示。当温度值改变时,温度计的显示也随之同步变化。

现在采用面向对象方法现实该温度控制模板,得到如图3-2所示的用例图和3-3所示的类图。

【问题1】(4分)

根据说明中的描述,给出图3.2中U1~U4所对应的用例名。

【问题2】(8分)

根据说明中的描述,给出图3-3中C1~C8所对应的类名(类名使用图3-1中标注的词汇)。

【问题3】(3分)

现需将图3-1所示的界面改造为个更为通用的 GUI应用,能够实现任意计量单位之间的换算,例如千克和确之间的模算、厘米和英寸之间的换算等等。为了实现这个新的需求,可以在图 3-3所示的类图上增加哪种设计模式?请解释选择该设计模式的原因(不超过50字)。

试题四(共15分)

阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。

【说明】

排序是将一组无序的数据元素调整为非递减顺序的数据序列的过程,堆排序是一种常用的排序算法。用顺序存储结构存储堆中元素。非递减堆排序的步骤是:

(1)将含n个元素的待排序数列构造成一个初始大顶堆,存储在数组R(R[1],R[2],...,R[n])中。此时堆的规模为 n,堆顶元素R[1]就是序列中最大的元素,R[n]是堆中最后一个元素。

(2)将堆顶元素和堆中最后一个元素交换,最后一个元素脱离堆结构,堆的规模减1,将堆中剩余的元素调整成大顶堆;

(3)重复步骤(2),直到只剩下最后一个元素在堆结构中,此时数组R是一个非递减的数据序列。

【C代码】

下面是该算法的C语言实现。

(1)主要变量说明

n:待排序的数组长度

R[]:待排序数组,n个数放在R[1],R[2],...,R[n]中

(2)代码

<n&& r[j]<rg(j+1){
【问题1】(8分)

根据以上说明和C代码,填充C代码中的空(1)~(4)。

【问题2】(2分)

根据以上说明和C代码,算法的时间复杂度为(5)(用O符号表示)。

【问题3】(5分)

考虑数据序列R=(7,10,13,15,4,20,19,8),n=8,则构建的初始大顶堆为(6),

第一个元素脱离堆结构,对剩余元素再调整成大顶堆后的数组R为(7)。

试题五

阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

Facade(外观)模式是一种通过为多个复杂子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。以医院为例,就医时患者需要与医院不同的职能部门交互,完成挂号、门诊、取药等操作。为简化就医流程,设置了一个接待员的职位,代患者完成上述就医步骤,患者则只需与接待员交互即可。如5-1给出了以外观模式实现该场景的类图。

【Java 代码】

2022年上半年软件设计师下午案例分析真题答案及解析(试题一)

试题一(共15分)

阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。

[说明]

某公司欲开发一款外卖订餐系统,集多家外卖平台和商户为一体,为用户提供在线浏览餐品、订餐和配送等服务。该系统的主要功能是:

1.入驻管理。用户注册:商户申请入驻,设置按时间段接单数量阅值等。系统存储商户/用户信息。

2.餐品管理。商户对餐品的基本信息和优惠信息进行发布、修改、删除。系统存储相关信息。

3.订餐。用户浏览商户餐单,选择餐品及数量后提交订餐请求。系统存储订餐订单。

4.订单处理。收到订餐请求后,向外卖平台请求配送。外卖平台接到请求后发布配送单,由平台骑手接单,外卖平台根据是否有骑手接单返回接单状态。若外卖平台接单成功,系统给支付系统发送支付请求,接收支付状态。支付成功,更新订单状态为已接单,向商户发送订餐请求并由商户打印订单,给用户发送订单状态:若支付失败,更新订单状态为下单失败,向外卖平台请求取消配送,向用户发送下单失败。若系统接到外卖平台返回接单失败或超时未返回接单状态,则更新订单状态为下单失败,向用户发送下单失败。

5.配送。商户备餐后,由骑手取餐配送给用户。送达后由用户扫描骑手出示的订单上的配送码后确认送达,订单状态更改为已送达,并发送给商户。

6.订单评价。用户可以对订单餐品、骑手配送服务进行评价,推送给对应的商户、所在外卖平台,商户和外卖平台对用户的评价进行回复。系统存储评价。现采用结构化方法对外卖订餐系统进行分析与设计。

获得如图1-1所示的上下文数据和图1-2所示的0层数据流图。

图1-1 上下文数

图1-2 0层数据流图

问题1(4分)使用说明中的词语,给出图1-1的实体E1~E4的名称。

问题2(4分)使用说明中的词语,给出图1-2中的数据存储D1-D4 的名称。

问题3(4分)根据说明和图中术语,补充图1-2中缺失的数据流及其起点和终点。

问题4(3分)根据说明,采用结构化语言对“订单处理”的加工逻辑进行描述。

试题二(15分)

按照下列图表,将答案填写在答题纸的对应栏内。

[说明]

为了提高接种工作,提高效率,并未了抗击疫情提供疫苗接种数据支撑,需要开发一个信息系统,下述需求完成该系统的数据库设计。

(1)记录疫苗供应商的信息,包括供应商名称,地址和一个电话。

(2)记录接种医院的信息,包括医院名称、地址和一个电话。

(3)记录接种者个人信息,包括姓名、身份证号和一个电话。

(4)记录接种者疫苗接种信息,包括接种医院信息,被接种者信息,疫苗供应商名称和接种日期,为了提高免疫力,接种者可能需要进行多次疫苗接种,(每天最多接种一次,每次都可以在全市任意一家医院进行疫苗接种)。

【概念模型设计】

根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整):

图2-1 E-R图

【逻辑结构设计】

根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整):

供应商(供应商名称、地址、电话)

医院(医院名称、地址、电话)

供货(供应商名称,(a),供货内容)

被接种者(姓名、身份证号、电话)

接种(接种者身份证号,(b),医院名称、供应商名称)

[问题1](4分)

根据问题描述,补充图2-1的实体联系图(不增加新的实体)。

[问题2](4分)

补充逻辑结构设计结果中的(a)(b)两处空缺,并标注主键和外健完整性约束。

[问题3](7分)

若医院还兼有核酸检测的业务,检测时可能需要进行多次植酸检测(每天最多检测一次),但每次都可以在全市任意一家医院进行检测。

请在图2-1中增加“被检测者”、实体及相应的属性。医院与被检测者之间的“检测”联系及必要的属性,并给出新增加的关系模式。

“被检测者”实体包括姓名、身份证号、地址和一个电话。“检测”联系需要包括检测日期和检测结果等。

试题三(15分)

阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。

[说明]

某公司的人事能门拥有一个地址博(AddressBookSystem),管理系统(ddressBookSystem),用于管理公司所有员工的地址记录(PersonAddress)。员工的地址记录包括:姓名、住址、城市、省份、邮政编码以及联系电话等等信息。

管理员可以完成对地址簿中地址记录的管理操作,包括:

(1)维护地址记录。根据司的人员变动情况,对地址记录进行添加、修改、删除等操作;

(2)排序。按照员工姓氏的字典顺序或邮政编码对址领中的所有记录。

(3)打印地址记录。以邮件标签的格式打印一个地址单独的地址簿。系统会记录管理为便于管理,管理员在系统中为公可的不同部门建立员对每个地址簿的修改操作,包括:

(1)创建地址簿。新建个地址簿并保存。

(2)打开地址簿。打开一一个已有的地址簿。

(3)修改地址簿。对打开的地址簿进行修改并保存

系统将提供一个GUI(图形用户界面)实现对地址簿的各种操作。

现采用面向对象方法分析并设计该地址簿管理系统,得到如图3-1所示的用例图和图3-2所示的类图。

图3-1 用例图

图3-2 类图

问题1(6分)

根据说明中的描述,给出图3-1中U1~U6所对应的用例名。

问题2(5分)

根据说明中的描述,给出图3-2中类AddressBook的主要属性和方法以及类PersonAddress的主要属性(可以使用说明中的文字)。

问题3(4分)

根据说明中的描述以及图3-1所示的用例图,请简要说明extend和include关系的含义是什么?

试题四(共15分)

阅读下列说明和C++代码,回答问题1至问题3,将解答写在答题纸的对应栏内。

【说明】

工程计算中经常要完成多个矩阵相乘的计算任务,对矩阵相乘进行以下说明。

(1)两个矩阵相乘要求第一个矩阵的列数等于第二个矩阵的行数,计算量主要由进行乘法运算的次数决定,假设采用标准的矩阵相乘算法,计算Amxn*Bxp"需要m*n*p次行乘法运算的次数决定、乘法运算,即时间复杂度为O(m*n*p)。

(2)矩阵相乘满足结合律,多个矩阵相乘时不同的计算顺序会产生不同的计算量。以矩阵AI5×100,A2100*8,A38x50三个矩阵相乘为例,若按(A1*A2)*A3计算,则需要进行5*100*8+5*8*50-6000次乘法运算,若按A1*(A2*A3)计算,则需要进行100*8*50+5*100*50=65000次乘法运算。

矩阵链乘问题可描述为:给定n个矩阵对较大的,可能的计算顺序数量非常庞大,用蛮力法确定计算顺序是不实际的。经过对问题进行分析,发现矩阵链乘问题具有最优子结构,即若A1*A2**An的一个最优计算顺序从第k个矩阵处断开,即分为A1*A2*…*Ak和Ak+1*Ak+2**An两个子问题,则该最优解应该包含A1*A2**Ak的一个最优计算顺序和Ak+1*Ak+2**An的一个最优计算顺序。据此构造递归式:

其中,cost【jj】表示Ai+1*Ai+2*Aj+1的最优计算的计算代价。最终需要求解cost[O][n-1]。【C代码】算法实现采用自底向上的计算过程。首先计算两个矩阵相乘的计算量,然后依次计算3个矩阵、4个矩阵、…、n个矩阵相乘的最小计算量及最优计算顺序。下面是该算法的语言实现:

(1) 主要变量说明

n:矩阵数

seq[]:矩阵维数序列

cos[i][j]:二维数组,长度为n*n,其中元素cost[i][j]表示Ai+1*Ai+2**Aj+1的最优的计算代价trace[][]:二维数组,长度为n*n,其中元素trace[i][j]表示Ai+1*Ai+2**Aj+1的最算对应的划分位置,即k(2)函数cmmine N100 cost[N[N]

   }   

 return cost [0] [n - 1];

}

【问题1】(8分)根据以上说明和C代码,填充C代码中的空(1)~(4)。【问题2】(4分)

根据以上说明和C代码,该问题采用了(⑤)算法设计策略,时间复为(6)(用O符号表)。【问题3】(3分)考虑实例n=4,各个矩阵的维数为A1为15*5,A2为5*10,A3为10*20,A4为20*25,即维度序列为15,5,10,20和25。则根据上述C代码得到的一个最优计算顺序为_(7)(用加括号方式表示计算顺序),所需要的乘法运算次数为(8)。

【说明】

在软件系统中,通常都会给用户提供取消、不确定或者错误操作的选择,允许将系统恢复到原先的状态。现使用备忘录(Memento)模式实现该要求,得到如图6-1所示的类图。Memento包含了要被恢复的状态。Originator创建并在Memento中存储状态。Caretaker负责从Memento中恢复状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千秋TʌT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值