本系统采用 Python、Streamlit 搭配 openGauss 数据库搭建 B/S 学生综合管理平台,划分管理员、教师、学生三类独立权限角色。
- 项目名称:学生管理系统
- 开发用途:数据库课程大作业
- 技术栈
- 数据库:openGauss(Docker 本地部署)
- 后端:Python 3.9+
- 前端可视化:Streamlit
- 人脸识别:InsightFace + OpenCV
- 数据批量处理:Pandas
- 系统角色:系统管理员、教师/教务、学生
- 核心能力:账号权限管理、学生档案、课程管理、选课退课、成绩录入/批量导入、AI教学/学习分析、人脸登录、操作审计日志、成绩单导出
- 账号权限体系
- 三类角色隔离页面与操作权限
- 账号新增/批量导入/批量更新/删除、密码重置、账号启用禁用
- 人脸注册 + 人脸免密登录
- 学生管理(管理员专属完整CRUD)
- 单条新增、修改、删除学生档案
- Excel/CSV批量导入、批量更新、批量删除学生
- 模糊检索学生(姓名/学号/专业)
- 课程管理(教师专属)
- 课程新增、编辑、删除(有成绩课程不可删改)
- 自定义出勤/实验/考试成绩权重
- 按年级开放选课限制、课程容量控制
- 选课业务(学生专属)
- 查看本年级可选课程、已选课程
- 选课、退课(已有成绩课程不可退)
- 课程容量校验、年级选课限制校验
- 成绩管理(教师专属)
- 手动单条录入/修改分项成绩(出勤+实验+考试,自动加权计算总分)
- Excel/CSV批量导入成绩,进度条实时展示
- 成绩冲突、学号姓名、课程名称自动校验
- AI智能分析模块
- 学生端AI学习报告:学情总结、7天学习计划、薄弱课程提升方案
- 教师端AI教学方案:班级/单学生学情诊断、课堂辅导策略
- 配套辅助功能
- 个人信息修改、自助人脸密码修改
- 带电子公章官方成绩单HTML导出
- 全局操作审计日志(分页、多条件筛选、清空/单条删除日志)
- 全表模糊查询、多表关联SQL查询(满足课程作业要求)
student_management_system/
├─ app.py # 程序入口、登录页、角色路由、人脸登录入口
├─ README.md # 项目说明文档(本文件)
├─ requirements.txt # 项目依赖清单
├─ AGENTS.md # AI接口配置说明
├─ static/ # 静态资源文件夹
│ ├─ 数据库大作业背景图(去水印).png
│ └─ 公章.png # 成绩单电子印章
├─ core/ # 后端核心逻辑层
│ ├─ db.py # openGauss数据库连接、执行SQL、日志表初始化
│ ├─ auth.py # 密码哈希、登录校验、账号认证
│ ├─ models.py # 全数据表CRUD、数据库底层操作
│ ├─ services.py # 业务规则校验、权限判断、选课/成绩计算逻辑
│ ├─ utils.py # 页面工具、会话管理、渲染工具、日志写入封装
│ ├─ face_auth.py # 人脸采集、特征提取、人脸匹配注册
│ └─ ai_agent.py # AI大模型接口调用、学习/教学数据组装
├─ pages/ # 前端页面分层
│ ├─ pages_admin.py # 管理员后台(概览、账号、学生、操作日志)
│ ├─ pages_teacher.py # 教师后台(学生查看、课程、选课、成绩、AI教学)
│ ├─ pages_student.py # 学生端(个人信息、选课、AI计划、成绩单、改密人脸验证)
│ ├─ ai_teaching.py # 教师AI教学助手页面
│ └─ ai_tutor.py # 学生AI学习助手页面
├─ sql/
│ ├─ schema.sql # 全部数据表建表语句(角色/用户/学生/教师/课程/选课/成绩/操作日志)
│ └─ seed.sql # 测试账号、基础演示数据
├─ scripts/
│ └─ init_db.py # 初始化数据库,执行建表+导入测试数据
└─ docs/
├─ design.md # 数据库设计文档(E-R图、字段说明)
└─ TASKS.md # 开发任务拆分记录
roles角色表:存储角色名称(admin/teacher/student)users用户账号表:所有登录账号、密码哈希、角色外键、账号状态students学生档案表:学号、姓名、年级、专业、联系方式、关联用户IDteachers教师信息表:教师编号、院系、关联用户IDcourses课程表:课程编号、名称、学分、授课教师、选课年级、成绩权重、容量enrollments选课记录表:学生-课程关联,状态(已选/退课)grades成绩表:分项成绩、加权总分、授课教师、关联选课记录operation_log操作审计日志表:所有增删改操作自动记录,用于溯源
- 数据库类型:openGauss
- 默认端口:15432(兼容5432自动重试连接)
- 默认库名:
postgres - 默认账号:
db_user,密码:DbUser@123 - 部署方式:WSL openEuler 24.03 容器内运行openGauss服务
- Windows 系统安装 WSL2,分发版:openEuler-24.03
- WSL内安装openGauss数据库服务
- 本地Windows安装 Python3.9 及以上版本
# 进入WSL openEuler系统
wsl -d openEuler-24.03
# 切换omm数据库管理员
su - omm
# 启动数据库服务
gs_ctl start
# 登录gsql客户端初始化权限
gsql -d postgres -p 15432 -r
-- 允许外部IP访问
ALTER SYSTEM SET listen_address = '*';
\q
# 重启数据库生效
gs_ctl restart
# 重新进入客户端创建项目数据库账号
gsql -d postgres -p 15432 -r
CREATE USER db_user WITH PASSWORD 'DbUser@123';
ALTER ROLE db_user WITH LOGIN;
GRANT ALL PRIVILEGES ON DATABASE postgres TO db_user;
GRANT CREATE, CONNECT ON DATABASE postgres TO db_user;
\q新开PowerShell,进入项目根目录
# 配置数据库环境变量
$env:DB_HOST="127.0.0.1"
$env:DB_PORT="15432"
$env:DB_NAME="postgres"
$env:DB_USER="db_user"
$env:DB_PASSWORD="DbUser@123"
# 安装项目全部依赖
python -m pip install streamlit psycopg2-binary pandas openpyxl opencv-python insightface base64 requestspython scripts/init_db.pystreamlit run app.py| 用户名 | 密码 | 角色 | 说明 |
|---|---|---|---|
| admin_demo | admin123 | 管理员 | 完整后台权限 |
| teacher_demo | teacher123 | 教师 | 课程、成绩管理权限 |
| student_demo | student123 | 学生 | 基础学生账号 |
| grade1_demo | student123 | 学生 | 一年级演示学生 |
| grade2_mid_demo | student123 | 学生 | 二年级中等成绩学生 |
| grade2_risk_demo | student123 | 学生 | 二年级低分风险学生 |
- 全局数据概览:账号分类统计、最近创建账号
- 账号管理:单条创建/批量导入/批量更新/重置密码、启用禁用、删除账号
- 学生档案:单条新增/批量导入/编辑/删除、多条件模糊搜索
- 操作审计日志:全系统操作记录查询、单条/批量清空日志
- 权限:仅管理员可创建、删除账号与学生档案
- 只读查看全部学生信息(模糊检索)
- 自有课程完整管理:新增、修改、删除(有成绩课程锁定)
- 选课名单查看:支持筛选课程、是否包含退课学生
- 成绩管理:手动录入成绩、Excel批量导入成绩、自动计算加权总分
- AI教学助手:按班级/单个学生生成专属教学方案
- 查看/修改个人基础信息、联系方式
- 查看本年级可选课程、已选课程,执行选课/退课
- 查看个人所有课程分项成绩、加权总分
- AI学习助手:自动生成个性化7天学习计划
- 人脸注册、人脸验证自助修改密码
- 导出带电子公章官方成绩单(HTML格式)
- 普通登录:输入用户名+密码校验
- 人脸登录:先输入用户名,点击人脸采集,摄像头抓拍人脸与本地特征库比对,匹配直接免密登录
- 人脸注册:学生端可打开摄像头录入人脸特征,保存至
face_data/embeddings目录
支持CSV / XLSX / XLS三种文件:
- 批量创建账号:列要求
Role,Username,Password,Status - 批量更新/删除账号:列要求
Username,NewPassword,Status,Action - 批量导入学生档案:列要求
StudentNo,FullName,Gender,GradeYear,Major,Phone,Email - 批量更新/删除学生:包含Action字段区分更新/删除
- 内置重复校验、字段格式校验、错误行收集、失败文件下载功能,导入带进度条
每门课程独立配置三项成绩占比:出勤、实验、考试,权重总和必须等于100%;录入分项分数后系统自动计算最终成绩,导入文件权重会与课程配置自动校验匹配。
所有账号新增、删除、密码重置、学生增删、批量操作、日志清空行为自动写入operation_log表;支持用户名、操作类型、操作对象多条件筛选,支持单条删除、一键清空全部日志。
对接智匠MindCraft大模型API,纯读取数据库数据,无修改权限:
- 学生端:汇总选课、分项成绩、课程难度,输出学业概览、薄弱点、7天学习计划、复盘指标
- 教师端:汇总班级选课、所有学生分项成绩,输出班级学情、分层教学策略、一周教学安排
自动读取static目录电子公章图片,生成带印章、不可编辑的标准成绩单HTML文件,支持本地下载保存,可直接打印。
严格分层解耦,职责分离,便于维护:
- app.py(入口层)
- 页面基础配置、隐藏侧边栏、会话初始化
- 登录页面渲染、人脸登录逻辑
- 根据登录角色分发对应页面文件
- pages(前端视图层)
- 仅负责页面渲染、按钮交互、展示数据
- 所有业务操作调用core层封装方法,不直接写SQL
- core/utils(工具层)
- 页面样式、分页组件、表格渲染、会话管理
- 统一操作日志写入封装、文件编码工具
- core/auth(认证层)
- SHA256密码加密、账号登录校验、身份读取
- core/face_auth(人脸模块)
- 摄像头调用、人脸检测、特征存储与比对
- core/db(数据库底层)
- openGauss连接池、SQL执行、事务提交/回滚
- 程序启动自动创建操作日志表
- core/models(数据访问层DAO)
- 封装所有数据表增删改查SQL
- 提供统一数据返回格式,上层无需编写原生SQL
- core/services(业务逻辑层)
- 权限判断、业务规则校验(选课容量、权重和、年级限制等)
- 成绩加权计算、选课/退课业务约束
- core/ai_agent(AI接口层)
- 读取学生/教师数据组装Prompt,调用大模型API,返回分析报告
- 使用指定数据库openGauss完成系统开发
- 完整多表关联设计(7张业务表+日志表)
- 支持精确查询 + 模糊查询(
LIKE语法实现姓名/学号/课程模糊检索) - 多条件组合筛选、分页展示数据
- 完整增删改查业务,包含事务回滚机制
- 权限控制、多角色分离访问控制
- 批量数据导入导出、文件处理
- 附加拓展功能:人脸识别、AI数据分析、操作审计日志、电子成绩单
- 数据库连接失败
- 检查WSL内openGauss是否启动,端口15432
- 核对环境变量DB_PORT、账号密码
- db.py内置5432/15432双端口自动重试
- 人脸采集摄像头打不开
- 安装完整opencv,关闭占用摄像头软件
- Windows给予摄像头权限
- 批量导入报错
- 核对Excel列名严格匹配要求,无空必填字段
- 学号/用户名不能重复
- 页面背景图不显示
- static文件夹存在指定图片,缺失不影响系统运行,仅无背景
- AI分析无返回
- 检查网络,API密钥有效期,无网络自动提示服务异常
- 课程无法删除
- 课程已有成绩记录,系统锁定课程编辑/删除操作
streamlit>=1.28.0
psycopg2-binary>=2.9.9
pandas>=2.0
openpyxl
opencv-python
insightface
numpy
requests