Files
Student_Management_System/README.md
T
2026-09-19 17:06:00 +08:00

264 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 江山代有人才秃 - 干就完了
# master : 最终合并版本
# 每个人创建自己的分支
1. 每个表里都要有创建时间、更新时间、逻辑删除字段
好嘞,这份需求文档我帮你梳理清楚 + 出技术文档 + 拆6人分工,直接能拿去团队开会用。
一、需求整理(去冗余、补逻辑)
核心实体关系(ER 简版)
班级(1) ────< (n)学生(n) ────< (n)成绩
老师(1) ────< (n)班级 │
顾问(1) ────< (n)学生 │
学生(1) ────< (n)就业信息 ─────────┘
各模块功能清单(整理后)
模块 功能点 说明
学生管理 CRUD + 逻辑删除 学号唯一;顾问编号关联老师表
成绩管理 按序次录入/改/删 一个学生一次考核一条记录
就业管理 CRUD + 查询(公司/薪资范围) 冗余姓名字段,查询时同步更新
班级管理 CRUD 班主任、授课老师关联老师表
老师管理 CRUD 含带班信息
统计分析 6个统计接口 见需求2.6
关键设计决策
1. 冗余字段处理:就业表里 学生姓名、学生班级 冗余 → 写入时从学生表拷贝,更新学生信息时同步更新就业表(或查询时JOIN,看你选哪种,建议写入时拷贝减少JOIN)
2. 逻辑删除:学生表加 deleted_at 字段,查询默认过滤
3. 成绩"每次考试":按 考核序次 分组,序次=1,2,3...代表第几次考核
4. 就业时长计算:offer下发时间 - 就业开放时间,单位天
二、技术文档
技术栈(基于你现有依赖)
层次 技术
Web框架 FastAPI 0.128.0
服务器 Uvicorn
ORM SQLAlchemy 2.0.49
数据库 MySQL(PyMySQL / aiomysql 异步驱动)
数据校验 Pydantic 2.13.3
认证 python-jose + passlib(JWT,可选)
迁移 Alembic 1.18.5
AI辅助 ollama / openai(需求里有,可用于啥?)
项目目录结构
student_management/
├── main.py # 入口
├── config.py # 配置(数据库URL、密钥等)
├── database.py # 数据库连接、Session管理
├── models/ # SQLAlchemy 模型(表结构)
│ ├── __init__.py
│ ├── student.py
│ ├── class_info.py
│ ├── teacher.py
│ ├── score.py
│ └── employment.py
├── schemas/ # Pydantic 请求/响应模型
│ ├── __init__.py
│ ├── student.py
│ ├── class_info.py
│ ├── teacher.py
│ ├── score.py
│ └── employment.py
├── crud/ # 数据库操作层(增删改查)
│ ├── __init__.py
│ ├── student.py
│ ├── class_info.py
│ ├── teacher.py
│ ├── score.py
│ └── employment.py
├── api/ # 路由层(接口定义)
│ ├── __init__.py
│ ├── student.py
│ ├── class_info.py
│ ├── teacher.py
│ ├── score.py
│ ├── employment.py
│ └── stats.py # 统计分析接口
├── services/ # 业务逻辑层(复杂计算放这)
│ ├── __init__.py
│ └── stats_service.py
├── utils/ # 工具函数
│ ├── __init__.py
│ └── dependencies.py # 依赖注入(如get_db)
├── alembic/ # 数据库迁移
│ └── versions/
├── requirements.txt
├── .env # 环境变量(不提交git)
├── .env.example # 环境变量模板
└── README.md
分层架构
┌─────────────────────────────────────────┐
│ API 路由层 (api/) │ ← 接收请求、参数校验、返回JSON
├─────────────────────────────────────────┤
│ 业务逻辑层 (services/) │ ← 复杂统计、事务编排
├─────────────────────────────────────────┤
│ CRUD操作层 (crud/) │ ← 纯数据库读写
├─────────────────────────────────────────┤
│ ORM模型层 (models/) + Schemas │ ← 表结构 + 数据校验
├─────────────────────────────────────────┤
│ 数据库 (MySQL) │
└─────────────────────────────────────────┘
数据库表结构(核心字段)
-- 老师表
teacher: id, name, phone, email, created_at
-- 班级表
class: id, class_code, start_date, head_teacher_id(FK), instructor_id(FK)
-- 学生表
student: id, student_no, class_id(FK), name, hometown, school, major,
enroll_date, graduate_date, education, advisor_id(FK), age,
gender, deleted_at
-- 成绩表
score: id, student_id(FK), exam_sequence, score, created_at
-- 就业表
employment: id, student_id(FK), student_name(冗余), class_name(冗余),
employment_open_date, offer_date, company_name, salary,
created_at, updated_at
API 接口清单
模块 方法 路径 说明
学生 POST /api/students/ 创建
学生 GET /api/students/ 列表(支持筛选)
学生 GET /api/students/{id} 详情
学生 PUT /api/students/{id} 更新
学生 DELETE /api/students/{id} 逻辑删除
成绩 POST /api/scores/ 录入
成绩 PUT /api/scores/{id} 修改
成绩 DELETE /api/scores/{id} 删除
就业 POST /api/employments/ 记录
就业 GET /api/employments/ 查询(公司/薪资范围)
就业 PUT /api/employments/{id} 修改
就业 DELETE /api/employments/{id} 删除
班级 CRUD /api/classes/ 同上
老师 CRUD /api/teachers/ 同上
统计 GET /api/stats/students/over-30 超30岁学员
统计 GET /api/stats/classes/population 班级人数/性别分布
统计 GET /api/stats/scores/excellent 每次都80+
统计 GET /api/stats/scores/failed-2plus 两次以上不及格
统计 GET /api/stats/scores/class-average 班级平均分排序
统计 GET /api/stats/employment/top-salary 薪资Top5
统计 GET /api/stats/employment/duration 就业时长统计
三、6人分工方案
推荐分工(按模块+层次交叉)
成员 职责 具体任务
A(组长/架构) 项目初始化 + 学生模块 + 整体协调 搭项目骨架、config/database/base、学生CRUD、统筹进度、合并代码
B 班级模块 + 老师模块 班级&老师 models/schemas/crud/api 全套,老师带班关联
C 成绩模块 + 统计分析(成绩部分) 成绩录入/修改/删除 + 3个成绩统计接口(优秀/不及格/平均分)
D 就业模块 + 统计分析(就业部分) 就业CRUD + 冗余字段同步 + 3个就业统计接口(Top5/时长/班级平均)
E 学生模块补充 + 统计分析(基本信息) 学生筛选/逻辑删除/更新同步 + 超30岁/班级人数统计 + 前端对接(如果有人做前端)
F 数据库迁移 + 测试 + 文档 Alembic迁移脚本、接口测试(Postman/curl)、README、API文档核对
开发顺序(时间线建议)
第1天:A搭骨架 → 全员 clone → 各自建分支
第2-3天:A/B/D 并行做 models + schemas + crud
第4-5天:C/D/E 并行做 api 路由 + 业务逻辑
第6天:F 写迁移 + 联调测试
第7天:全员修bug + 补充统计接口边界情况
Git 协作规范
# 每人基于 main 建自己的分支
git checkout -b feature/student-module # A
git checkout -b feature/class-teacher # B
git checkout -b feature/score # C
git checkout -b feature/employment # D
git checkout -b feature/stats-basic # E
git checkout -b feature/migration-test # F
# 每天下班前 push,组长 review 后 merge
关键约定(团队必须遵守)
1. 分支命名:feature/模块名、fix/问题描述
2. commit规范:feat: 添加学生逻辑删除、fix: 成绩录入校验
3. 接口统一返回格式:
{
"code": 200,
"message": "success",
"data": {...}
}
4. 所有查询接口必须加分页参数:?page=1&size=10
5. 数据库操作全部走 crud 层,api 层不直接写 SQL
6. 统计接口复杂查询放 services 层,crud 只做简单读写
四、给你的额外建议
1. 今天就能做的事:A(组长)按上面的目录结构建好项目,pip install -r requirements.txt 跑通,push 到 Git,其他人 clone 下来直接开干。
2. AI依赖(ollama/openai):需求里没说怎么用,如果老师要求用 AI 功能,可以加一个"智能查询"接口——用自然语言问"帮我找一下Java班成绩最好的学生",后端调 AI 转成 SQL 执行。
3. 冗余字段同步:学生改了姓名/班级,就业表的冗余字段要跟着改,这个逻辑放 crud/student.py 的 update 方法里,记得提醒 D 同学配合。
需要我帮你把某个模块(比如学生管理)的 models + schemas + crud + api 完整代码骨架 写出来,你们直接往里填逻辑吗?