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

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

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

相关推荐
uzong2 小时前
技术故障复盘模版
后端
GetcharZp2 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
加班是不可能的,除非双倍日工资2 小时前
css预编译器实现星空背景图
前端·css·vue3
桦说编程2 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研2 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi3 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
gnip3 小时前
vite和webpack打包结构控制
前端·javascript
excel4 小时前
在二维 Canvas 中模拟三角形绕 X、Y 轴旋转
前端
阿华的代码王国4 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
一条上岸小咸鱼4 小时前
Kotlin 基本数据类型(三):Booleans、Characters
android·前端·kotlin