视频加载失败

课程

返回 软件工程 归档
4735 字
约 14 分钟

结构化需求分析

软件工程exercises/xuexitong-ai-practice·更新于 2026-09-15

结构化需求分析

1. 系统概述

本教务管理系统旨在覆盖高校教务管理的四个主要阶段:

  1. 学期前:教师提交开课申请,学生进行选课,系统生成教师和学生课表。
  2. 学期中:处理教师的调课和停课申请,并更新课表。
  3. 期末:安排考试及监考,进行成绩录入与管理。
  4. 学期结束:统计成绩,计算绩点与排名,评定奖学金。

2. 数据流图 (DFD)

2.1 顶层图 (Context Diagram)

系统与外部实体(学生、教师、教务处)的交互。

graph TD
    %% 外部实体
    E1[学生]
    E2[教师]
    E3[教务处]

    %% 系统
    P(教务管理系统)

    %% E1 学生交互
    E1 -- 选课请求 --> P
    P -- 学生课表 --> E1
    E1 -- 成绩查询请求 --> P
    P -- 成绩单 --> E1
    P -- 奖学金通知 --> E1

    %% E2 教师交互
    E2 -- 开课申请 --> P
    P -- 教师课表 --> E2
    E2 -- 调停课申请 --> P
    E2 -- 提交成绩 --> P
    P -- 监考安排 --> E2

    %% E3 教务处交互
    E3 -- 审核结果(开课/调停) --> P
    P -- 全校课表 --> E3
    P -- 考试安排表 --> E3
    P -- 成绩统计报告 --> E3
    P -- 绩点排名表 --> E3

2.2 0层图 (Level 0 DFD)

系统核心业务流程的分解。

graph TD
    %% 外部实体
    E1[学生]
    E2[教师]
    E3[教务处]

    %% 核心处理过程
    P1(P1 开课管理)
    P2(P2 选课管理)
    P3(P3 调停课管理)
    P4(P4 考务与成绩管理)
    P5(P5 统计与评优)

    %% 数据存储
    D1[("D1 课程及开课信息库")]
    D2[("D2 学生信息库")]
    D3[("D3 课表信息库")]
    D4[("D4 选课记录")]
    D5[("D5 成绩库")]
    D6[("D6 统计报告库")]
    D7[("D7 考试安排表")]
    %% 响应反馈: "补充D4.1考试安排表在0层图中的定义" -> D7

    %% P1 开课管理
    E2 -- 开课申请 --> P1
    E3 -- 审核开课 --> P1
    P1 -- 课程信息 --> D1

    %% P2 选课管理
    E1 -- 选课请求 --> P2
    D1 -- 读取可选课程 --> P2
    D2 -- 读取学生信息 --> P2
    P2 -- 选课结果 --> D4
    P2 -- 生成课表 --> D3
    D3 -- 学生课表 --> E1
    D3 -- 教师课表 --> E2
    D3 -- 全校课表 --> E3

    %% P3 调停课管理
    E2 -- 调停课申请 --> P3
    E3 -- 审核调停课 --> P3
    D3 -- 读取原课表 --> P3
    P3 -- 更新课表 --> D3
    P3 -- 变更通知 --> E1
    P3 -- 变更通知 --> E2

    %% P4 考务与成绩管理
    D1 -- 课程信息 --> P4
    D4 -- 选课名单 --> P4
    P4 -- 考试及监考安排 --> D7
    D7 -- 考试安排 --> E3
    D7 -- 监考通知 --> E2
    E2 -- 提交成绩 --> P4
    P4 -- 录入成绩 --> D5
    E1 -- 成绩查询 --> P4
    D5 -- 成绩单 --> E1

    %% P5 统计与评优
    D5 -- 读取成绩 --> P5
    D2 -- 读取学生信息 --> P5
    P5 -- 生成统计数据 --> D6
    D6 -- 绩点排名表 --> E3
    D6 -- 奖学金名单 --> E3
    P5 -- 奖学金通知 --> E1

2.3 1层图 (Level 1 DFDs)

P1 开课管理

graph TD
    E2[教师]
    E3[教务处]
    D1[("D1 课程及开课信息库")]

    P1_1(1.1 接收开课申请)
    P1_2(1.2 审核申请)
    P1_3(1.3 更新课程库)

    E2 -- 开课申请单 --> P1_1
    P1_1 -- 待审申请 --> P1_2
    E3 -- 审核意见 --> P1_2
    P1_2 -- 审核通过的开课信息 --> P1_3
    P1_3 -- 存入 --> D1

P2 选课管理

graph TD
    E1[学生]
    D1[("D1 课程信息")]
    D2[("D2 学生信息")]
    D4[("D4 选课记录")]
    D3[("D3 课表信息")]

    P2_1(2.1 验证选课资格)
    P2_2(2.2 检查课程容量)
    P2_3(2.3 记录选课结果)
    P2_4(2.4 生成课表)

    E1 -- 选课请求 --> P2_1
    D2 -- 学生状态 --> P2_1
    P2_1 -- 有效请求 --> P2_2
    D1 -- 容量信息 --> P2_2
    P2_2 -- 选课成功 --> P2_3
    P2_3 -- 更新 --> D4
    P2_3 -- 更新已选人数 --> D1
    D4 -- 选课数据 --> P2_4
    P2_4 -- 生成 --> D3

P3 调停课管理

改进点:细化为接收、检测、审核、更新四个步骤。

graph TD
    E2[教师]
    E3[教务处]
    D3[("D3 课表信息库")]
    D_Temp[("D3.1 临时调课申请")]
    %% 增加临时存储以规范化流向

    P3_1(3.1 接收并校验申请)
    P3_2(3.2 冲突检测)
    P3_3(3.3 教务审核)
    P3_4(3.4 更新与通知)

    E2 -- 调停课申请 --> P3_1
    P3_1 -- 格式化申请 --> D_Temp
    D_Temp -- 读取申请 --> P3_2
    D3 -- 读取现有课表 --> P3_2
    P3_2 -- 无冲突申请 --> P3_3
    P3_2 -- 有冲突/拒绝 --> E2
    E3 -- 审核意见 --> P3_3
    P3_3 -- 审核通过 --> P3_4
    P3_4 -- 更新 --> D3
    P3_4 -- 变更通知 --> E2
    P3_4 -- 变更通知 --> E1

P4 考务与成绩管理

graph TD
    D1[("D1 课程信息")]
    D4[("D4 选课记录")]
    D7[("D7 考试安排表")]
    D5[("D5 成绩库")]
    E2[教师]

    P4_1(4.1 安排考试与监考)
    P4_2(4.2 成绩录入)

    D1 -- 课程性质 --> P4_1
    D4 -- 选课人数 --> P4_1
    P4_1 -- 生成安排 --> D7
    E2 -- 提交成绩单 --> P4_2
    P4_2 -- 写入 --> D5

P5 统计与评优 (原P6 学期总结)

graph TD
    D5[("D5 成绩库")]
    D2[("D2 学生信息")]
    D6[("D6 统计报告库")]
    E3[教务处]
    E1[学生]

    P5_1(5.1 计算平均绩点)
    P5_2(5.2 生成排名)
    P5_3(5.3 评定奖学金)

    D5 -- 原始成绩 --> P5_1
    P5_1 -- 绩点数据 --> P5_2
    D2 -- 学生专业信息 --> P5_2
    P5_2 -- 绩点排名 --> P5_3
    P5_2 -- 存入 --> D6
    P5_3 -- 奖学金名单 --> D6
    D6 -- 报表 --> E3
    D6 -- 获奖通知 --> E1

3. 数据字典

3.1 数据项 (Data Items)

定义数据的最小单位。

数据项名代码/别名类型长度取值范围/格式说明
学号StudentIDVarchar15入学年份(4)+学院(2)+专业(2)+班级(2)+序号(2)
例:202301010105
学生的唯一标识
教师工号TeacherIDVarchar10“T”+年份(4)+序号(5)教师的唯一标识
课程编号CourseIDVarchar8学院(2)+课类(2)+序号(4)课程的唯一标识
成绩ScoreDecimal(5,1)0.0 - 100.0课程最终成绩
学期SemesterVarchar11“202x-202y-1/2”标识学年与学期
绩点GPADecimal(3,2)0.00 - 5.00平均学分绩点
周次WeekInt-1-20上课周次
节次SectionInt-1-13上课节次
奖学金等级ScholarshipLvlChar1‘A’(一等), ‘B’(二等), ‘C’(三等)

3.2 数据结构 (Data Structures)

描述数据流或数据存储的逻辑组成。

  • 学生信息 = 学号 + 姓名 + 性别 + 学院代码 + 专业代码 + 班级 + 入学年份
  • 课程信息 = 课程编号 + 课程名称 + 学分 + 学时 + 开课学院 + 课程性质(必修/选修)
  • 开课申请单 = 教师工号 + 课程名称 + 建议时间(周次+星期+节次) + 建议教室类型 + 容量上限
  • 选课记录项 = 学号 + 课程编号 + 学期 + 选课时间 + 状态(已选/退选)
  • 课表项 = 课程编号 + 课程名称 + 教师姓名 + 教室 + 上课时间(周次/星期/节次)
  • 考试安排项 = 课程编号 + 考试时间 + 考试地点 + 监考教师工号 + 学生名单链接
  • 成绩单项 = 学号 + 课程编号 + 平时成绩 + 期末成绩 + 总评成绩 + 绩点
  • 奖学金记录 = 学年 + 学号 + 姓名 + 综合测评得分 + 绩点 + 排名 + 奖学金等级 + 金额

3.3 数据流 (Data Flows)

数据流名称来源去向组成
开课申请E2 教师P1.1 接收申请开课申请单
选课请求E1 学生P2.1 验证资格学号 + 课程编号 + 选课操作(选/退)
学生课表P2.4 生成课表E1 学生学号 + 学期 + {课表项}
调停课申请E2 教师P3.1 接收申请教师工号 + 课程编号 + 原时间 + 申请类型(调/停) + 拟调整时间 + 原因
变更通知P3.4 更新与通知E1/E2课程编号 + 变更说明 + 新时间
提交成绩单E2 教师P4.2 成绩录入课程编号 + {学号 + 总评成绩}
奖学金通知P5.3 评定奖学金E1 学生学号 + 姓名 + 奖学金等级

3.4 数据存储 (Data Stores)

编号名称组成关键字说明
D1课程及开课库{课程信息 + 开课状态 + 当前已选人数}课程编号包含基础课程信息及每学期的开课动态
D2学生信息库{学生信息}学号
D3课表信息库{学号/教师工号 + 课表项}学号/工号+学期逻辑上可视图化为学生课表和教师课表
D4选课记录表{选课记录项}学号+课程编号记录每一条选课操作
D5成绩库{成绩单项}学号+课程编号
D6统计报告库{绩点排名表 + 奖学金名单}学期+报表类型存放期末生成的静态快照数据
D7考试安排表{考试安排项}考试批次+课程编号记录考试时间地点及监考与考生对应关系

3.5 处理过程 (Processes) - 示例

  • P3.2 冲突检测

    • 输入: 调课申请(含拟调整时间), D3 课表信息(教室占用/教师时间/学生班级课表)
    • 逻辑:
      1. 检查拟调整时间段内,该教师是否已有课。
      2. 检查拟调整教室在该时间段是否空闲。
      3. (可选) 检查该班级学生主要时间段是否有必修课冲突。
    • 输出: 检测结果(通过/冲突详情)
  • P5.3 评定奖学金

    • 输入: 绩点排名(来自P5.2), 评奖规则(参数)
    • 逻辑:
      1. 读取全专业/全校绩点排名。
      2. 按比例(如前5%)划定一等奖学金。
      3. 按比例(如前5%-15%)划定二等奖学金。
      4. 生成奖学金名单。
    • 输出: 奖学金名单 -> D6, 通知 -> E1
Profile Image of the Author
Sonder
好想要技术
这是公告标题
这只是一个公告
分类
标签
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.7
文章许可
CC BY-NC-SA 4.0
文章目录