APP下载

基于云开发的高校课程助手小程序的设计

2022-05-30曾水新黄日胜

电脑知识与技术 2022年28期
关键词:微信小程序

曾水新 黄日胜

摘要:目前智慧校园平台不能满足细粒度的课程层面的信息化需求,高校课程助手是一款基于云开发的微信小程序,有签到、成绩管理、通知等功能。签到功能利用手机接收低功耗蓝牙信号计算距离,解决市面上大多数签到系统容易作弊的问题;成绩管理功能弥补了部分教务系统不能录入平时成绩、作业成绩的不足;通知功能是为教师发送课程通知、文章而设计的功能,添加了学生确认的环境,避免有学生漏看重要通知的问题。

关键词:微信小程序;云开发;教务系统;考勤系统;JavaScript

中图分类号:TP311.52      文献标识码:A

文章编号:1009-3044(2022)28-0034-04

1 引言

近年来,国内的教育信息化发展迅速,各高校建设的智慧校园平台,覆盖了OA、教务、图书、科研、资产、财务等领域,极大提高了办公效率。智慧校园是一个庞大的综合解决方案,投资大、周期长,可以满足学校的大部分的、共性的信息化需求,但无法满足学校部分个性化需求。信息系统精细化的管理,需要在智慧校园平台基础上,不断增加小的信息系统,形成“智慧校园+”的格局,即“大平台+小工具”,大平台解决稳定的、通用的需求,小工具系统作为补充,满足个性化的、临时性的、探索性的需求。

由于微信的覆盖率广、小程序开发成本低、且跨平台、云开发无须购买服务器,微信小程序是开发智慧校园平台小工具的理想载体。目前服务高校的小程序的研究已非常丰富,如:李海燕的教务助手小程序[1]、李霞的高校新生预报到系统[2]、闵慧的查寝打卡微信小程序[3]、张辰瑞的高校基层党建平台[4]、马延立的基于微信小程序的在线考试系统[5]、潘俊芳的图书馆座位预约系统[6]等。

高校课程助手小程序系统是智慧校园一个补充,使信息化服务下沉到课程层面,为学生提供便利,让教师集中精力在核心教学事务。

2 需求分析

2.1 基于室内定位的签到

为了杜绝安全隐患,一些高校要求教师每节课对学生考勤。点名是重复而烦琐的课堂活动,如果每节课由教师口头点名,会浪费宝贵的课堂时间,因此在高校考勤的信息化是十分必要的。

市面上有很多考勤系统,一般可分三类:一种为一键签到式的,教师发起点名后,学生在手机或电脑一键签到,这种方式无位置信息,无法保证学生是否在教室;二是动态签到,如二维码签到、手势签到,学生扫描动态变化的二维码,或输入与教师相同的手势,这种方式加入了随机信息,以保证学生在现场才能签到,但是学生可拍照发给不在场的学生,绕过限制;第三种是基于GPS的签到,学生手机获取定位,在允许的位置内才能签到,由于GPS定位的精度不够,经常会出现签到失败,而且容易被破解,如安装一个虚拟定位软件。

因此,需要一个可室内定位的、操作方便的考勤系统,确保在教室的学生才可签到。

2.2 平时成绩查询

教务系统一般都有成绩发布的功能,一般仅限于期末考试。高校的课程有作业成绩、平时测验成绩、考勤成绩,是形成性考核的组成部分,学生需要一个随时能查询并且知道加权后的成绩的系统。

2.3 可确认课程消息

专业教师经常需要发送消息给学生,如考试通知、调课通知、作业提醒、参考资料等,以往的做法是发到课程群或口头通知,教师无法确认学生是否收到,因此希望有一个类似钉钉消息、需本人确认的通知系统。

3 系统前端的设计与实现

3.1 微信小程序的架构

小程序是一种无须安装的“轻应用”,目前主流的互联网企业都发布了自己的小程序,微信小程序是腾讯公司在2017年推出的,2022年第一季度日活跃用户数超过5亿[7],2022年H1微信、支付宝、抖音、快手等多个平台小程序数量超过750万,日活跃用户数量超过7.8亿[8]。

小程序无论是外在表现还是内部技术都与移动Web相似,Web前端开发人员很容易上手。传统Web前端的技术栈是JavaScript + HTML + CSS,而小程序是JavaScript + WXML + WXSS,JavaScript負责业务逻辑,WXML和WXSS负责界面,WXML与HTML有类似的思想,但有自己的一套标签,在WXSS里可以直接使用CSS的大多数语法。

微信小程序的架构如图1所示,由视图层、逻辑层组成,视图层用于渲染页面,逻辑层用于运行JS脚本,由两个独立的线程管理。视图层和逻辑层通过系统层的JSBridge进行通信,逻辑层把数据变化通知到视图层,触发视图层页面更新,视图层把触发的事件通知到逻辑层进行业务处理。

3.2 主页

系统有教师和学生两种角色。启动时,系统读取本地缓存,获取用户信息(userInfo) 里的角色,根据角色显示对应的主页,图1(a) 为教师主页。如果本地缓存读取失败,则向服务器发起请求拉取用户信息。

小程序提供了wx.setStorage()和wx.getStorage()函数用于设置、读取缓存,这两个函数是没有时效管理的,因此封装了两个函数,分别为setTimedStorage()和getTimedStorage(),存入的数据如果超出设置的时效,则返回空。使用getTimedStorage()读取用户信息,隔一定的时间会“读取失败”,从而达到强制更新用户信息的效果。

主页除了界面渲染,还做初始化的工作:1) 判定是否有新版本,如有则调用更新管理器wx.getUpdateManager()下载并更新。2) 判定用户的微信基础库是否达到最低要求,如过低则停止运行。3) 异步下载图片、音频资源。4) 获取班级列表。

3.3 用户管理

用户管理包括申请认证、审核身份、移除身份、学生名单,如图2(a) 下方所示。

1) 申请认证。用户未绑定时,导航到认证页,如图2(e) 所示。用户信息表以学生学号、教师工号为索引,教师与学生信息提前导入数据库。超级管理员需手动绑定,教师、学生通过身份认证页面绑定微信账号。

服务器端检查用户表是否存在该学号、检测学号与姓名是否对应。“暗号”字段由教师随机设定、口头通知,因此只有在现场的人员才能填写正确,防止外部人员申请认证。校验通过后,将该用户设置为待认证状态。

2) 审核身份。教师端列出将待认证的學生的信息,批量审核。

3) 移除身份。移除身份是将微信账号与用户表解绑,并不会删除用户之前形成的签到、成绩单、通知等历史数据。这个功能允许学生或教师更换绑定的微信账号。

4) 学生名单。用户名单允许教师根据行政班、审核状态、姓名等信息查询学生。

3.4 自主签到

本系统的一个特色是应用iBeacon技术实现了室内签到功能。iBeacon是苹果公司推出的一项室内定位技术,用于弥补卫星定位在室内无法接收信号、精度不足的缺陷。iBeacon的技术定位的原理是:iBeacon设备(蓝牙信标)按一定的时间间隔发出广播数据包,数据包的信息包含了可自定义的设备标志信息以及RSSI信号强度信息,客户端根据RSSI值计算与设备的距离。

iBeacon蓝牙信标发射的是BLE(Bluetooth Low Energy,低功耗蓝牙技术)信号,功耗极低,通常使用两三年才需要更换电池;微型iBeacon信标的直径仅比一个硬币稍大,便于携带,教师可以放入公文包或者随身放到裤兜里。

自主签到功能的流程如下:

1) 教师新建点名。教师填写标题、节次、分钟,如图2(b) 所示。为了便于在手机快速操作,加了常用的“签到”“签退”两个快捷链接;节次会根据系统时间自动显示,也允许教师手动点“-”“+”按钮进行修改,因为有可能因提前或延迟下课造成时间与节次不对应;分钟默认为5分钟,可通过“-”“+”按钮微调。

2) 学生端从服务器获取点名信息,包括上个步骤的信息以及iBeacon信息。

3) 学生端搜索iBeacon信号。如果有iBeacon信号,检测其uuid是否正确;遍历iBeacon对象列表,检测其major、minor字段是否正确;计算距离,如果在预置的范围外,则提示学生靠近教师,如果距离符合条件,则进入下一步骤。

4) 将点名信息传给下一页面。

小程序页面间通信主要有三种方式:一是地址传参,规则与Web应用一样,即在URL后面加“?参数名称1=参数值1&参数名称2=参数值2……”,这种方式适合参数少的场景。二是EventChannel机制,即通过“派发事件”及“注册事件监听器”来实现基于事件的页面通信,EventChannel是双向的通信通道,但实现较烦琐。三是将消息保存在全局变量里,约定存取规则,这种方式综合了前两者的优点,本系统采用的就是这种方式,封装了一个传参管理器,可以方便地使用全局变量传参。

5) 学生签到。签到页面读取上个步骤保存的信息,显示点名信息并倒计时,学生需在规定的时间内签到,页面如图2(c) 所示。

3.5 扫码签到

扫码签到功能是后期迭代开发增加的功能,原因是发现有学生遇到自主签到失败的情况。由于自主签到需要手机的硬件支持,要求学生打开定位、蓝牙,接收iBeacon信号,有的配置低的手机,可能会发生无法接收iBeacon而造成签到失败的问题。

如果学生端扫教师端,教师端生成一个二维码供多个学生扫码,好处是效率高。但会有作弊漏洞,学生可拍下照片发给不在场的同学扫码签到。

如果教师端扫学生端,便可杜绝这种作弊方式,流程为:

1) 学生端向服务器发出申请。

2) 服务器根据学生的微信openid,检测数据库的scanApplication表是否有该学生的申请信息,如有则删除旧记录,然后新建一条申请记录,字段包括“_id”(自动生成的随机字符串)、姓名、学号、失效时间。

3) 学生端接收服务器返回的“_id”字段,并在canvas(画布)组件上绘出二维码。

微信小程序官方并未提供绘制二维码的功能,本系统使用的是第三方提供的JS库weapp-qrcode(官方地址:https://github.com/yingye/weapp-qrcode) ,使用weapp-qrcode绘制二维码非常简便,调用它的drawQrcode()方法,提供二维码的宽高、画布id、文本内容即可。

4) 教师端扫描二维码,读取申请id。

5) 教师端将申请id发送到服务器校验。如scanApplication不存在此id,提示“申请记录不存在”;如超出失效时间,提示“二维码已失效”;读取该学生的签到表的记录,如果签到表的状态字段为“已签”,则不允许扫码签到。

6) 教师端显示被扫码学生的信息。

7) 教师点击“代签”按钮,服务器更新该学生该课次的签到记录,将状态设置为“代签”、签到时间设置为当前时间。

3.6 点名列表/历史签到

“点名列表”是教师端的菜单,显示以往的点名列表,包含标题、周次、日期等摘要信息,点击后显示该次点名的详情。

“历史签到”是学生端的菜单,以Tab菜单过滤显示以往各个状态的签到情况。

3.7 统计

统计页面显示签到、考试成绩的详细情况。教师端提供了“行政班”“姓名”“时间”等查询条件;学生端只显示本人的统计结果。

3.8 通知管理

通知管理是一个有确认状态的新闻发布模块。教师发布了通知,学生可在小程序里点击确认按钮,以防止重要的通知被疏忽,教师端可查看未确认的名单。通知的属性有标题、发布时间、内容、状态。教师端提供了查看、发布、修改、删除功能,学生端仅可查看、确认。通知管理使用了rich-text(富文本)组件,rich-text可以渲染部分html标签支持class和style属性,可令文本有更丰富的表现方式,弥补了text组件在文本渲染上的不足。

3.9 成绩管理

成绩管理是教师端用于设置成绩比例的工具。由于加权后的成绩保存在用户表里以加快速度,因此每次更新了成绩或重新设置了比例,都需要重新计算所有学生的成绩并更新用户表。

4 系统后端的设计与实现

系统的后端采用了小程序的云开发技术。

4.1 微信小程序云开发简介

微信小程序的云开发是Serverless的開发理念,开发者无须搭建服务器即可使用云端功能。云开发为开发者提供完整的原生云端支持和微信服务支持,弱化后端和运维概念,无须搭建服务器,使用平台提供的API进行核心业务开发,即可实现快速上线和迭代,同时这一能力,同开发者已经使用的云服务相互兼容,并不互斥。

云开发提供了几大基础能力支持:

1) 云函数。开发者无须自建服务器,在云端运行的代码,微信私有协议天然鉴权,开发者只须编写自身业务逻辑代码。

2) 数据库。无须自建数据库,一个既可在小程序前端操作,也能在云函数中读写的JSON数据库。

3) 存储。无须自建存储和CDN,在小程序前端直接上传/下载云端文件,在云开发控制台可视化管理。

4) 云调用。原生微信服务集成,基于云函数免鉴权使用小程序开放接口的能力,包括服务端调用、获取开放数据等能力。

4.2 数据库设计

云开发提供了一个JSON数据库,数据库中的每条记录都是一个JSON对象。JSON数据库里的“集合”(collection) 对应于关系型数据库的“表”(table) ,集合可看作一个JSON数组,数组中的每个对象就是一条记录,记录的格式是JSON对象。

4.3 后端业务处理

后端业务使用小程序的云函数编写,小程序的云函数是一段运行在云端的代码,它实际上是一个node.js的环境。使用云函数的优势是:1) 无须管理服务器。2) 后端代码与前端一起在微信开发者工具内编写,就跟写本地代码一样,一键上传部署即可运行后端代码。3) 获取用户的openid非常方便,无须维护复杂的鉴权机制。

云函数之间不能相互调用,如果写多个云函数,通用的逻辑处理如数据库查询不能复用,会造成代码管理维护上的不便。可以通过第三方库tcb-router管理路由解决这个问题:所有的业务处理放在单个云函数里实现,将每一个请求处理函数分解到tcb-router的路由处理函数里。小程序向后端服务器发送请求时,需多加一个url作为路由标志。

将需要复用的函数,定义为云函数的内部函数,通过此方式达到了代码复用的效果,项目中可复用的内部函数有:

loaduser():加载用户信息;

loadStuclasses():加载学生的班级

loadTeacherClasses():加载教师的班级

queryAll():查询所有记录

pageQuery():分页查询

update():更新表

del():删除记录

myCount():个人统计摘要

getOpenid():获取用户的openid

5 结束语

本系统已经稳定运行了一年多,其间根据反馈进行了多次迭代升级,目前已经基本满足师生的要求。系统的意义在于:一是大量减少了教师的工作量,让教师有更多的时间投入在更有意义的课堂讲授上;二是学生可查询自己的平时成绩,提高了便利性;三是杜绝了签到的作弊情况;四是确保了课程通知的可靠性。

参考文献:

[1] 李海燕,陈善柳.教务助手小程序的实现[J].电脑知识与技术,2022,18(13):53-54.

[2] 李霞.基于微信小程序的高校新生预报到系统设计与实现[J].微型电脑应用,2022,38(7):12-15.

[3] 闵慧,李鹏,刘婷,等.查寝打卡微信小程序的设计与实现[J].计算机时代,2022(8):80-82.

[4] 张辰瑞,徐伟,祝晓龙,等.基于微信小程序的高校基层党建平台开发与实现[J].软件,2022,43(6):76-81.

[5] 马延立.基于微信小程序的在线考试系统设计与实现[J].信息记录材料,2022,23(6):151-154.

[6] 潘俊芳,侯振兴.基于微信小程序的图书馆座位预约系统的设计[J].黑龙江工业学院学报(综合版),2022,22(5):66-71.

[7] 腾讯公司.腾讯公布二零二二年第一季业绩[EB/OL].[2022-05-25].https://static.www.tencent.com/uploads/2022/05/18/9a46878abd6009cacd79f241a814442b.pdf.

[8]北京阿拉丁未来科技有限责任公司.2022年H1小程序互联网发展白皮书[EB/OL].[2022-08-10].https://aldzs.com/viewpointarticle?id=16465.

【通联编辑:谢媛媛】

猜你喜欢

微信小程序
图书馆微信小程序的应用现状及前景分析
基于CNKI的微信小程序研究文献计量分析
信息技术与专业课程融合路径探索
当图书馆遇上微信小程序