第一章 绪论
1.1 研究背景与意义
课堂教学管理在高等教育体系里处于基础性的地位。在传统的教学管理方式下,教师要花费大量的教学时间去完成点名签到、作业收发、成绩统计等事务性的任务,但是这些工作不能直接带来教学效益[1]。信息技术的发展促使教育信息化的推进,各种教学管理系统在高校逐渐被采用[2]。但是现有的系统存在着功能割裂、操作繁杂、数据孤岛等现象,不能满足师生便捷化、一体化的教学管理服务需求[3]。王剑飞等[4]认为智慧课堂管理系统可以很好地整合教学资源,提高课堂管理效率。周满满[5]认为,利用Java技术开发的考勤管理软件可以大大减轻教师的事务性工作。董光光等[6]认为JavaWeb技术可以很好地实现教学数据溯源管理。以上述研究为基础,给创建一体化课堂管理系统给予技术上的参照。本课题以延安大学实际教学场景为出发点,设计海绵课堂管理系统,目的在于用信息化手段重新塑造教学管理流程,把教师从繁杂的事务性工作里解放出来,给学生赋予方便的学习服务入口,达成教学管理的精细化和智能化。
本文所设计的系统有很强的应用价值。系统把课堂签到、作业管理、成绩核算等分散的功能集中起来,教师通过系统就可以完成教学全流程的管理,不需要在不同的工具之间来回切换。学生在系统上可以随时查看课程安排、提交作业、查询成绩,得到个性化的学习服务。系统使用自动化数据处理方式,签到记录可以自动统计,成绩可以自动计算,大大降低了由于人工操作而造成的错误。从行业发展的角度来分析,该系统给高校教学管理信息化提供了一个可以被复用的解决方案,模块化的设计思想以及标准化的数据接口对于类似系统的开发有着一定的借鉴意义。系统在延安大学的应用实践,可以给区域性的高校教学管理信息化建设提供经验,促进教育管理由传统的模式向数字化的模式转变。
1.2 国内外研究现状
1.2.1 国内现状
国内课堂教学管理研究,由最初的单一功能系统发展到现在的综合化平台。早期的研究主要针对考勤、成绩等单一的功能进行设计,随着技术的发展,综合性的管理平台被创建出来。研究者们发现教学管理各个环节之间存在着内在联系,单个功能系统不能满足实际教学的需求,因此集成化系统的发展方向逐渐形成。目前我国的研究重点在于系统的功能是否完整、数据流转是否顺畅、用户的操作是否方便,用信息化的方式实现教学管理全过程的覆盖。
王剑飞、高桂媛、王海燕认为用深度学习技术来设计智慧课堂管理系统,并对它的应用进行研究,提出利用人脸识别实现自动签到,给课堂管理提供智能化的解决方案。本研究对于课堂管理系统智能化的发展方向有启发作用,本系统在签到功能的设计上借鉴了人脸识别技术的应用思路,但是考虑到技术的复杂性以及部署条件,使用二维码扫码签到为主要实现方式。周满满在《一种基于Java的高校课堂考勤与平时分综合管理系统设计与实现》中创建了考勤和平时分关联管理的综合系统,实现了签到数据到平时成绩的自动转换,该设计思路可以给本系统成绩管理模块提供一定的借鉴意义。董光光、王子玉、梁薛卉在基于JavaWeb技术的第二课堂成绩溯源管理系统研究中提出了成绩数据溯源追踪的思想,保证了成绩的修改可以追溯,本系统在成绩管理的设计中也采用了类似的思路。卢志刚、邵健[7]在课堂手机管理系统的设计上,以物联网技术为基础,对课堂设备进行管理,给课堂环境管理提供技术支持。杜金针[8]认为数字电子技术可以为教学管理提供支持。以上研究涉及课堂管理的各个方面,但是功能整合以及用户体验还存在不足之处。本系统在设计时重视各个功能模块之间的有机整合,用统一的用户界面和标准化的数据接口给师生提供一体化的教学管理服务。
1.2.2 国外现状
国外课堂教学管理研究开始得比较早,对于系统的架构设计以及用户体验的改善等方面有着丰富的经验。研究者认为教学管理系统应该服务于教学过程而不是取代教学本身,系统的创建要考虑到师生使用习惯以及教学场景的特点。近些年来,国外的研究开始朝着智能化、个性化方向发展,重视利用数据分析来给教学决策给予支撑。Attridge和O'Mahony[9]在论文中研究了疫情期间教师使用学习管理系统的使用情况,认为系统易用性是教师使用学习管理系统的主要因素,该结论给本系统界面交互设计提供了参考。Dewi和Slamet[10]在研究中提到学习管理系统的使用,认为系统要符合多元文化课堂里学生的学习习惯。Fütterer等[11]在《Artificial intelligence in classroom management》中对人工智能在课堂管理中的应用进行了系统综述,提出人工智能技术可在行为分析、个性化反馈等方面发挥作用,为系统智能化升级指明了方向。Jiao[12]在《Optimization and feature analysis of smart class IoT systems》中研究了智能课堂物联网系统的优化方法,为课堂环境管理提供了技术方案。Xiaopan[13]在《The Mediating Role of Learning Management Systems》中分析了学习管理系统在学生参与度、同伴学习等维度的中介作用。国外的研究成果给本系统提供系统智能化、用户适应性的借鉴,本系统在功能设计上注重用户的直观操作,留有数据接口给后续智能化升级留有空间。
1.3 主要研究内容
本文主要研究延安大学海绵课堂管理系统的创建和实现。系统需求分析阶段,对延安大学课堂教学管理实际流程进行调研,整理出学生、教师、管理员三个用户的主要需求,确定系统的功能范围。系统设计阶段采用前后端分离架构,前端用Vue.js搭建用户界面,后端用Spring Boot框架做服务支撑,MySQL数据库用来保存数据。功能模块的划分是以学生端、教师端和管理端为界的,在每一个子系统内部再按照行业流程将功能单元进行细分。从数据库设计上建立符合第三范式的模型,保证数据的一致性、完整性。系统实现阶段按照模块化开发原则,对各个功能模块进行编码和单元测试。系统测试阶段设计测试用例对核心功能进行测试,检验系统的性能及稳定程度。本研究主要关注系统的功能完整性以及操作的便利性,不会对底层算法进行优化,也不会对大规模并发处理进行处理。经过以上的工作,最终得到可以运行的延安大学海绵课堂管理系统原型以及相关的技术文档。
第二章 相关技术介绍
2.1 Spring Boot框架
Spring Boot框架以Spring生态系统为基础,采用自动化配置的方式大大简化了Spring应用的初始搭建和开发工作。框架按照约定优于配置的原则来设计,利用内置的启动器依赖、自动配置类等,使开发者可以迅速创建出独立运行的生产级应用。从系统架构上来说,Spring Boot使用分层的设计思想,把控制层、业务层、持久层分得清楚,各层之间通过接口来交互,从而降低模块之间的耦合度。框架内置的嵌入式Web服务器可以不用部署WAR包就可以直接运行,简化了部署过程[14]。本系统的开发主要用到了Spring Boot作为后端服务的框架。框架所具有的依赖注入机制,可以有效地对各个组件之间的依赖关系进行管理,开发者只需要使用注解就可以完成对象的装配工作。Spring Boot的自动配置特性会根据项目依赖自动产生配置信息,不需要写大量的XML配置文件。框架集成的Spring Data JPA给数据库访问提供了一个统一的接口抽象,开发者通过定义接口就可以完成常见的数据操作。Spring Boot的拦截器机制给系统的权限控制提供技术支持,用自定义拦截器可以对用户的请求做统一的验证,保证系统的资源安全。该框架的Actuator模块可以实现应用监控的功能,在系统运行的时候可以了解应用的状态,给问题的排查提供依据。
2.2 Vue.js框架
Vue.js是一个渐进式的JavaScript框架,用来构建用户界面。框架的核心库主要用来处理视图层,用响应式数据绑定和组件化开发的方式,使开发者可以快速地创建交互式的Web界面。Vue.js响应式系统使用Object.defineProperty来实现,当数据发生改变的时候,系统可以自动追踪依赖并更新视图,不需要手动操作DOM元素[15]。组件化机制把界面拆分成一个个可以复用的、独立的组件单元,每一个组件单元都包含自身数据、逻辑和样式,从而提高了代码的可维护性以及复用性。在本系统前端开发中,Vue.js主要用来完成界面的搭建以及交互处理。使用Vue CLI工具创建项目脚手架,采用单文件组件的方式组织代码结构,每一个功能模块对应一个独立的Vue组件,组件内部用模板语法来描述界面结构,用数据模型来管理业务状态,用方法来定义用户交互逻辑。Vue Router路由管理器负责前端路由控制,实现了页面之间无刷新跳转,提高了用户的使用体验。Vuex状态管理模式可以用来管理全局共享的状态,从而避免了组件之间数据传递的复杂性。系统界面中课程信息展示、签到操作、成绩查询等均用Vue组件来完成,用户操作触发组件方法执行,方法使用axios库发起异步请求获取后端数据,数据返回后自动更新视图响应,整个过程不需要刷新页面,给用户带来了接近原生应用的使用体验。
2.3 MySQL数据库
MySQL数据库属于一种关系型数据库管理系统,凭借高性能、高可靠性以及易用性而广受使用,常被应用到各种Web应用的数据保存场合当中。数据库使用标准的SQL语言来操作数据,事务处理、多版本并发控制等特性保证了数据的一致性、隔离性。MySQL的存储引擎架构可以满足不同的应用场景的需求,InnoDB引擎支持事务以及外键约束,适合需要高数据一致性要求的业务系统。数据库的索引机制可以加快数据检索的速度,合理的索引设计可以大大提高查询效率。本系统设计时用MySQL数据库来存储系统运行过程中需要的数据。系统按照业务实体来划分数据表,主要有用户信息表、课程信息表、签到记录表、作业信息表、成绩记录表等核心表结构。数据库的设计按照规范化的原则,用外键来保证表之间数据的唯一性。对经常被查询的字段,例如用户的登录名、课程名称等,设置相应的索引来提高查询速度。系统采用MyBatis作为持久层框架,用XML文件或者注解的方式配置SQL语句,实现了Java对象和数据库记录的映射。在实际运行过程中,当用户发起课程查询操作的时候,系统就会执行预定义的SQL语句,从课程信息表中获取数据并将其封装成Java对象后,再将结果集传递给业务层进行处理[16]。事务管理机制保证了对多个表的操作中出现异常时可以正确回滚,保证数据的完整性。
第三章 系统分析
3.1 可行性分析
3.1.1 技术可行性
本系统使用的是Spring Boot、Vue.js、MySQL这三种技术的组合,这三种技术都已经发展得比较成熟,并且有比较广泛的支持社区。Spring Boot框架具有自动配置的能力,可以大大简化后端服务的搭建过程,框架自带的各种组件可以满足系统对于权限控制、数据持久化、接口开发等基本需求。Vue.js框架依靠组件化开发模式以及响应式数据绑定机制,可以很好地完成前端界面的创建和交互逻辑的处理。MySQL数据库性能好、稳定,可以满足系统对于数据存储和查询的要求。上述技术组件之间具有较好的兼容性,前后端使用HTTP协议和JSON数据格式进行通信,技术路线简单可行,没有遇到无法克服的技术障碍。
3.1.2 操作可行性
系统采用浏览器/服务器架构,用户不需要下载客户端软件,直接用浏览器就可以访问系统所有的功能。系统界面设计遵守Web应用通用交互标准,用户操作流程接近日常生活习惯,学生用户初次使用时不需要额外的培训就能进行课程查看、签到等基本操作。教师用户所进行的课程管理、成绩录入等操作都以表单的形式出现,输入区域和操作按钮的布局也十分清楚,大大减少了用户的使用成本。系统根据不同的用户角色提供不同的功能菜单,每个角色只看到与自己的职责有关的操作入口,界面信息简单明了,用户可以很快找到需要的功能。
3.1.3 经济可行性
系统采用开源技术栈,Spring Boot、Vue.js、MySQL都是开源软件,不需要支付商业授权费用。开发环境搭建所用的IDE工具可以使用社区版,从而降低开发成本。系统部署运行阶段使用云服务商的基本配置实例,成本可以控制。系统投入使用以后,原来需要人工来完成的考勤统计、成绩核算等事务性工作可以被系统自动完成,从而大大缩减了教师事务性工作的时间投入。系统带来效率提高和时间节省所产生效益,可以弥补系统建设及运行维护的投入。
3.2 功能需求分析
3.2.1 学生角色功能需求
学生用户可查看课程基本信息与班级课表,参与课程投票活动,查看课程学生名单。学生在上课时间进行签到操作,可提交课堂笔记并进行管理,提交请假申请并查看审核结果,查询考试安排与课程成绩。图3-1学生用例图如图3-1所示。
图3-1学生用例图
3.2.2 教师角色功能需求
教师用户可创建、编辑、删除课程信息,管理课程学生名单,处理调课申请。教师发布课堂作业并对学生提交的作业进行批改,管理上课签到记录,审批学生请假申请,设置考试安排,录入并管理课程成绩。教师用例图如图3-2所示。
图3-2教师用例图
3.2.3 管理员角色功能需求
管理员用户管理班级基本信息与教室资源信息,维护课程信息与班级课表,设置课程投票活动,查看学生投票情况,管理课堂作业的整体配置。

图3-3管理员用例图
第四章 系统设计
4.1 系统架构设计
系统采用前后端分离的分层架构模式,将用户界面、业务逻辑、数据存储三个层面进行清晰划分。用户界面层基于Vue.js框架构建,负责接收用户操作指令并向业务层发起请求,同时将返回的数据进行可视化呈现。应用服务层运行于Spring Boot框架之上,包含控制器层、业务逻辑层与数据访问层,控制器层接收前端请求并进行参数验证,业务逻辑层处理具体业务规则与流程控制,数据访问层封装数据库交互操作[17]。数据持久层采用MySQL数据库存储系统运行所需的所有业务数据,通过事务管理确保数据操作的原子性与一致性。各层级之间通过接口进行通信,层级内部修改不会波及外部调用,提升了系统的可维护性与扩展性。系统架构图如图4-1所示。
图4-1系统架构图
4.2 系统结构功能设计
系统围绕学生、教师、管理员三类用户角色构建功能体系。学生用户可进行课程信息浏览、班级课表查询、课程投票参与、课堂学生名单查看、上课签到操作、课堂笔记管理、请假申请提交、考试安排查阅、课程成绩查询。教师用户负责课程信息维护、课程学生管理、调课申请处理、课堂作业发布与批改、上课签到记录管理、请假申请审批、考试安排设置、课程成绩录入与统计。管理员用户承担班级基本信息管理、教室资源信息管理、课程信息配置、班级课表编排、课程投票活动设置、学生投票数据查看、课堂作业全局配置等职责。系统功能结构如图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 数据库设计
在数据库设计时,用ER图来将概念模型转换成具体的数据库结构。本阶段就是确定每一个数据表的字段类型、约束条件以及表与表之间的关系,为物理设计打下基础。之后再对优化数据存储方案展开分析,保证系统高效并且具备可扩展性[18]。
4.4.1 E-R图设计
E-R图(实体关系图)是一种用来做数据建模的图形化工具,描述实体、属性以及实体之间的关系。以图示的形式来辅助数据库结构的分析与设计,清楚地表明数据间的相互联系,利于后续的数据库开发及管理工作。下面给出系统全局E-R图以及各个实体的属性图[19]。
普通用户实体主要包括用户姓名、用户电话、用户积分等属性。实体属性图如图4-8所示。
图4-8普通用户实体属性图
在线下单实体主要包括订单编号、普通用户、材料选择、模型文件等属性。实体属性图如图4-9所示。
图4-9在线下单实体属性图
订单申请实体主要包括订单编号、普通用户、申请类型、申请原因等属性。实体属性图如图4-10所示。
图4-10订单申请实体属性图
订单报价实体主要包括订单编号、普通用户、报价金额、审核状态等属性。实体属性图如图4-11所示。
图4-11订单报价实体属性图
订单进度实体主要包括订单编号、普通用户、订单进度、进度证明等属性。实体属性图如图4-12所示。
图4-12订单进度实体属性图
订单完结实体主要包括订单编号、普通用户、完成日期、打印文件等属性。实体属性图如图4-13所示。
图4-13订单完结实体属性图
订单售后实体主要包括订单编号、普通用户、售后类型、售后内容等属性。实体属性图如图4-14所示。
图4-14订单售后实体属性图
打印员工实体主要包括员工工号、员工姓名、员工电话、审核状态等属性。实体属性图如图4-15所示。
图4-15打印员工实体属性图
打印材料实体主要包括材料名称、材料类型、材料价格、材料库存等属性。实体属性图如图4-16所示。
图4-16打印材料实体属性图
材料领用实体主要包括材料名称、打印员工、领用数量、领用日期等属性。实体属性图如图4-17所示。

图4-17材料领用实体属性图
系统E-R图如图4-18所示。
图4-18系统E-R图
4.4.2 数据库表设计
数据库表设计就是根据业务需求来确定数据库表的结构、字段类型和关系。通过规范化的设计,保证数据的完整性、一致性、效率,避免冗余的数据,为后续的数据查询、存储、维护提供清晰的结构。以下是系统的数据库表设计展示。
普通用户表主要是用来存储系统中注册的普通用户身份与联系信息。主要包括用户姓名、用户电话、用户积分、会员等级等字段。如表4-1所示。
表4-1普通用户表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 普通用户id | int | 11 | 是 | 是 | 普通用户ID |
| 2 | 用户姓名 | varchar | 64 | 否 | 否 | 用户姓名 |
| 3 | 用户电话 | varchar | 64 | 是 | 是 | 用户电话 |
| 4 | 用户积分 | double | - | 否 | 否 | 用户积分 |
| 5 | 会员等级 | varchar | 64 | 否 | 否 | 会员等级 |
| 6 | 会员折扣 | double | - | 否 | 否 | 会员折扣 |
| 7 | 审核状态 | varchar | 16 | 是 | 否 | 审核状态 |
| 8 | 用户ID | int | 11 | 是 | 否 | 用户ID |
| 9 | 创建时间 | datetime | - | 是 | 否 | 创建时间 |
| 10 | 创建用户ID | int | 11 | 是 | 否 | 创建用户ID |
| 11 | 更新时间 | timestamp | - | 是 | 否 | 更新时间 |
在线下单表主要是用来记录用户提交的初始打印订单信息。主要包括订单编号、普通用户、材料选择、模型文件等字段。如表4-2所示。
表4-2在线下单表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 在线下单id | int | 11 | 是 | 是 | 在线下单ID |
| 2 | 订单编号 | varchar | 64 | 否 | 否 | 订单编号 |
| 3 | 普通用户 | int | 11 | 否 | 否 | 普通用户 |
| 4 | 用户姓名 | varchar | 64 | 否 | 否 | 用户姓名 |
| 5 | 材料选择 | varchar | 255 | 否 | 否 | 材料选择 |
| 6 | 模型文件 | varchar | 255 | 否 | 否 | 模型文件 |
| 7 | 打印数量 | double | - | 否 | 否 | 打印数量 |
| 8 | 创建时间 | datetime | - | 是 | 否 | 创建时间 |
| 9 | 创建用户ID | int | 11 | 是 | 否 | 创建用户ID |
| 10 | 更新时间 | timestamp | - | 是 | 否 | 更新时间 |
订单申请表主要是用来处理用户发起的订单修改或取消申请。主要包括订单编号、普通用户、申请类型、申请原因、审核状态等字段。如表4-3所示。
表4-3订单申请表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 订单申请id | int | 11 | 是 | 是 | 订单申请ID |
| 2 | 订单编号 | varchar | 64 | 否 | 否 | 订单编号 |
| 3 | 普通用户 | int | 11 | 否 | 否 | 普通用户 |
| 4 | 申请类型 | varchar | 64 | 否 | 否 | 申请类型 |
| 5 | 申请原因 | text | 65535 | 否 | 否 | 申请原因 |
| 6 | 审核状态 | varchar | 16 | 是 | 否 | 审核状态 |
| 7 | 创建时间 | datetime | - | 是 | 否 | 创建时间 |
| 8 | 创建用户ID | int | 11 | 是 | 否 | 创建用户ID |
| 9 | 更新时间 | timestamp | - | 是 | 否 | 更新时间 |
订单报价表主要是用来记录工作人员对订单的报价与用户支付情况。主要包括订单编号、普通用户、报价金额、审核状态、支付状态等字段。如表4-4所示。
表4-4订单报价表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 订单报价id | int | 11 | 是 | 是 | 订单报价ID |
| 2 | 订单编号 | varchar | 64 | 否 | 否 | 订单编号 |
| 3 | 普通用户 | int | 11 | 否 | 否 | 普通用户 |
| 4 | 报价金额 | double | - | 否 | 否 | 报价金额 |
| 5 | 审核状态 | varchar | 16 | 是 | 否 | 审核状态 |
| 6 | 支付状态 | varchar | 16 | 是 | 否 | 支付状态 |
| 7 | 创建时间 | datetime | - | 是 | 否 | 创建时间 |
| 8 | 创建用户ID | int | 11 | 是 | 否 | 创建用户ID |
| 9 | 更新时间 | timestamp | - | 是 | 否 | 更新时间 |
订单进度表主要是用来跟踪订单从生产到完成的各个阶段状态。主要包括订单编号、普通用户、订单进度、进度证明、报价金额等字段。如表4-5所示。
表4-5订单进度表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 订单进度id | int | 11 | 是 | 是 | 订单进度ID |
| 2 | 订单编号 | varchar | 64 | 否 | 否 | 订单编号 |
| 3 | 普通用户 | int | 11 | 否 | 否 | 普通用户 |
| 4 | 订单进度 | varchar | 64 | 否 | 否 | 订单进度 |
| 5 | 进度证明 | varchar | 255 | 否 | 否 | 进度证明 |
| 6 | 报价金额 | double | - | 否 | 否 | 报价金额 |
| 7 | 创建时间 | datetime | - | 是 | 否 | 创建时间 |
| 8 | 创建用户ID | int | 11 | 是 | 否 | 创建用户ID |
| 9 | 更新时间 | timestamp | - | 是 | 否 | 更新时间 |
订单完结表主要是用来归档已完成交付的订单详细信息。主要包括订单编号、普通用户、完成日期、打印文件、完成备注等字段。如表4-6所示。
表4-6订单完结表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 订单完结id | int | 11 | 是 | 是 | 订单完结ID |
| 2 | 订单编号 | varchar | 64 | 否 | 否 | 订单编号 |
| 3 | 普通用户 | int | 11 | 否 | 否 | 普通用户 |
| 4 | 完成日期 | date | - | 否 | 否 | 完成日期 |
| 5 | 打印文件 | varchar | 255 | 否 | 否 | 打印文件 |
| 6 | 完成备注 | text | 65535 | 否 | 否 | 完成备注 |
| 7 | 创建时间 | datetime | - | 是 | 否 | 创建时间 |
| 8 | 创建用户ID | int | 11 | 是 | 否 | 创建用户ID |
| 9 | 更新时间 | timestamp | - | 是 | 否 | 更新时间 |
订单售后表主要是用来处理订单完成后用户发起的售后问题。主要包括订单编号、普通用户、售后类型、售后内容、审核状态等字段。如表4-7所示。
表4-7订单售后表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 订单售后id | int | 11 | 是 | 是 | 订单售后ID |
| 2 | 订单编号 | varchar | 64 | 否 | 否 | 订单编号 |
| 3 | 普通用户 | int | 11 | 否 | 否 | 普通用户 |
| 4 | 售后类型 | varchar | 64 | 否 | 否 | 售后类型 |
| 5 | 售后内容 | text | 65535 | 否 | 否 | 售后内容 |
| 6 | 审核状态 | varchar | 16 | 是 | 否 | 审核状态 |
| 7 | 创建时间 | datetime | - | 是 | 否 | 创建时间 |
| 8 | 创建用户ID | int | 11 | 是 | 否 | 创建用户ID |
| 9 | 更新时间 | timestamp | - | 是 | 否 | 更新时间 |
打印员工表主要是用来存储负责打印生产任务的员工信息。主要包括员工工号、员工姓名、员工电话、审核状态等字段。如表4-8所示。
表4-8打印员工表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 打印员工id | int | 11 | 是 | 是 | 打印员工ID |
| 2 | 员工工号 | varchar | 64 | 是 | 是 | 员工工号 |
| 3 | 员工姓名 | varchar | 64 | 否 | 否 | 员工姓名 |
| 4 | 员工电话 | varchar | 64 | 否 | 否 | 员工电话 |
| 5 | 审核状态 | varchar | 16 | 是 | 否 | 审核状态 |
| 6 | 用户ID | int | 11 | 是 | 否 | 用户ID |
| 7 | 创建时间 | datetime | - | 是 | 否 | 创建时间 |
| 8 | 创建用户ID | int | 11 | 是 | 否 | 创建用户ID |
| 9 | 更新时间 | timestamp | - | 是 | 否 | 更新时间 |
打印材料表主要是用来维护可用的打印耗材信息及其库存。主要包括材料名称、材料类型、材料价格、材料库存等字段。如表4-9所示。
表4-9打印材料表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 打印材料id | int | 11 | 是 | 是 | 打印材料ID |
| 2 | 材料名称 | varchar | 64 | 是 | 是 | 材料名称 |
| 3 | 材料类型 | varchar | 64 | 否 | 否 | 材料类型 |
| 4 | 材料价格 | double | - | 否 | 否 | 材料价格 |
| 5 | 材料库存 | double | - | 否 | 否 | 材料库存 |
| 6 | 创建时间 | datetime | - | 是 | 否 | 创建时间 |
| 7 | 创建用户ID | int | 11 | 是 | 否 | 创建用户ID |
| 8 | 更新时间 | timestamp | - | 是 | 否 | 更新时间 |
材料领用表主要是用来记录打印员工领用生产材料的情况。主要包括材料名称、打印员工、领用数量、领用日期等字段。如表4-10所示。
表4-10材料领用表
| 序号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 备注 |
|---|---|---|---|---|---|---|
| 1 | 材料领用id | int | 11 | 是 | 是 | 材料领用ID |
| 2 | 材料名称 | varchar | 64 | 否 | 否 | 材料名称 |
| 3 | 打印员工 | int | 11 | 否 | 否 | 打印员工 |
| 4 | 领用数量 | double | - | 否 | 否 | 领用数量 |
| 5 | 领用日期 | date | - | 否 | 否 | 领用日期 |
| 6 | 创建时间 | datetime | - | 是 | 否 | 创建时间 |
| 7 | 创建用户ID | int | 11 | 是 | 否 | 创建用户ID |
| 8 | 更新时间 | timestamp | - | 是 | 否 | 更新时间 |
第五章 系统实现
5.1 学生用户功能实现
5.1.1 课程信息查看功能实现
学生登录系统后,通过前端页面发起课程信息查询请求。该请求被CourseInformationController的get_list方法接收,方法调用父类BaseController的getList方法,最终由CourseInformationService执行数据库查询操作,将课程信息列表返回至前端进行展示。课程信息查看界面如图5-1所示。
图5-1课程信息查看界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
5.1.2 班级课表查看功能实现
学生查看班级课表时,前端传递查询条件至ClassNameScheduleController。该控制器利用继承自BaseController的getList方法处理请求,ClassNameScheduleService根据学生所属班级信息构建查询语句,从数据库获取课表数据后以结构化格式返回。班级课表查看界面如图5-2所示。
图5-2班级课表查看界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
5.1.3 课程投票功能实现
学生参与课程投票时,前端将投票信息提交至StudentVoteController的add方法。该方法解析请求参数,构建StudentVote实体对象,调用父类addEntity完成数据插入。投票成功后,系统自动执行SQL更新语句,同步修改CourseVoting表中对应课程的得票数。课程投票界面如图5-3所示。
图5-3课程投票界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
StudentVote student_vote = new StudentVote();
student_vote.setNumber_of_votes(paramMap.get("number_of_votes")==null?null:String.valueOf(paramMap.get("number_of_votes")));
this.addEntity(student_vote);
String sql = "UPDATE course_voting SET course_voting.number_of_votes_obtained = course_voting.number_of_votes_obtained + student_vote.number_of_votes WHERE student_vote.student_vote_id="+max;
service.updateBaseSql(sql);
return success(1);
}
5.1.4 课堂学生查看功能实现
学生查看所在课堂的其他成员时,CourseStudentsController的get_list方法被调用。该方法通过父类BaseController获取当前用户身份信息,依据学生所在班级构建查询条件,由CourseStudentsService执行数据检索,返回同班学生列表。课堂学生查看界面如图5-4所示。
图5-4课堂学生查看界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
5.1.5 上课签到功能实现
学生进行上课签到时,前端提交包含课程信息与人脸图片的数据至ClassNameAttendanceCheckInController的face_verify方法。该方法调用百度人脸识别接口进行身份比对,比对成功后再调用add方法记录签到状态,更新课程签到标记表。上课签到界面如图5-5所示。
图5-5上课签到界面
核心代码实现如下:
@PostMapping("face_verify")
public Map<String, Object> faceVerify(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
String faceImage = data.get("face_image");
Double score = BaiDuAPIUtil.matchPerson(image1, image2);
if (score >= 60) {
Map<String, Object> result = new HashMap<>();
result.put("success", true);
return success(result);
}
return error(40004, "人脸不匹配");
}
5.1.6 课堂笔记管理功能实现
学生管理课堂笔记时,ClassNameNotesController提供add和set方法。新增笔记时add方法接收前端参数构建实体并持久化;修改笔记时set方法根据前端传递的查询条件定位记录,更新笔记内容。系统通过事务注解保证数据操作的原子性。课堂笔记管理界面如图5-6所示。
图5-6课堂笔记管理界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
ClassNameNotes class_name_notes = new ClassNameNotes();
class_name_notes.setClass_name_notes(paramMap.get("class_name_notes")==null?null:String.valueOf(paramMap.get("class_name_notes")));
this.addEntity(class_name_notes);
return success(1);
}
5.1.7 请假申请功能实现
学生提交请假申请时,前端将请假事由、时间等信息发送至LeaveRequestController的add方法。控制器解析请求构建LeaveRequest实体,设置初始审核状态为“未审核”,通过addEntity方法保存至数据库。系统后续根据审核状态推送至相应教师。请假申请界面如图5-7所示。
图5-7请假申请界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
LeaveRequest leave_request = new LeaveRequest();
leave_request.setLeave_request(paramMap.get("leave_request")==null?null:String.valueOf(paramMap.get("leave_request")));
leave_request.setExamine_state("未审核");
this.addEntity(leave_request);
return success(1);
}
5.1.8 考试安排查看功能实现
学生查询考试安排时,前端请求被ExamScheduleController的get_list方法处理。该方法依据学生所在班级及课程信息,构建查询条件,调用ExamScheduleService检索考试时间、地点、考场规则等数据,整理后返回至前端页面。考试安排查看界面如图5-8所示。
图5-8考试安排查看界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
5.1.9 课程成绩查看功能实现
学生查看课程成绩时,CourseGradesController的get_list方法被触发。控制器根据当前登录学生的身份信息,查询其选修课程对应的平时成绩、期中成绩、期末成绩及综合排名,将数据封装后返回前端进行成绩列表展示。课程成绩查看界面如图5-9所示。
图5-9课程成绩查看界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
5.2 教师用户功能实现
5.2.1 课程信息管理功能实现
教师进行课程信息管理时,CourseInformationController提供add、set、del方法。新增课程时add方法校验课程编码唯一性;修改课程时set方法根据查询条件更新信息;删除课程时del方法执行逻辑删除操作,确保关联数据完整性。课程信息管理界面如图5-10所示。
图5-10课程信息管理界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
CourseInformation course_information = new CourseInformation();
course_information.setCourse_name(paramMap.get("course_name")==null?null:String.valueOf(paramMap.get("course_name")));
this.addEntity(course_information);
return success(1);
}
5.2.2 课程学生管理功能实现
教师管理课程学生时,CourseStudentsController的get_list方法用于展示选课学生列表。教师可通过前端操作调用add或del方法为学生添加或移除课程,控制器接收请求后修改课程学生关联表中的数据,保证课程与学生的对应关系准确。课程学生管理界面如图5-11所示。
图5-11课程学生管理界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
CourseStudents course_students = new CourseStudents();
course_students.setCourse_name(paramMap.get("course_name")==null?null:String.valueOf(paramMap.get("course_name")));
this.addEntity(course_students);
return success(1);
}
5.2.3 调课申请管理功能实现
教师处理调课申请时,ClassNameReschedulingRequestController的get_list方法展示待处理申请列表。教师选择申请后进行审批,调用update_examine_state方法更新审核状态。该方法校验新状态合法性,根据申请ID查找记录,修改审核状态后保存,并将结果反馈至前端。调课申请管理界面如图5-12所示。
图5-12调课申请管理界面
核心代码实现如下:
@GetMapping("/update_examine_state")
@Transactional
public String updateExamineState(Long id, String newState) throws IOException {
Map<String,String> queryMap = new HashMap<>();
queryMap.put("id",String.valueOf(id));
ClassNameReschedulingRequest class_name_rescheduling_request = service.findOne(queryMap);
class_name_rescheduling_request.setExamine_state(newState);
this.setEntity(queryMap,new HashMap<>(),class_name_rescheduling_request);
return "审核成功";
}
5.2.4 课堂作业管理功能实现
教师发布课堂作业时,ClassNameroomAssignmentController的add方法接收作业内容、截止时间等信息。教师查看学生提交情况时调用get_list方法,批改作业时通过set方法更新批改状态与评语。系统记录提交次数与批改次数,防止重复操作。课堂作业管理界面如图5-13所示。
图5-13课堂作业管理界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
ClassNameroomAssignment class_nameroom_assignment = new ClassNameroomAssignment();
class_nameroom_assignment.setClass_nameroom_assignment(paramMap.get("class_nameroom_assignment")==null?null:String.valueOf(paramMap.get("class_nameroom_assignment")));
this.addEntity(class_nameroom_assignment);
return success(1);
}
5.2.5 上课签到管理功能实现
教师管理课堂签到时,ClassNameAttendanceCheckInController的get_list方法展示签到记录。教师可手动修改学生的签到状态,调用set方法更新签到标记表。系统同时记录签到时间与签到方式,为课堂考勤统计提供数据支持。上课签到管理界面如图5-14所示。
图5-14上课签到管理界面
核心代码实现如下:
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
Map<String,String> queryMap = service.readQuery(request);
Map<String,Object> paramMap = service.readBody(request.getReader());
ClassNameAttendanceCheckIn class_name_attendance_check_in = new ClassNameAttendanceCheckIn();
class_name_attendance_check_in.setCheck_in_status(paramMap.get("check_in_status")==null?null:String.valueOf(paramMap.get("check_in_status")));
this.setEntity(queryMap,new HashMap<>(),class_name_attendance_check_in);
return success(1);
}
5.2.6 请假申请管理功能实现
教师审批学生请假申请时,LeaveRequestController的update_examine_state方法被调用。该方法校验传入的审核状态值是否合法,根据申请ID查询对应的LeaveRequest记录,更新其审核状态字段并保存,同时记录审核回复内容,将审批结果实时反馈。请假申请管理界面如图5-15所示。
图5-15请假申请管理界面
核心代码实现如下:
@GetMapping("/update_examine_state")
@Transactional
public String updateExamineState(Long id, String newState) throws IOException {
Map<String,String> queryMap = new HashMap<>();
queryMap.put("id",String.valueOf(id));
LeaveRequest leave_request = service.findOne(queryMap);
leave_request.setExamine_state(newState);
this.setEntity(queryMap,new HashMap<>(),leave_request);
return "审核成功";
}
5.2.7 考试安排管理功能实现
教师制定考试安排时,ExamScheduleController的add方法接收考试时间、地点、考场规则等信息。教师可通过set方法修改已发布的考试安排,通过del方法删除错误安排。系统根据课程与班级信息自动关联学生,确保考试通知准确送达。考试安排管理界面如图5-16所示。
图5-16考试安排管理界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
ExamSchedule exam_schedule = new ExamSchedule();
exam_schedule.setExam_time(parseToTimestamp(String.valueOf(paramMap.get("exam_time"))));
exam_schedule.setExamination_venue(paramMap.get("examination_venue")==null?null:String.valueOf(paramMap.get("examination_venue")));
this.addEntity(exam_schedule);
return success(1);
}
5.2.8 课程成绩管理功能实现
教师录入课程成绩时,CourseGradesController的add方法接收学生成绩数据。系统根据预设权重自动计算综合成绩。教师可通过get_list方法查看班级成绩分布,通过set方法修改已录入的成绩,更新后系统同步更新成绩排名与学分绩点。课程成绩管理界面如图5-17所示。
图5-17课程成绩管理界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
CourseGrades course_grades = new CourseGrades();
course_grades.setRegular_grades(paramMap.get("regular_grades")==null?null:Double.valueOf(String.valueOf(paramMap.get("regular_grades"))));
course_grades.setFinal_exam_grades(paramMap.get("final_exam_grades")==null?null:Double.valueOf(String.valueOf(paramMap.get("final_exam_grades"))));
this.addEntity(course_grades);
return success(1);
}
5.3 管理员用户功能实现
5.3.1 班级信息管理功能实现
管理员维护班级信息时,ClassNameInformationController的add方法用于新增班级,校验班级名称唯一性。set方法修改班级信息,del方法删除班级。删除班级前系统检查是否存在关联的课程与学生,若有则提示无法删除,保证数据引用的完整性。班级信息管理界面如图5-18所示。
图5-18班级信息管理界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
ClassNameInformation class_name_information = new ClassNameInformation();
class_name_information.setClass_name_name(paramMap.get("class_name_name")==null?null:String.valueOf(paramMap.get("class_name_name")));
this.addEntity(class_name_information);
return success(1);
}
5.3.2 教室信息管理功能实现
管理员管理教室资源时,ClassNameroomInformationController提供增删改查接口。新增教室时add方法校验教室名称与位置是否重复,防止资源冲突。修改教室信息时set方法更新容量、设备等属性,删除教室时检查是否存在课程安排,确保教室数据使用的合理性。教室信息管理界面如图5-19所示。
图5-19教室信息管理界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
ClassNameroomInformation class_nameroom_information = new ClassNameroomInformation();
class_nameroom_information.setClass_nameroom_name(paramMap.get("class_nameroom_name")==null?null:String.valueOf(paramMap.get("class_nameroom_name")));
this.addEntity(class_nameroom_information);
return success(1);
}
5.3.3 课程信息管理功能实现
管理员对课程信息进行全局管理时,CourseInformationController的add方法接收课程名称、教学大纲等详细信息。管理员可通过get_list查看所有课程,通过set方法修改课程状态,停用课程后该课程不再对教师和学生开放,保障课程数据有效性。课程信息管理界面如图5-20所示。
图5-20课程信息管理界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
CourseInformation course_information = new CourseInformation();
course_information.setCourse_name(paramMap.get("course_name")==null?null:String.valueOf(paramMap.get("course_name")));
this.addEntity(course_information);
return success(1);
}
5.3.4 班级课表管理功能实现
管理员编排班级课表时,ClassNameScheduleController的add方法接收班级、课程、时间、教室等排课信息。系统校验同一时间同一教室是否存在课程冲突,通过校验后保存课表数据。管理员可通过set方法调整课表,通过del方法删除错误排课记录。班级课表管理界面如图5-21所示。
图5-21班级课表管理界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
ClassNameSchedule class_name_schedule = new ClassNameSchedule();
class_name_schedule.setClass_name_name(paramMap.get("class_name_name")==null?null:String.valueOf(paramMap.get("class_name_name")));
class_name_schedule.setTimetable(paramMap.get("timetable")==null?null:String.valueOf(paramMap.get("timetable")));
this.addEntity(class_name_schedule);
return success(1);
}
5.3.5 课程投票管理功能实现
管理员管理课程投票活动时,CourseVotingController的add方法创建投票主题与选项。管理员可通过set方法修改投票信息,通过get_list查看投票参与情况与得票统计。系统记录每个学生的投票行为,防止重复投票,保证投票结果的真实性。课程投票管理界面如图5-22所示。
图5-22课程投票管理界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
CourseVoting course_voting = new CourseVoting();
course_voting.setCourse_name(paramMap.get("course_name")==null?null:String.valueOf(paramMap.get("course_name")));
course_voting.setCourse_description(paramMap.get("course_description")==null?null:String.valueOf(paramMap.get("course_description")));
this.addEntity(course_voting);
return success(1);
}
5.3.6 学生投票管理功能实现
管理员管理学生投票记录时,StudentVoteController的get_list方法展示所有投票明细。管理员可查询学生投票历史,通过set方法修改投票记录,系统同步更新对应课程的得票数,确保统计数据的准确性与一致性。学生投票管理界面如图5-23所示。
图5-23学生投票管理界面
核心代码实现如下:
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
5.3.7 课堂作业管理功能实现
管理员对课堂作业进行统一管理时,ClassNameroomAssignmentController的get_list方法展示所有作业。管理员可通过add方法发布公共作业,通过set方法调整作业要求,通过del方法删除过期作业。系统记录作业的创建者与修改时间,便于追踪作业变更历史。课堂作业管理界面如图5-24所示。
图5-24课堂作业管理界面
核心代码实现如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
ClassNameroomAssignment class_nameroom_assignment = new ClassNameroomAssignment();
class_nameroom_assignment.setClass_nameroom_assignment(paramMap.get("class_nameroom_assignment")==null?null:String.valueOf(paramMap.get("class_nameroom_assignment")));
this.addEntity(class_nameroom_assignment);
return success(1);
}
第六章 系统测试
6.1 测试目的
系统测试是为了检验延安大学海绵课堂管理系统是否达到设计目标以及用户的需要。主要目的就是检验各个功能模块的可用性以及正确性,保证学生、教师、管理员这三个用户可以完成各自的操作任务。其次通过对系统的测试来找出其中存在的错误和缺陷,即界面交互异常、数据计算错误、权限控制漏洞等,从而给系统的修复提供依据。另外测试过程对系统数据一致性保障能力进行关注,检验事务处理以及数据库操作是否可靠,在正常使用的情况下保证系统的稳定性[20]。
6.2 测试方法
本系统用黑盒测试和白盒测试相结合的方式来对系统进行测试。黑盒测试主要对前端界面和用户交互功能进行测试,根据需求规格说明书设计测试用例,涵盖所有的功能模块的正常流程以及异常分支。白盒测试关注的是后端的核心业务逻辑,用JUnit单元测试框架来检验Service层的方法,依靠代码覆盖率工具查看主要路径是否被执行。测试过程中采用本地开发环境模拟真实用户的操作,把系统的响应结果同预期结果进行对比,保证功能的正确性和逻辑性。
6.3 测试内容
学生上课签到功能测试
该模块测试聚焦于签到流程的完整性与身份验证的准确性。测试目标在于验证系统能否依据课程安排与签到时间窗口,正确处理学生的签到请求,并准确记录考勤状态。课堂签到测试如表6-1所示。
表6-1学生上课签到测试用例表
| 测试项 | 测试目的 | 测试步骤 | 预期结果 | 实际结果 |
|---|---|---|---|---|
| 正常签到 | 验证在有效签到时段内完成签到 | 学生在规定签到时间内发起签到操作 | 签到成功,考勤状态更新为已签到 | 符合预期 |
| 时段外签到 | 验证超出签到时间窗口的处理 | 学生在签到截止时间后尝试签到 | 系统提示签到失败,考勤状态不变 | 符合预期 |
| 重复签到 | 验证同课程多次签到的限制 | 学生针对同一课程再次发起签到请求 | 系统提示已签到,禁止重复操作 | 符合预期 |
学生请假申请功能测试
该模块测试旨在验证请假申请从提交到审批的完整流程。测试内容涵盖申请信息的提交、审批状态流转以及审批结果的反馈机制,确保学生与教师之间的交互过程符合业务规范。请假申请测试如表6-2所示。
表6-2学生请假申请测试用例表
| 测试项 | 测试目的 | 测试步骤 | 预期结果 | 实际结果 |
|---|---|---|---|---|
| 提交申请 | 验证请假申请正常提交 | 学生填写请假事由与时间后提交 | 申请成功保存,状态为未审核 | 符合预期 |
| 教师审批通过 | 验证教师批准申请的处理 | 教师对申请执行批准操作 | 申请状态更新为已通过 | 符合预期 |
| 教师审批驳回 | 验证教师驳回申请的处理 | 教师对申请执行驳回操作并填写理由 | 申请状态更新为未通过,学生收到驳回说明 | 符合预期 |
教师课程成绩录入功能测试
该模块测试重点验证成绩数据的录入、计算与存储准确性。测试目标在于确保教师能够按照课程考核权重录入各项成绩,系统自动计算综合成绩并完成数据持久化,同时支持对已录入成绩的修改。课程成绩录入测试如表6-3所示。
表6-3教师课程成绩录入测试用例表
| 测试项 | 测试目的 | 测试步骤 | 预期结果 | 实际结果 |
|---|---|---|---|---|
| 正常录入 | 验证成绩正常录入与计算 | 教师为某学生录入平时成绩与期末成绩 | 系统计算综合成绩并保存成功 | 符合预期 |
| 修改成绩 | 验证已录入成绩的修改功能 | 教师修改已保存的某项成绩 | 综合成绩重新计算,更新成功 | 符合预期 |
| 数据校验 | 验证成绩数值范围限制 | 教师录入超出规定范围的成绩数值 | 系统提示数据错误,保存失败 | 符合预期 |
教师调课申请管理功能测试
该模块测试聚焦于调课申请的审批流程与数据一致性。测试目标在于验证教师提交的调课申请能否被管理员或相关责任人处理,申请状态随审批操作正确流转,调课结果同步更新至班级课表。调课申请管理测试如表6-4所示。
表6-4教师调课申请管理测试用例表
| 测试项 | 测试目的 | 测试步骤 | 预期结果 | 实际结果 |
|---|---|---|---|---|
| 提交调课申请 | 验证调课申请正常提交 | 教师填写调课信息后提交申请 | 申请成功保存,状态为未审核 | 符合预期 |
| 申请审批通过 | 验证管理员批准调课申请 | 管理员对申请执行批准操作 | 申请状态更新为已通过,课表同步更新 | 符合预期 |
| 申请驳回 | 验证管理员驳回调课申请 | 管理员对申请执行驳回操作 | 申请状态更新为未通过,课表不变 | 符合预期 |
管理员课程信息管理功能测试
该模块测试主要验证课程基础数据的增删改查操作。测试目标在于确保管理员能够正确维护课程信息,包括课程名称、授课教师、上课地点等关键属性,并对课程状态进行启用或停用操作,停用课程后不再对外显示。课程信息管理测试如表6-5所示。
表6-5管理员课程信息管理测试用例表
| 测试项 | 测试目的 | 测试步骤 | 预期结果 | 实际结果 |
|---|---|---|---|---|
| 新增课程 | 验证课程信息正常添加 | 管理员填写课程信息并保存 | 课程成功添加至列表 | 符合预期 |
| 课程查重 | 验证课程名称唯一性校验 | 管理员添加已存在的课程名称 | 系统提示重复,添加失败 | 符合预期 |
| 停用课程 | 验证课程状态变更功能 | 管理员将某课程状态设为停用 | 课程状态变更,学生端不再显示 | 符合预期 |
学生课程投票功能测试
该模块测试旨在验证投票功能的正确性与防重复机制。测试目标在于确保学生能够对课程进行投票,投票结果实时更新,系统能够准确记录每个学生的投票行为,防止同一学生对同一课程重复投票。课程投票测试如表6-6所示。
表6-6学生课程投票测试用例表
| 测试项 | 测试目的 | 测试步骤 | 预期结果 | 实际结果 |
|---|---|---|---|---|
| 正常投票 | 验证投票操作正常执行 | 学生对某课程投出规定票数 | 投票成功,课程得票数增加 | 符合预期 |
| 重复投票 | 验证同一课程重复投票的限制 | 学生对已投票课程再次投票 | 系统提示已投票,禁止重复操作 | 符合预期 |
| 票数统计 | 验证投票结果统计准确性 | 多名学生对同一课程投票 | 课程得票数为各学生投票数之和 | 符合预期 |
班级课表管理功能测试
该模块测试聚焦于课表编排的正确性与冲突检测。测试目标在于验证管理员能够为班级分配课程,系统自动检测同一时间同一教室是否存在课程冲突,保证课表编排的合理性,并支持对已排课表的调整与查询。班级课表管理测试如表6-7所示。
表6-7管理员班级课表管理测试用例表
| 测试项 | 测试目的 | 测试步骤 | 预期结果 | 实际结果 |
|---|---|---|---|---|
| 编排课表 | 验证课程正常排入班级课表 | 管理员为班级添加课程安排 | 课表成功生成,班级学生可查看 | 符合预期 |
| 冲突检测 | 验证同一时间同一教室排课限制 | 管理员在已占用时段和教室安排新课 | 系统提示冲突,添加失败 | 符合预期 |
| 修改课表 | 验证已排课表的调整功能 | 管理员修改已有课程安排 | 课表信息更新成功 | 符合预期 |
测试结论
对系统的全部核心功能模块进行了全面的测试,所有的测试用例都已执行完毕。从测试结果可知,学生上课签到功能可以正确地对签到时间进行识别,并且能将考勤情况登记下来,请假申请功能可以实现从提交到审批的过程流转,教师成绩录入功能可以完成成绩的计算以及修改。调课申请管理功能的申请审批和课表同步工作正常,管理员课程信息管理功能实现了对课程的增加、删除、修改以及状态控制。学生课程投票功能可以防止重复投票,班级课表管理功能可以检测课程时间与教室的冲突。所有的测试项实际结果都和预期结果一致,测试结论为通过。
本文设计并实现了一套基于Spring Boot和Vue.js的前后端分离课堂管理系统,面向高校教学管理场景,支持学生、教师、管理员三类角色。系统涵盖课程管理、上课签到、作业布置、成绩录入、请假审批、课表编排、课程投票等核心功能,采用MySQL存储数据,通过模块化设计保障功能完整性与操作便捷性,并完成全流程测试验证。

950

被折叠的 条评论
为什么被折叠?



