部分课后作业讲解
Table of Contents
1. 习题3.4
请根据以下描述画出某库存管理系统的数据流图。 该系统的数据流描述如下:
- 根据 计划部门 转来的 收货通知单 和已存在的 物资编码文件 ,建立物资采购单流水账。
- 根据 技术部门 的 物资验收报告 和 物资采购单流水账 ,更新 物资台账文件 。
- 对物资台账分类汇总,将结果存储与 物资总账文件 中。
- 物资出库: 物资使用部门 填写 物资出库单 ,包括 物资编号、物资名称、物资数量、物资使用部分、负责人、经手人。 系统根据物资总账文件的库存情况判断是否能够出库, 如果能够出库,则记录出库单,并更新物资总账文件。
1.1. 外部实体
- 计划部门
- 技术部门
- 物资使用部门
1.2. 输入数据
1.3. 输出数据
1.4. 数据流图
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%% flowchart TB style D1 stroke-dasharray: 170.0 40 style D1 fill: none style D2 stroke-dasharray: 179.5 40 style D2 fill: none style D3 stroke-dasharray: 147.5 40 style D3 fill: none style D4 stroke-dasharray: 147.5 40 style D4 fill: none style D5 stroke-dasharray: 147.5 40 style D5 fill: none D1["D1 | 物资编码文件"] D2["D2 | 物资采购单流水账"] D3["D3 | 物资台账文件"] D4["D4 | 物资总账文件"] D5["D5 | 物资出库记录"] P1(["P1 | 建立采购单"]) P2(["P2 | 更新台账"]) P3(["P3 | 分类汇总"]) P4(["P4 | 处理出库"]) E1["计划部门"] E2["技术部门"] E3["物资使用部门"] E1 --> |"收货通知单"| P1 D1 --> |"物资编码"| P1 P1 --> |"采购信息"| D2 D2 --> |"采购信息"| P2 E2 --> |"物资验收报告"| P2 P2 --> |"物资信息"| D3 --> |"物资信息"| P3 --> |"物资总账"| D4 E3 --> |"物资出库单"| P4 P4 --> |"出库物资信息"| D4 D4 --> |"库存情况"| P4 P4 --> |"物资出库单"| D5
2. 习题3.6
一家书店计划开发图书管理系统对书店的业务进行管理, 以提高管理人员及书店工作人员的工作效率,并方便顾客对图书进行检索。 针对以下书店管理系统的基本功能需求建立需求分析模型,包括数据流图(至少画出两层)和ER图。
- 采购管理:实现与供货商的图书采购、退货及结算管理,提供月统计报表及任意时间段的统计报表。
- 图书信息管理:记录每种图书的信息(包括ISBN号、书名、作者、出版社、出版日期、单价、版次、印次等)、 折扣及库存量,并提供简单的图书查询功能。
- 销售管理:实现图书销售功能,记录顾客购买的图书种类、数量,计算总价,打印销售小票,并付款。 提供日/月统计报表及任意时间段的统计报表。
- 用户管理:提供用户组(角色)及用户管理功能。
2.1. 外部实体
- 供货商
- 管理人员
- 工作人员
- 顾客
2.2. 数据流图
2.2.1. 环境图
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%% flowchart TB S(["书店管理系统"]) E1["供货商"] E2["顾客"] E3["管理人员"] E4["工作人员"] E1_["供货商"] E2_["顾客"] E3_["管理人员"] E4_["工作人员"] E1 --> |"事务"| S E2 --> |"事务"| S E3 --> |"事务"| S E4 --> |"事务"| S S --> |"采购单、退货单、结算单"| E1_ S --> |"图书查询结果"| E2_ S --> |"销售小票"| E2_ S --> |"月统计报表及<br>任意时间段的统计报表"| E3_ S --> |"日/月统计报表及<br>任意时间段的统计报表"| E3_ S --> |"用户组(角色)信息"| E3_ S --> |"图书查询结果"| E4_
2.2.2. 第一层
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%% flowchart TB P1(["接收事务"]) P2(["采购管理"]) P4(["销售管理"]) P3(["图书信息管理"]) P5(["用户管理"]) E1["供货商"] E2["顾客"] E3["管理人员"] E4["工作人员"] E1_["供货商"] E2_["顾客"] E3_["管理人员"] E4_["工作人员"] E1 --> |"事务"| P1 E2 --> |"事务"| P1 E3 --> |"事务"| P1 E4 --> |"事务"| P1 P1 --> |"采购、退货、结算业务"| P2 P1 --> |"采购报表业务"| P2 P2 --> |"采购单、退货单、结算单"| E1_ P1 --> |"图书查询业务"| P3 P1 --> |"信息记录业务"| P3 P1 --> |"销售报表业务"| P4 P1 --> |"用户管理业务"| P5 P2 --> |"月统计报表及<br>任意时间段的统计报表"| E3_ P3 --> |"图书查询结果"| E2_ P4 --> |"销售小票"| E2_ E2_ --> |"支付事务"| P4 P4 --> |"日/月统计报表及<br>任意时间段的统计报表"| E3_ P5 --> |"用户组(角色)信息"| E3_ P3 --> |"图书查询结果"| E4_ E4_ --> |"图书种类、<br>数量"| P4
2.2.3. 第二层
- 采购管理
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%% flowchart TB style O1 stroke: none style O1 fill: none style O2 stroke: none style O2 fill: none style O3 stroke: none style O3 fill: none style D1 stroke-dasharray: 147.5 40 style D1 fill: none style D2 stroke-dasharray: 147.5 40 style D2 fill: none O1[" "] --> |"采购业务"| P1(["处理采购"]) O1[" "] --> |"退货业务"| P2(["处理退货"]) O1[" "] --> |"结算业务"| P3(["处理结算"]) O1[" "] --> |"采购报表业务"| P4(["生成采购报表"]) D2 --> P4 --> |"月统计报表及<br>任意时间段的统计报表"| O2[" "] D1["D1 | 图书信息记录"] D2["D2 | 图书采购记录"] D1 --> P1 P1 --> D2 D2 --> P2 P2 --> D2 D1 --> P3 D2 --> P3 P1 --> |"采购信息"| P11(["打印采购单"]) P2 --> |"退货信息"| P12(["打印退货单"]) P3 --> |"结算信息"| P13(["打印结算单"]) P11 --> |"采购单"| O3[" "] P12 --> |"退货单"| O3[" "] P13 --> |"结算单"| O3[" "]
- 图书信息管理
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%% flowchart TB style O1 stroke: none style O1 fill: none style O2 stroke: none style O2 fill: none style O3 stroke: none style O3 fill: none style D1 stroke-dasharray: 147.5 40 style D1 fill: none O1[" "] --> |"图书查询业务"| P1(["查询图书"]) O1[" "] --> |"信息记录业务"| P2(["记录图书信息"]) D1["D1 | 图书信息记录"] P2 --> |"图书信息"| D1 D1 --> |"图书信息"| P1 P1 --> |"图书查询结果"| O2[" "] P1 --> |"图书查询结果"| O3[" "]
- 销售管理
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%% flowchart TB style O1 stroke: none style O1 fill: none style O2 stroke: none style O2 fill: none style O3 stroke: none style O3 fill: none style O4 stroke: none style O4 fill: none style O5 stroke: none style O5 fill: none style D1 stroke-dasharray: 147.5 40 style D1 fill: none style D3 stroke-dasharray: 147.5 40 style D3 fill: none O1[" "] --> |"销售报表业务"| P1(["生成销售报表"]) O2[" "] --> |"支付事务"| P2(["处理支付"]) P2 --> |"图书种类、<br>数量"| P3(["计算总价"]) P3 --> |"图书种类、<br>数量、总价"| P4(["打印销售小票"]) O3[" "] --> |"图书种类、<br>数量"| P2 D1["D1 | 图书信息记录"] D3["D3 | 图书销售记录"] D1 --> |"图书信息"| P2 P2 --> |"销售信息"| D3 D3 --> |"销售信息"| P1 P1 --> |"日/月统计报表及<br>任意时间段的统计报表"| O4[" "] P4 --> |"销售小票"| O5[" "]
2.3. ER图
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%% erDiagram Purchase-order { string orderID string isbn float price int quantity date orderDate } Return-order { string orderID string isbn float price int quantity date orderDate } Bill { string billID float amount int quantity date billDate } Worker { string workerID string firstName string lastName int age } Book { string isbn string bookTitle string author string publisher date publicationDate float price int version int printTimes float discount int stock } Receipt { string receiptID string isbn string quantity string amount } Supplier ||--|{ Purchase-order : "receives" Supplier ||--|{ Return-order : "receives" Worker ||--|{ Purchase-order : "places" Worker ||--|{ Return-order : "places" Supplier ||--|{ Bill : "requires" Customer ||--|{ Receipt : "receives" Manager ||--|{ Worker : "employs" Worker }|--|{ Customer : "services" Purchase-order }|--|{ Book : "contains" Return-order }|--|{ Book : "contains" Receipt }|--|{ Book : "contains"
3. 习题4.7
用面向数据流的方法设计第3章习题3.6所描述的图书管理系统的软件结构 , 并尽量使用改进方法对模块结构进行精化。
3.1. 对数据流图进行复查并精化
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%% flowchart TB E1["供货商"] E2["顾客"] E3["管理人员"] E4["工作人员"] S(["接收事务"]) style AD1 stroke-dasharray: 147.5 40 style AD1 fill: none style AD2 stroke-dasharray: 147.5 40 style AD2 fill: none S --> |"采购业务"| AP1(["处理采购"]) S --> |"退货业务"| AP2(["处理退货"]) S --> |"结算业务"| AP3(["处理结算"]) S --> |"采购报表业务"| AP4(["生成采购报表"]) AD2 --> AP4 --> |"月统计报表及<br>任意时间段的统计报表"| E3 AD1["D1 | 图书信息记录"] AD2["D2 | 图书采购记录"] AD1 --> AP1 AP1 --> AD2 AD2 --> AP2 AP2 --> AD2 AD1 --> AP3 AD2 --> AP3 AP1 --> |"采购信息"| AP11(["打印采购单"]) AP2 --> |"退货信息"| AP12(["打印退货单"]) AP3 --> |"结算信息"| AP13(["打印结算单"]) AP11 --> |"采购单"| E1 AP12 --> |"退货单"| E1 AP13 --> |"结算单"| E1 style BD1 stroke-dasharray: 147.5 40 style BD1 fill: none S --> |"图书查询业务"| BP1(["查询图书"]) S --> |"信息记录业务"| BP2(["记录图书信息"]) BD1["D1 | 图书信息记录"] BP2 --> |"图书信息"| BD1 BD1 --> |"图书信息"| BP1 BP1 --> |"图书查询结果"| E2 BP1 --> |"图书查询结果"| E4 style CD1 stroke-dasharray: 147.5 40 style CD1 fill: none style CD3 stroke-dasharray: 147.5 40 style CD3 fill: none S --> |"销售报表业务"| CP1(["生成销售报表"]) S --> |"支付事务"| CP2(["处理支付"]) CP2 --> |"图书种类、<br>数量"| CP3(["计算总价"]) CP3 --> |"图书种类、<br>数量、总价"| CP4(["打印销售小票"]) E4 --> |"图书种类、<br>数量"| CP2 CD1["D1 | 图书信息记录"] CD3["D3 | 图书销售记录"] CD1 --> |"图书信息"| CP2 CP2 --> |"销售信息"| CD3 CD3 --> |"销售信息"| CP1 CP1 --> |"日/月统计报表及<br>任意时间段的统计报表"| E3 CP4 --> |"销售小票"| E2 S --> |"用户管理业务"| DP1(["生成用户信息"]) DP1 --> |"用户组(角色)信息"| E3
3.2. 完成第一级分解
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%% flowchart L0["图书管理系统"] L1["输入数据"] L2["调度"] L3["输出数据"] L0 --- L1 L0 --- L2 L0 --- L3
3.3. 完成第二级分解
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%% flowchart L0["图书管理系统"] L1["输入数据"] L11["输入图书<br>种类、数量"] L2["调度"] L21["管理采购"] L22["管理图书信息"] L23["管理销售"] L24["管理用户"] L211["处理<br>采购"] L212["处理<br>退货"] L213["处理<br>结算"] L214["生成<br>采购<br>报表"] L231["处理<br>支付"] L2311["计算<br>总价"] L232["生成<br>销售<br>报表"] L241["生成<br>用户<br>信息"] L221["查询<br>图书"] L222["记录<br>图书<br>信息"] L3["输出数据"] L31["打印<br>采购单"] L32["打印<br>退货单"] L33["打印<br>结算单"] L34["打印<br>销售<br>小票"] L0 --- L1 L0 --- L2 L0 --- L3 L1 --- L11 L2 --- L21 L21 --- L211 L21 --- L212 L21 --- L213 L21 --- L214 L2 --- L22 L22 --- L221 L22 --- L222 L2 --- L23 L23 --- L231 L231 --- L2311 L23 --- L232 L2 --- L24 L24 --- L241 L3 --- L31 L3 --- L32 L3 --- L33 L3 --- L34
3.4. 精化
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%% flowchart L0["图书管理系统"] L1["输入事务"] L21["管理采购"] L22["管理图书信息"] L23["管理销售"] L24["管理用户"] L211["处理<br>采购"] L212["处理<br>退货"] L213["处理<br>结算"] L214["生成<br>采购<br>报表"] L231["处理<br>支付"] L2311["输入图书<br>种类、数量"] L2312["计算<br>总价"] L232["生成<br>销售<br>报表"] L241["生成<br>用户<br>信息"] L221["查询<br>图书"] L222["记录<br>图书<br>信息"] L31["打印<br>采购单"] L32["打印<br>退货单"] L33["打印<br>结算单"] L34["打印<br>销售<br>小票"] L0 --- L1 L0 --- L21 L0 --- L22 L0 --- L23 L0 --- L24 L21 --- L211 --- L31 L21 --- L212 --- L32 L21 --- L213 --- L33 L21 --- L214 L22 --- L221 L22 --- L222 L23 --- L231 L231 --- L2311 L231 --- L2312 L231 --- L34 L23 --- L232 L24 --- L241