Skip to content

highertq/GESP_Practice

Repository files navigation

GESP信息学C++历年选择题/判断题刷题网站

一个基于原生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+ 内存

安装部署

  1. 下载代码

    git clone <repository-url> /var/www/gesp
    cd /var/www/gesp
  2. 设置权限

    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
  3. 配置数据库

    mysql -u root -p < scripts/gesp_system_final.sql
  4. 配置应用

    cp env.example .env
    # 编辑 .env 文件,设置数据库连接等配置
  5. 配置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
  6. 测试系统

    # 访问网站测试功能
    # 默认管理员账户: 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级难度标记

🎮 使用指南

学生使用

  1. 注册登录: 创建账户并登录
  2. 选择练习模式:
    • 按年份级别练习历年真题
    • 按知识标签进行专项练习
    • 随机练习增加趣味性
  3. GESP模拟考试:
    • 选择考试级别和年份
    • 系统自动组卷(15道选择题 + 10道判断题)
    • 60分钟限时考试,实时倒计时
    • 紧凑的题目导航,支持快速跳转
    • 考试结束后查看详细成绩和解析
  4. 复习管理: 查看错题本和收藏题目
  5. 学习统计: 查看个人学习数据和进度

管理员使用

  1. 题目管理: 添加、编辑、删除题目
  2. 用户管理: 查看用户列表,设置管理员权限
  3. 数据统计: 查看系统使用情况和答题统计

键盘快捷键

  • 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
  • 监控数据库连接和查询性能
  • 定期备份数据库和上传文件

🛠️ 故障排除

常见问题

  1. 权限错误: 检查文件所有者和权限设置
  2. 数据库连接失败: 检查.env配置和数据库服务状态
  3. 404错误: 检查Web服务器配置和URL重写
  4. 上传失败: 检查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来改进项目!

贡献流程

  1. Fork 项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

📞 支持

🎯 路线图

计划功能

  • 题目评论和讨论功能
  • 学习小组和班级管理
  • 更多题目类型支持 (填空题、编程题)
  • 移动端APP
  • AI智能推荐练习

版本历史

  • v2.0.0 - 系统重构完成 (当前版本)
    • 全新的GESP模拟考试系统
    • 基于标签的动态组卷
    • 现代化UI设计 (Bootstrap 5)
    • 简化的数据库结构
    • 优化的用户体验
  • v1.0.0 - 基础功能完成
    • 多模式练习系统
    • 基础模拟考试功能
    • 错题本和收藏系统
    • 管理后台
    • CSV批量导入

开始您的GESP学习之旅吧! 🚀

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages