一个基于原生PHP 8 + MySQL开发的GESP信息学竞赛刷题系统,支持按年份、标签、随机练习,模拟考试,错题本管理等功能。采用简化设计,基于标签的动态组卷系统,提供现代化的用户界面。
- 多模式练习: 按年份级别、知识标签、随机练习
- GESP模拟考试: 基于标签的动态组卷,60分钟限时考试,现代化UI界面
- 智能错题本: 自动收集错题,支持重复练习
- 收藏系统: 收藏重要题目,便于复习
- 学习统计: 详细的答题数据分析和进度跟踪
- CSRF 防护: 所有表单和AJAX请求都有CSRF保护
- 登录保护: 防暴力破解,失败锁定机制
- 权限控制: 用户/管理员角色分离
- SQL注入防护: 使用PDO预编译语句
- XSS防护: 所有输出都经过转义处理
- 现代化UI设计: Bootstrap 5 + 自定义CSS,渐变色彩,卡片布局
- 响应式设计: 支持PC和移动端,自适应布局
- 键盘快捷键: 1-4选择选项,T/F判断题,N/P翻页
- 实时反馈: 即时显示答案和解析
- 进度追踪: 可视化答题进度和正确率
- 考试体验: 紧凑的题目导航,实时倒计时,自动保存答案
- 题目管理: 增删改查题目,支持批量导入
- CSV导入: 支持CSV格式批量导入题目
- 用户管理: 查看用户列表,设置管理员
- 数据统计: 系统使用情况统计
- 后端: PHP 8.1+
- 数据库: MySQL 5.7+ (兼容MySQL 8.0+)
- 前端: 原生JavaScript + Bootstrap 5 + 自定义CSS
- Web服务器: Nginx (推荐) 或 Apache
gesp-practice/
├── public/ # Web根目录
│ └── index.php # 应用入口
├── app/ # 应用核心
│ ├── controllers/ # 控制器
│ ├── models/ # 数据模型
│ ├── services/ # 业务逻辑
│ ├── middlewares/ # 中间件
│ └── Router.php # 路由器
├── config/ # 配置文件
│ └── config.php # 主配置
├── views/ # 视图模板
├── storage/ # 存储目录
│ ├── logs/ # 日志文件
│ └── uploads/ # 上传文件
├── scripts/ # 管理脚本
└── docs/ # 文档
- 路由系统: 轻量级路由器,支持参数和中间件
- 数据库层: 单例模式数据库连接管理
- 服务层: 业务逻辑封装 (Auth、Question、Answer、Exam等)
- 中间件: CSRF保护、用户认证、权限验证
- 模板系统: 简单的PHP模板渲染
- PHP 8.1+ (需要 pdo_mysql, mbstring 扩展)
- MySQL 5.7+ 或 MariaDB 10.3+ (推荐 MySQL 8.0+)
- Nginx 或 Apache
- 512MB+ 内存
-
下载代码
git clone <repository-url> /var/www/gesp cd /var/www/gesp
-
设置权限
sudo chown -R www-data:www-data /var/www/gesp sudo chmod -R 755 /var/www/gesp sudo chmod -R 777 /var/www/gesp/storage
-
配置数据库
mysql -u root -p < scripts/gesp_system_final.sql -
配置应用
cp env.example .env # 编辑 .env 文件,设置数据库连接等配置 -
配置Web服务器
# 使用提供的 nginx.conf.example 配置 Nginx sudo cp nginx.conf.example /etc/nginx/sites-available/gesp sudo ln -s /etc/nginx/sites-available/gesp /etc/nginx/sites-enabled/ sudo systemctl restart nginx -
测试系统
# 访问网站测试功能 # 默认管理员账户: admin / password: admin123
详细安装说明请参考 INSTALLATION.md
- 管理员: admin / admin123 (密码哈希已内置在SQL中)
users- 用户表 (用户名、密码、角色)questions- 题目表 (题型、年份、级别、标签、题干、选项、答案、解析)user_answers- 答题记录 (用户、题目、答案、正确性、时间、会话类型)user_collections- 收藏表 (用户收藏的题目)user_wrongbook- 错题本 (错误次数、最后错误时间、是否已解决)exam_sessions- 考试会话 (考试类型、题目列表、时间限制、状态、成绩)login_attempts- 登录尝试记录 (防暴力破解)
- JSON标签系统: 题目标签使用JSON存储,支持灵活查询和分类
- 基于标签的动态组卷: 模拟考试根据题目标签自动生成试卷
- 练习考试共享题库: 同一套题目既可用于练习也可用于考试
- 会话化考试: 支持断线恢复,自动保存答案
- 智能错题本: 错题计数机制,答对后自动减少计数
- 安全设计: 密码哈希、CSRF令牌、登录限制
系统已内置一套完整的测试题目:
- 2024年3月春季1级考试: 15道选择题 + 10道判断题
- 涵盖C++基础语法、数据类型、控制结构等知识点
- 每题都有详细的答案解析
题目标签采用JSON数组格式,便于分类和查询:
["GESP", "2024年3月", "春季", "1级", "数组"]- 选择题: 包含A/B/C/D四个选项
- 判断题: 答案为"正确"或"错误"
- 标签系统: 支持按年份、季度、级别、知识点分类
- 难度等级: 1-5级难度标记
- 注册登录: 创建账户并登录
- 选择练习模式:
- 按年份级别练习历年真题
- 按知识标签进行专项练习
- 随机练习增加趣味性
- GESP模拟考试:
- 选择考试级别和年份
- 系统自动组卷(15道选择题 + 10道判断题)
- 60分钟限时考试,实时倒计时
- 紧凑的题目导航,支持快速跳转
- 考试结束后查看详细成绩和解析
- 复习管理: 查看错题本和收藏题目
- 学习统计: 查看个人学习数据和进度
- 题目管理: 添加、编辑、删除题目
- 用户管理: 查看用户列表,设置管理员权限
- 数据统计: 查看系统使用情况和答题统计
1-4: 选择选项A-D (选择题)T/F: 选择正确/错误 (判断题)N/→: 下一题P/←: 上一题
# 启用调试模式
echo "APP_DEBUG=true" >> .env
# 查看错误日志
tail -f storage/logs/app.log- 使用PSR-4自动加载
- 控制器继承BaseController
- 服务类负责业务逻辑
- 数据库操作使用PDO预编译
- 所有输出进行XSS防护
系统采用模块化设计,易于扩展:
- 添加新的练习模式: 扩展QuestionService
- 添加新的题目类型: 修改数据库结构和导入逻辑
- 添加新的统计功能: 扩展AnswerService
- 添加新的API接口: 在routes.php中注册路由
- PHP OPcache: 启用操作码缓存
- MySQL索引: 已创建必要索引
- Nginx缓存: 配置静态文件缓存
- 会话优化: 使用文件或Redis存储会话
- 定期检查
storage/logs/app.log - 监控数据库连接和查询性能
- 定期备份数据库和上传文件
- 权限错误: 检查文件所有者和权限设置
- 数据库连接失败: 检查.env配置和数据库服务状态
- 404错误: 检查Web服务器配置和URL重写
- 上传失败: 检查storage/uploads目录权限
# 查看应用日志
tail -f storage/logs/app.log
# 查看Nginx日志
sudo tail -f /var/log/nginx/gesp_*.log
# 查看PHP错误日志
sudo tail -f /var/log/php8.1-fpm.log本项目采用 MIT 许可证 - 详见 LICENSE 文件
欢迎提交Issue和Pull Request来改进项目!
- Fork 项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
- 📧 邮箱: [your-email@example.com]
- 🐛 问题反馈: [GitHub Issues]
- 📚 文档: [项目Wiki]
- 题目评论和讨论功能
- 学习小组和班级管理
- 更多题目类型支持 (填空题、编程题)
- 移动端APP
- AI智能推荐练习
- v2.0.0 - 系统重构完成 (当前版本)
- 全新的GESP模拟考试系统
- 基于标签的动态组卷
- 现代化UI设计 (Bootstrap 5)
- 简化的数据库结构
- 优化的用户体验
- v1.0.0 - 基础功能完成
- 多模式练习系统
- 基础模拟考试功能
- 错题本和收藏系统
- 管理后台
- CSV批量导入
开始您的GESP学习之旅吧! 🚀