基于微信公众号小程序的课表管理平台设计与实现

基于微信公众号小程序的课表管理平台设计与实现

1、系统架构

2、公众号小程序

(1)公告通知/教务通知/考试安排

管理员发布通知后,教师/学生能实时接收通知,通知内容包括文本、图片、视频、链接等。根据教师所属院系定向推送相关通知,避免信息干扰。

(2)上课提醒:

教师/学生用户在微信端登录平台后获取该用户对应课表信息,系统自动识别用户课表中第一节课的开始时间,并以此为基础提前1小时触发提醒。例如用户周一上午8:00有课程,系统会在周一上午7:00向用户发出提醒,提醒内容包括课程、时间、教室信息等。

(3)教室申请:

需要申请使用教室时,可点击教室申请查看教室的使用状况及相关设备。确定好需要的教室后,按学期、校区、教学楼、周次、星期、节次、等维度筛选,并备注用途。

例如:当我点击该教室申请占用后,该教室状态第一节为红色表示已占用,到第二节课后又可以为正常为未使用状态。

(4)我的课表:

管理员通过后台管理将课表信息上传后,教师/学生能实时获取课表信息方便查看自己的课表。课表会显示周一至周日的课程信息,内容包括课程名称、授课教师/授课班级、教室位置、上课时间等信息。

(5)个人中心:

(6)交流反馈:

可在交流社区发布教学经验分享、教学资源(如课件、教案等),支持搜索。学生可编辑个人反馈内容(如标题、详细内容),可添加图片或文件进行说明,支持反馈内容模糊搜索。可发出帖子提问课程、教学安排等相关问题,可查看其他同学的提问及教师回复,可对其他反馈内容进行评论。

(7)调课申请:

教师微信端登录后点击选择申请调课按钮,教师根据实际需求选择需要调整的课程,接着详细选择调课的具体周次、节次、以及教室信息。对于调课理由,教师既可以选择预设的常见理由,如"参加学术会议""身体突发不适"等,也可以手动输入详细的特殊原因。为增强申请的可信度,教师还能上传相关证明材料,如会议邀请函、医院的诊断书等。点击提交后,发送到后台管理员审核,教师可在平台上随时查看审核状态。若调课成功,系统会向相关教师和学生发出调课通知。调课成功即发出调课通知并实时更新相关人员课表,若审核不通过及时驳回申请并告知教师原因和修改建议,例如调课时间与其他教学活动冲突等,方便后续教师重新提交。

能选择周次、时间(第几节课到第几节课)、教室地点、上课班级等。

在管理员驳回之后,教师能够看到驳回的理由。

(8)课程统计

根据学生课表统计出学生已修课程的学分、学时、(按学期、课程类型等)。学生可将课程统计结果导出为报告文件,便于存档或与教师交流。

根据课程统计计算出学生已获得的课程学分、学时等(按学期、课程类型等)情况设置学业预警(低于2),对可能存在学业风险的学生进行预警提示。

3、数据库设计

php 复制代码
// 课表集合
db.createCollection('courses', {
  validator: {
    $jsonSchema: {
      required: ['userId', 'courseName', 'time', 'classroom'],
      properties: {
        userId: {bsonType: 'string'}, // 关联用户ID
        semester: {bsonType: 'string'}, // 学期信息
        weekdays: { 
          type: 'array', // 周一至周日课程
          items: {
            lessons: {
              type: 'array',
              items: {
                courseName: 'string',
                teacher: 'string',
                startTime: 'date',
                endTime: 'date',
                classroom: 'string'
              }
            }
          }
        }
      }
    }
  }
});

// 教室状态集合
db.createCollection('classrooms', {
  validator: {
    $jsonSchema: {
      required: ['building', 'roomNumber', 'schedule'],
      properties: {
        schedule: {
          type: 'array', // 按周次存储占用状态
          items: {
            week: 'int',
            days: {
              type: 'array',
              items: {
                periods: {
                  type: 'array', // 每节课的状态
                  items: {
                    status: {
                      enum: ['available', 'reserved', 'in_use']
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
});

4、核心功能实现

  1. 上课提醒(cloud/functions/reminder)
php 复制代码
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()

exports.main = async (event, context) => {
  // 每天凌晨获取次日课程
  const now = new Date()
  const tomorrow = new Date(now.setDate(now.getDate() + 1))
  
  const res = await db.collection('courses').aggregate()
    .match({
      userId: event.userInfo.openId,
      'weekdays.days.lessons.startTime': _.gte(tomorrow)
    })
    .project({
      firstLesson: { $arrayElemAt: ['$weekdays.days.lessons', 0] }
    })
    .end()

  // 发送订阅消息
  await cloud.openapi.subscribeMessage.send({
    touser: event.userInfo.openId,
    templateId: 'REMINDER_TEMPLATE_ID',
    data: {
      thing1: { value: res.data[0].courseName },
      time2: { value: formatTime(res.data[0].startTime) },
      thing3: { value: res.data[0].classroom }
    }
  })
}

function formatTime(date) {
  // 时间格式化逻辑...
}
  1. 教室申请(cloud/functions/classroom)
javascript 复制代码
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()

exports.main = async (event, context) => {
  const { building, room, week, day, periods } = event
  
  // 检查教室状态
  const classroom = await db.collection('classrooms').doc(`${building}-${room}`)
    .update({
      data: {
        [`schedule.${week-1}.days.${day-1}.periods`]: periods.map(p => ({
          status: 'reserved'
        }))
      }
    })

  // 更新申请记录
  await db.collection('reservations').add({
    data: {
      userId: event.userInfo.openId,
      status: 'pending',
      applyTime: new Date(),
      ...event
    }
  })
}

5、前端核心组件

  1. 课表展示(miniprogram/components/schedule)
javascript 复制代码
Component({
  data: {
    currentWeek: 1,
    schedule: []
  },

  methods: {
    async loadSchedule() {
      const res = await wx.cloud.callFunction({
        name: 'course',
        data: {
          action: 'get',
          week: this.data.currentWeek
        }
      })
      
      this.setData({
        schedule: res.result.data.map(day => ({
          ...day,
          lessons: day.lessons.map(lesson => ({
            ...lesson,
            timeRange: `${lesson.startTime}~${lesson.endTime}`
          }))
        }))
      })
    }
  }
})

6、管理员后台

(1) 用户管理:赋予用户权限。

(2)学生管理:姓名、学号、学院、专业、班级、身份证号码、电话号、性别、密码、备注等信息。

(3)课表管理:(教师课表、学生课表)管理课程实现课表的更新与展示,提供准确的课程时间与地点等信息。

(4)课程管理:支撑课程基础数据的建档维护工作,涵盖课程命名、学分设置、课程属性等核心要素的标准化录入。

(5)院系班级管理:统筹院系专业结构配置与班级动态调整,实现组织结构信息的全生命周期维护。

(6)公告通知管理:构建即时化信息传递通道,精准投放校园公告、活动预告等公共资讯至目标用户群体。

(7)教务通知管理:推送教学计划变更、教务规章更新等关键信息至师生端,确保管理决策的及时传达。

(8)调课申请管理:构建调课申请全流程监管机制,涵盖申请审核、资源调配、课表同步等核心环节。

(9)考试安排:用于向师生传递相关考试信息,包括科目设置、时间规划、监考人员配置等关键维度。

(10)教室信息管理:动态维护教学场所资源档案,实时更新教室占用状态、设备清单等核心参数。

(11)交流反馈管理:构建师生双向沟通平台,支撑教学问题提报、经验交流等互动场景,驱动管理服务持续优化。

相关推荐
EndingCoder17 分钟前
React从基础入门到高级实战:React 高级主题 - React 微前端实践:构建可扩展的大型应用
前端·javascript·react.js·前端框架·状态模式
橘子青衫20 分钟前
Java多线程编程:深入探索线程同步与互斥的实战策略
java·后端·性能优化
shengjk125 分钟前
一文搞懂 python __init__.py 文件
后端
BigTopOne1 小时前
【ijkplayer】 android 初始化硬解码
前端
泯泷1 小时前
编写 Dockerfile:从入门到精通
后端·docker·容器
1024小神1 小时前
rust或tauri项目执行命令的时候,cmd窗口也会弹出显示解决方法
前端·javascript
焦个朋友吧1 小时前
《云上选座》项目分析
vue.js·后端
橙某人1 小时前
🤝和Ollama贴贴!解锁本地大模型的「私人订制」狂欢🎉
前端·deepseek
贩卖纯净水.1 小时前
Webpack搭建本地服务器
前端·webpack·node.js
紫气东来,茉上花开1 小时前
[特殊字符] Spring Boot底层原理深度解析与高级面试题精析
spring boot·后端·spring