Skip to content

ContraMundum-code/database-systems-project

Repository files navigation

北京大学信息管理系博士生岗位奖学金管理系统

面向北大信管系博士生、岗位导师、教务管理员的全流程线上化岗位与奖学金管理平台,实现岗位发布、申请、审核、工作量认定、奖学金核算与发放一站式管理,替代传统人工对接模式,提升管理效率与数据规范性。


一、产品定位

专为北京大学信息管理系打造的博士生岗位奖学金业务闭环管理系统。 以数字化、流程化、标准化为核心,解决传统线下沟通效率低、信息滞后、统计繁琐、数据不规范等问题,支撑院系规模化、精细化的博士岗位与奖学金管理工作。

二、目标用户

  • 博士生:2017级及以后符合条件的全日制学术型博士
  • 岗位负责人(导师/教师):助教、助研岗位发布与审核主体
  • 系统管理员:教务/院系管理人员,负责全局配置与数据监管

三、需求与核心痛点

1. 业务需求

  • 博士生:岗位查询、一键申请、工作量提交、奖学金查看与导出
  • 导师:岗位发布、申请审核、工作量认定、奖学金设置
  • 管理员:用户管理、岗位监管、奖学金批量核算、数据统计与日志审计

2. 传统模式痛点

  • 信息传递依赖人工沟通,滞后、易遗漏、易出错
  • 申请与审核流程线下流转,效率低、可追溯性差
  • 工作量与奖学金依赖人工统计,数据易混乱、核算成本高
  • 缺乏统一平台,权限不清、档案不规范、决策缺少数据支撑

四、核心功能(产品视角)

1. 博士生端

  • 身份认证与个人信息管理
  • 公开岗位浏览、筛选与在线申请
  • 申请状态实时跟踪与撤回
  • 工作量提交、修改与进度查看
  • 奖学金明细查询、数据导出与历史记录
  • 个人操作日志与安全记录

2. 导师/岗位负责人端

  • 岗位创建、草稿编辑、发布与关闭
  • 学生申请批量审核、材料查看与反馈
  • 工作量审核、评分与备注
  • 岗位学生奖学金规则配置
  • 个人发布岗位与审核记录管理

3. 管理员端

  • 用户账号管理(启用/冻结)
  • 全平台岗位统一监管
  • 奖学金自动计算、手动调整、批量发放确认
  • 数据导出(奖学金、日志)
  • 系统操作全链路日志审计与追溯

五、产品亮点

  • 业务闭环:从岗位→申请→审核→工作量→奖学金→发放,全流程线上化
  • 权限清晰:三角色隔离,权责明确,数据安全可控
  • 流程规范:固定状态流转,减少人为操作偏差
  • 数据可管:结构化存储,支持筛选、统计、导出,便于管理与复盘
  • 校园适配:严格匹配北大信管系博士生岗位政策与资格要求
  • 体验轻量化:界面简洁、重点突出、操作路径短,降低师生使用成本

六、当前局限与优化方向

已知局限

  • 目前为校内本地化部署,暂未开放公网访问
  • 部分辅助数据表保留,实际业务中暂未启用
  • 无消息推送与提醒机制

优化方向

  • 增加邮件/系统消息通知
  • 支持岗位与奖学金数据可视化 dashboard
  • 与校园统一身份认证对接
  • 支持批量导入导出与自动化对账

七、快速使用说明

  1. 启动本地服务后访问系统首页
  2. 按角色登录:学生 / 教师 / 管理员
  3. 学生:浏览岗位 → 申请 → 提交工作量 → 查询奖学金
  4. 教师:发布岗位 → 审核申请 → 认定工作量 → 设置奖学金
  5. 管理员:管理用户 → 监管岗位 → 核算与发放奖学金

细节如下:

1. 项目概述

本项目是一个基于 Flask 的博士生岗位奖学金管理系统,用于管理博士生岗位申请、奖学金发放、工作量审核等业务流程。系统采用前后端不分离架构,后端使用 Flask 提供 API 接口和页面渲染,前端使用原生 HTML/CSS/JavaScript。

整体架构

  • 后端框架:Flask(Python Web 框架)
  • 数据库:MySQL(本地数据库)
  • 认证方式:JWT(JSON Web Token)
  • 运行方式:单进程 Flask 开发服务器
  • 架构模式:MVC 模式,使用蓝图(Blueprint)组织路由

系统支持三种用户角色:

  • 学生端:岗位申请、奖学金查询、工作量提交 已有用户名:B8888889 密码:weitong2018
  • 教师端:岗位发布、申请审核、工作量审核、奖学金设置 已有用户名T009 密码:weitong2018
  • 管理员端:用户管理、岗位管理、奖学金管理、系统配置、操作日志 已有用户名(硬编码,未存入数据库):admin001;密码:Admin@123456

2. 运行环境与依赖

编程语言与框架

  • Python 3.x
  • Flask:Web 框架

外部依赖包

项目依赖的主要 Python 包如下(建议使用 pip install 安装):

包名 用途 版本要求
Flask Web 框架核心 -
Flask-SQLAlchemy ORM 数据库操作 -
Flask-JWT-Extended JWT 身份认证 -
Flask-CORS 跨域资源共享 -
PyMySQL MySQL 数据库驱动 -
bcrypt 密码加密 -
openpyxl Excel 文件处理 -
pandas 数据处理与导出 -
PyJWT JWT 令牌生成与验证 -
werkzeug 文件上传工具(Flask 内置) -

3. 项目目录结构

DBSgroupWork/
├── api/                          # API 路由模块
│   ├── __init__.py
│   ├── auth.py                   # 认证相关接口(登录)
│   ├── student.py                # 学生端接口
│   ├── teacher.py                # 教师端接口
│   └── admin.py                  # 管理员端接口
├── db/                           # 数据库模块
│   ├── __init__.py
│   └── db_connection.py          # 数据库连接配置
├── database/                     # 数据库文件
│   └── database_export.sql       # 数据库初始化 SQL 文件
├── templates/                    # HTML 模板文件
│   ├── index.html                # 登录页
│   ├── register_student.html     # 学生注册页
│   ├── register_teacher.html     # 教师注册页
│   ├── student/                  # 学生端页面
│   │   ├── dashboard.html
│   │   ├── positions.html
│   │   ├── position-detail.html
│   │   ├── applications.html
│   │   ├── application-detail.html
│   │   ├── profile.html
│   │   ├── scholarships.html
│   │   └── workload.html
│   ├── teacher/                  # 教师端页面
│   │   ├── dashboard.html
│   │   ├── positions.html
│   │   ├── position-detail.html
│   │   ├── publish.html
│   │   ├── applications.html
│   │   ├── application-detail.html
│   │   ├── workload-review.html
│   │   ├── workload-detail.html
│   │   ├── history.html
│   │   └── profile.html
│   └── admin/                    # 管理员端页面
│       ├── dashboard.html
│       ├── user-management.html
│       ├── position-management.html
│       ├── scholarship-management.html
│       └── system-config.html
├── static/                       # 静态资源文件
│   ├── common.css                # 公共样式
│   ├── common.js                 # 公共脚本
│   └── pku_logo.png              # 校徽图片
├── uploads/                      # 文件上传目录
│   └── application/              # 申请附件存储
├── utils/                        # 工具函数模块,本项目暂未用到
├── app.py                        # Flask 应用主入口
└── README.md                     # 项目说明文档

目录功能说明

  • api/:所有 API 接口路由,按角色分为学生、教师、管理员三个蓝图
  • db/:数据库连接配置,使用 PyMySQL 和 SQLAlchemy
  • database/:数据库初始化 SQL 文件
  • templates/:HTML 模板,按角色组织子目录
  • static/:CSS、JavaScript、图片等静态资源
  • uploads/:用户上传的文件存储目录
  • utils/:通用工具函数,暂无内容

4. API 接口文档(精简版)

认证接口 (/api/auth)

方法 URL 功能说明
POST /api/auth/auth/login 用户登录(学生/教师/管理员)

学生端接口 (/api/student)

方法 URL 功能说明
POST /api/student/auth/student/register 学生注册
GET /api/student/profile 获取学生个人信息
PUT /api/student/profile 更新学生个人信息
GET /api/student/positions 获取岗位列表
GET /api/student/positions/<position_id> 获取岗位详情
POST /api/student/applications 提交岗位申请
GET /api/student/applications 获取申请列表
GET /api/student/applications/<application_id> 获取申请详情
PUT /api/student/applications/<application_id>/cancel 取消申请
GET /api/student/applications/overview 获取申请概览
GET /api/student/logs/login 获取登录日志
POST /api/student/workload 提交工作量
GET /api/student/workload 获取工作量列表
PUT /api/student/workload/<workload_id> 更新工作量
GET /api/student/scholarships 获取奖学金列表
GET /api/student/scholarships/<scholarship_id> 获取奖学金详情
POST /api/student/scholarships/export 导出奖学金数据
POST /api/student/upload 上传文件

教师端接口 (/api/teacher)

方法 URL 功能说明
POST /api/teacher/auth/teacher/register 教师注册
GET /api/teacher/profile 获取教师个人信息
PUT /api/teacher/profile 更新教师个人信息
POST /api/teacher/positions 创建岗位
GET /api/teacher/positions 获取岗位列表
PUT /api/teacher/positions/<position_id> 更新岗位信息
POST /api/teacher/positions/<position_id>/publish 发布岗位
POST /api/teacher/positions/<position_id>/close 关闭岗位
GET /api/teacher/students/<student_id>/details 获取学生详情
GET /api/teacher/applications/<application_id> 获取申请详情
GET /api/teacher/applications 获取申请列表
PUT /api/teacher/applications/batch-review 批量审核申请
GET /api/teacher/workload 获取工作量列表
PUT /api/teacher/workload/<workload_id>/review 审核工作量
POST /api/teacher/scholarships/set 设置奖学金

管理员端接口 (/api/admin)

方法 URL 功能说明
GET /api/admin/users 获取用户列表
GET /api/admin/users/<user_id> 获取用户详情
PUT /api/admin/users/<user_id>/status 更新用户状态
POST /api/admin/teachers 创建教师账号
POST /api/admin/scholarships/calculate 计算奖学金
PUT /api/admin/scholarships/manual 手动设置奖学金
PUT /api/admin/scholarships/<scholarship_id>/publish 发布奖学金
PUT /api/admin/scholarships/batch-publish 批量发布奖学金
GET/POST /api/admin/scholarships/export 导出奖学金数据
GET /api/admin/positions 获取岗位列表
GET /api/admin/positions/<position_id> 获取岗位详情
POST /api/admin/positions/<position_id>/publish 发布岗位
PUT /api/admin/positions/<position_id> 更新岗位信息
POST /api/admin/positions/<position_id>/close 关闭岗位
GET /api/admin/scholarships 获取奖学金列表
GET /api/admin/logs 获取操作日志
GET /api/admin/logs/export 导出操作日志
GET /api/admin/config 获取系统配置
PUT /api/admin/config 更新系统配置

注意:所有需要认证的接口均需在请求头中携带 JWT Token:

Authorization: Bearer <token>

5. Web 入口说明

项目首页

  • 登录页http://127.0.0.1:5000/

学生端页面

页面 URL
学生注册 http://127.0.0.1:5000/register/student
学生仪表盘 http://127.0.0.1:5000/student/dashboard
岗位列表 http://127.0.0.1:5000/student/positions
岗位详情 http://127.0.0.1:5000/student/position-detail
我的申请 http://127.0.0.1:5000/student/applications
申请详情 http://127.0.0.1:5000/student/application-detail
个人资料 http://127.0.0.1:5000/student/profile
奖学金查询 http://127.0.0.1:5000/student/scholarships
工作量管理 http://127.0.0.1:5000/student/workload

教师端页面

页面 URL
教师注册 http://127.0.0.1:5000/register/teacher
教师仪表盘 http://127.0.0.1:5000/teacher/dashboard
岗位管理 http://127.0.0.1:5000/teacher/positions
岗位详情 http://127.0.0.1:5000/teacher/position-detail
发布岗位 http://127.0.0.1:5000/teacher/publish
申请审核 http://127.0.0.1:5000/teacher/applications
申请详情 http://127.0.0.1:5000/teacher/application-detail
工作量审核 http://127.0.0.1:5000/teacher/workload-review
工作量详情 http://127.0.0.1:5000/teacher/workload-detail
历史记录 http://127.0.0.1:5000/teacher/history
个人资料 http://127.0.0.1:5000/teacher/profile

管理员端页面

页面 URL
管理员仪表盘 http://127.0.0.1:5000/admin/dashboard
用户管理 http://127.0.0.1:5000/admin/user-management
岗位管理 http://127.0.0.1:5000/admin/position-management
奖学金管理 http://127.0.0.1:5000/admin/scholarship-management
系统配置 http://127.0.0.1:5000/admin/system-config

6. 数据库说明

数据库初始化

重要提示:本项目目前仅支持本地运行,需要在本地 MySQL 数据库中初始化数据库。

数据库文件

  • 位置database/database_export.sql
  • 用途:包含完整的数据库表结构定义和初始数据
  • 数据库名phd_scholarship_system

初始化步骤

  1. 确保 MySQL 服务已启动

  2. 登录 MySQL

    mysql -u root -p
  3. 创建数据库(如果不存在):

    CREATE DATABASE IF NOT EXISTS phd_scholarship_system CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
  4. 导入 SQL 文件

    mysql -u root -p phd_scholarship_system < database/database_export.sql

    或在 MySQL 命令行中:

    USE phd_scholarship_system;
    SOURCE database/database_export.sql;
  5. 验证导入

    SHOW TABLES;

数据库连接配置

配置文件位置

数据库连接配置在两个文件中:

  1. app.py(第 20-23 行):

    password = "526819wysycyA@"
    encoded_password = quote(password)
    app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://root:{encoded_password}@127.0.0.1:3306/phd_scholarship_system"
  2. db/db_connection.py(第 22-33 行):

    return {
        'host': '127.0.0.1',
        'port': 3306,
        'user': 'root',
        'password': 'zc20050629',
        'database': 'phd_scholarship_system',
        ...
    }

配置要求

⚠️ 重要:运行项目前,必须修改以下配置以匹配你的本地 MySQL 环境:

  • 用户名:默认为 root,需与你的 MySQL 用户名一致
  • 密码:需修改为你的 MySQL 密码
    • 修改 app.py 第 20 行的 password 变量
    • 修改 db/db_connection.py 第 28 行的 password 字段
  • 主机127.0.0.1(本地)
  • 端口3306(MySQL 默认端口)
  • 数据库名phd_scholarship_system

注意:两个文件中的密码配置必须保持一致,否则会导致数据库连接失败。


7. 其他必要说明

启动步骤

  1. 安装依赖

    pip install Flask Flask-SQLAlchemy Flask-JWT-Extended Flask-CORS PyMySQL bcrypt openpyxl pandas PyJWT
  2. 配置数据库

    • 修改 app.pydb/db_connection.py 中的数据库连接信息
    • 确保 MySQL 服务已启动
    • 导入 database/database_export.sql 初始化数据库
  3. 启动应用

    python app.py
  4. 访问系统

    • 打开浏览器访问:http://127.0.0.1:5000

注意事项

端口配置

  • 默认端口5000
  • 主机地址127.0.0.1(仅本地访问)
  • 如需修改,编辑 app.py 第 187 行:
    app.run(debug=True, host='127.0.0.1', port=5000)

JWT 配置

  • 密钥app.py 第 30 行 JWT_SECRET_KEY(生产环境需修改)
  • 过期时间:24 小时(86400 秒)
  • Token 位置:请求头 Authorization: Bearer <token>

CORS 配置

  • 当前配置允许所有跨域请求(CORS(app)
  • 生产环境建议限制允许的源

文件上传

  • 上传目录uploads/application/
  • 访问路径/uploads/<filename>
  • 确保 uploads/ 目录存在且有写权限

管理员账号

  • 默认管理员账号admin001
  • 默认密码Admin@123456
  • 配置位置:api/auth.py 第 10-12 行

常见问题

  1. 数据库连接失败

    • 检查 MySQL 服务是否启动
    • 确认用户名、密码、数据库名配置正确
    • 确认两个配置文件中的密码一致
  2. 端口被占用

    • 修改 app.py 中的端口号
    • 或关闭占用 5000 端口的进程
  3. 导入错误

    • 确认所有依赖包已安装
    • 检查 Python 版本(建议 3.7+)
  4. 文件上传失败

    • 检查 uploads/ 目录是否存在
    • 确认目录有写权限
  5. JWT Token 无效

    • 检查 Token 是否过期(24 小时)
    • 确认请求头格式正确:Authorization: Bearer <token>

最后更新:2025年12月24日

About

This is a repository for our DBS groupwork, where the project is loaded.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors