首先,从说明的第5条可知,生成成绩列表时,是需要从课程成绩文件中获取信息的,“课程成绩文件”实际上就是图中的D4。而D4和加工4之间并没有数据流,因此这就是一条缺失的数据流。
另外,前面在确定D1所对应的数据存储时提到过,生成成绩单时是需要学生信息的。所以,加工5应该从D1中获取相应的信息,这样就找到了第二条数据流。
第三条数据流也比较容易找。说明的第7条告诉我们,只有“对于所有通过审查的成绩,系统将会生成最终的成绩单,并通知每个选课学生”。也就是说,从成绩列表到成绩单的生成是有条件的。这意味着,在加工4和加工5之间应该存在一条数据流,这就是第3条数据流。
问题4实际上是为了考查大家对DFD的进一步理解,明确DFD在软件开发中用于描述功能需求。
例2:【软件设计师2004年5月真题】
试题一(15分)
阅读下列说明和数据流图,回答问题1至问题3,将解答填入答题纸的对应栏内。
[说明]
某图书馆管理系统的主要功能是图书管理和信息查询。对于初次借书的读者,系统自动生成读者号,并与读者基本信息(姓名、单位、地址等)一起写入读者文件。
系统的图书管理功能分为四个方面:购入新书、读者借书、读者还书以及图书注销。
1. 购入新书时需要为该书编制入库单。入库单内容包括图书分类目录号、书名、作者、价格、数量和购书日期,将这些信息写入图书目录文件并修改文件中的库存总量(表示到目前为止,购入此种图书的数量)。
2. 读者借书时需填写借书单。借书单内容包括读者号和所借图书分类目录号。系统首先检查该读者号是否有效,若无效,则拒绝借书;若有效,则进一步检查该读者已借图书是否超过最大限制数(假设每位读者能同时借阅的书不超过5本),若已达到最大限制数,则拒绝借书;否则允许借书,同时将图书分类目录号、读者号和借阅日期等信息写入借书文件中。
3. 读者还书时需填写还书单。系统根据读者号和图书分类目录号,从借书文件中读出与该图书相关的借阅记录,标明还书日期,再写回到借书文件中,若图书逾期,则处以相应的罚款。
4. 注销图书时,需填写注销单并修改图书目录文件中的库存总量。
系统的信息查询功能主要包括读者信息查询和图书信息查询。其中读者信息查询可得到读者的基本信息以及读者借阅图书的情况;图书信息查询可得到图书基本信息和图书的借出情况。
图书管理系统的顶层图如图1-1所示;图书管理系统的第0层DFD图如图1-2所示,其中加工2的细图如图1-3所示。
【数据流图1-1】
[问题1](2分)
数据流图1-2中有两条数据流是错误的,请指出这两条数据流的起点和终点。
[问题2](6分)
数据流图1-3中缺少三条数据流,请指出这三条数据流的起点和终点。
[问题3](7分)
根据系统功能和数据流图填充下列数据字典条目中的(1)和(2):
查询请求信息=[查询读者请求信息|查询图书请求信息]
读者情况=读者号+姓名+所在单位+{借书情况}
管理工作请求单= (1)
入库单= (2)
试题分析:
本题是一道分层数据流图的题目。解答此类问题最关键的一点就是要细心,把题目看清,不要丢掉任何一个条件。另外解题有一定的技巧’,从一些常规的人口作为突破口,会事半功倍。现在就利用分层数据流图的数据流的平衡原则(即父图和子图(加工图)的一致性)来解题。
子图是其父图中某一部分内部的细节图(加工图)。它们的输入输出数据流应该保持一致。如同看到地上有只蚂蚁有6条细细的腿,中间是一个小黑点,要看得更清楚一些就拿放大镜看。这时能看到它的头、触角、身体和比较粗的腿,但是看到的一定还是6条腿,不是?条,也不是3条。子图也是如此,在上一级中有几个数据流,它的子图也一定有同样的数据流,而且它们的输送方向是一致的(也就是说原图有3条进的数据流,2条出的数据流,子图同样也是)。