部分课后作业讲解

Table of Contents

1. 习题3.4

请根据以下描述画出某库存管理系统的数据流图。 该系统的数据流描述如下:

  1. 根据 计划部门 转来的 收货通知单 和已存在的 物资编码文件 ,建立物资采购单流水账。
  2. 根据 技术部门物资验收报告物资采购单流水账 ,更新 物资台账文件
  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

1.svg

2. 习题3.6

一家书店计划开发图书管理系统对书店的业务进行管理, 以提高管理人员及书店工作人员的工作效率,并方便顾客对图书进行检索。 针对以下书店管理系统的基本功能需求建立需求分析模型,包括数据流图(至少画出两层)和ER图。

  1. 采购管理:实现与供货商的图书采购、退货及结算管理,提供月统计报表及任意时间段的统计报表。
  2. 图书信息管理:记录每种图书的信息(包括ISBN号、书名、作者、出版社、出版日期、单价、版次、印次等)、 折扣及库存量,并提供简单的图书查询功能。
  3. 销售管理:实现图书销售功能,记录顾客购买的图书种类、数量,计算总价,打印销售小票,并付款。 提供日/月统计报表及任意时间段的统计报表。
  4. 用户管理:提供用户组(角色)及用户管理功能。

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-1.svg

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.svg

2.2.3. 第二层

  1. 采购管理

    %%{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[" "]
    

    2-3.svg

  2. 图书信息管理

    %%{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[" "]
    

    2-4.svg

  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 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-5.svg

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"

2-6.svg

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

4-1.svg

3.2. 完成第一级分解

%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%%
flowchart
    L0["图书管理系统"]
    L1["输入数据"]
    L2["调度"]
    L3["输出数据"]
    L0 --- L1
    L0 --- L2
    L0 --- L3

4-2.svg

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

4-3.svg

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

4-4.svg

Author: Xin Li

Created: 2023-03-27 Mon 14:19

Validate