logo
0
1
WeChat Login
新增 README.md 文件,描述学生体育锻炼次数统计系统的目标、用户角色模型、组织结构及相关规则

学生体育锻炼次数统计系统

1. 系统目标

基于 Django 构建学生体育锻炼统计系统,用于:

  • 记录学生通过 组织活动自行训练 获得的锻炼次数
  • 学期 汇总,并应用奖励与上限规则
  • 支持多角色审核、复核、确认
  • 提供完整可追溯的明细数据与导出能力

2. 用户与角色模型

2.1 Django User 统一原则

所有参与系统操作的主体,均必须是 Django User

包括但不限于:

  • 学生
  • 老师
  • 组织管理员
  • 组织指导老师
  • 临时志愿者
  • 外部志愿者
  • 行政人员

2.2 角色定义与职责

角色职责
学生加入组织、参加活动签到、提交自行训练
组织指导老师指派 / 解除 组织管理员
组织管理员管理组织、活动、审核自行训练、补签
临时志愿者仅在活动级别生效,执行签到扫描
体育课教师对体育课班级学生进行课程级别最终复核
行政学院教务秘书查看学院学生统计
行政班级班主任查看班级学生统计
超级管理员系统配置、学期、基础数据

3. 学生与组织结构

3.1 学生(Student)

字段:

  • 学号(唯一)
  • 姓名
  • 入学年份(int)
  • 行政学院(1)
  • 行政班级(1)
  • 体育课班级(每学期仅 1 个
  • 加入的组织(多对多)

约束:

  • 所有学生均视为在读
  • 不允许学生退出组织

3.2 行政学院(College)

字段:

  • 学院名称
  • 教务秘书(1 人,Django User)
  • 上级学院(可选)

规则:

  • 最多嵌套 1 层

    • 例如:金融学院 → 人文学院
  • 教务秘书唯一

3.3 行政班级(AdminClass)

字段:

  • 班级名称
  • 所属学院
  • 班主任(1 人,Django User)

规则:

  • superuser 创建
  • 不存在跨学院班级

3.4 体育课班级(PEClass)

字段:

  • 体育教师(1 人)
  • 上课时间(字符串,如 周一 0102节
  • 课程内容(字符串)
  • 学期(1)
  • 学生列表

规则:

  • 一个学生一个学期 仅有一个体育课班级
  • 体育课 不直接产生锻炼次数

4. 体育运动组织(Organization)

字段:

  • 组织名称
  • 组织别名(ASCII,unique,用于 URL)
  • 组织管理员(多,Django User)
  • 指导老师(1 人)
  • 成员学生(多)

规则:

  • 指导老师可指派组织管理员
  • 组织类型不影响计次,不单独建模

5. 学期管理(Semester)

字段:

  • 学期名称
  • 开始日期
  • 结束日期

规则:

  • 每年两个学期
  • 允许修改已开始学期的时间
  • 不允许跨学期活动
  • 可能存在“假期”

5.1 假期规则

  • 假期内:

    • 可创建活动
    • 可提交自行训练
    • 组织管理员仍需审核
  • 假期内记录不计入最终锻炼次数统计

6. 活动系统(Activity)

6.1 活动基础信息

字段:

  • 活动名称
  • 所属组织
  • 学期
  • 开始时间
  • 结束时间
  • 活动倍率(非负整数,可为 0)
  • 活动图片集(相册)

规则:

  • 仅学期内活动计入期末统计
  • 单用户单活动 仅可签到 1 次

6.2 活动相册

  • 活动可上传多张图片
  • 图片由 Apache2 提供静态访问
  • 相册视图必须登录 Django 后才能访问
  • 访问角色:任意已登录用户

6.3 签到与二维码机制

二维码生成

  • 学生访问路由获取 动态身份二维码
  • 有效期:30 秒
  • 使用 TOTP-like + HMAC
  • 不可预测、防重放

签到执行者

  • 组织管理员
  • 活动级临时志愿者(Django User) 活动签到是否需要记录“签到人”(志愿者 / 管理员),用于审计责任

补签

  • 组织管理员可手动添加签到记录

7. 自行训练记录(SelfTraining)

7.1 提交方式

  • URL 中必须包含 目标组织

  • 字段:

    • 运动日期(date)
    • 照片(多张)
    • 锻炼次数倍率(可编辑)
    • 运动指标 JSON(预留)
    • 使用的 JSON 模板(可选)
  • 不考虑跨天训练

7.2 约束规则

  • 同一:

    • 学生
    • 组织
    • 运动日期
  • 最多 1 条记录

  • 可修改后重新提交

7.3 审核机制

  • 组织管理员审核:

    • 通过 / 拒绝
    • 可修改倍率
    • 填写审核意见
  • 状态:

    • 待审核
    • 已通过
    • 已拒绝

8. 运动指标 JSON 模板(预留)

8.1 模板定义

  • 所属组织
  • 模板名称
  • 模板别名(ASCII,用于 URL)
  • JSON Schema(预留)

规则:

  • 同一组织允许多个模板
  • 后期前端使用 JS 动态生成表单

9. 统计与汇总规则(明确版)

9.1 数据来源

  • 活动签到 × 活动倍率
  • 审核通过的自行训练 × 记录倍率

9.2 奖励规则

  • 若学生:

    • 加入 ≥1 个组织
    • 且该组织 ≥1 次有效锻炼
  • 奖励 +20 次

  • 奖励:

    • 只发 1 次
    • 计入 52 上限

9.3 上限规则

  • 学期最终统计:

    • 超过 52 → 截断为 52

10. 确认与可见性流程

10.1 体育课教师确认(关键流程)

  • 条件:

    • 学期结束
    • 体育课所有学生 无“待审核”自行训练记录
  • 操作:

    • 对体育课班级执行一次性:

      • “确认本班全部数据”
      • 确认即冻结, 不可反悔
  • 若存在问题:

    • 体育老师联系组织管理员修改审核状态

10.2 数据可见性

  • 体育老师确认前:

    • 所有角色均可查看数据

    • 状态显示:

      “待 {体育老师姓名} 确认”

11. 行政管理与导出

  • 教务秘书 / 班主任:

    • 查看学期汇总 + 明细
    • 允许导出 Excel / PDF
    • 禁止修改数据

12. 非功能性需求(确认)

  • 权限控制:RBAC
  • 审计日志(审核、确认、补签)
  • 防重复签到
  • 并发安全
  • 图片对象存储可后续扩展