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

本文介绍了智慧农业平台的数据流设计,包括信息维护、数据采集、处理、远程控制和可视化功能,以及汽车维修管理系统的数据库设计,包括客户、车辆、员工、部门和维修单的关系。此外,还探讨了金币游戏的类图设计,以及编辑距离算法的实现,最后展示了网络围棋程序的享元模式应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

目录

1.智慧农业平台的数据流图

2.汽车维修管理系统的数据库设计

3.金币游戏的类图

4.求解编辑距离

5.网络围棋程序(Java)


1.智慧农业平台的数据流图

试题一(15分)

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

【说明】某现代农业种植基地为进一步提升农作物种植过程的智能化,欲开发智慧农业平台,集管理和销售于一体,该平台的主要功能有:

1.信息维护。农业专家对农作物、环境等监测数据的监控处理规则进行维护。

2.数据采集。获取传感器上传的农作物长势、土壤墒情、气候等连续监测数据,解析后将监测信息进行数据处理、可视化和存储等操作。

3.数据处理。对实时监测信息根据监控处理规则进行监测分析,将分析结果进行可视化并进行存储、远程控制对历史监测信息进行综合统计和预测,将预测信息进行可视化和存储

4.远程控制。根据监控处理规则对分析结果进行判定,依据判定结果自动对控制器进行远程控制。平台也可以根据农业人员提供的控制信息对控制器进行远程控制。

5.可视化。实时向农业人员展示监测信息:实时给农业专家展示统计分析结果和预测信息或根据农业专家请求进行展示。

现采用结构化方法对智慧农业平台进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。

 图1-1上下文数据流图

  图1-2 0层数据流图

【问题1】(4分)

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

【参考答案】E1:传感器;E2:农业专家;E3:农业人员;E4:控制器

【问题2】(4分)

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

【参考答案】

D1:监控处理规则表;D2:监测信息表;D3:分析结果表;D4:预测信息表

【问题3】(4分)

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

【参考答案】

起点D1,终点P4,规则

起点E2,终点P5,请求

起点D3,终点P5,分析结果

起点D4,终点P5,预测信息

【问题4】(3分)

根据说明,“数据处理”可以分解为哪些子加工?进一步进行分解时,需要注意哪三种常见的错误?

【参考答案】

数据处理加工分为数据分析,可视化与存储;

黑洞、奇迹、灰洞

2.汽车维修管理系统的数据库设计

试题二(共15分)

回答问题1至问题4,将解答填入答题纸的对应栏内

【说明】

某汽车维修公司为了便于管理车辆的维修情况,拟开发一套汽车维修管理系统,请根据下述需求描述完成该系统的数据库设计。【需求描述】

(1)客户信息包括:客户号、客户名、客户性质、折扣率、联系人、联系电话。客户性质有个人或单位。客户号唯一标识客户关系中的每一个元组。

(2)车辆信息包括:车牌号、车型、颜色和车辆类别。一个客户至少有一辆车,一辆车只属于一个客户

(3)员工信息包括:员工号、员工名、岗位、电话、家庭住址。其中,员工号唯一标识员工关系中的每一个元组。岗位有业务员、维修工、主管。业务员根据车辆的故障情况填写维修单。

(4)部门信息包括:部门号、名称、主管和电话,其中部门号唯一确定部门关系的每一个元组。每个部门只有一名主管,但每个部门有多名员工,每名员工只属于一个部门。

(5)维修单信息包括:维修单号车牌号、维修内容、工时。维修单号唯一标识维修单关系中的每一个元组。一个维修工可接多张维修单,但一张维修单只对应一个维修工

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

PS:部门打成了部分 

 【逻辑结构设计】

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

客户(客户号,客户名,(a);折扣率,联系人,联系电话)

车辆(车牌号,(b),车型,颜色,车辆类别)

员工(员工号,员工名,岗位,©,电话,家庭住址)部门(部门号,名称,主管,电话)

维修单(维修单号,(d),维修内容,工时)

【问题1】(6分)

根据问题描述,补充3个联系,完善图2-1的实体联系图。联系名可用联系1、联系2和联系3代替,联系的类型为1:1、1:n和m:n(或1:1、1:和.*)。

【参考答案】

联系1:客户和车辆,1:1

联系2:部门和员工,1:n

联系3:维修工和维修单,1:n

 ​​​​​

PS:部门打成了部分  

 【问题2】(4分)

根据题意,将关系模式中的空(a)~(d)的属性补充完整,并填入答题纸对应的位置上。

【参考答案】

(a)客户性质; (b)客户号;(c)部门号;(d)车牌号,员工号

【问题3】(2分)

分别给出车辆关系和维修单关系的主键与外键。

【参考答案】

车辆关系的主键:车辆号;外键:客户号。

维修单关系的主键:维修单号;外键:车牌号,员工号。

【问题4】(3分)

如果一张维修单涉及多项维修内容,需要多个维修工来处理,那么哪个联系类型会发生何种变化?你认为应该如何解决这一问题?

【参考答案】

维修工和维修单之间的联系类型会发生变化,从1:n变成m:n。

3.金币游戏的类图

试题三(15分)

某游戏公司欲开发一款吃金币游戏。游戏的背景为一种回廊式迷宫(Maze),在迷宫的不同位置上设置有墙。迷宫中有两种类型的机器人(Robos)小精灵(PacMan)幽灵(Ghost)。游戏的目的就是控制小精灵在迷宫内游走,吞吃迷宫路径上的金币,且不能被幽灵抓到。幽灵在迷宫中游走,并会吃掉遇到的小精灵。机器人游走时,以单位距离的倍数计算游走路径的长度。当迷宫中至少存在一个小精灵和一个幽灵时,游戏开始。

机器人上有两种传感器,使机器人具有一定的感知能力。这两种传感器分别是:

(1)前向传感器(FrontSensor),探测在机器人当前位置的左边、右边和前方是否有墙(机器人遇到墙时,必须改变游走方向)。机器人根据前向传感器的探测结果,决定朝哪个方向运动。

(2)近距离传感器(ProxiSesor),探测在机器人的视线范围内(正前方)是否存在隐藏的金币或幽灵。近距离传感器并不报告探测到的对象是否正在移动以及朝哪个方向移动。但是如果近距离传感器的连续两次探测结果表明被探测对象处于不同的位置,则可以推导出该对象在移动。

    另外,每个机器人都设置有一个计时器(Timer),用于支持执行预先定义好的定时事件。

机器人的动作包括:原地向左或向右旋转90°、向前或向后移动。

建立迷宫:用户可以使用编辑器(Editor) 编写迷宫文件,建立用户自定义的迷宫。将迷宫文件导入游戏系统建立用户自定义的迷宫。

现采用面对象分析与设计方法开发该游戏,得到如图3-1所示的用例图以及图3-2所示的初始类图。

 图3-1用例图 

 ​​​​​

 图3-2类图

【问题1】(3分)

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

【参考答案】

U1:编写迷宫文件;U2:导入迷宫文件;U3:设置计时器

【问题2】(4分)

图3-1中用例U1~U3分别与哪个(哪些)用例之间有关系,是何种关系?

【参考答案】

U1和U2与建立迷宫用例是泛化关系;U3与操作机器人是包含关系

【问题3】(8分)

根据说明中的描述,给出图3-2中C1~C8所对应的类名。

【参考答案】

C1 机器人(Robos)

C2 计时器(Timer)

C3小精灵(PacMan);C4幽灵(Ghost)(C3与C4可换)

C5 传感器

C6 前向传感器(FrontSensor);C7 近距离传感器(ProxiSesor)(C6与C7可换) 

C8 迷宫(Maze)

4.求解编辑距离

试题四(15分)

    生物学上通常采用编辑距离来定义两个物种DNA序列的相似性,从而刻画物种之间的进化关系。具体来说,编辑距离是指将一个字符串变换为另一个字符所需要的最小操作次数。操作有三种,分别为:插入一个字符、删除一个字符以及将一个字符修改为另一个字符。用字符数组str1和str2分别表示长度分别为len1和len2的字符串,定义二维数组d记录求解编辑距离的子问题最优解,则该二维数组可以递归定义为:

 

 C代码

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

(1)常量和变更说明

  A,B:两个字符数组

  d:二维数组

  i,j:循环变量

  temp:临时变量

(2)C程序

#include<stdio.h>
#define N 100
char A[N]=”CTGA”;
char B[N]=”ACGCTA”;
int d[N][N];

int min(int a,int b){
    return a<b?a:b;
}

int editdistance(char *str1,int len1,char *str2,int len2){
    int i,j;
    int diff;
    int temp;
    for(i=0;i<len1,i++){
        d[i][0]=0;
    }
    for(j=0;j<len2,j++){
        (1);
    }
    for(i=1;i<len1,i++){
        for(j=1;j<len2,j++){
            if((2)){
                d[i][j]=d[i-1][j-1];
            }else{
                temp=min(d[i-1][j]+1,d[i][j-1]+1);
                d[i][j]=min(temp,(3));
            }
        }
    return (4);
}

【问题1】 (8分)

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

【参考答案】

(1)d[0][j]=j

(2)str1[i-1]==str2[j-1]

(3)d[i-1][i-1]

(4)d[len1][len2]

【问题2】 (4分)

根据说明和C代码,算法采用了(5)设计策略,时间复杂度为(6)(用O符号表示,两个字符串的长度分别用m和n表示)。

【参考答案】

(5)动态规划法;(6)O(m*n)

【问题3】 (3分)

已知两个字符串A="CTGA"和B="ACGCTA",根据说明和C代码,可得出这两个字符串的编辑距离为(7)。

【参考答案】

4

5.网络围棋程序(Java)

试题六(10分)

享元(flyweight)模式主要用于减少创建对象的数量,以低内存占用,提高性能。现要开发一个网络围棋程序允许多个玩家联机下棋。由于只有一台服务器,为节内存空间,采用享元模式实现该程序,得到如图6-1所的类图。

图6-1类图 

【Java代码】

import java.util.*:
enum PieceColor {BLACK,WHITE}//棋子颜色
class PiecePos{//棋子位置
    private intx;
    private int y:
    pubic PiecePos(int a,int b){x=a;y=b;}
    public int getX0{retun x;}
    public int getYO{return y;}
}

abstract class Piece{//棋子定义
    protected PieceColor m_color;//颜色
    protected Piecemopos m_pos;//位置
    public Piece(PieceColor color PiecePos pos){
        m_color=color;m_pos=pos;
    }
    (1);
}

class BlackPiece extends Piece{
    public BlackPiece(PieceColor color,PiecePos pos){super(color,pos);}
    public void draw(){//(1)
        System out println("draw a blackpiece");}
    }
}

class WhitePiece extends Piece{
    public WhitePiece(PieceColor color,PiecePos pos){super(color,pos):}
    public void draw(){//(1)
        System.out.println("draw a whitepiece");
    }
}

class PieceBoard{//棋盘上已有的棋子
    private static final ArrayList<(2)>m_arrayPiece=new ArrayList;
    private String m_blackName;//黑方名称
    private String m_whiteName;//白方名称
    public PieceBoard(String black,Stringwhite){
        m_blackName=black;m_whiteName=white;
    }

    //一步棋,在棋盘上放一颗棋子
    public void SetePiece(PieceColor color,PiecePos pos){
        (3)piece=null;
        if(color==PieceColor.BLACK){//放黑子
            piece=new BlackPiece(color,pos);//获取一颗黑子
        System.out.println(m_blackName+"在位置("+pos.getX())+","+pos.getY()+")");
        (4);
    }else{//放白子
        piece=new WhitePiece(color,pos);//获取一颗白子
        System.out.println(m whiteName+"在位置("+pos.getX())+","+pos.getY()+")");
        (5);
    }
    m_arrayPiece.add(piece);
    }
}

【参考答案】

(1)public abstract void draw( )

(2)Piece

(3)Piece

(4)piece.draw( )

(5)piece.draw( )

### 回答1: 根据查询,2021上半软件设计师考试的下午真题已经公布,在思路清晰、知识理解准确的情况下,应该都能够成功答题。根据考试内容,下午试题主要分为两部分:综合案例分析和主观题。 综合案例分析部分,考生需要完成对于一个实际开发项目的分析和设计,这部分试题一般分为两大块:业务分析和系统设计。在业务分析中,会提出项目中所需的功能模块和技术要求,考生需要结合实际情况,分析模块之间的关系,提出最佳的技术方案。在系统设计中,考生需要根据业务分析的结果,完成详细的系统设计图,包括流程图、时序图等等。这部分试题主要考察考生的设计能力和分析能力。 主观题部分,主要涉及软件设计师常用的编程语言、数据库、计算机网络、设计模式、软件测试等内容,需要考生根据自身对于相关知识的掌握情况,完成多项选择题和小问答题的作答。这部分试题主要考察考生的理论知识掌握和对于实际问题的解决能力。 总之,软件设计师2021上半下午试题难度适中,需要考生具备扎实的理论知识和实际项目开发经验,在认真分析、耐心答题的情况下,考生应该能够取得不错的成绩。 ### 回答2: 软件设计师2021上半下午真题答案是指2021上半软件设计师考试下午部分的真题答案。根据相关资料,2021软件设计师考试下午部分主要分为3个部分:数据库设计、系统分析和设计、软件工程与项目管理。每个部分具体的考题内容和难度都有所不同。 以下是2021软件设计师考试下午部分的一些真题及大致答案: 1. 数据库设计部分:题目要求设计一套餐厅订餐系统的数据库结构,包括数据表、字段和关系,同时需要说明设计决策和设计原则。此外,题目还涉及数据库性能优化和安全管理等方面的内容。对于这部分考题,需要掌握数据库设计原理和技巧,以及常见数据库管理工具和技术,如SQL、NoSQL等。 2. 系统分析和设计部分:题目要求设计一个网上购物系统,包括系统结构、模块和接口,以及用例图、活动图、类图和时序图等。此外,题目还要求考生说明需求分析、设计策略和技术方案等。这部分考题需要掌握系统设计原理和流程,以及常见的设计模式和UML图表绘制技巧等。 3. 软件工程与项目管理部分:题目要求从软件工程和项目管理两个方面回答问题,例如如何评估软件开发风险、如何实现软件质量管理、如何进行团队协作和项目计划等。此外,题目还要求考生展示自己对敏捷开发、DevOps和持续集成等新型开发方法的理解和应用能力。这部分考题需要掌握软件工程和项目管理的基本理论和实践,以及常用工具和技术,如项目管理软件、质量控制工具和代码管理工具等。 总之,软件设计师2021上半下午真题答案涉及广泛的知识点和技能,需要考生具备扎实的理论知识和丰富的实践经验。对于考生来说,可以通过多做真题和模拟测试来提高自己的应试能力,同时也要不断学习和实践,不断提高自己的专业水平和素质。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

得闲喝茶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值