软考中级-软件设计师 2023年上半年下午题真题解析:通关秘籍+避坑指南

news2025/4/12 15:08:03

📚 目录(快速跳转)

  • 大题(下午题)(每题15分,共75分)
    • 一、数据流图/数据库设计 💾
      • 🌾 试题一:农事管理服务平台数据流分析
        • 问题1:实体识别
        • 问题2:数据存储识别
        • 问题3:缺失数据流补充
        • 问题4:数据流组成
      • 🚗 试题二:汽车零件采购系统数据库设计解析
        • 问题1:补充实体联系图(ER图)
        • 问题2:补充采购关系模式
        • 问题3:新增销售需求设计
    • 二、UML建模 🏗️
      • 📚 试题三:数字图书馆系统UML设计解析
        • 问题1:类图识别(C1-C8类名)
        • 问题2:关键属性补充
        • 问题3:设计模式应用
    • 三、算法填空/设计 🎨
      • 📚 试题四:题目不全,忽略
      • 📚 试题五:Java填空题
        • 问题1:PrintStrategy接口方法声明
        • 问题2:Interval类的打印方法
        • 问题3-5:策略对象创建

大题(下午题)(每题15分,共75分)

2023年下午题试卷:百度云盘

一、数据流图/数据库设计 💾

🌾 试题一:农事管理服务平台数据流分析

  阅读下列说明和图,回答问题 1 至问题 4,将解答填入答题纸的对应栏内。
【说明】
  随着农业领域科学种植的发展,需要对农业基地及农事进行信息化管理,为租户和农户等人员提供种植相关服务。现欲开发农事管理服务平台,其主要功能是:
  (1)人员管理。平台管理员管理租户租户管理农户并为其分配负责的地块,租户和农户以 人员类型区分。
  (2)基地管理。租户填写基地名称、地域等描述信息,在显示的地图上绘制地块。
  (3)种植管理。租户设定作物及其从种植到采收的整个农事过程,包括农事活动及其实施计划,农户根据相应农事过程提醒进行农事活动并记录。系统会在设定时间向农户进行农事提醒, 对逾期未实施活动向租户发出逾期警告。
  (4)投入品管理。租户统一维护化肥,杀虫剂等投入品信息。农户在农事活动中设定投入品 的实际消耗。
  (5)信息服务。用户按查询条件发起农事信息请求,对相关地块农事活动实施情况(如与农事过程比对)等农事信息进行筛选、对比和统计等处理,并将响应信息进行展示。系统也给其他 第三方软件提供 APP接口,通过接口访问的方式,提供账号,密码和查询条件发起农事信息请求,返回特定格式的农事信息,无查询条件时默返回账号下所有信息,多查询条件时返回满足全 部条件的信息
  现采用结构化方法对农事管理服务平台进行分析与设计,获得如图 1-1 所示的上下文数据流 图和图 1-2 所示的 0 层数据流图。
在这里插入图片描述
【问题 1】(4 分) 使用说明中的词语,给出图 1-1 中的实体 E1~E4 的名称。
【问题 2】(4 分) 使用说明中的词语,给出图1-2 中的数据存储 D1~D4 的名称。
【问题 3】(4 分) 根据说明和图中术语,补充图 1-2 中缺失的数据流及其起点和终点。
【问题 4】(3 分) 根据说明,给出“农事信息请求”数据流的组成。

问题1:实体识别

图1-1中的实体E1~E4名称:

  • E1:平台管理员
    (平台管理员管理租户信息,对应功能(1)第一句)

  • E2:农户
    (接收农事提醒并记录活动,对应功能(3))

  • E3:租户
    (管理农户和地块,对应说明中功能(1))

  • E4:第三方软件
    (通过API发起查询,对应功能(5)最后一段)

问题2:数据存储识别

图1-2中的数据存储D1~D4名称:

  • D1:人员信息表
    (存储租户/农户数据,对应功能(1))

  • D2:基地及地块数据表
    (保存地图绘制信息,对应功能(2))

  • D3:农事过程表
    (记录作物种植计划,对应功能(3))

  • D4:投入品信息表
    (维护化肥/杀虫剂数据,对应功能(4))

问题3:缺失数据流补充

图1-2中缺失的数据流:

数据流名称起点终点依据说明
投入品消耗D4(种植管理)P4(投入品信息表)功能(4)农户记录消耗
地块信息D2(基地及地块数据表)P5(信息服务)功能(5)查询展示
农事过程信息D3(农事过程表)P5(信息服务)功能(5)查询展示
农事活动信息D4(农事活动表)P5(信息服务)功能(5)查询展示
问题4:数据流组成

农事信息请求数据流的组成:

  • 标准格式:

    农事信息请求 = 账号 + 密码 + [查询条件]  
    
  • 详细说明:

    • 账号/密码:第三方软件认证依据(功能(5))
    • 查询条件:可空缺(默认返回所有)或多条件组合

💡知识点

数据流图(Data Flow Diagram, DFD)中的,D、E、P

在数据流图(Data Flow Diagram, DFD)中,D、E、P 是三种核心符号,分别代表不同的系统组件。以下是详细解释:

  1. E(External Entity,外部实体)

    • 定义:系统之外的参与者或外部系统,与当前系统有数据交互。

    • 在农事系统中的具体表现

      • E1 平台管理员:系统运维人员

      • E2 农户:具体执行农事的工人

      • E3 租户:农业基地管理者(如农场主)

      • E4 第三方软件:通过API对接的外部系统(如气象数据平台)

    • 特点

      • 位于系统边界外

      • 是数据的源头或终点

      • 例如:农户(E2)接收农事提醒,第三方软件(E4)发起查询请求

  2. P(Process,处理过程)

    • 定义:系统内部对数据的加工或业务逻辑单元。

    • 在农事系统中的关键处理过程

      • P1 人员管理:处理租户/农户的增删改查

      • P2 基地管理:维护地块地理信息

      • P3 种植管理:制定农事计划并触发提醒

      • P5 信息服务:响应数据查询请求

    • 特点

      • 必须有输入和输出数据流

      • 通常用动词短语命名(如“管理”“处理”“生成”)

      • 例如:P3种植管理接收农户记录,更新D3农事过程表

  3. D(Data Store,数据存储)

    • 定义:系统内部持久化存储数据的仓库。

    • 在农事系统中的主要存储

      • D1 人员表:存储租户和农户账号信息

      • D2 基地及地块数据表:记录地块GIS坐标和属性

      • D3 农事过程表:保存作物种植计划

      • D4 投入品信息表:管理化肥/农药使用记录

    • 特点

      • 是数据的“仓库”而非加工者

      • 名词短语命名(如“XX表”“XX文件”)

      • 例如:D4投入品信息表P3种植管理写入使用记录


🚗 试题二:汽车零件采购系统数据库设计解析

  阅读下列说明,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。
【说明】
  某新能源汽车公司为了提升效率。需开发一个汽车零件采购系统。请根据下述需求描述完成该系统的数据库设计。
【需求分析结果】
(1)记录供应商的信息,包括供应商的名称,地址和一个电话。
(2)记录零件的信息,包括零件的编码,名称和价格。
(3)记录车型信息,包括车型的编号,名称和规格。
(4)记录零件采购信息,某个车型的某种零件可以从多家供应商采购,某种零件也可以被多个车型采用,某家供应商也可以供应多种零件,还包括采购数量和采购日期。

【概念结构设计】
  根据需求阶段收集的信息,设计的实体联系图(不完整)如图 2-1 所示
在这里插入图片描述
【逻辑结构设计】

【问题 1】(5 分)
根据需求描述,补充图 2-1 的实体联系图(不增加新的实体)。
【问题 2】(3 分)
补充逻辑结构设计结果中的(a),(b)两处空缺,并标注主键和外键完整性约束。
【问题 3】(7 分)
  该汽车公司现新增如下需求:记录车型在全国门店的销售情况,门店信息包括门店的编号,地址和电话,销售包括销售数量和销售日期等
  对原有设计进行以下修改以实现该需求:
  (1)在图 2-1 中体现门店信息及其车型销售情况,并标明新增的实体和联系及其主要属性。
  (2)给出新增加的关系模式,并标注主键和外键完整性约束。

问题1:补充实体联系图(ER图)

在这里插入图片描述
关键点说明:

  1. 三个核心实体:供应商零件车型,约束条件为供应商名称、车型编号、零件编号

  2. 采购作为多对多联系的关系实体,故图中需要用*表示

问题2:补充采购关系模式

关键点说明:

字段下实线为主键约束,字段下虚线为外键约束,例如供应商中的供应商名称字段属于主键约束,采购中在这里插入图片描述字段即属于主键约束,也属于外键约束,车型编号、零件编码同理。

问题3:新增销售需求设计

(1) ER图修改方案

新增元素:

  1. 门店实体

    • 属性:门店编号(PK)、地址、电话
  2. 销售联系

    • 多对多关系(车型-门店)

    • 属性:销售数量、销售日期

在这里插入图片描述
(2) 新增关系模式
在这里插入图片描述
设计要点:

  1. 销售主键采用复合主键(车型编号+门店编号+销售日期),允许同车型同门店每日多条记录

  2. 销售数量为非主属性

  3. 门店电话字段应考虑国际格式(如+86前缀)


二、UML建模 🏗️

📚 试题三:数字图书馆系统UML设计解析

  阅读下列说明和 UML 图,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。
【说明】
  某高校图书馆购买了若干学术资源的镜像数据库(MinorDBMino)资源,现要求开发一套数字图书馆(Digitallibrary)系统,面向校内用户(User)提供学术资源(Resoure)浏览,检索和下载服务。系统的主要功能描述如下:
  (1)系统中存储了每个镜像数据库的基本信息,包括:数据库名称,访问地址,数据库属性以及数据库简介等信息,用户进入某个镜像数据库后,可以浏览检索以及下载其中的学术资源。
  (2)学术资源包括会议论文(ConferencePaper)、期刑论文(JounalArticle)以及学位论文(Thesis)等;系统中存储了每个学术资源的题名、作者、发表时间、来源(哪个镜像数据库)、被引次数、下载次数等信息。对于会议论文,还需记录会议名称,召开时间以及召开地点;同一次会议的论文被收录在会议集(Proceeding)中。对于期刊论文,还需记录期刊名称,出版月份,期号以及主办单位;同一期号的论文被收录在一本期刊(Edition)中。对于学位论文,记录了学位类别(博士/硕士),毕业学校,专业及指导教师。会议集包含发表在该会议(在某个特定时间段,特定地点召开)上的所有文章。期刊的每一期在特定时间发行,其中包含若干篇文章。
  (3)系统用户(User)包括在校学生(Student),教师(Teacher)以及其他在职人员(Staff)。用户使用学校的统一身份认证登录系统后,使用系统提供的各项服务。
  (4)系统提供多种资源检索的方式,主要包括:按照资源的题名检索(SearchByTitle),按照作者名称检索(SearchByAuthor),按照来源检索(SearchBySource)等。
  (5)用户可以下载资源,系统记录每个资源被下载的次数。
  现采用面向对象分析与设计方法开发该系统,得到如图 3-1 所示的用例图以及图 3-2所示的类图。
在这里插入图片描述
【问题 1】(8 分)
根据说明中的描述,给出图 3-2 中 C1~C8 对应的类名。
【问题 2】(4 分)
根据说明中的描述,给出图 3-2 的类 C1~C4 的关键属性。
【问题 3】(3 分)
在该系统的开发过程中遇到了新的要求:用户能够在系统中对其所关注的数字资源注册他引通知,若该资源的他引次数发生变化,系候可以及时通知该用户,为了实现这个新的要求,可以在图 3-2 所示的类图中增加哪种设计模式?用 150 字以内文字解释选择该模式的原因。

问题1:类图识别(C1-C8类名)

根据系统描述,完整类图应包含以下类:

  • C1:Resource(或学术资源)

  • C2:ConferencePaper(或会议论文)

  • C3:JournalArticle(或期刊论文)

  • C4:Thesis(或学位论文)

  • C5:User(或用户)

  • C6:Student(或学生)

  • C7:Teacher(或教师)

  • C8:Staff(或职员)

注意:C6-C8顺序可互换,但必须对应三种用户子类

问题2:关键属性补充

各资源类的核心属性应包含:

关键属性
C1 Resource题名、作者、发表时间、来源(数据库)、被引次数、下载次数
C2 ConferencePaper会议名称、召开时间、召开地点(继承Resource所有属性)
C3 JournalArticle期刊名称、出版月份、期号、主办单位(继承Resource所有属性)
C4 Thesis学位类别(博士/硕士)、毕业学校、专业、指导教师(继承Resource所有属性)

具体关键属性见下面mermaid图

在这里插入图片描述

问题3:设计模式应用

采用观察者模式(Observer Pattern)

当用户关注资源时注册为观察者,资源作为被观察主体。在他引次数更新时:

  1. 资源对象调用notify()方法

  2. 自动触发所有注册用户的update()操作

  3. 系统通过站内信或邮件发送通知
    该模式解耦了资源状态变更与通知逻辑,符合开放-封闭原则。相比轮询查询,观察者模式能实时推送变更,显著降低系统开销。


三、算法填空/设计 🎨

📚 试题四:题目不全,忽略


📚 试题五:Java填空题

  阅读下列说明和 Java 代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
【说明】
  在某系统中,类 Interval 代表由下界(lower bound)和上界(upper bound)定义的区间。要 求采用不同的格式显示区间范围。如:
   [lower bound,upper bound];[lower bound…upper bound];[lower bound-upper bound]等。
  现采用策略(Strategy)模式实现该要求,得到如图 5-1 所示的类图。
在这里插入图片描述

【Java 代码】

enum TYPE { 	
	COMMA, 	
	DOTS, 		
	LINE 
}

interface PrintStrategy { 	
	public1; 
}

class Interval { 	
	private double lower; 	
	private double upper; 	

	public Interval(double lower, double upper) { 		
		this.lower = lower;
		this.upper = upper; 
	}
 	 	
	public double getLower() { return lower; }
	public double getUpper() { return upper; } 	 	

	public void printIntervals(PrintStrategy ptr) {2; 	
	}
 }

class PrintIntervalsComma implements PrintStrategy { 	
	public void doPrint(Interval val) { 		
		System.out.println("[" + val.getLower() +"," + val.getUpper() + "]"); 	
	}
 }

class PrintIntervalsDots implements PrintStrategy { 	
	public void doPrint(Interval val) { 		
		System.out.println("[" + val.getLower() + "..." + val.getUpper() + "]"); 	
	}
 }

class PrintIntervalsLine implements PrintStrategy { 	
	public void doPrint(Interval val) { 		
		System.out.println("[" + val.getLower() + "-" + val.getUpper() + "]"); 	
	} 
}

public class Main { 	
	public static PrintStrategy getStrategy(TYPE type) { 		
		PrintStrategy st = null;
		switch (type) { 			
			case COMMA:3;
				break; 			
			case DOTS:4;
				break; 			
			case LINE:5;
				break; 		
		} 		
	return st; 	
	}
 	 	
	public static void main(String[] args) { 		
		Interval a = new Interval(1.7, 2.1);
		a.printIntervals(getStrategy(TYPE.COMMA));
		a.printIntervals(getStrategy(TYPE.DOTS));
		a.printIntervals(getStrategy(TYPE.LINE)); 
	} 
} 


问题1:PrintStrategy接口方法声明
interface PrintStrategy {
    public void doPrint(Interval val);
}

说明:定义策略接口的核心方法,所有具体策略类必须实现该方法

问题2:Interval类的打印方法
public void printIntervals(PrintStrategy ptr) {
    ptr.doPrint(this);
}

说明:将当前Interval对象传递给策略对象执行打印

问题3-5:策略对象创建
switch (type) {
	case COMMA:
	    st = new PrintIntervalsComma();  // (3)
	    break;
	case DOTS:
	    st = new PrintIntervalsDots();   // (4)
	    break;
	case LINE:
	    st = new PrintIntervalsLine();   // (5)
	    break;
}

说明:根据枚举类型创建对应的具体策略实现类

💡完整代码执行流程

  1. 初始化区间对象

    Interval a = new Interval(1.7, 2.1);
    
  2. 获取策略对象

    getStrategy(TYPE.COMMA) → 返回PrintIntervalsComma实例
    
  3. 执行策略打印

    a.printIntervals() → 调用ptr.doPrint(this)
    → 输出[1.7,2.1]
    
  4. 同理处理其他格式

    • DOTS → [1.7…2.1]

    • LINE → [1.7-2.1]

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2331142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构|排序算法(二)插入排序 希尔排序 冒泡排序

一、插入排序 1.算法思想 插入排序(Insertion Sort)是一种简单的排序算法,其基本思想是:将待排序的元素插入到已经有序的序列中,从而逐步构建有序序列。 具体过程如下: 把待排序的数组分为已排序和未排…

案例-流量统计

1.建一个data目录,在data下建log.txt文件 输入手机号码 上行流量 下行流量 2.在com.example.flow下建四个Java类3.flowBean flowMapper flowReducer flowDriver

Codeforces Round 1011 (Div. 2)

Dashboard - Codeforces Round 1011 (Div. 2) - Codeforces Problem - B - Codeforces 题目大意: 给你一个数组,你可以用一段子序列中没有出现的最小非负整数,替换数组中的组序列,经过若干操作,让数组变为长度为1,值…

时序数据异常检测-综述

更新中 异常检测基本概念 广义的Out-of-Distribution(广义的OOD)来描述异常检测的相关问题。OOD包括五个相关的子领域,分别为Anomaly Detection(AD)、Novelty Detection(ND)、Open Set Recogntion(OSR)、Out-of-Distribution(OOD)和Outlier Detection(OD)。这5个…

多类型医疗自助终端智能化升级路径(代码版.下)

医疗人机交互层技术实施方案 一、多模态交互体系 1. 医疗语音识别引擎 # 基于Wav2Vec2的医疗ASR系统 from transformers import Wav2Vec2Processor, Wav2Vec2ForCTC import torchaudioclass MedicalASR:def __init__(self):self.processor = Wav2Vec2Processor.from_pretrai…

蓝桥杯专项复习——双指针

目录 双指针算法:双指针算法-CSDN博客 最长连续不重复子序列 P8783 [蓝桥杯 2022 省 B] 统计子矩阵 双指针优化思路:当存在重复枚举时,可以考虑是否能使用双指针进行优化 双指针算法:双指针算法-CSDN博客 最长连续不重复子序列…

BetaFlight参数配置解读

BetaFlight参数配置解读 📌相关篇《Betaflight固件编译和烧录说明》🥕各型号已编译好的配置文件资源(.config):https://github.com/betaflight/unified-targets/tree/master/configs/default🌿各型号配置头…

Java 容器源码分析

一、哈希表 1、引入 hash 表 在无序数组中按照内容查找,效率底下,时间复杂度是 O(n) 在有序数组中按照内容查找,可以使用折半查找,时间复杂度 O(log2n) 哈希表可以不进行比较,通过计算得到地…

【Java中级】11章、枚举 - java引用数据类型,枚举介绍、快速入门,了解枚举类的基本使用方式【1】

文章内容: 自定义实现枚举enum关键字实现枚举 ❤️内容涉及枚举的定义,快速入门,注意事项和小题巩固知识点 🌈 跟着B站一位老师学习的内部类内容,现写这篇文章为学习内部类的小伙伴提供思路支持,希望可以一…

Jmeter 插件【性能测试监控搭建】

1. 安装Plugins Manager 1.1 下载路径: Install :: JMeter-Plugins.org 1.2 放在lib/ext目录下 1.3 重启Jmeter,会在菜单-选项下多一个 Plugins Manager菜单,打开即可对插件进行安装、升级。 2. 客户端(Jmeter端) 2.1 安装plugins manager…

【ES系列】Elasticsearch从入门到精通保姆级教程 | 启篇

🔥 本系列将带你从零开始学习Elasticsearch,通过保姆级教程,手把手教你掌握这个强大的搜索与分析引擎。无论你是完全的新手,还是想系统学习ES的开发者,这个系列都能满足你的需求。 📚博主匠心之作,强推专栏: JAVA集合专栏 【夜话集】JVM知识专栏数据库sql理论与实战【…

Unity中Spine骨骼动画完全指南:从API详解到避坑实战

Unity中Spine骨骼动画完全指南:从API详解到避坑实战 一、为什么要选择Spine? Spine作为专业的2D骨骼动画工具,相比传统帧动画可节省90%资源量。在Unity中的典型应用场景包括: 角色换装系统(通过插槽替换部件)复杂连招系统(动画混合与过渡)动态表情系统(面部骨骼控制)…

C++Cherno 学习笔记day17 [66]-[70] 类型双关、联合体、虚析构函数、类型转换、条件与操作断点

b站Cherno的课[66]-[70] 一、C的类型双关二、C的union(联合体、共用体)三、C的虚析构函数四、C的类型转换五、条件与操作断点——VisualStudio小技巧 一、C的类型双关 作用:在C中绕过类型系统 C是强类型语言 有一个类型系统,不…

wordpress 利用 All-in-One WP Migration全站转移

导出导入站点 在插件中查询 All-in-One WP Migration备份并导出全站数据 导入 注意事项: 1.导入部分限制50MB 宝塔解决方案,其他类似,修改php.ini配置文件即可 2. 全站转移需要修改域名 3. 大文件版本,大于1G的可以参考我的…

【工具使用】在OpenBMC中使用GDB工具来定位coredump原因

在OpenBMC调试中,有时会产生coredump却不知道从哪里入手分析,GDB工具就可以提供帮助。 1 编译带GDB工具的镜像 OpenBMC镜像中默认没有加入GDB工具,因此首先需要编译一个带GDB工具的OpenBMC镜像用于调试。在recipes-phosphor/packagegroups/…

Linux系统(Ubuntu和树莓派)的远程操作练习

文章目录 一、实验一(一)实验准备(二)Ubuntu 下的远程操作(三)树莓派下的远程操作(四)思考 二、实验二1.talk程序2. C 编写 Linux 进程间通信(IPC)聊天程序 一…

高效创建工作流,可实现类似unreal engine的蓝图效果,内部使用多线程高效执行节点函数

文章目录 前言(Introduction)开发环境搭建(Development environment setup)运行(Run test)开发者(Developer)编译(Compile)报错 前言(Introductio…

Design Compiler:语法检查工具dcprocheck

相关阅读 Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 dcprocheck是一个在Design Compiler存在于安装目录下的程序(其实它是一个指向snps_shell的符号链接,但snps_shell可以根据启动命令名判…

aws(学习笔记第三十八课) codepipeline-build-deploy-github-manual

文章目录 aws(学习笔记第三十八课) codepipeline-build-deploy-github-manual学习内容:1. 整体架构1.1 代码链接1.2 全体处理架构 2. 代码分析2.1 创建ImageRepo,并设定给FargateTaskDef2.2 创建CodeBuild project2.3 对CodeBuild project赋予权限&#…

深度学习|注意力机制

一、注意力提示 随意:跟随主观意识,也就是指有意识。 注意力机制:考虑“随意线索”,有一个注意力池化层,将会最终选择考虑到“随意线索”的那个值 二、注意力汇聚 这一部分也就是讲第一大点中“注意力汇聚”那个池化…