2022年下半年软件设计师下午真题及答案解析

任铄 任铄     2022-12-07     238

关键词:

试题一(共15分)

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

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

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

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

概念模型设计

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

逻辑结构设计

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

  1. 分公司(分公司编号,分公司名,地址,电话)
  2. 专卖店(专卖店号,专卖店名, (  a  ),地址,电话)
  3. 职员(职员号,职员名, (  b  ),岗位,电话,薪资)

问题1 (6分)

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

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

问题2 (6分)

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

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

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

问题3 (3分)

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

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

试题三(共15分)

图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分)

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

(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)代码

#include <stdio.h>

#define MAXITEM 100

/*调整堆

R:待排序数组;

v:节点编号,以v为根的二叉树,R[v]≥R[2v],R[v]≥R[2v+1],且其左子树和右子树都是大顶堆;

n:堆结构的规模,即堆中的元素数

*/

void Heapify(int R[MAXITEM], int v, int n)

   int i,j;

   i=v;

   j=2*i;

   R[0]=R[i];

   while(j<=n)

      if(j<n&&R[j]<R[j+1])

         j++;

     

      if( (  1  ))

        R[i]=R[j];

        i=j;

        j=2*i;

     

      else

         j=n+1;

     

   

    R[i]=R[0];

/* 堆排序,R为待排序数组;n为数组大小*/

void HeapSort(int R[MAXITEM],int n)

   int i;

   for(i=n/2; i>=1;i--)

     (  2  )

  

   for(i=n; (  3  ); i--)

      R[0]=R[i];

      R[i]=R[1];

      (  4  );

      Heapify(R, 1, i-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 )。

 

【Java 代码】

import java.util.*;

interface Patient

    (  1  )

interface Disposer

    (  2  )

class Registry implements Disposer   //

     public void dispose(Patient patient)

        System.out.println("I am registering..."+patient.getName());

    

class Doctor implements Disposer    //医生门诊

     public void dispose(Patient patient)

       System.out.println("I am diagnosing..."+ patient.getName());

    

class Pharmacy implements Disposer    //取药

     public void dispose(Patient patient)

       System.out.println("I am giving medicine..."+ patient.getName());

    

class Facade

     private Patient patient;

     public Facade(Patient patient) this.patient=patient;

     public void dispose()

       Registry registry=new Registry();

       Doctor doctor=new Doctor();

       Pharmacy ph=new Pharmacy();

       registry.dispose(patient);

       doctor.dispose(patient);

       ph.dispose(patient);

    

class ConcretePatient implements Patient

     private String name;

     public ConcretePatient(String name) this.name=name;

     public String getName() return name;

class FacadeTest

     public static void main(String[] args)

       Patient patient=(  3  );

       (  4  ) f =(  5  );

       (  6  );

    

试题六(共15分)     (试题五与试题六选答一题)

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

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

(  2  );

;

class Registry:public Disposer //挂号

public:

   void dispose(Patient *patient)

     cout<<"I am registering..." <<patient->getName() <<endl;

  

;

class Doctor: public Disposer //医生门诊

public:

   void dispose (Patient *patient)

     cout<<"I am diagnosing..."<<patient->getName()<<endl;

  

;

class Pharmacy:public Disposer //取药

public:

    void dispose(Patient *patient)

      cout<<"I am giving medicine..."<<patient->getName()<<endl;

   

;

2022年下半年软件设计师下午真题及答案解析

试题一(共15分) 单击此链接查看真题解析视频2022软考--软件设计师-下午案例分析真题解析视频(第三期)-学习视频教程-腾讯课堂

问题1 (4分)

E1:计量装置    E2:管理员    E3:计量检测人员    E4:第三方服务

问题2 (5分)

D1:充电检测及计量数据表   D2:基础信息表    D3:心跳数据表

D4:充电误差信息表         D5:检定记录表

问题3 (4分)

问题4 (2分)

充电监测数据和计量数据=充电桩ID+充电电压+充电电流+充电电能+计量装置ID +计量电压+计量电流+计量电能+当前时间(精确到秒)

试题二(共15分)

问题1 (6分)

问题2 (6分)

(1)(a) 分公司编号,职员号     (b) 专卖店号

(2)(c) 专卖店号      (d) 职员号,分公司编号    (e) 职员号    (f) 专卖店号

问题3 (3分)

(1)(g) 紧急联系人  (h) 1对多 (或1:n)

(2)紧急联系人(职员号,紧急联系人姓名,与本人关系,联系电话)

试题三(共15分)

问题1 (4分)

U1:显示温度   U2:显示华氏度    U3:温度计显示     U4:自动单位换算

问题2 (8分)

C1:TemperatureCovertorDialog

C2:FahrenheitEditBox  C3:CelsiusEditBox   C4:TemperatureBar (C2~C4可互换)

C5:FahrenheitRaise   C6:FahrenheitLower  C7:CelsiusRaise   C8:CelsiusLower  (C5~C8可互换)

问题3 (3分)

策略模式

策略模式就是定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。正好符合题目的要求,实现任意计量单位间的换算。策略模式使得算法可独立于使用它的客户而变化。

试题四(共15分)

问题1(8分)

(1) R[i] < R[j]    (2) Heapify(R, i, n);   (3) i > 1   (4) R[1] = R[0]

问题2 (2分)

(5) O(nlog2n)

问题3 (5分)

(6) (20, 15, 19, 10, 4, 13, 7, 8)

(7) (19, 15, 7, 0, 4, 13, 8)

试题五(共15分)

(1) String getName()

(2) void dispose(Patient patient)

(3) new ConcretePatient(“”)

(4) Façade

(5) new Facade(patient)

(6) f.dispose()

试题六(共15分)

(1) virtual string getName()=0

(2) virtual void dispose(Patient *patient)=0

(3) new ConcretePatient("name")

(4) Facade*

(5) new Facade(patient)

(6) f->dispose()

2022年上半年软件设计师下午真题及答案解析

试题一(15分)某公司欲开发一款外卖订餐系统,集多家外卖平台和商户为一体,为用户提供在线浏览餐品、订餐和配送等服务。该系统的主要功能是:1.入驻管理。用户注册,商户申请入驻,设置按时... 查看详情

2022年下半年网络规划设计师下午真题及答案解析

1.若系统正在将( )文件修改的结果写回磁盘时系统发生掉电,则对系统的影响相对较大。A.目录   B.空闲块    C.用户程序     D.用户数据2.采用三级模式结构的数据库系统中,如果对一个表创建聚簇索引,那么... 查看详情

2022年下半年网络规划设计师下午真题及答案解析

试题一(25分)某高校两个校区相距30公里,通过互联网相连。两校区网络相互独立,并采用两套认证系统,管理维护较繁琐。现需要对校园网进行升级改造,将老校区网络作为一个子网通过线路A接入到新校区,... 查看详情

2022年下半年系统架构设计师下午真题及答案解析

试题一(25分)某电子商务公司拟升级其会员与促销管理系统,向用户提供个性化服务,提高用户的粘性。在项目立项之初,公司领导层一致认为本次升级的主要目标是提升会员管理方式的灵活性,由于当前用户规模... 查看详情

2018年下半年软件设计师下午真题及答案解析

试题一(15分)某房产中介连锁企业欲开发一个基于Web的房屋中介信息系统,以有效管理房源和客户,提高成交率。该系统的主要功能是:1.房源采集与管理。系统自动采集外部网站的潜在房源信息,保存为潜在... 查看详情

2021年下半年软件设计师下午真题答案及解析

回答问题1至问题4,将解答填入答题纸的对应栏内【说明】某汽车维修公司为了便于管理车辆的维修情况,拟开发一套汽车维修管理系统,请根据下述需求描述完成该系统的数据库设计。【需求描述】(1)客... 查看详情

2021年下半年软件设计师下午真题答案及解析

回答问题1至问题4,将解答填入答题纸的对应栏内【说明】某汽车维修公司为了便于管理车辆的维修情况,拟开发一套汽车维修管理系统,请根据下述需求描述完成该系统的数据库设计。【需求描述】(1)客... 查看详情

2021年下半年软件设计师下午真题答案及解析

阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某游戏公司欲开发一款吃金币游戏。游戏的背景为一种回廊式迷宫(Maze),在迷宫的不同位置上设置有墙。迷宫中有两种类型的机器人(Rob... 查看详情

2021年下半年软件设计师下午真题答案及解析

阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某游戏公司欲开发一款吃金币游戏。游戏的背景为一种回廊式迷宫(Maze),在迷宫的不同位置上设置有墙。迷宫中有两种类型的机器人(Rob... 查看详情

2021年下半年软件设计师下午真题答案及解析

阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。【说明】某现代农业种植基地为进一步提升农作物种植过程的智能化,欲开发智慧农业平台,集管理和销售于一体,该平台的主要功能有... 查看详情

2021年下半年软件设计师下午真题答案及解析

阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。【说明】某现代农业种植基地为进一步提升农作物种植过程的智能化,欲开发智慧农业平台,集管理和销售于一体,该平台的主要功能有... 查看详情

2021年下半年软件设计师下午真题答案及解析(代码片段)

阅读下列说明和Java代码,将应填入(n)处的字句写在题纸的对应栏内。【说明】享元(flyweight)模式主要用于减少创建对象的数量,以低内存占用,提高性能。现要开发一个网络围棋程序允许多个玩... 查看详情

2021年下半年软件设计师下午真题答案及解析(代码片段)

阅读下列说明和Java代码,将应填入(n)处的字句写在题纸的对应栏内。【说明】享元(flyweight)模式主要用于减少创建对象的数量,以低内存占用,提高性能。现要开发一个网络围棋程序允许多个玩... 查看详情

2021年下半年软件设计师下午真题答案及解析(代码片段)

生物学上通常采用编辑距离来定义两个物种DNA序列的相似性,从而刻画物种之间的进化关系。具体来说,编辑距离是指将一个字符串变换为另一个字符串所需要的最小操作次数。操作有三种,分别为:插入一个字... 查看详情

2021年下半年软件设计师下午真题答案及解析(代码片段)

生物学上通常采用编辑距离来定义两个物种DNA序列的相似性,从而刻画物种之间的进化关系。具体来说,编辑距离是指将一个字符串变换为另一个字符串所需要的最小操作次数。操作有三种,分别为:插入一个字... 查看详情

2021年上半年软件设计师下午真题及答案解析(代码片段)

阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】层叠菜单是窗口风格的软件系统中经常采用的一种系统功能组织方式。层叠菜单中包含的可能是一个菜单项(直接对应某个功能&#... 查看详情

2021年上半年软件设计师下午真题及答案解析(代码片段)

阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】层叠菜单是窗口风格的软件系统中经常采用的一种系统功能组织方式。层叠菜单中包含的可能是一个菜单项(直接对应某个功能&#... 查看详情

2021年上半年软件设计师下午真题及答案解析(代码片段)

【说明】某社区蔬菜团购网站,为规范商品收发流程,便于查询客户订单情况,需要开发个信息系统。请根据下述需求描述完成该系统的数据库设计。【需求描述】(1)记录蔬菜供应商的信息,包括供应... 查看详情