软件设计师 -- 案例分析

本文详细解析软件设计师考试中的案例分析部分,涵盖数据流图、数据库E-R图、面向对象分析和C语言程序设计等内容。通过对实际案例的剖析,阐述了如何解答涉及的数据流图的实体、数据存储、面向对象分析的加工逻辑等关键问题,帮助考生理解和掌握考试要点。

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

简单开头 

简单讲一下软件分析师中的案例分析方面,软件设计师整场考试一共4个小时,其中给案例分析的时间一共是两个小时,最快1个半小时做完后可以交卷。

一般所涉及到的题型分别是:

  • 数据流图
  • 数据库
  • 面向对象分析
  • C语言程序设计
  • C++程序填空(选做)
  • Java程序填空(选做)

案例分析一般分为六道大题,其中第五题和第六题为选做题,只记一题的分数(一般来说第五题为C++补充代码,第六题为Java补充代码,题目完全一样)。考试中可以给文字画强调部分,效果类型如下:强调部分

数据流图

数据流图的题型一般为4个小题,题型比较固定,一般1,2,3小问的题型不便,4小问变化但难度不高,总体难度不高

举例分析

(真题1)某制造企业为了有效提升检测效率,节约人力资源,要开发一个智能缺陷检测系统,该系统的主要功能包括:
(1)基础信息管理。管理员对检测标准和检测规则等基础信息进行设置。

(2)检测模型部署。管理员对常用机器学习方法建立的检测模型进行部署。

(3)图像采集。实时采集待检测产品的相关信息并存储,包括产品结构,生产时间,图像信号和产品图像。
(4)缺陷检测。根据检测模型和检测质量标准对图像采集所收到的产品检测信息中所有图像进行检测。若一个产品出现一张图像检测不合格,就表示该产品不合格。对不合格产品,其检测结果包括产品型号和不合格类型。
(5)质量监控。根据监控规则对产品质量进行监控并将检测情况展示给检测业务员。若满足规则条件,向检测业务员发送质量报警信息,质量检测通过检测业务员向检测设备发起远程控制指令进行处理。
(6)模型监控。在系统中部署的模型、产品的检测信息结合基础信息进行监测分析,将模型运行情况发给监控人员。现采用结构化方法对智能检测系统进行分析与设计,获得如图1-1所示的上下文数据流图和图 1-2 所示的数据流图。

【问题1】(4分)

使用说明中的语句写出图1-1中的实体 E1~E4 的名称。
【问题 2】(3 分)
使用说明中的语句写出图 1-2 中的数据存储 D1~D3 的名称。
【问题 3】(5 分)
根据图中的标注和题日描述中的术语,补齐图12中缺失的数据流及其起点、终点。
【问题 4】(3 分)
根据说明,采用结构化语言对缺陷检测的加工逻辑进行描述。

【问题1】

本题型固定,本题的思路一般是直接从题目中的关键信息处找,如果文中出现过没有某个实体类的情况,那么就要结合上下文分析了,有可能是以XX系统的出现的。

题目分析

首先标出文中所有的实体:

(1)基础信息管理。管理员对检测标准和检测规则等基础信息进行设置。

(2)检测模型部署。管理员对常用机器学习方法建立的检测模型进行部署。

(3)图像采集。实时采集待检测产品的相关信息并存储,包括产品结构,生产时间,图像信号和产品图像。
(4)缺陷检测。根据检测模型和检测质量标准对图像采集所收到的产品检测信息中所有图像进行检测。若一个产品出现一张图像检测不合格,就表示该产品不合格。对不合格产品,其检测结果包括产品型号和不合格类型。
(5)质量监控。根据监控规则对产品质量进行监控并将检测情况展示给检测业务员。若满足规则条件,向检测业务员发送质量报警信息,质量检测通过检测业务员向检测设备发起远程控制指令进行处理。
(6)模型监控。在系统中部署的模型、产品的检测信息结合基础信息进行监测分析,将模型运行情况发给监控人员

根据1-1图中相对应的信息,将文中出现的实体填到E1-E4 

管理员:将检测标准和检测规则传入到检测系统内,所以对应的应该是实体类E2

检测产品:被采集信息并被存储,在图中表示为传递给检测中心,所以对应的应该是实体类E1

检测业务员: 向检测设备发起远程控制指令,所以对应的应该是实体类E3

监控人员:接受模型运行情况,所以对应的应该是实体类E4

答案:

E1:检测产品;E2:管理员;E3:检测业务员;E4:监控人员

【问题2】

本题题型固定,要求给出数据存储 D1~D3 的名称,一般数量为3~4个,写法也相同,一般都为:

“XX文件”“XX表”"XX库”“XX清单”“XX档案”

具体直接可根据输入的名称来写:

答案:

D1 模型信息文件

D2 检测信息文件

D3 基础信息文件

【问题3】

本题题型固定,一般可以找出图中缺少的数据流方面,一般来说从两个方面入手:

1. 查询数据流图中是否出现了黑洞,奇迹,灰洞三种常见错误:

(黑洞:有输入无输出;奇迹:有输出无输入;灰洞:输入不足以产生输出)

2. 通过题干中每一条模块功能的描述,与数据流图进行对照,就可以找出缺少的数据流。

向对于本题来说,很容易发现P5出现了奇迹问题,即有输出无输入,所以根据题目中的要求来给他补全

根据监控规则对产品质量进行监控并将检测情况展示给检测业务员。若满足规则条件,向检测业务员发送质量报警信息,质量检测通过检测业务员向检测设备发起远程控制指令进行处理。

所以需要

数据流:监控规则

起点:D3

终点:P5

数据流:检测信息

起点:E3

终点:P5

在本题中,在根据文章中的意思,D3中存储着信息监控规则,这些信息肯定是要输入到模型中的,所以在还欠缺数据流信息:

数据流:基础信息

起点:D3

终点:P6

【问题4】

 本题开放题型,但是题目基本上会从这几个方面来问:

  • 采用结构化的语言描述(加工化逻辑进行描述)
  • 描述题目中某个数据流的组成
  • 描述一下某个过程的具体加工过程

结构化的语言,描述:要求给出类似伪代码的形式

WHILE(接收图像)
DO{
        检测所收到的所有图像;
        IF(出现一张图像检测不合格)
        THEN{返回产品不合格;不合格产品检测结果=产品型号+不合格类型;
        ENDIF

        }
}ENDDO

描述某个数据流的组成和某个过程的具体加工过程,一般来说结合题目中给出的信息直接叙述即可

数据库E-R图

 数据库E-R图的题型一般为3个小题,

(2022年上真题)

【说明】
某营销公司为了便于对各地的分公司及专卖店进行管理,拟开发一套业务管理系统,请根据下述需求描述完成该系统的数据库设计
【需求描述】
(1)分公司信息包括:分公司编号、分公司名、地址和电话。其中,分公司编号唯-确定分公司关系的每一个元组。每个分公司拥有多家专卖店,每家专卖店只属于一个分公司。
(2)专实店信息包括:专卖店号、专卖店名、店长、分公司编号、地址、电话,其中店号唯一确定专卖店关系中的每一个元组。每家专卖店只有一名店长,负责专卖店的名项业务;每名店长只负责一家专卖店:每家专卖店有多名职员,每名职员只属于一家专卖店。

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

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

【逻辑结构设计】根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整)
分公司(分公司编号,分公司名,地址,电话)
专卖店(专卖店号,专卖店名,(a),地址,电话)
职员(职员号,职员名,(b),岗位,电话,薪资)

【问题1】

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

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

(2)专卖店关系的主键和外键
     职员关系的主键和外键

【问题3】

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

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

【问题1】

本题题型一般固定,一般来说题干中会提到相对应的关系,找到后直接和题干中相对应的关系创建联系即可

题目分析

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

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

所以 分公司和专卖店之间存在联系,分公司和专卖店之间的联系是1:*

专卖店和店长之间存在联系,专卖店和店长之间的联系是1:1

专卖店和职员之间存在联系,专卖店和职员之间的联系是1:*

答案为

联系1 分公司和专卖店:1:*(一对多)
联系2 专卖店和店长:1:1
联系3 专卖店和职员:1:*(一对多)

【问题2】

本题题型一般固定,实体信息填空,找实体的主键和外键

对于实体信息缺少的部分基本上可以从文中找到,但是注意:

(1)这种缺的空可能缺少的字段不止一个

(2)有可能会参考问题一中给的关系,如果问题一中给到的一对多的关系,在多的数据结构中要保存一端的主键(题干中可能不会说)

对于主键和外键的确定,遵循以下规律:

主键是用来唯一标识关系表中每一行数据的字段或字段组合。

外键用来建立表与表之间关系的字段。

题目分析

【问题2】(1)

专卖店(专卖店号,专卖店名,(a),地址,电话)

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

在文中找到相对应的话

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

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

所以(a)为店长、分公司编号

(b)为专卖店编号

【问题2】(2)

题目分析

专卖店:专卖店店号是唯一的标识的字段,所以主键为专卖店店号

专卖店中保存了店长表和分公司表的联系,所以外键为店长、分公司信息

职员:职员号是唯一的标识的字段,所以主键为职员

职员中保存了专卖店的联系,所以外键为专卖店号

所以答案为

专卖店: 主键:专卖店店号;外键为店长、分公司信息

职员:主键:职员;外键:专卖店号

【问题3】

一般是开放性问题,但问题一般与E-R图之间关系模式的变化,或者新增关系相关

1. 某种关系模式发生变化,从1:1变为 1:*,或者从1:*变为*:*,问联系和保存的字段是否发生变化

2. 新增了某种关系,问怎么新建连接,保存的字段是否发生变化

首先每个实体都要转换成一个关系模式,对于联系:

  • 一对一,联系作为一个属性随便加入哪个实体中。
  • 一对多,联系可以单独转换为一个关系模式,也可以作为一个属性加入到N端中(N端实体包含1端的主键);
  • 多对多,联系必须单独转换为一个关系模式(且此关系模式应该包含两端实体的主键)。

题目分析

专卖店要求每位职员至少要填写一位紧急联系人的姓名、与本人关系和联系电话

所以说要添加的实体类为紧急联系人,职员与紧急联系人之间的联系为职员:紧急联系人= 1:*

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

答案

紧急联系人,职员与紧急联系人之间的联系为职员:紧急联系人= 1:*

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

面相对象分析

面相对象分析的题型和数据流图的题型很相似,难度普遍不大,还是根据真题来进行讲解

(2022年上真题)

【说明】某公司的人事能门拥有一个地址簿(AddressBookSystem),管理系(AddressBookSystem)于管理公司所有员工的地址记录(PersonAddress)。员工的地址记录包括:姓名、住址、城市、省份、邮政编码以及联系电话等信息。管理员可以完成对地址簿中地址记录的管理操作,包括:

(1)维护地址记录。根据公司的人员变动情况,对地址记录进行添加、修改、删除等操作;(2)排序。按照员工姓氏的字典顺序或邮政编码对地址簿的所有记录进行排序。

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

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

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

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

系统将提供一个GUI(图形用户界面)实现对地址薄的各种操作。现采用面向对象方法分析并设计该地址簿管理系统,得到如图3-1所示的用例图和图3-2所示的类图。

【问题1】(6分)

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

【问题2】(5分)

根据说明中的描述,给出图3-2中类AddressBook的主要属性和方法PersonAddress的主要属性

【问题3】(4分)

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

【问题1】

本题题型固定,分析方法和数据流图中基本一致,直接从原文中就可以直接获取答案。

题目分析 

先将文中的关键点标成强调部分:

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

(2)排序。按照员工姓氏的字典顺序邮政编码对地址簿的所有记录进行排序。

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

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

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

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

从图中可以看出U1,U2都与“排序”相关,而且与用例的“排序”的关系是泛化,所以从文中找到排序,可以得到

U1:按照字典顺序排序 ,U2:按照邮政编码排序

由于本题中没有进一步的限制,所以U1,U2的顺序可以互换

 关于U3,U4,U5,U6,结合文中给出的信息,会发现“创建地址簿”和“修改地址簿”都需要“保存”,二者正好是《include》关系,而“修改地址簿”的前提是“打开地址簿”,所以可以得到

U3:创建地址簿,U4:修改地址簿,U5:打开地址簿,U6:保存

答案

U1:按照字典顺序排序 ,U2:按照邮政编码排序,U3:创建地址簿,U4:修改地址簿,U5:打开地址簿,U6:保存

【问题2】 

关于题目中问到的主属性基本上题目中都会有给,然后相对应的方法的话本题要相对思考一下

文中主题提到

管理系(AddressBookSystem)于管理公司所有员工的地址记录(PersonAddress)。员工的地址记录包括:姓名、住址、城市、省份、邮政编码以及联系电话等信息

所以PersonAddress属性包括:姓名,住址,城市,省份,邮政编码,联系电话

AddressBook是管理所有员工的类,所以应该具有员工的所有属性,在加上员工所属的部门号;

所以AddressBook属性包括:部门编号,姓名,住址,城市,省份,邮政编码,联系电话

本题中还问到AddressBook中的方法:

一般针对这种员工管理,基本上题目中也会给相对性的要求,主要看题目中提到了哪些方法

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

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

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

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

所以本题中 AddressBook方法包括:创建,打开,修改,保存,添加,修改,删除

【问题3】 

本题一般为开放性题目,但基本上问的会和类与类之间的关系相关

基本上只会涉及到三种关系:

1. <<include>>包含

当可以从两个或两个以上的用例中提取公共行为时,应该使用包含的关系来表示它们。其中这个提取出来的公共用例成为抽象用例,而把原始用例成为基本用例或基础用例。其中“<<include>>”是包含关系的构造型,箭头指向抽象用例

 2. 《extend》扩展

如果一个用例明显地混合了两种或者两种以上的不同场景,即根据情况可能发生多种分支,则可以将这个用例分为一个基本用例和一个或多个扩展用例,这样可能会使描述更加清晰。扩展用例为基用例添加新的行为。扩展用例可以访问基用例的属性,因此他能根据基用例中扩展点的当前状态来决定是否执行自己。而扩展用例对基用例不可见。    

 2. 《generalization》泛化

 当多个用例共同拥有一种类似的结构和行为时,可以将他们的共性抽象成为父用例,其他的用例作为泛化关系的子用例。在用例的泛化关系中,子用例是父用例的一种特殊形式,它继承了父用例的所有结构、行为、关系。其中三角箭头指向父用例

C语言程序设计

题型一般为填空,问算法,时间复杂度,和例子实现

例题 

 

【问题1】(8分)
根据以上说明和C代码,填充C代码中的空(1)~(4)。
【问题2】(2分)
根据以上说明和C代码,算法的时间复杂度为(5)(用0符号表示)。

【问题3】(5分)
考虑数据序列R=(7,10,13,15,4,20,19,8),n=8,则构建的初始大顶堆为(6),第一个元素脱离堆结构,对剩余元素再调整成大顶堆后的数组R为(7)。

 【问题1】

本题题型固定,一般可以直接参照文中的意思写出,一般可以参考所在空位的上几行或下一行的代码

 【问题2】

这个题中一般会问到使用了XX算法,时间复杂度是XX,空间复杂度是XX;

算法总结:

1、回溯

  • 回溯法是一种尝试所有可能的解,并在发现不满足条件时回退的方法。
  • 具有探索和回退的过程,适用于解决排列、组合、子集等问题

2、分治

  • 将问题分解成若干个子问题,分别解决,然后合并子问题的解得到原问题的解。
  • 常见的分治思想包括二分法,时间复杂度与 O(nlog⁡n) 相关,特别是当有外层嵌套循环时要注意。

3、动态规划法

  • 通过保存中间解避免重复计算,从而提高效率。
  • 有递归式,自底向上实现时,中间解基本上是查表可得,所以时间复杂度一般为 O(n^k)。
  • 自顶向下的实现类似于分治法,查表的意义基本上可以忽略,时间复杂度为 O(2^n)
  • 一般有“最优子结构”描述,表(数组)记录中间解。

4、贪心

  • 每一步选择当前最优解,从而希望得到全局最优解。
  • 有时候也会出现“最优子结构”的描述,但没有递归式。
  • 求得的是满意解,某些特殊情况下,贪心法也能得到最优解,例如部分背包问题。

时间复杂度和空间复杂度一般通过看代码来计算,具体怎么得到可以参考博客:
原文链接:https://blog.csdn.net/weixin_63866037/article/details/128087397

  【问题3】

一般是给一个数据实例,要求根据所给的算法给出结果,所以大家一定要读懂代码。

C++程序填空/Java程序填空

 一般是5个空的填空,每个空3分,两道选做题所填的空完全相同,

注意:这边以Java为例

Java填空中

抽象类:abstract用extends(这里要加s哦)继承
接口类:interface用implements继承

抽象类对象的格式:abstract class 

抽象类方法 public abstract 返回类型 函数名()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值