当前位置: 首页 > news >正文

软考:软件设计师 — 9.数据流图

九. 数据流图

数据流图是下午场考试中第一个题目,分值 15 分。通常会考察实体名、存储名、加工名的补充,以及找到缺失的数据流并改正等。

1. 数据平衡原则

数据流的分析依赖于数据平衡原则。

父图与子图之间的平衡

父图与子图之间平衡是指任何一张 DFD 子图边界上的输入/输出数据流必须与其父图对应加工的输入/输出数据保持一致。如果父图中某个加工的一条数据流对应于子图中的几条数据流,而子图中组成这些数据流的数据项全体正好等于父图中的这条数据流,那么它们仍然是平衡的。也就是可能存在一对一或一对多的类似关系。

子图内平衡

数据流图常见的 3 种错误:

  • 加工只有输入没有输出,称为黑洞。

  • 加工只有输出没有输入,称为奇迹。

  • 加工中输入不足以产生输出,称为灰洞。

找到缺失的数据流

如父图:

子图: 

先找到对应实体,然后再找对应数据流。如前端应用,子图中缺少处理后的操作结果数据流;后端数据库缺少操作结果数据流。 

2. 解题技巧

详细分析试题说明

数据管理员可通过中间件进行用户管理、操作管理和权限管理。用户管理维护用户信息,用户信息(用户名、密码)存储再在用户表中;操作管理维护数据实体的标准操作及其所属的后端数据库信息,标准操作和后端数据库信息存放在操作表中;权限管理维护权限表,该表存储用户可执行的操作信息。

  • 数据管理员是一个外部实体;
  • 中间件有用户管理、操作管理、权限管理这些加工;
  • 中间件有用户表这个数据存储,且该存储与用户管理相关;
  • 后台数据库是一个外部实体;
  • 中间件有操作表这个数据存储,且该存储与操作管理相关;
  • 中间件有权限表这个数据存储,且该存储与权限管理相关。

利用数据平衡原则

找到父图与子图对应外部实体缺失的数据流。

补充实体

实体可能是:

  • 人物角色:如 客户、管理员、主管、经理、老师、学生等。
  • 组织机构:如 银行、供应商、募捐机构等。
  • 外部系统:如 银行系统、工资系统、后台数据库(当要开发的是中间件时)等。

补充存储

存储的文字方面特征:**文件,**表,**库,**清单,**档案 等。

补充加工

加工是用于处理数据流的,所以要补充加工名,可以把该加工涉及到的数据流,在说明中标识出来,再在数据流名称所在的句子中,找 "动词 +  名词" 的结构,分析是否可作为加工。有时也是 "名词 + 动词" 。

"动词 +  名词" 如:生成报告、发出通知、批改作业、记录分数、物流跟踪、用户管理等。

补充数据流

① 数据平衡原则

  • 顶层图与 0 层图对比,是否有顶层图有,但 0 层图无的数据流,或反之。
  • 检查图中每个加工,是否存在只有输入没有输出或只有输出没有输入,或根据输入无法产生对应输出的情况。

② 按题目说明与图进行匹配

说明中的每一句话,都能与图中有对应关系,当把说明中的实体与数据流标识出来之后,容易缩小对应范围,找出纰漏。

3. 例题

(1)例题 1

说明:

现准备为某银行开发一个信用卡管理系统 CCMS,该系统的基本功能为:

  • 信用卡申请。非信用卡客户填写信用卡申请表,说明所要申请的信用卡类型及申请者的基本信息,提交 CCMS。如果信用卡申请被银行接受,CCMS 将记录该客户的基本信息,并发送确认函给该客户,告知客户信用卡的有效期及信贷限额;否则该客户将会收到一封拒绝函。非信用卡客户收到确认函后成为信用卡客户。
  • 信用卡激活。信用卡客户向 CCMS 提交激活请求,用信用卡号和密码激活该信用卡。激活操作结束后,CCMS 将激活通知发送给客户,告知客户其信用卡是否被成功激活。
  • 。信用卡客户的个人信息可以在 CCMS 中进行在线管理。每位信用卡客户可以在线查询和修改个人信息。
  • 交易信息查询。信用卡客户使用信用卡进行的每一笔交易都会记录在 CCMS 中。信用卡客户可以通过 CCMS 查询并核实其交易信息(包括信用卡交易记录及交易额)。

下面分别给出了该系统的顶层数据流图和 0 层数据流图的初稿。

问题1:

根据说明,将顶层数据流图中的 E1~E3 补充完整。

问题2:

顶层数据流图缺少三条数据流,根据说明,分别指出这三条数据流的起点和终点。(注:数据流的起点和终点均采用图中的符合和描述)

问题3:

0 层数据流图中有两条数据流是错误的,请指出这两条数据流的名称,并改正。

问题4:

根据说明,将 0 层数据流图中 P1~P4 的处理名称补充完整。

解析1:

首先分析题干,通常题干中每段以总分形式呈现的,最前面的描述往往就是加工。如信用卡申请、信号卡激活等。

E1~E3 分别代表三个实体,E1 接收到两个函,说明是非信用卡客户;E2 有查询修改个人信息的请求,也接收到激活通知,说明是信用卡客户;E3 接收到信用卡申请并返回验证结果,说明是银行。

E1:非信用卡客户  E2:信用卡客户  E3:银行

解析2:

顶层数据流图缺少三条数据流,继续分析题干。

首先看到非信用卡客户实体,填写信用卡申请表提交给 CCMS,此处缺失。即 E1(非信用卡客户)->(填写信用卡申请表) P0(CCMS)。然后是信用卡客户实体,向 CCMS 提交激活请求,操作结束后会收到来自 CCMS 的激活通知,此处缺失了提交激活请求,即 E2(信用卡客户)->(激活请求)P0(CCMS)。最后是信用卡客户提交了交易记录查询请求,CCMS 应该返回交易记录查询结果,此处缺失,即 P0(CCMS)->(交易信息)E2(信用卡客户)。

① 起点:E1(非信用卡客户) 终点:P0(CCMS) 数据流名称:填写信用卡申请表

② 起点:E2(信用卡客户) 终点:P0(CCMS) 数据流名称:激活请求

③ 起点:P0(CCMS) 终点:E2(信用卡客户) 数据流名称:交易信息

解析3:

0 层数据流图有两条错误的数据流,继续分析题干。

其实根据题干描述,可以先把 P0~P4 补充完整,也方便做题。

E2 是信用卡客户,提交了交易查询记录请求给 P1,因此 P1 应该是交易信息查询。也提交了查询/修改个人信息请求给 P2,因此 P2 应该是信用卡客户信息管理。P3 将激活通知发送给 E2,所以 P3 应该是信用卡激活,最后 P4 与 E1(非信用卡客户)交互,即 P4 是信用卡申请。

P1:交易信息查询  P2:信用卡客户信息管理  P3:信用卡激活  P4:信用卡申请

第一个错误的是 P4 ->(填写信用卡申请表) E1。应该是 E1(非信用卡客户)->(填写信用卡申请表) P0(CCMS),是非信用卡客户提交申请表给 CCMS,此处方向反了。

第二个错误的是 P4 -> (激活请求)P3。应该是 E2(信用卡客户)->(激活请求)P0(CCMS),是信用卡客户提交激活请求给 CCMS,即进行信用卡激活。

① 起点:P4(信用卡申请) 终点:E1(非信用卡客户) 数据流名称:填写信用卡申请表

改正后:起点:E1(非信用卡客户) 终点:P4(信用卡申请) 数据流名称:填写信用卡申请表

② 起点:P4(信用卡申请) 终点:P3(信用卡激活 ) 数据流名称:激活请求

改正后:E2(信用卡客户) 终点:P3(信用卡激活 ) 数据流名称:激活请求

解析4:

如解析3所述。

P1:交易信息查询  P2:信用卡客户信息管理  P3:信用卡激活  P4:信用卡申请

(2)例题 2

说明:

某证券交易所为了方便提供证券交易服务,欲开发一证券交易平台,该平台的主要功能如下:

  • 开户。根据客户服务助理提交的开户信息,进行开户,并将客户信息存入客户记录中,账户信息(余额等)存入账户记录中。
  • 存款。客户可以向其账户中存款,根据存款金额修改账户余额。
  • 取款。客户可以从其账户中取款,根据取款金额修改账户余额。
  • 证券交易。客户和经纪人均可以进行证券交易(客户通过在线方式,经纪人通过电话),将交易信息存入交易记录中。
  • 检查交易。平台从交易记录中读取交易信息,将交易明细返回给客户。

设计得到的数据流图如下所示:

问题1:

使用说明中的词语,给出上下文数据流图中的实体 E1~E3 的名称。

问题2:

使用说明中的词语,给出 0 层数据流图中数据存储 D1~D3 的名称。

问题3:

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

问题4:

实际的证券交易通常是在证券交易中心完成的,因此,该平台的证券交易功能需将交易信息传递给证券交易中心。针对这个功能需求,需要对两个数据流图进行哪些修改,请用 200 字以内的文字加以说明。

解析1:

分析题干可以得到信息,客户服务助理提交的开户信息,因此 E1 是客户服务助理;客户可以向其账户中存款,也可以取款,因此 E2 是客户;经纪人通过电话进行证券交易,所以 E3 是经纪人。

E1:客户服务助理  E2:客户  E3:经纪人

解析2:

客户信息存入客户记录中,账户信息(余额等)存入账户记录中,因此 D1 是客户记录,D2 是账户记录。平台从交易记录中读取交易信息,将交易明细返回给客户,D3 是交易记录。

D1:客户记录  D2:账户记录  D3:交易记录

解析3:

补充缺失的数据流时可以利用数据平衡原则,一个加工不能只有输入或输出。

根据题干,账户信息(余额等)存入账户记录中,并且根据存款或取款金额修改账户余额,因此存款和取款加工指向 D2,数据流名称为修改账户余额。交易信息存入交易记录中,因此证券交易(在线)和证券交易(电话)都需要指向 D3,数据流名称为交易信息存入交易记录。通常补充缺失数据流的题目需要用表格形式回答,如下:

起点终点数据流名称
存款D2(账户记录)修改账户余额
取款D2(账户记录)修改账户余额
证券交易(在线)D3(交易记录)交易信息存入交易记录(在线)
证券交易(电话)D3(交易记录)交易信息存入交易记录(电话)

解析4:

根据题目要求,增加了新的外部实体证券交易中心。在上下文数据流图中,增加证券交易平台指向证券交易中心的数据流,名称为交易信息。在 0 层数据流图中,分别增加证券交易(在线)和证券交易(电话)指向证券交易中心的数据流,名称均为交易信息。

起点终点数据流名称
证券交易平台证券交易中心交易信息
证券交易(在线)证券交易中心交易信息
证券交易(电话)证券交易中心交易信息

(3)例题 3

说明:

某医疗护理机构为老年人或有护理需求者提供专业护理,现欲开发一基于Web的医疗管理系统,以改善医疗护理效率。该系统的主要功能如下:

  • 通用信息查询。客户提交通用信息查询请求,查询通用信息表,返回查询结果。
  • 医生聘用。医生提出应聘/辞职申请,交由主管进行聘用/解聘审批,更新医生表,并给医生反馈聘用/解聘结果;删除解聘医生的出诊安排。
  • 预约处理。医生安排出诊时间,存入医生出诊时间表;根据客户提交的预约查询请求,查询在职医生及其出诊时间等预约所需数据并返回;创建预约,提交预约请求,在预约表中新增预约记录,更新所约医生出诊时间并给医生发送预约通知;给客户反馈预约结果。
  • 药品管理。医生提交处方,根据药品名称从药品数据中查询相关药品库存信息,开出药品,更新对应药品的库存以及预约表中的治疗信息;给医生发送药品已开出反馈。
  • 报表创建。根据主管提交的报表查询请求(报表类型和时间段),从预约数据、通用信息、药品库存数据、医生以及医生出诊时间中进行查询,生成报表返回给主管。

设计得到的数据流图如下所示:

问题1:

使用说明中的词语,给出上下文数据流图中的实体 E1~E3 的名称。

问题2:

使用说明中的词语,给出 0 层数据流图中数据存储 D1~D5 的名称。

问题3:

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

问题4:

使用说明中的词语,说明预约处理可以分解为哪些子加工,并说明两个数据流图是如何保持平衡的。

解析1:

根据题干得到信息,客户提交通用信息查询请求,因此 E1 是客户;医生提出应聘/辞职申请,交由主管进行聘用/解聘审批,所以 E2 是医生,E3 是主管。

E1:客户  E2:医生  E3:主管

解析2:

继续分析题干,客户提交通用信息查询请求,查询通用信息表,因此 D1 是通用信息表;更新医生表,D3 是医生表;医生安排出诊时间,存入医生出诊时间表,D4 是出诊时间表;在预约表中新增预约记录,D2 是预约表;根据药品名称从药品数据中查询相关药品库存信息,D5 是药品数据。

D1:通用信息表  D2:预约表  D3:医生表  D4:出诊时间表  D5:药品库存表

解析3:

删除解聘医生的出诊安排,此处缺失,应该由 P2 指向 D4,名称为删除解聘医生的出诊安排;更新所约医生出诊时间部分缺失,应该由 P3 指向 D4,名称为更新出诊时间;根据药品名称从药品数据中查询相关药品库存信息,开出药品,此处缺失,应该由 D5 指向 P4,名称为药品库存信息;更新对应药品的库存以及预约表中的治疗信息,更新预约表的治疗信息缺失,应该由 P4 指向 D2。

起点终点数据流名称
P2 医生聘用D4 出诊时间表删除解聘医生出诊安排
P3 预约处理D4 出诊时间表更新出诊时间
D5 药品数据P4 药品管理药品库存信息
P4 药品管理D2 预约表更新预约表的治疗信息

解析4:

预约处理的分解可以根据题干中对预约处理的描述,每个分号前代表一个加工,即安排出诊时间、预约查询、创建预约、反馈预约结果。

两个数据流图保持平衡即父图与子图之间的平衡,父图中某个加工的输入输出数据流必须与其子图的输入输出数据流在数量上和名字上相同。父图的一个输入或输出对应子图中的几个输入或输出,而子图中组成的这些数据流的数据项全体正好是父图中的这一个数据流。

数据流图部分的内容至此结束,后续如果有补充或修改会直接添加。

相关文章:

软考:软件设计师 — 9.数据流图

九. 数据流图 数据流图是下午场考试中第一个题目,分值 15 分。通常会考察实体名、存储名、加工名的补充,以及找到缺失的数据流并改正等。 1. 数据平衡原则 数据流的分析依赖于数据平衡原则。 父图与子图之间的平衡 父图与子图之间平衡是指任何一张 …...

收银系统源码-门店折扣活动应该怎么做

系统概况: 专门为零售行业的连锁店量身打造的收银系统,适用于常规超市、生鲜超市、水果店、便利店、零食专卖店、服装店、母婴用品、农贸市场等类型的门店使用。同时线上线下数据打通,线下收银的数据与小程序私域商城中的数据完全同步&#…...

Python数值计算(12)——线性插值

1. 概述 插值是根据已知的数据序列(可以理解为你坐标中一系列离散的点),找到其中的规律,然后根据找到的这个规律,来对其中尚未有数据记录的点进行数值估计的方法。最简单直观的一种插值方式是线性插值,它是…...

TypeScript(switch判断)

1.switch 语法用法 switch是对某个表达式的值做出判断。然后决定程序执行哪一段代码 case语句中指定的每个值必须具有与表达式兼容的类型 语法switch(表达式){ case 值1: ​ 执行语句块1 break; case 值2: ​ 执行语句块3 break; dfault: //如…...

血细胞自动检测与分类系统:深度学习与UI界面的结合

一、项目概述 项目背景 在医学实验室中,血细胞的检测和分类是诊断和研究的重要环节。传统方法依赖于人工显微镜检查,费时且容易出现误差。通过深度学习技术,特别是目标检测模型YOLO,可以实现自动化、快速且准确的血细胞检测和分…...

鸿蒙Flex布局

效果: 代码: 换行代码参数设置: wrap:FlexWrap.Wrap Entry Component struct FlexCase {State message: string Hello World;build() {Flex({direction:FlexDirection.Row,justifyContent:FlexAlign.SpaceAround,alignItems:ItemAlign.Cen…...

开发自己的 Web 框架

开发自己的 Web 框架 开发Web服务器主体程序开发Web框架程序使用模板来展示响应内容开发框架的路由列表功能采用装饰器的方式添加路由电影列表页面的开发案例 接收web服务器的动态资源请求,给web服务器提供处理动态资源请求的服务。根据请求资源路径的后缀名进行判断…...

用于自动驾驶的基于立体视觉的语义 3D 对象和自我运动跟踪

Stereo Vision-based Semantic 3D Object and Ego-motion Tracking for Autonomous Driving 论文 摘要: 我们提出了一种基于立体视觉的方法,用于在动态自动驾驶场景中跟踪相机自我运动和 3D 语义对象。我们建议使用易于标记的 2D 检测和离散视点分类以及…...

Spring@Autowired注解

Autowired顾名思义,就是自动装配,其作用是为了消除代码Java代码里面的getter/setter与bean属性中的property。当然,getter看个人需求,如果私有属性需要对外提供的话,应当予以保留。 因此,引入Autowired注解…...

32.x86游戏实战-使用物品call

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…...

Prometheus+Alertmanager+邮件告警

参考node_exporter-CSDN博客,球球不要断更!!!! 大致流程 1.部署promethus 可以写一个自定义的 systemd 服务启动文档,详情见自定义的 systemd 服务启动方式-CSDN博客 [rootlocalhost system]# sudo tee /e…...

upload-labs漏洞靶场~文件上传漏洞

寻找测试网站的文件上传的模块,常见:头像上传,修改上传,文件编辑器中文件上传,图片上传、媒体上传等,通过抓包上传恶意的文件进行测试,上传后缀名 asp php aspx 等的动态语言脚本,查…...

PostgreSQL 高阶函数详解:全面深入的功能与实用示例

PostgreSQL 高阶函数详解 PostgreSQL 是一款功能强大的开源关系数据库管理系统,以其丰富的功能和高扩展性著称。在数据处理和分析方面,PostgreSQL 提供了一系列高阶函数,可以极大地简化和优化各种复杂操作。本文将详细介绍 PostgreSQL 的高阶…...

Redis——集合 SET

目录 1. 添加元素 SADD 2. 查看元素 SMEMBERS 3. 判断元素是否存在该集合 SISMEMBER 4. 删除元素 SREM 集合 SET 是一种无序集合;因此其与列表有以下区别: (1)列表是有序的,集合是无序的; &#xff0…...

openEuler安装docker

1.下载地址 搜索docker 寻找docker-ce 复制地址 2.配置仓库 [rootlocalhost yum.repos.d]# pwd /etc/yum.repos.d [rootlocalhost yum.repos.d]# vim docker-ce.repo [docker-ce] namedocker baseurlhttps://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/ gpgche…...

每天一个数据分析题(四百六十五)- 缺失值

某连续型变量的数据集存在缺失值,可以采用哪种方法处理? A. 插值法填补 B. EM算法填补 C. 随机森林填补 D. 以上均不对 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖Pytho…...

干货 | 变频器的详细介绍

变频器简述 变频器是电机控制领域中常见的一种设备,也称变频调节器,是一种将固定频率的交流电转换为可调频率的交流电的电力电子设备,用于控制交流电机的转速和输出功率。变频器通过调节输出电源的电压和频率,从而控制电动机的转速…...

Linux线程2

线程相关函数 线程分离--pthread_detach(后面会详细讲) 函数原型:int pthread_datach(pthread_t thread); 调用该函数之后不需要 pthread_join 子线程会自动回收自己的PCB 杀死(取消)线程--pthread_cancel 取…...

乱弹篇(40)人类追求长寿

不要认为只有中国的老龄化才严重,实际上全球都面临老龄化,其中日本最为严重。 这是随着人类生活和医学水平的不断提高,寿命才会比过去数十年有了大幅度的提升。据资料显示,目前全球平均预期寿命估计为73岁。与百年之前相比&#…...

技术详解:互联网医院系统源码与医保购药APP的整合开发策略

本篇文章,小编将从系统架构、数据安全、用户体验和技术实现等方面详细探讨互联网医院系统与医保购药APP的整合开发策略。 一、系统架构 1.模块化设计 互联网医院系统与医保购药APP的整合需要采用模块化设计。 2.微服务架构 每个功能模块作为一个独立的微服务&am…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理&#xff1a…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

生成 Git SSH 证书

🔑 1. ​​生成 SSH 密钥对​​ 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​: -t rsa&#x…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...