Skip to content

gz08/database

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

database

本系统采用 Python、Streamlit 搭配 openGauss 数据库搭建 B/S 学生综合管理平台,划分管理员、教师、学生三类独立权限角色。

学生管理系统 Student Management System 完整项目文档

项目总览

1. 项目基础信息

  • 项目名称:学生管理系统
  • 开发用途:数据库课程大作业
  • 技术栈
    • 数据库:openGauss(Docker 本地部署)
    • 后端:Python 3.9+
    • 前端可视化:Streamlit
    • 人脸识别:InsightFace + OpenCV
    • 数据批量处理:Pandas
  • 系统角色:系统管理员、教师/教务、学生
  • 核心能力:账号权限管理、学生档案、课程管理、选课退课、成绩录入/批量导入、AI教学/学习分析、人脸登录、操作审计日志、成绩单导出

2. 功能总述

  1. 账号权限体系
    • 三类角色隔离页面与操作权限
    • 账号新增/批量导入/批量更新/删除、密码重置、账号启用禁用
    • 人脸注册 + 人脸免密登录
  2. 学生管理(管理员专属完整CRUD)
    • 单条新增、修改、删除学生档案
    • Excel/CSV批量导入、批量更新、批量删除学生
    • 模糊检索学生(姓名/学号/专业)
  3. 课程管理(教师专属)
    • 课程新增、编辑、删除(有成绩课程不可删改)
    • 自定义出勤/实验/考试成绩权重
    • 按年级开放选课限制、课程容量控制
  4. 选课业务(学生专属)
    • 查看本年级可选课程、已选课程
    • 选课、退课(已有成绩课程不可退)
    • 课程容量校验、年级选课限制校验
  5. 成绩管理(教师专属)
    • 手动单条录入/修改分项成绩(出勤+实验+考试,自动加权计算总分)
    • Excel/CSV批量导入成绩,进度条实时展示
    • 成绩冲突、学号姓名、课程名称自动校验
  6. AI智能分析模块
    • 学生端AI学习报告:学情总结、7天学习计划、薄弱课程提升方案
    • 教师端AI教学方案:班级/单学生学情诊断、课堂辅导策略
  7. 配套辅助功能
    • 个人信息修改、自助人脸密码修改
    • 带电子公章官方成绩单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                # 开发任务拆分记录

三、数据库设计

1. 核心数据表清单

  1. roles 角色表:存储角色名称(admin/teacher/student)
  2. users 用户账号表:所有登录账号、密码哈希、角色外键、账号状态
  3. students 学生档案表:学号、姓名、年级、专业、联系方式、关联用户ID
  4. teachers 教师信息表:教师编号、院系、关联用户ID
  5. courses 课程表:课程编号、名称、学分、授课教师、选课年级、成绩权重、容量
  6. enrollments 选课记录表:学生-课程关联,状态(已选/退课)
  7. grades 成绩表:分项成绩、加权总分、授课教师、关联选课记录
  8. operation_log 操作审计日志表:所有增删改操作自动记录,用于溯源

2. 数据库环境说明

  • 数据库类型:openGauss
  • 默认端口:15432(兼容5432自动重试连接)
  • 默认库名:postgres
  • 默认账号:db_user,密码:DbUser@123
  • 部署方式:WSL openEuler 24.03 容器内运行openGauss服务

四、环境部署完整流程

4.1 前置环境

  1. Windows 系统安装 WSL2,分发版:openEuler-24.03
  2. WSL内安装openGauss数据库服务
  3. 本地Windows安装 Python3.9 及以上版本

4.2 1. 启动openGauss数据库(PowerShell执行)

# 进入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

4.3 2. Windows端项目配置

新开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 requests

4.4 3. 初始化数据库(建表+导入测试数据)

python scripts/init_db.py

4.5 4. 启动系统

streamlit run app.py

五、测试账号清单

用户名 密码 角色 说明
admin_demo admin123 管理员 完整后台权限
teacher_demo teacher123 教师 课程、成绩管理权限
student_demo student123 学生 基础学生账号
grade1_demo student123 学生 一年级演示学生
grade2_mid_demo student123 学生 二年级中等成绩学生
grade2_risk_demo student123 学生 二年级低分风险学生

六、系统角色权限划分

1. 系统管理员(admin)

  • 全局数据概览:账号分类统计、最近创建账号
  • 账号管理:单条创建/批量导入/批量更新/重置密码、启用禁用、删除账号
  • 学生档案:单条新增/批量导入/编辑/删除、多条件模糊搜索
  • 操作审计日志:全系统操作记录查询、单条/批量清空日志
  • 权限:仅管理员可创建、删除账号与学生档案

2. 教师(teacher)

  • 只读查看全部学生信息(模糊检索)
  • 自有课程完整管理:新增、修改、删除(有成绩课程锁定)
  • 选课名单查看:支持筛选课程、是否包含退课学生
  • 成绩管理:手动录入成绩、Excel批量导入成绩、自动计算加权总分
  • AI教学助手:按班级/单个学生生成专属教学方案

3. 学生(student)

  • 查看/修改个人基础信息、联系方式
  • 查看本年级可选课程、已选课程,执行选课/退课
  • 查看个人所有课程分项成绩、加权总分
  • AI学习助手:自动生成个性化7天学习计划
  • 人脸注册、人脸验证自助修改密码
  • 导出带电子公章官方成绩单(HTML格式)

七、核心功能详细说明

7.1 双登录模式(账号密码 + 人脸登录)

  1. 普通登录:输入用户名+密码校验
  2. 人脸登录:先输入用户名,点击人脸采集,摄像头抓拍人脸与本地特征库比对,匹配直接免密登录
  3. 人脸注册:学生端可打开摄像头录入人脸特征,保存至face_data/embeddings目录

7.2 批量导入功能(管理员专属)

支持CSV / XLSX / XLS三种文件:

  1. 批量创建账号:列要求Role,Username,Password,Status
  2. 批量更新/删除账号:列要求Username,NewPassword,Status,Action
  3. 批量导入学生档案:列要求StudentNo,FullName,Gender,GradeYear,Major,Phone,Email
  4. 批量更新/删除学生:包含Action字段区分更新/删除
  • 内置重复校验、字段格式校验、错误行收集、失败文件下载功能,导入带进度条

7.3 成绩权重机制

每门课程独立配置三项成绩占比:出勤、实验、考试,权重总和必须等于100%;录入分项分数后系统自动计算最终成绩,导入文件权重会与课程配置自动校验匹配。

7.4 操作审计日志

所有账号新增、删除、密码重置、学生增删、批量操作、日志清空行为自动写入operation_log表;支持用户名、操作类型、操作对象多条件筛选,支持单条删除、一键清空全部日志。

7.5 AI智能模块

对接智匠MindCraft大模型API,纯读取数据库数据,无修改权限:

  1. 学生端:汇总选课、分项成绩、课程难度,输出学业概览、薄弱点、7天学习计划、复盘指标
  2. 教师端:汇总班级选课、所有学生分项成绩,输出班级学情、分层教学策略、一周教学安排

7.6 成绩单导出

自动读取static目录电子公章图片,生成带印章、不可编辑的标准成绩单HTML文件,支持本地下载保存,可直接打印。

八、代码分层架构说明

严格分层解耦,职责分离,便于维护:

  1. app.py(入口层)
    • 页面基础配置、隐藏侧边栏、会话初始化
    • 登录页面渲染、人脸登录逻辑
    • 根据登录角色分发对应页面文件
  2. pages(前端视图层)
    • 仅负责页面渲染、按钮交互、展示数据
    • 所有业务操作调用core层封装方法,不直接写SQL
  3. core/utils(工具层)
    • 页面样式、分页组件、表格渲染、会话管理
    • 统一操作日志写入封装、文件编码工具
  4. core/auth(认证层)
    • SHA256密码加密、账号登录校验、身份读取
  5. core/face_auth(人脸模块)
    • 摄像头调用、人脸检测、特征存储与比对
  6. core/db(数据库底层)
    • openGauss连接池、SQL执行、事务提交/回滚
    • 程序启动自动创建操作日志表
  7. core/models(数据访问层DAO)
    • 封装所有数据表增删改查SQL
    • 提供统一数据返回格式,上层无需编写原生SQL
  8. core/services(业务逻辑层)
    • 权限判断、业务规则校验(选课容量、权重和、年级限制等)
    • 成绩加权计算、选课/退课业务约束
  9. core/ai_agent(AI接口层)
    • 读取学生/教师数据组装Prompt,调用大模型API,返回分析报告

九、项目开发作业匹配点(满足课程要求)

  1. 使用指定数据库openGauss完成系统开发
  2. 完整多表关联设计(7张业务表+日志表)
  3. 支持精确查询 + 模糊查询(LIKE语法实现姓名/学号/课程模糊检索)
  4. 多条件组合筛选、分页展示数据
  5. 完整增删改查业务,包含事务回滚机制
  6. 权限控制、多角色分离访问控制
  7. 批量数据导入导出、文件处理
  8. 附加拓展功能:人脸识别、AI数据分析、操作审计日志、电子成绩单

十、常见问题解决

  1. 数据库连接失败
    • 检查WSL内openGauss是否启动,端口15432
    • 核对环境变量DB_PORT、账号密码
    • db.py内置5432/15432双端口自动重试
  2. 人脸采集摄像头打不开
    • 安装完整opencv,关闭占用摄像头软件
    • Windows给予摄像头权限
  3. 批量导入报错
    • 核对Excel列名严格匹配要求,无空必填字段
    • 学号/用户名不能重复
  4. 页面背景图不显示
    • static文件夹存在指定图片,缺失不影响系统运行,仅无背景
  5. AI分析无返回
    • 检查网络,API密钥有效期,无网络自动提示服务异常
  6. 课程无法删除
    • 课程已有成绩记录,系统锁定课程编辑/删除操作

十一、依赖清单 requirements.txt

streamlit>=1.28.0
psycopg2-binary>=2.9.9
pandas>=2.0
openpyxl
opencv-python
insightface
numpy
requests

About

A database uses Python, Streamlit, and OpenGauss. (本系统采用 Python、Streamlit 搭配 openGauss 数据库搭建 B/S 学生综合管理平台,划分管理员、教师、学生三类独立权限角色。\This B/S student management system is built on Python, Streamlit and openGauss. It has three independent role permissions: administrator, teacher and student.)

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors