flask课堂测试小程序97562-计算机课程设计/毕业设计

1 绪论

1.1研究背景与意义

传统的课堂测试环节一直使用纸质试卷发放、人工批阅、成绩手工登统的方式,这种模式在班级规模增大、课程类型多样化的情况下,已经无法满足需求。教师要花费很多时间去处理试卷的印刷、分发、回收和批改工作,学生不能在测试结束后立即得到答题反馈以及知识薄弱点分析[1]。教育信息化建设的发展使电子化测试工具进入了课堂环境,但是现有的解决方案大多只关注单个测试环节,没有和课程资源、选课管理、出勤记录、成绩分析等教学全过程进行深度整合[2]。课堂测试属于教学闭环的重要评价节点,它的数据应该同课程信息、学生学习行为、教师教学安排等产生有机联系,不能成为孤立存在的功能模块。开发出一个可以进行在线考试、课程管理、资源分发、出勤跟踪和成绩统计的综合性课堂测试系统,对提高教学效率、改善学习体验、实现数据驱动的教学决策有现实的必要性[3]。

该系统把学生、教师、管理员三种角色的业务需求综合起来,形成起课前资源预习、课中测试互动、课后成绩反馈、出勤管理等全部的功能链条。教师可以在线发布测试、管理课程资源、录入出勤和成绩,减轻事务性工作负担。学生利用微信小程序随时参与测试、获取课程信息及学习资源,不受时间空间的限制。管理员对课程分类、用户权限、系统设置等进行集中管控,保证数据有序、系统可维护。该系统实践应用可以减少课堂管理人工差错率,规范教学业务流程,改善教育资源分配状况,给同类院校或者培训机构提供可以借鉴的技术方案。

1.2国内外研究现状

国内学者围绕课堂练习与测试环节开展了多维度研究。王利娜从核心素养角度出发,对初中几何课堂练习的优化设计策略进行研究,认为练习设计要服务于学生思维能力的培养[4]。杨和平从语文教学角度出发,提出了课堂练习活动的创意设计方法,重视练习形式同教学目标的契合度[5]。蒋雪花针对小学数学课堂,探究练习设计的实践途径,重视练习密度和难度的梯度安排[6]。李胜男设计基于微信的课堂测试小程序,使用微信小程序和s后端服务相结合的技术路线,证明了移动端课堂测试工具的可行性[7]。综上所述,国内的研究在练习设计理论以及单点工具的实现上取得了进步,但是多角色协同和全流程数据贯通还存在欠缺。本系统功能设计上把课程管理、选课审批、出勤记录、成绩统计等教学全过程的数字化方案融合起来。

国外的学者们也会对课堂测验以及教学互动做进一步的研究。Qi Qinyi对高中英语课堂测试现状进行分析,得出测试频率、反馈及时性都会影响学生的学习动机[8]。Yuan Ren用虚拟现实技术提出钢琴教学互动体验的优化策略,研究技术手段在教学场景中融合的方式[9]。Yiqin Dai等依据情境理论,就植物生长周期科学教具的可持续发展和改进途径展开探究,重视教学工具的设计要遵照认知规律[10]。Kristen Procko等设计出生物化学视觉素养评价工具,用课堂测验和学生访谈来检验评价设计是否有效[11]。Robert Klitzman提出改善导师和学员关系的课堂练习方法,从教学管理的角度来研究互动机制的优化[12]。国外关于教学工具的设计、技术融合的途径以及评估方法的验证等各方面都提出了不同的视角,但是对课堂测试小程序完整的功能体系的研究比较少。主要研究内容

围绕课堂测试小程序的设计和实现开展全部研究工作。首先进行需求调研和功能规划,确定学生、教师、管理员这三个用户的核心业务场景,确定在线考试、课程资源管理、课程信息管理、选课信息管理、选课安排管理、课程出勤管理、课程成绩管理、资源管理、数据统计、最新资讯等模块的具体功能边界。第二步就是技术选型和架构设计,选择Flask作为后端开发框架、微信小程序作为前端展示和交互平台、MySQL作为关系型数据库来存储业务数据,采用前后端分离的架构提高系统的可维护性。在系统设计阶段完成系统架构图、功能结构图、五个核心业务流程图和数据库概念模型、逻辑模型的设计工作。系统实现阶段根据角色划分依次完成各个功能模块的前后端代码编写以及接口联调。系统测试阶段设计测试用例来检验核心功能的业务逻辑是否正确、数据是否一致。最终交付一套功能齐全、运行稳定课堂测试微信小程序,给课堂教学数字化提供实用工具。

2相关技术介绍

2.1Flask框架

Flask是由Python编写的轻量级Web应用框架,其主要的设计理念就是保持简洁和灵活。Flask只提供路由、请求响应处理、模板渲染这些基本的功能,并没有强制集成数据库的ORM、表单验证、用户认证等扩展模块。这样设计可以使得开发者根据项目需求自由选择合适的扩展库,不会出现引入不必要的依赖的情况。本系统使用Flask作为后端服务框架,主要是因为其轻量级和良好的扩展性。Flask的URL路由装饰器使接口定义清晰直观,请求对象封装了GET、POST等常用的数据获取方法,响应对象支持JSON序列化返回。对于课堂测试小程序这样的小型项目来说,Flask可以保证开发效率的同时又不会使代码过于繁琐。Flask内置的开发服务器便于调试,与SQLAlchemy、Flask-Login等扩展的兼容性良好[13]。

2.2微信小程序

微信小程序不需要下载安装就可以直接使用,在微信内置的解析环境中运行。小程序使用MINA框架,分为视图层和逻辑层两个部分。视图层用WXML和WXSS来描述页面的结构和样式,逻辑层用JavaScript处理业务逻辑和数据交互。小程序有诸多原生组件以及API接口,可以实现用户授权、网络请求、本地存储、地图定位等操作。本系统选用微信小程序作为前端平台,因为微信小程序在教育场景中使用率高、使用方便。学生只需通过微信扫码或者搜索就可以进入到系统中,不需要额外安装应用,降低了使用门槛。小程序登录授权同微信账号体系打通,简化用户认证过程。小程序的热更新特性可以避免因为升级而导致用户的困扰,维护工作量小。小程序框架中提供给用户的数据交互的API,可以方便地与Flask的后台交互[14]。

2.3MySQL数据库

MySQL属于开源的关系型数据库管理系统,以稳定性好、性能优异、兼容性佳而闻名。MySQL支持标准的SQL查询语言,有事务处理、索引优化、视图、触发器等数据库特性。其存储引擎架构支持InnoDB等支持事务的引擎,保证数据一致性、完整性。本系统使用MySQL做持久化存储,用来存储用户信息、课程数据、考试成绩、出勤记录等业务数据。MySQL与Python生态兼容性强,使用PyMySQL或者SQLAlchemy等驱动可以很方便地进行数据库的连接和操作。对于课堂测试小程序的数据量,MySQL可以给出较好的查询响应速度和数据吞吐量。MySQL支持多表关联查询,可以实现课程信息和选课记录、考试成绩和学生信息之间的关联检索[15]。

2.4前后端分离架构

前后端分离架构把前端展示和后端业务逻辑分离开来,前端主要负责用户界面交互和数据呈现,后端主要负责业务规则的处理和数据的持久化。前端通过HTTP请求调用后端提供的API接口来获取或者提交数据,数据交换格式使用轻量级的JSON。该种架构模式提高了系统可维护性以及可扩展性,将前端和后端分别进行开发、测试、部署。本系统采用前后端分离架构,微信小程序做为前端主要负责页面渲染和用户交互,Flask后端提供RESTful风格的API接口。小程序端发起网络请求携带用户认证信息,后端验证权限后返回JSON格式的数据,小程序解析数据后更新页面。前后端分离之后,接口可以被复用,将来如果有Web管理端或者其他客户端接入,可以共享同一个后端服务[16]。接口文档的规范化可以促进多人协作开发。

3系统分析

3.1功能需求分析

3.1.1学生用户功能需求

学生用户通过微信小程序参与课堂测试与课程学习。主要功能包括在线考试、课程资源浏览、课程信息查看、选课申请提交、选课安排查询、课程出勤记录查看、课程成绩查询、数据统计图表查看、最新资讯阅读。学生用户用例图如图3-1所示。

图3-1 学生用户用例图

3.1.2教师用户功能需求

教师用户通过后台管理系统管理教学业务。主要功能包括课程资源管理、课程信息管理、选课信息管理、选课安排管理、课程出勤管理、课程成绩管理、资源管理。教师用户用例图如图3-2所示。

图3-2 教师用户用例图

3.1.3管理员用户功能需求

管理员用户负责系统全局配置与业务监督。主要功能包括课程分类管理、课程资源管理、课程信息管理、选课信息管理、选课安排管理、课程出勤管理、课程成绩管理、系统管理、资源管理。管理员用户用例图如图3-3所示。

图3-3 管理员用户用例图

3.2可行性分析

3.2.1技术可行性

系统后端使用的是Flask框架,开发语言是Python,Python有众多的第三方库可以用来快速实现路由定义、请求处理、数据库交互等功能。前端使用的是微信小程序原生框架,微信官方有完整的开发工具和文档。MySQL数据库技术已经比较成熟,并且可以和Python进行良好的连接。前后端分离架构降低模块间的耦合度,技术栈组合经过大量的项目检验,保证本系统的功能需求没有技术上的障碍。

3.2.2操作可行性

系统面向学生、教师、管理员三个用户,各个角色的操作界面都是按着用户的使用习惯来设计的。学生用户用微信小程序完成在线考试、查看课程和资源、查询成绩等操作,界面简单明了。教师用户在Web后台管理课程、选课、出勤、成绩,操作流程符合日常教学管理逻辑。管理员用户对系统进行设置以及审核。用户不需要特别的培训就可以使用。

3.2.3经济可行性

系统开发所用的软件都是开源或者免费的,Python环境、Flask库、MySQL数据库、微信开发者工具等。部署运行可以使用本地服务器或者低成本的云服务器,不需要购买商业软件的授权。系统运行维护只须有基本的技术支持人员,硬件需求低。整体开发和运维成本控制在合理范围内,经济效益好。

4系统设计

4.1系统架构设计

系统使用的是前后端分离的三层架构模式,自上而下地分成用户界面层、应用服务层和数据持久层。用户界面层使用微信小程序来完成数据的展示以及用户的操作采集工作,用HTTP协议向应用服务层发送请求。应用服务层使用Flask框架来实现,接收前端请求之后再调用相应的业务逻辑进行处理,对数据进行校验,执行业务规则,并存取数据。数据持久层用MySQL数据库存储业务数据,用SQLAlchemy等ORM工具同应用服务层交互。系统支持层有微信登录授权、文件存储这些基本的服务。系统架构图如下图4-1所示。

图4-1 系统架构图

4.2系统结构功能设计

系统功能按用户角色来模块化。学生用户端有在线考试、课程资源、课程信息、选课信息、选课安排、课程出勤、课程成绩、数据统计、最新资讯这9个功能模块。教师用户端有课程资源管理、课程信息管理、选课信息管理、选课安排管理、课程出勤管理、课程成绩管理、资源管理这7个功能模块。管理员用户端有课程分类管理、课程资源管理、课程信息管理、选课信息管理、选课安排管理、课程出勤管理、课程成绩管理、系统管理、资源管理这九个功能模块。各个模块之间用数据表来建立业务闭环,选课信息和学生、课程相关联,出勤和成绩记录同具体的选课安排相关联。该系统的功能结构如图4-2所示。

图4-2 系统功能结构图

4.3系统流程设计

4.3.1学生选课流程设计

学生浏览课程信息列表之后提交选课申请,系统产生选课记录并把审核状态设为待审核。教师或者管理员审核通过之后,选课信息就会生效并且自动生成对应的选课安排记录。学生可以查看自己已经选好的课程上课时间、地点。该流程可以达到选课申请与教学安排自动关联的目的。学生选课流程图如图4-3所示。

图4-3 学生选课流程图

4.3.2教师发布在线测试流程设计

教师进入资源管理模块创建在线测试,填写测试名称、答题时长、总分、开放时间范围等信息。测试创建完成后默认为启用状态,学生可在开放时间内进入答题。教师可随时调整测试状态为禁用,暂停学生答题入口。在线测试发布流程图如图4-4所示。

图4-4 在线测试发布流程图

4.3.3教师录入出勤流程设计

教师进入选课安排管理模块,选择具体课程安排后点击出勤录入。系统展示该课程选课学生列表,教师逐条标记出勤状态并填写出勤描述。提交后系统保存出勤记录,学生端可实时查看本人出勤情况。出勤录入流程图如图4-5所示。

图4-5 出勤录入流程图

4.3.4管理员审核课程资源流程设计

教师上传课程资源后,资源状态默认为待审核。管理员进入课程资源管理模块查看待审核资源列表,点击详情查阅资源内容。审核通过后资源在前端课程资源模块对学生可见,驳回则退回教师修改。课程资源审核流程图如图4-6所示。

图4-6 课程资源审核流程图

4.3.5学生参加在线考试流程设计

学生在开放时间范围内进入在线考试模块,选择可用测试开始答题。系统计时器启动,学生逐题作答后可标记题目以便复查。全部题目完成后提交试卷,系统自动计算客观题得分并保存答题记录。学生可查看已提交试卷的得分与答案解析。在线考试流程图如图4-7所示。

图4-7 在线考试流程图

4.4数据库设计

4.4.1概念模型设计

概念模型是对现实世界到信息世界的第一次抽象,把业务需求变成独立于具体的数据库管理系统的数据视图。设计过程中要找出业务运行所依靠的核心实体,提取每一个实体的关键属性,确定实体间的一对一、一对多、多对多联系。E-R图属于表现概念模型的常用可视化手段,可以形象地展现实体集合以及它们之间的联系。根据课堂测试小程序的业务特性,确定学生用户、教师用户、课程信息、课程资源、选课信息、选课安排、课程出勤、课程成绩、考试、用户账户等十个主要实体,形成一个完整的用户管理到教学业务执行的数据闭环[17]。全局E-R模型如图4-8所示。

图4-8 全局E-R图

根据系统分析,系统的主要实体有:学生用户、教师用户、课程信息、课程资源、选课信息、选课安排、课程出勤、课程成绩、考试、用户账户,各个实体具体的属性如下图所示。

(1)学生用户实体主要包括学生用户id、学生学号、学生姓名、学生电话等。如图4-9所示。

图4-9 学生用户实体属性图

(2)教师用户实体主要包括教师用户id、教师姓名、教师工号等。如图4-10所示。

图4-10 教师用户实体属性图

(3)课程信息实体主要包括课程信息id、课程名称、课程分类、授课教师等。如图4-11所示。

图4-11 课程信息实体属性图

(4)课程资源实体主要包括课程资源id、资源名称、学习资源、审核状态等。如图4-12所示。

图4-12 课程资源实体属性图

(5)选课信息实体主要包括选课信息id、课程名称、学生姓名、审核状态等。如图4-13所示。

图4-13 选课信息实体属性图

(6)选课安排实体主要包括选课安排id、课程名称、上课时间、上课地点等。如图4-14所示。

图4-14 选课安排实体属性图

(7)课程出勤实体主要包括课程出勤id、出勤状态、记录日期、出勤描述等。如图4-15所示。

图4-15 课程出勤实体属性图

(8)课程成绩实体主要包括课程成绩id、成绩分数、成绩类型、成绩日期等。如图4-16所示。

图4-16 课程成绩实体属性图

(9)考试实体主要包括考试id、考试名称、答题时长、总分等。如图4-17所示。

图4-17 考试实体属性图

(10)用户账户实体主要包括用户id、用户名、密码、用户组等。如图4-18所示。

图4-18 用户账户实体属性图

4.4.2数据库表设计

在逻辑设计阶段把概念模型转化为MySQL数据库可以支持的表结构,确定每个表的字段名、数据类型、长度限制、主外键关系。根据E-R图中实体和联系,设计出用户账户、学生用户、教师用户、课程信息、课程资源、选课信息、选课安排、课程出勤、课程成绩、考试十张主要的数据表。各个表之间用外键来保证数据的一致性和完整性[18]。

(1)用户账户表主要是用来存储系统登录用户的账号信息。主要包括用户id、用户名、密码、用户组、昵称、手机号码、账户状态等字段。如表4-1所示。

表4-1 用户账户表

序号

字段名

数据类型

长度

备注

1

用户id

int

11

主键

2

用户名

varchar

16

登录账号

3

密码

varchar

64

加密存储

4

用户组

varchar

32

角色标识

5

昵称

varchar

16

显示名称

6

手机号码

varchar

11

联系方式

7

账户状态

smallint

-

可用或冻结

(2)学生用户表主要是用来存储学生身份信息。主要包括学生用户id、学生学号、学生姓名、学生电话、用户id、审核状态等字段。如表4-2所示。

表4-2 学生用户表

序号

字段名

数据类型

长度

备注

1

学生用户id

int

11

主键

2

学生学号

varchar

64

唯一标识

3

学生姓名

varchar

64

真实姓名

4

学生电话

varchar

64

联系电话

5

用户id

int

11

外键关联

6

审核状态

varchar

16

账号审核

(3)教师用户表主要是用来存储教师身份信息。主要包括教师用户id、教师姓名、教师工号、用户id、审核状态等字段。如表4-3所示。

表4-3 教师用户表

序号

字段名

数据类型

长度

备注

1

教师用户id

int

11

主键

2

教师姓名

varchar

64

真实姓名

3

教师工号

varchar

64

工号标识

4

用户id

int

11

外键关联

5

审核状态

varchar

16

账号审核

(4)课程信息表主要是用来存储教师发布的课程基本信息。主要包括课程信息id、课程名称、课程分类、授课教师、上课时间、上课地点、课程学分、课程简介等字段。如表4-4所示。

表4-4 课程信息表

序号

字段名

数据类型

长度

备注

1

课程信息id

int

11

主键

2

课程名称

varchar

64

课程标题

3

课程分类

varchar

64

所属分类

4

授课教师

int

11

外键

5

上课时间

varchar

64

时间安排

6

上课地点

varchar

64

教室位置

7

课程学分

varchar

64

学分值

8

课程简介

text

65535

详细描述

(5)课程资源表主要是用来存储教师上传的教学资料。主要包括课程资源id、资源名称、学习资源、课程分类、教师姓名、审核状态等字段。如表4-5所示。

表4-5 课程资源表

序号

字段名

数据类型

长度

备注

1

课程资源id

int

11

主键

2

资源名称

varchar

64

资料标题

3

学习资源

varchar

255

文件路径

4

课程分类

varchar

64

分类标识

5

教师姓名

varchar

64

上传者

6

审核状态

varchar

16

待审核或通过

(6)选课信息表主要是用来记录学生提交的选课申请。主要包括选课信息id、课程名称、学生姓名、审核状态、上课时间、课程学分等字段。如表4-6所示。

表4-6 选课信息表

序号

字段名

数据类型

长度

备注

1

选课信息id

int

11

主键

2

课程名称

varchar

64

所选课程

3

学生姓名

varchar

64

申请人

4

审核状态

varchar

16

待审核或通过

5

上课时间

varchar

64

课程时间

6

课程学分

varchar

64

学分值

(7)选课安排表主要是用来存储审核通过后的课程分配记录。主要包括选课安排id、课程名称、学生姓名、上课时间、上课地点、授课教师等字段。如表4-7所示。

表4-7 选课安排表

序号

字段名

数据类型

长度

备注

1

选课安排id

int

11

主键

2

课程名称

varchar

64

课程标识

3

学生姓名

varchar

64

选课学生

4

上课时间

varchar

64

时间安排

5

上课地点

varchar

64

教室位置

6

授课教师

int

11

外键

(8)课程出勤表主要是用来记录学生每节课的出勤情况。主要包括课程出勤id、出勤状态、记录日期、出勤描述、课程名称、学生姓名等字段。如表4-8所示。

表4-8 课程出勤表

序号

字段名

数据类型

长度

备注

1

课程出勤id

int

11

主键

2

出勤状态

varchar

64

已签到或缺勤

3

记录日期

date

-

考勤日期

4

出勤描述

text

65535

补充说明

5

课程名称

varchar

64

关联课程

6

学生姓名

varchar

64

关联学生

(9)课程成绩表主要是用来存储学生的课程考核成绩。主要包括课程成绩id、成绩分数、成绩类型、成绩日期、课程名称、学生姓名等字段。如表4-9所示。

表4-9 课程成绩表

序号

字段名

数据类型

长度

备注

1

课程成绩id

int

11

主键

2

成绩分数

double

-

得分值

3

成绩类型

varchar

64

测试或考试

4

成绩日期

date

-

录入日期

5

课程名称

varchar

64

关联课程

6

学生姓名

varchar

64

关联学生

(10)考试表主要是用来存储在线测试的配置信息。主要包括考试id、考试名称、答题时长、总分、开放开始时间、开放结束时间、状态等字段。如表4-10所示。

表4-10 考试表

序号

字段名

数据类型

长度

备注

1

考试id

int

11

主键

2

考试名称

varchar

32

测试标题

3

答题时长

int

11

分钟数

4

总分

double

-

满分值

5

开放开始时间

datetime

-

起始时间

6

开放结束时间

datetime

-

截止时间

7

状态

varchar

10

启用或禁用

5系统实现

5.1学生用户功能实现

5.1.1在线考试功能实现

学生用户通过访问在线考试模块的控制器方法获取考试题目。Controller类中的Get_list方法负责接收前端请求,调用Service层从数据库查询试题列表,并将数据封装为JSON格式返回。该方法支持分页和条件筛选,确保界面能按规则展示题目。在线考试界面如图5-1所示。

图5-1 在线考试界面

核心代码实现如下:

def Get_list(self, ctx):

query = dict(ctx.query)

config_plus = {}

count = self.service.Count(query,config_plus)

lst = self.service.Get_list(query,

obj_update(self.config, config_plus))

return {"result": {"list": lst, "count": count}}

5.1.2课程资源功能实现

学生用户点击课程资源菜单后,控制器调用Get_list方法处理请求。该方法解析查询参数,通过服务层从课程资源数据表中获取资源列表,支持按课程名称或文件类型进行筛选。实现代码中包含了分页参数处理,确保大量资源时界面响应流畅。课程资源界面如图5-2所示。

图5-2 课程资源界面

核心代码实现如下:

def Get_list(self, ctx):

query = dict(ctx.query)

config_plus = {}

if "page" in query:

config_plus["page"] = query.pop("page")

if "size" in query:

config_plus["size"] = query.pop("size")

return self.service.Get_list(query, config_plus)

5.1.3课程信息功能实现

该功能由控制器的Get_list方法实现,负责展示所有课程的基本信息。前端请求到达后,方法从ctx.query中提取查询条件,调用服务层的Get_list方法执行数据库查询,返回包含课程名称、学分、授课教师等字段的数据列表。课程信息界面如图5-3所示。

图5-3 课程信息界面

核心代码实现如下:

def Get_list(self, ctx):

query = dict(ctx.query)

config_plus = {}

if "field" in query:

field = query.pop("field")

config_plus["field"] = field

lst = self.service.Get_list(query,

obj_update(self.config, config_plus))

return {"result": {"list": lst}}

5.1.4选课信息功能实现

学生用户查看已选课程时,系统调用Get_list方法。该方法接收用户身份标识作为查询条件,通过服务层关联选课信息表与课程信息表,返回该学生的选课记录,包括课程名称、选课时间和状态。选课信息界面如图5-4所示。

图5-4 选课信息界面

核心代码实现如下:

def Get_list(self, ctx):

query = dict(ctx.query)

config_plus = {}

count = self.service.Count(query,config_plus)

lst = self.service.Get_list(query,

obj_update(self.config, config_plus))

return {"result": {"list": lst, "count": count}}

5.1.5选课安排功能实现

此功能用于展示学期选课的时间安排和可选课程列表。控制器的Get_list方法根据当前学期参数进行查询,返回选课开始时间、结束时间以及可选的课程清单,帮助学生了解选课计划。选课安排界面如图5-5所示。

图5-5 选课安排界面

核心代码实现如下:

def Get_list(self, ctx):

query = dict(ctx.query)

if "page" in query:

config_plus["page"] = query.pop("page")

if "size" in query:

config_plus["size"] = query.pop("size")

return self.service.Get_list(query, self.config)

5.1.6课程出勤功能实现

学生查看个人出勤记录时,控制器Get_list方法根据学生ID查询出勤表。方法构建查询字典后调用服务层,返回每次课程的出勤状态、日期和课程名称,支持按课程筛选。课程出勤界面如图5-6所示。

图5-6 课程出勤界面

核心代码实现如下:

def Get_list(self, ctx):

query = dict(ctx.query)

config_plus = {}

if "orderby" in query:

config_plus["orderby"] = query.pop("orderby")

lst = self.service.Get_list(query,

obj_update(self.config, config_plus))

return {"result": {"list": lst}}

5.1.7课程成绩功能实现

该功能通过Get_list方法获取学生的各科成绩。控制器接收学生用户请求后,将查询条件传递给服务层,服务层关联成绩表与课程表,返回课程名称、平时成绩、期末成绩和总评成绩。课程成绩界面如图5-7所示。

图5-7 课程成绩界面

核心代码实现如下:

def Get_list(self, ctx):

query = dict(ctx.query)

config_plus = {}

count = self.service.Count(query,config_plus)

lst = self.service.Get_list(query,

obj_update(self.config, config_plus))

return {"result": {"list": lst, "count": count}}

5.1.8数据统计功能实现

学生用户查看个人学习数据时,控制器调用Count_group和Sum_group方法进行统计分析。这些方法根据分组条件(如按课程类型或月份)对数据进行聚合计算,返回成绩趋势或出勤率等统计图表所需数据。数据统计界面如图5-8所示。

图5-8 数据统计界面

核心代码实现如下:

def Count_group(self, ctx):

query = dict(ctx.query)

config_plus = {}

groupby_t = query.pop("groupby")

config_plus["groupby"] = groupby_t

lt = self.service.Count_group(query, obj_update(self.config, config_plus))

return {"result": {"list": lt}}

5.1.9最新资讯功能实现

学生通过此功能查看系统发布的公告或新闻。控制器的Get_list方法从公告数据表中获取资讯列表,按照发布时间倒序排列,支持分页加载,确保首页展示最新内容。最新资讯界面如图5-9所示。

图5-9 最新资讯界面

核心代码实现如下:

def Get_list(self, ctx):

query = dict(ctx.query)

config_plus = {}

config_plus["orderby"] = "create_time desc"

lst = self.service.Get_list(query,

obj_update(self.config, config_plus))

return {"result": {"list": lst}}

5.2教师用户功能实现

5.2.1课程资源管理功能实现

教师用户管理课程资源时,系统提供增删改查接口。控制器的Add方法接收前端提交的资源信息,调用服务层插入数据;Set方法用于更新资源信息;Del方法根据资源ID删除记录。课程资源管理界面如图5-10所示。

图5-10 课程资源管理界面

核心代码实现如下:

def Add(self, ctx):

body = ctx.body

result = self.service.Add(body, self.config)

return {"result": result}

def Set(self, ctx):

result = self.service.Set(ctx.query, ctx.body, self.config)

return {"result": result}

5.2.2课程信息管理功能实现

教师可对课程基本信息进行维护。控制器中的Get_list方法用于展示课程列表,Add方法添加新课程,Set方法修改课程名称、学分等属性,Del方法删除课程。所有操作均通过服务层与数据库交互。课程信息管理界面如图5-11所示。

图5-11 课程信息管理界面

核心代码实现如下:

def Get_list(self, ctx):

query = dict(ctx.query)

lst = self.service.Get_list(query, self.config)

return {"result": {"list": lst}}

def Del(self, ctx):

result = self.service.Del(ctx.query, self.config)

return {"result": result}

5.2.3选课信息管理功能实现

此模块允许教师查看和调整学生的选课记录。控制器的Get_list方法支持按课程或学生筛选选课名单,Set方法可修改选课状态(如审核通过或退选)。选课信息管理界面如图5-12所示。

图5-12 选课信息管理界面

核心代码实现如下:

def Get_list(self, ctx):

query = dict(ctx.query)

config_plus = {}

count = self.service.Count(query,config_plus)

lst = self.service.Get_list(query, config_plus)

return {"result": {"list": lst, "count": count}}

5.2.4选课安排管理功能实现

教师通过此功能发布或修改选课安排。控制器的Add方法新增选课安排,包含学期、选课时间段和可选课程范围。Set方法调整安排细节,Get_list方法展示所有安排记录。选课安排管理界面如图5-13所示。

图5-13 选课安排管理界面

核心代码实现如下:

def Add(self, ctx):

body = ctx.body

result = self.service.Add(body, self.config)

return {"result": result}

def Set(self, ctx):

result = self.service.Set(ctx.query, ctx.body, self.config)

return {"result": result}

5.2.5课程出勤管理功能实现

教师记录和查询学生出勤情况时,系统调用Get_list方法按课程展示出勤列表,Set方法用于录入或修改某次课的学生出勤状态。课程出勤管理界面如图5-14所示。

图5-14 课程出勤管理界面

核心代码实现如下:

def Get_list(self, ctx):

query = dict(ctx.query)

lst = self.service.Get_list(query, self.config)

return {"result": {"list": lst}}

def Set(self, ctx):

result = self.service.Set(ctx.query, ctx.body, self.config)

return {"result": result}

5.2.6课程成绩管理功能实现

教师录入和修改学生成绩时,控制器Set方法接收课程ID、学生ID和各分项成绩,更新数据库记录。Get_list方法按课程汇总成绩列表,支持导出功能。课程成绩管理界面如图5-15所示。

图5-15 课程成绩管理界面

核心代码实现如下:

def Set(self, ctx):

result = self.service.Set(ctx.query, ctx.body, self.config)

if self.service.error:

return {"error": self.service.error}

return {"result": result}

5.2.7资源管理功能实现

此功能与课程资源管理类似,教师可上传、删除教学资料。控制器的Upload方法处理文件上传,保存至服务器指定目录并返回访问URL。Del方法删除不再使用的资源文件。资源管理界面如图5-16所示。

图5-16 资源管理界面

核心代码实现如下:

def Upload(self, ctx):

file_obj = ctx.request.files.get("file", None)

u = "static/upload/" + file_obj.filename

file_obj.save(os.path.join(u))

return {"result": {"url": "/"+u}}

5.3管理员用户功能实现

5.3.1课程分类管理功能实现

管理员对课程进行分类维护,控制器的Add、Set和Del方法分别实现新增、修改和删除分类。Get_list方法展示所有分类,支持按分类名称查询。课程分类管理界面如图5-17所示。

图5-17 课程分类管理界面

核心代码实现如下:

def Add(self, ctx):

body = ctx.body

result = self.service.Add(body, self.config)

return {"result": result}

def Get_list(self, ctx):

query = dict(ctx.query)

return self.service.Get_list(query, self.config)

5.3.2课程资源管理功能实现

管理员拥有全部课程资源的最高管理权限,可审核、删除任何教师上传的资源。控制器中的Del方法用于删除违规资源,Get_list方法支持多条件筛选查询。课程资源管理界面如图5-18所示。

图5-18 课程资源管理界面

核心代码实现如下:

def Get_list(self, ctx):

query = dict(ctx.query)

config_plus = {}

count = self.service.Count(query,config_plus)

lst = self.service.Get_list(query, config_plus)

return {"result": {"list": lst, "count": count}}

5.3.3课程信息管理功能实现

管理员负责课程信息的全面管理,包括添加新课程、修改课程详情和删除课程。控制器Set方法中实现了唯一性校验,防止课程编号重复。课程信息管理界面如图5-19所示。

图5-19 课程信息管理界面

核心代码实现如下:

def Set(self, ctx):

result = self.service.Set(ctx.query, ctx.body, self.config)

if self.service.error:

return {"error": self.service.error}

return {"result": result}

5.3.4选课信息管理功能实现

管理员可查看所有学生的选课记录并进行干预。控制器的Get_list方法支持跨课程跨学生查询,Del方法用于处理异常选课记录。选课信息管理界面如图5-20所示。

图5-20 选课信息管理界面

核心代码实现如下:

def Get_list(self, ctx):

query = dict(ctx.query)

config_plus = {}

lst = self.service.Get_list(query,

obj_update(self.config, config_plus))

return {"result": {"list": lst}}

5.3.5选课安排管理功能实现

管理员可设置全局的选课安排策略,控制器的Add方法新增学期选课计划,Set方法调整选课时间段和课程容量。选课安排管理界面如图5-21所示。

图5-21 选课安排管理界面

核心代码实现如下:

def Add(self, ctx):

body = ctx.body

result = self.service.Add(body, self.config)

return {"result": result}

def Set(self, ctx):

result = self.service.Set(ctx.query, ctx.body, self.config)

return {"result": result}

5.3.6课程出勤管理功能实现

管理员可查看全校的出勤数据统计。控制器的Count_group方法按课程或班级分组统计出勤率,为教学管理提供数据支持。课程出勤管理界面如图5-22所示。

图5-22 课程出勤管理界面

核心代码实现如下:

def Count_group(self, ctx):

query = dict(ctx.query)

groupby_t = query.pop("groupby")

config_plus = {"groupby": groupby_t}

lt = self.service.Count_group(query, config_plus)

return {"result": {"list": lt}}

5.3.7课程成绩管理功能实现

管理员拥有成绩数据的最高管理权限,可审核成绩异常或进行批量修改。控制器的Set方法包含修改前后的钩子函数,用于记录操作日志。课程成绩管理界面如图5-23所示。

图5-23 课程成绩管理界面

核心代码实现如下:

def Set(self, ctx):

error = self.Set_before(ctx)

if error["code"]:

return {"error": error}

result = self.service.Set(ctx.query, ctx.body, self.config)

return {"result": result}

5.3.8系统管理功能实现

系统管理包括用户管理、权限配置等。控制器的Auth方法从数据库加载权限配置到内存,用于请求鉴权。Get_list方法管理用户账号。系统管理界面如图5-24所示。

图5-24 系统管理界面

核心代码实现如下:

def Auth(self, ctx):

service = service_select("auth")

lst = service.Get_list({}, {"page": 0})

for o in lst:

path = o["path"]

dict_auth[path][o["user_group"]] = o

return dict_auth

5.3.9资源管理功能实现

管理员对所有系统资源文件进行统一管理,可删除违规或过期文件。控制器的Del方法删除数据库记录的同时需同步删除服务器上的物理文件。资源管理界面如图5-25所示。

图5-25 资源管理界面

核心代码实现如下:

def Del(self, ctx):

if len(ctx.query) == 0:

return {"code": 30000, "message": "删除条件不能为空!"}

result = self.service.Del(ctx.query, self.config)

return {"result": result}

6系统测试

6.1测试目的

系统测试旨在验证课堂测试小程序各功能模块是否符合需求规格说明书的业务规则。通过执行测试用例,检验在线考试、课程管理、选课审核、出勤录入、成绩管理等核心业务流程的正确性与完整性。测试过程重点关注数据在不同角色操作下的一致性,用户权限控制的准确性,以及异常输入场景下的容错处理能力。测试结果用于评估系统是否达到预期质量标准,识别潜在缺陷并为修复提供依据[19]。

6.2测试方法

采用黑盒测试方法,基于功能需求设计测试用例。测试覆盖学生、教师、管理员三类角色的主要功能模块。测试用例按照等价类划分与边界值分析方法设计输入数据,验证系统在正常与异常输入下的行为。测试环境包括Flask后端服务、MySQL数据库、微信开发者工具模拟器。测试执行顺序遵循业务流程路径,从用户登录开始依次验证各功能模块。每个测试用例记录操作步骤、预期结果与实际结果,由测试人员逐项核对[20]。

6.3测试内容

(1)学生在线考试功能测试如表6-1所示。

表6-1 学生在线考试测试用例表

测试项

测试目的

测试步骤

预期结果

实际结果

考试入口

验证开放时间内可进入考试

登录学生账号,进入在线考试模块

显示启用的测试列表

符合预期

答题计时

验证答题时长限制生效

开始答题后等待超过设定时长

系统自动提交试卷

符合预期

试卷提交

验证提交后保存答题记录

完成全部题目后点击提交

显示得分与答案解析

符合预期

(2)教师发布在线测试功能测试如表6-2所示。

表6-2 教师发布在线测试测试用例表

测试项

测试目的

测试步骤

预期结果

实际结果

测试创建

验证测试配置信息保存

填写测试名称、时长、总分后保存

测试出现在列表中

符合预期

状态切换

验证启用禁用功能

将测试状态由启用改为禁用

学生端不可见该测试

符合预期

开放时间

验证时间范围限制

设置开放时间与当前时间不符

非开放时间不可答题

符合预期

(3)教师录入出勤功能测试如表6-3所示。

表6-3 教师录入出勤测试用例表

测试项

测试目的

测试步骤

预期结果

实际结果

出勤录入

验证出勤状态保存

选择学生标记已签到后保存

记录保存成功

符合预期

学生端同步

验证数据同步正确

学生登录查看出勤模块

显示已签到状态

符合预期

描述记录

验证出勤描述保存

填写出勤描述后提交

详情页显示描述内容

符合预期

(4)学生选课申请功能测试如表6-4所示。

表6-4 学生选课申请测试用例表

测试项

测试目的

测试步骤

预期结果

实际结果

申请提交

验证选课申请保存

选择课程后提交选课申请

生成待审核记录

符合预期

重复选课

验证重复选课限制

对同一课程再次提交申请

提示已申请

符合预期

审核状态

验证状态变更同步

教师审核通过后学生查看

状态变为已通过

符合预期

(5)管理员审核资源功能测试如表6-5所示。

表6-5 管理员审核资源测试用例表

测试项

测试目的

测试步骤

预期结果

实际结果

资源审核

验证审核通过功能

选择待审核资源点击通过

资源状态变为已通过

符合预期

资源驳回

验证审核驳回功能

选择待审核资源点击驳回

资源退回教师端

符合预期

学生可见

验证通过后对学生可见

学生登录查看资源列表

显示已通过资源

符合预期

6.4测试结论

按照测试用例执行的结果,学生在线考试模块的开放时间控制、计时功能、试卷提交以及自动评分均无问题。教师在线发布测试功能测试创建、状态切换、开放时间限制均达到预期的效果。教师录入出勤功能可以正确保存出勤状态,并且在学生端同步显示。学生选课申请功能可以实现申请提交、重复选课限制和审核状态跟踪。管理员审核资源的功能可以进行通过或者驳回的操作,并且权限控制正确。全部测试用例的实际结果与预期结果一致,系统各个核心功能模块运行稳定,数据一致性好,符合课堂测试小程序设计要求。

7总结

就课堂测试小程序的设计和实现完成全部的研究工作。系统采用Flask框架、微信小程序、MySQL数据库来创建包含学生、教师、管理员三种角色的综合教学管理平台。

工作总结包含需求分析、系统设计、数据库设计、功能实现、系统测试这五个部分。在需求分析阶段发现了在线考试、课程资源管理、选课管理、出勤录入、成绩管理这六个主要的功能模块。系统设计阶段完成架构设计、功能结构设计、业务流程设计和数据库设计,画出E-R图和数据表结构。功能实现阶段根据角色将各个模块的前后端代码写完,并且对各个模块之间的接口进行联调。系统测试阶段用测试用例来检验核心功能的正确性。

系统还存在着一些不足。在线考试的题库管理功能比较简单,目前没有随机组卷和难度分级的功能。数据统计模块的图表种类较少,没有实现多维交叉分析的功能。出勤录入操作在班级人数较多的时候效率较低,没有批量标记的功能。

后续改进的方向为扩大题库的管理功能,加入试题难度的标签以及知识点的分类,可以实现自动分卷。丰富数据统计模块的可视化形式,增添课程通过率、成绩分布直方图这些分析图表。改进出勤录入交互,增加批量签到、考勤报表导出功能,提高教师使用效率。

参考文献

  1. 高扬.小学数学课堂练习设计的“三思”路径[J].小学数学教育,2025,(24):37+39.
  2. 王艳.基于目标达成的小学数学课堂练习设计优化策略[J].数学学习与研究,2025,(34):90-93.
  3. 苏玉媚.基于多元素整合的小学数学课堂练习优化设计研究[J].学苑教育,2025,(32):25-27.
  4. 王利娜.基于核心素养导向的初中几何课堂练习优化设计策略[J].数学学习与研究,2025,(26):2-5.
  5. 杨和平.课堂练习活动的创意设计[J].语文教学通讯,2025,(26):23-26.
  6. 蒋雪花.优化小学数学课堂练习设计的探索与实践[J].新教师,2025,(07):81-82.
  7. 李胜男.基于微信的课堂测试小程序设计[D].导师:郑春红;李军杰.西安电子科技大学,2022.
  8. Qi Qinyi.The Analysis of English Classroom Test in Senior High School[J].English Language Teaching and Linguistics Studies,2025,7(2):
  9. Yuan Ren.Optimization Strategy of Piano Teaching Interaction Experience Based on Virtual Reality Technology[J].Applied Mathematics and Nonlinear Sciences,2025,10(1):
  10. Yiqin Dai,Dehong Tang,Chunan Ke.Research on Sustainable Development and Optimization Strategies for Plant Growth Cycle Science Teaching Aid Based on Scenario Theory[J].Sustainability,2025,17(24):
  11. Kristen Procko,Josh T Beckham,Roderico Acevedo,Swati Agrawal,Shane Austin,Charmita Burch,Shelly Engelman,Kristin M Fox,Lauren A Genova,Pamela S Mertz,Rachel M Mitton Fry,Didem Vardar Ulu.Designing Biochemical Visual Literacy Assessments: Insights from Classroom Testing and Student Interviews.[J].Journal of chemical education,2025,102(12):
  12. Robert Klitzman.A classroom exercise for improving mentor/mentee relationships.[J].Accountability in research,2025,33(4):
  13. 李辉.Flask Web开发实战[M].北京:机械工业出版社,2023:1354.
  14. 千锋教育.微信小程序开发与实战[M].北京:人民邮电出版社,2022:367.
  15. 周德伟.MySQL数据库基础实例教程[M].北京:人民邮电出版社,2024:222.
  16. 郭炜.Python程序设计基础及实践[M].北京:人民邮电出版社,2024:262.
  17. 黑马程序员.Python Web开发项目教程[M].北京:人民邮电出版社,2023:233.
  18. 王希,戴靓婕.MySQL数据库技术在Web动态网页设计中的运用研究[J].软件,2024,45(7):77-79.
  19. 胡劲.数据库信息管理系统的逻辑架构与功能设计探析[J].电脑知识与技术,2023,19(19):96-98.
  20. 顾翔.软件单元测试[M].北京:电子工业出版社,2023:317.

 项目分享:大家可自取用于参考学习,获取方式请私信哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值