一个基于 PHP + MySQL 的学生信息与竞赛选课管理系统,面向教育培训机构,提供学生端与管理端双角色操作界面。支持 Docker 一键部署。
- 个人信息 — 查看与编辑个人资料、教育履历、家长信息
- 竞赛选课 — 浏览可报名竞赛,根据卡类型限制进行选课 / 退选
- 成绩查询 — 查看各竞赛成绩
- 补考管理 — 查看补考安排并报名
- 奖惩记录 — 查看、新增、编辑个人奖惩与项目记录
- 密码修改 — 自主修改登录密码
- 意见反馈 — 提交反馈,通过邮件发送至管理员
- 学生管理 — 增删改查学生档案、重置密码
- 竞赛管理 — 创建、编辑、删除竞赛课程
- 选课管理 — 查看与修改学生报名情况
- 卡片系统 — 创建卡类型、分配卡片给学生,控制选课权限
- 奖惩日志 — 查询与编辑学生行为记录
- 数据统计 — 班级统计、成绩分析
- 权限管理 — 创建管理员账号、分配功能权限
- SQL 审计 — 所有数据库操作自动写入日志
| 层级 | 技术 |
|---|---|
| 后端 | PHP 8.1+ |
| 数据库 | MySQL 8.0+(utf8mb4) |
| Web 服务器 | Nginx 1.25 |
| 前端 | HTML / CSS / JavaScript |
| 邮件脚本 | Python 3(SMTP) |
| 容器化 | Docker + Docker Compose |
ZY-service/
├── admin/ # 管理端
│ ├── fun/ # 后端接口(PHP)
│ ├── css/ # 样式
│ ├── scripts/ # 邮件脚本 & 配置
│ ├── index.php # 管理端主框架
│ └── *.php # 各功能页面
├── user/ # 学生端
│ ├── fun/ # 后端接口
│ ├── scripts/ # 邮件脚本 & 配置
│ ├── index.php # 学生端主框架
│ └── *.php # 各功能页面
├── config/
│ ├── database.php # 数据库连接(读取环境变量)
│ ├── log.php # 日志配置
│ └── adminer.php # 数据库管理工具
├── docker/
│ ├── nginx.conf # Nginx 配置
│ └── php.ini # PHP 配置
├── static/ # 静态资源(CSS / 图片)
├── login.php # 登录页
├── logout.php # 登出
├── create_database.sql # 数据库建表脚本
├── example_lite.sql # 示例数据
├── Dockerfile # PHP-FPM 镜像
├── docker-compose.yml # 容器编排
├── Makefile # 快捷命令
└── .env.example # 环境变量模板
- Docker 24+ 与 Docker Compose v2+
# 1. 克隆仓库
git clone https://github.com/<your-username>/ZY-service.git
cd ZY-service
# 2. 复制环境变量模板并按需修改
cp .env.example .env
# 3. 构建并启动
docker compose up -d --build
# 4. 访问系统
# 浏览器打开 http://localhost:8080首次启动时,create_database.sql 和 example_lite.sql 会自动导入 MySQL,无需手动建库。
| 字段 | 值 |
|---|---|
| 管理员 ID | 999 |
| 用户名 | Admin |
| 密码 | change_me_please |
部署后请立即修改默认密码。
make up # 构建并启动容器
make down # 停止并移除容器
make logs # 查看实时日志
make restart # 重启所有服务如不使用 Docker,需自行准备:
- PHP 8.1+(启用 mysqli、pdo_mysql 扩展)
- MySQL 8.0+
- Nginx 或 Apache
- Python 3(仅邮件反馈功能需要)
将以下环境变量配置到系统或 Web 服务器中,config/database.php 会自动读取:
DB_HOST=127.0.0.1
DB_PORT=3306
DB_NAME=zy_service
DB_USER=root
DB_PASS=your_password
DB_CHARSET=utf8mb4
手动导入数据库:
mysql -u root -p < create_database.sql
mysql -u root -p school < example_lite.sql所有配置通过 .env 文件管理,详见 .env.example:
| 变量 | 说明 | 默认值 |
|---|---|---|
TZ |
时区 | Asia/Shanghai |
DB_HOST |
数据库主机 | db |
DB_PORT |
数据库端口 | 3306 |
DB_NAME |
数据库名 | zy_service |
DB_USER |
数据库用户 | zy |
DB_PASS |
数据库密码 | zy_secret |
DB_CHARSET |
字符集 | utf8mb4 |
MYSQL_ROOT_PASSWORD |
MySQL root 密码 | root_secret |
WPDB_HOST |
WordPress 数据库主机(可选) | 空 |
WP_URL |
WordPress 站点地址(可选) | 空 |
WordPress 相关变量留空则自动跳过集成。
数据库名为 school,包含以下表:
| 表名 | 说明 |
|---|---|
course |
竞赛/课程信息(名称、级别、申报时间、材料要求等) |
student |
学生档案(个人信息、教育履历、家长信息) |
student_course |
学生选课记录(联合主键 sid + cid) |
student_log |
学生行为日志(奖惩记录、操作记录) |
user_admin |
管理员账号与权限 |
user_student |
学生登录账号 |
card |
卡片类型定义(可选课程范围、最大选课数) |
student_card |
学生-卡片关联(外键约束,级联删除) |
完整建表语句见 create_database.sql,示例数据见 example_lite.sql。
系统内置用户反馈功能,学生端和管理端均可提交。反馈通过 Python 脚本以邮件形式发送。
配置方式:
- 编辑
admin/scripts/config.json和user/scripts/config.json,填入 SMTP 信息 - 或通过环境变量注入 SMTP 凭据
反馈内容包括:姓名、学号、联系方式、反馈正文、设备信息、IP 地址。
- 所有敏感信息(IP、邮箱、密码)已从源码中移除或替换为占位符
.gitignore已配置忽略.env、日志文件等敏感内容- 密码使用 MD5 哈希存储(建议生产环境升级为 bcrypt 或 argon2)
- 所有 SQL 操作自动记录到
config/sql_log.txt用于审计 - 反馈脚本使用
escapeshellarg()防止命令注入 - 建议生产环境启用 HTTPS 并添加 CSRF 防护
欢迎提交 Issue 和 Pull Request。请先阅读 CONTRIBUTING.md 和 CODE_OF_CONDUCT.md。