# 学生选科系统 **Repository Path**: iskender/xuanke ## Basic Information - **Project Name**: 学生选科系统 - **Description**: 基于新高考高中学生选科系统 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-17 - **Last Updated**: 2025-11-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 选科系统 一个基于PHP+MySQL的轻量级选科系统,使用Bootstrap UI框架,支持手机响应式设计。 ## 功能特点 ### 学生端功能 - 学生登录系统(账号密码,密码为身份证后六位) - 选科建议展示页面,帮助学生了解各科目组合 - 选科功能,支持物理类和历史类组合选择 - 选科确认功能,学生可以保存并确认选科结果 - 响应式设计,支持手机端浏览(禁止缩放) ### 管理员端功能 - 管理员登录系统(账号:admin,密码:admin123) - 学生管理功能(添加、删除、批量导入学生信息) - 选科状态查看(按状态筛选:未选科、待确认、已确认) - 选科状态数据导出功能(支持搜索条件导出) - 学生详情查看 - 系统设置管理 - 数据统计与分析(按班级统计、选科组合统计) ## 系统要求 - PHP 7.0+ - MySQL 5.7+ - Web服务器(Apache/Nginx) - PDO扩展(PHP) - Session存储路径写入权限 ## 安装步骤 1. 将项目文件上传到Web服务器目录 2. 创建MySQL数据库并导入`database_complete.sql`文件 3. 修改`config/database.php`中的数据库连接信息 4. 确保Web服务器有权限访问项目目录 5. 启动Web服务器,访问`index.php`开始使用 ## 目录结构 ``` xuanke/ ├── app/ # 应用核心目录 │ ├── controllers/ # 控制器层(业务逻辑) │ │ └── functions.php # 公共控制器 │ ├── models/ # 模型层(数据操作) │ │ ├── admin_functions.php # 管理员模型 │ │ └── selection_status_functions.php │ └── views/ # 视图层(页面显示) │ ├── admin/ # 管理员后台页面 │ ├── student/ # 学生端页面 │ └── templates/ # 公共模板 ├── api/ # API接口目录 │ ├── save_selection.php # 保存选科 │ ├── confirm_selection.php # 确认选科 │ ├── add_student.php # 添加学生 │ ├── get_student.php # 获取学生信息 │ └── import_students.php # 批量导入学生 ├── config/ # 配置目录 │ ├── constants.php # 系统常量 │ ├── database.php # 数据库配置 │ ├── security_config.php # 安全配置 │ └── environment.local.php # 本地环境配置 ├── css/ # 样式文件 ├── logs/ # 日志目录 ├── utils/ # 工具脚本 │ ├── start.sh # Linux/Mac启动脚本 │ ├── start.bat # Windows启动脚本 │ └── security_check.sh # 安全检查脚本 ├── bootstrap.php # 应用引导文件 ├── index.php # 入口文件 ├── database_complete.sql # 数据库初始化脚本 ├── init_test_data.php # 测试数据初始化脚本 ├── start_debug.php # 调试启动脚本 ├── SECURITY.md # 安全文档 ├── SECURITY_SUMMARY.txt # 安全摘要 └── .htaccess # Apache配置 ``` ## 测试账号 ### 学生账号 - 学号:2023001 - 密码:011234(身份证后六位) ### 管理员账号 - 账号:admin - 密码:admin123 ## 使用说明 ### 学生使用流程 1. 使用学号和密码(身份证后六位)登录系统 2. 首次登录将自动跳转到选科建议页面,了解各科目组合特点 3. 在选科页面浏览物理类和历史类组合 4. 点击选择合适的科目组合 5. 保存选择并确认 6. 可在选科建议页面查看详细的选科指导 ### 管理员使用流程 1. 使用管理员账号登录系统 2. 在管理后台首页查看选科统计数据 3. 在学生管理页面添加、导入或管理学生信息 4. 在选科状态页面查看学生选科情况 5. 可按状态筛选学生(未选科、待确认、已确认) 6. 支持搜索和导出选科状态数据 7. 在系统设置页面配置系统参数 ## 技术栈 - 后端:PHP - 数据库:MySQL - 前端:HTML5, CSS3, JavaScript - UI框架:Bootstrap 5 - 字体图标:Bootstrap Icons ## 安全技术 系统实施了企业级安全防护措施,确保数据绝对安全: ### 身份认证安全 - 登录失败限制(5次失败锁定15分钟) - 会话安全配置(HttpOnly、Strict、SameSite) - 会话固定攻击防护(定期重新生成ID) - 会话超时机制(30分钟自动退出) - 强密码哈希(Argon2ID算法) ### 输入验证与清理 - SQL注入防护(PDO预处理+参数绑定) - XSS防护(多层输入清理+输出转义) - CSRF防护(令牌验证+30分钟过期) - 身份证严格验证(含校验位验证) - 文件上传安全验证 ### 访问控制 - 管理员权限验证 - 学生权限验证(仅访问自己数据) - 请求频率限制(防暴力攻击) - HTTP方法限制 ### 服务器安全 - 安全响应头(X-Frame、X-XSS等) - 目录浏览禁用 - 敏感目录保护(config、logs) - 敏感文件保护(.htaccess规则) ### 日志与监控 - 安全事件日志(JSON格式) - 登录尝试记录 - 管理后台访问日志 ### 数据库安全 - PDO异常模式 - UTF-8编码保护 - 外键约束 - 事务支持 更多安全详情请查看 [SECURITY.md](SECURITY.md) 和 [SECURITY_SUMMARY.txt](SECURITY_SUMMARY.txt)。 ## 数据库结构 系统包含以下主要数据表: 1. **admins** - 管理员表 2. **students** - 学生表 3. **subject_combinations** - 选科组合表 4. **student_selections** - 学生选科记录表 ## 选科组合 系统支持以下选科组合: ### 物理类组合 - 物理+化学+政治(专业覆盖率98%) - 物理+化学+生物(专业覆盖率95%) - 物理+化学+地理(专业覆盖率95%) - 物理+生物+政治(专业覆盖率51%) - 物理+生物+地理(专业覆盖率50%) - 物理+政治+地理(专业覆盖率51%) ### 历史类组合 - 历史+政治+地理(专业覆盖率58%) - 历史+政治+生物(专业覆盖率58%) - 历史+生物+地理(专业覆盖率58%) - 历史+化学+政治(专业覆盖率65%) - 历史+化学+生物(专业覆盖率46%) - 历史+化学+地理(专业覆盖率46%) ## 注意事项 - 确保PHP开启了PDO扩展 - 数据库字符集设置为utf8mb4 - 确保session存储路径有写入权限 - 导出功能需要服务器有写入临时文件的权限 - 批量导入学生功能需要CSV文件格式正确 ## 许可证 MIT License