# 上课提醒 **Repository Path**: nbzch/course-reminder ## Basic Information - **Project Name**: 上课提醒 - **Description**: 一个上课提醒php项目,可以自定义课表和作息表,上课前提醒。 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-05 - **Last Updated**: 2026-06-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #课程提醒 (Course Reminder) 一个基于 PHP 的课程提醒应用,帮助学生跟踪课程安排并在适当时刻发送提醒通知。 ## 功能特性 - **多学期管理**:支持配置和管理多个学期的课程安排 - **课程提醒**:自动检测并提醒即将开始的课程 - **时间冲突检测**:检查课程时间是否冲突 - **灵活的排课设置**:支持按星期、日期范围设置课程 - **PWA 支持**:可作为渐进式 Web 应用安装使用(Android/iOS) - **离线支持**:通过 Service Worker 实现离线缓存 - **全屏模式**:支持全屏显示课程表,适合平板展示 - **屏幕常亮**:全屏模式下自动保持屏幕常亮(Wake Lock API) ## 技术栈 - PHP 后端 - Service Worker (sw.js) - JSON 数据存储 - PWA (manifest.json) ## 目录结构 ``` ├── api.php # API 接口 - 配置与学期管理 ├── index.php # 主入口 - 课程时间计算 ├── scheduler.php # 调度器 - 课程调度逻辑 ├── notify.php # 通知模块 - 日志记录 ├── sw.js # Service Worker - 离线缓存 ├── config.json # 应用配置 ├── schedule.json # 课程安排数据 ├── semesters_config.json # 学期配置 ├── semesters/ # 学期数据目录 │ ├── 2025_2.json │ └── sem_2026_08_26.json ├── uploads/ # 上传文件目录 │ └── system-alarm.oga ├── icon-192.png # PWA图标 (192x192) ├── icon-512.png # PWA图标 (512x512) ├── icon.svg # SVG图标 └── rings/ # 提示音 └── default.wav ``` ## 快速开始 ### 环境要求 - PHP 7.4+ - Web 服务器 (Apache/Nginx/PHP内置服务器) ### 安装部署 1. 克隆项目到 Web 服务器目录: ```bash git clone https://gitee.com/nbzch/course-reminder.git ``` 2. 配置 Web 服务器,确保可读写配置文件 3. 使用 PHP 内置服务器快速测试: ```bash php -S localhost:8080 ``` 4. 访问 `http://localhost:8080` ### 使用 systemctl 管理服务 (Linux) ```bash # 启动服务 ./start.sh # 停止服务 pkill -f "php -S" ``` ## 配置说明 ### 学期配置 (semesters_config.json) ```json { "semesters": [ { "id": "2025_2", "name": "2025春季学期", "start": "2025-03-01", "end": "2025-07-15" } ], "active_semester": "2025_2" } ``` ### 课程配置 (schedule.json) ```json { "periods": { "1": {"start": "08:00", "end": "08:45"}, "2": {"start": "08:55", "end": "09:40"} }, "courses": [ { "name": "数据结构", "day_of_week": [1, 3, 5], "period": "1", "weeks": [1, 16] } ] } ``` ## API 接口 ### 配置管理 - `loadConfig()` - 加载应用配置 - `saveConfig($cfg)` - 保存应用配置 ### 学期管理 - `loadSemestersCfg()` - 加载学期配置 - `saveSemestersCfg($sc)` - 保存学期配置 - `loadSemester($id)` - 加载指定学期数据 - `saveSemester($id, $data)` - 保存学期数据 - `getActiveSemester()` - 获取当前激活学期 - `resolveSemester($input)` - 解析学期信息 ### 课程查询 - `getCourseTimeStr($course, $pmap)` - 获取课程时间字符串 - `getCourseStartEnd($course, $pmap)` - 获取课程开始和结束时间 - `isCourseActiveOnDate($course, $pmap, $date_ts, $overrides)` - 判断课程在指定日期是否有效 - `isCourseActiveToday($course, $pmap)` - 判断课程今天是否有效 - `getRemainingSessions($course)` - 获取剩余课程次数 ## 核心函数说明 ### 时间处理 - `timeToMin($t)` - 将时间转换为分钟数 - `getEffectiveDayOfWeek($ts, $overrides)` - 获取星期几(考虑调课) ### 日志 - `log_msg($s)` - 记录日志消息 ## 注意事项 1. 确保 `semesters` 目录有写入权限 2. 定期备份 `config.json` 和 `schedule.json` 3. 上传的提醒音频文件格式建议使用 OGA 或 WAV ## 许可证 MIT License