摘 要
全面贯彻党的教育方针,全面推进素质教育的主体是教师,随着信息技术的发展,大量的信息以文件的形式保存在个人电脑中,特别是在校园中,越来越多的教学资源,如课件、教学软件、课程信息、教学资料等,保存在各个教生的电脑中,实际有效利用率较低,如果能将这些文件以某种形式共享起来,相信会对广大师生的日常教学以及学习带来很大的帮助。本文研究设计的一款“基于Java的教育教学系统”主要包括:课程信息、教学资料、教学大纲、练习题目、在线提问功能等。本系统采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取MySQL作为后台数据的主要存储单元,采用Spring boot框架、JSP技术、Ajax技术进行业务系统的编码及其开发。
关键词:Java;MYSQL;教育教学系统
Abstract
The main body of comprehensively implementing the Party's educational policy and promoting quality education is teachers. With the development of information technology, a large amount of information is saved in the form of files on personal computers, especially on campus. More and more teaching resources, such as courseware, teaching software, course information, teaching materials, etc., are saved on the computers of various teachers, and the actual effective utilization rate is relatively low. If these files can be shared in some form, I believe it will bring great help to the daily teaching of teachers. The "Java based education and teaching system" studied and designed in this article mainly includes course information, teaching materials, teaching syllabus, exercise questions, online questioning function, etc. This system adopts an object-oriented development model for software development and hardware installation, which can effectively meet the actual usage needs. It improves the corresponding software installation and program coding work, adopts MySQL as the main storage unit for backend data, and uses Spring boot framework, JSP technology, and Ajax technology for business system coding and development.
Keywords: Java; MYSQL;Education and teaching system
目 录
1 绪论
1.1 研究背景与意义
互联网的兴起从本质上改变了整个社会的教育方式,国内各大企业从上个世纪90年代互联网兴起之时,就产生了通过网络进行教学的想法。进入21世纪以后,随着整个社会的发展、进步,制约网上教育教学的各个瓶颈问题逐一被击破。中国互联网协会网络教育工作委员会调查显示,网络浏览教学资源给人们生活带来的变化,除了浏览文件的场所的改变以外,更重要的是大大改变了传统的教学行为习惯,无论是否在浏览网上教学,还是上网查看教学资源的相关信息,已经成为现代教育的重要组成部分,这一环节对教学行为的实际变化起到了至关重要的指导作用。
教育教学系统的开发及实现,所需要的工作内容:
(1)首先是确定选题,确定好所要做的系统,并对系统的背景及现在面临的一些问题等进行系统的初步确认。
(2)系统确认完成后,结合系统开发的需求进行确认系统开发所使用的技术,教育教学系统的开发使用Springboot框架,数据库进行平台的搭建开发,确认好使用的技术进行技术分析,所使用的技术是否可以完成系统的实现。
(3)确定好系统使用的技术,进行在线确认系统所划分的用户角色,并且根据用户角色划分确定所要设计的功能模块,对教育教学系统的设计主要划分别为管理员和教师角色。
(4)系统的功能模块确认完成后进行程序及界面的设计,设计完成后,并且通过测试来判断程序是否完善,对于系统测试,需要不同的用户进行不同的内容编辑及提交,及使用不同的测试方式找出程序中存在的漏洞,并对程序出现的漏洞问题进行在线解决处理,如果测试系统没有任何问题时,可以将系统上传进行正式操作使用。
本教育教学系统一共分为六个章节进行介绍,章节内容安排如下:
第一章:引言。第一章主要介绍了教育教学系统课题研究的背景,教育教学系统的现状和本文的研究内容与主要工作。
第二章:系统需求分析。第二章主要从系统的用户、功能等方面进行需求分析。
第三章:系统设计。第三章主要对系统框架、系统功能模块、数据库进行功能设计。
第四章:系统实现。第四章主要介绍了系统框架搭建、系统界面的实现。
第五章:系统测试。第五章主要对系统的部分界面进行测试并对主要功能进行测试
2 教育教学系统系统分析
2.1 可行性分析
在分析了教育教学系统的真实需求后,将教育教学系统所需要的角色划分整理成了下图2-1和图2-2。
教育教学系统设计与实现是一个基于Java的教育教学的资源共享平台,我们在实现这个系统所采用的技术方案是基于Java语言,MYSQL数据库,在大学的学习中这两门课程都已经学过,而且自己也用这些技术开发过小的项目,在平时的课程设计以及作业也经常用到Java和MYSQL,在技术上实现自己的自主开发是可行的。
从教育教学系统的开发成本来看,教育教学系统的设计和开发都是我自己完成的,没有其他成本上的开销。
从教育教学系统的维护成本来看,教育教学系统的开发遵循一套完整的代码编写规范,并且教育教学系统的结构设计非常灵活,遵循高内聚低耦合的原则,因此易于维护和迭代开发。
在教育教学系统上线之后,上线前期我会根据真实需求来调查,对使用我开发的教育教学系统来制定一套符合的使用费。系统运行稳定后我会将推广范围到其他行业的中,他们可以自己来注册使用我的教育教学系统,只需要缴纳一点点的定金。
综合以上的分析,教育教学系统所带来的经济效益将会带来极大的收益。并且随着我的推广,来使用我开发的教育教学系统的市场将越来越大,教育教学系统带来的利润也就越来越多。因此,从经济层面来看开发教育教学系统的是可行的。
本次开发的教育教学系统是比较简单的,只要会上网的用户就可以使用,进入系统以后,可以根据提示进行对应的操作,不管是系统的操作设计黑石系统的逻辑设计都相对简单,比如说后台管理员想要在线上传课程信息以及教学资源等的时候,首先是要了解课程信息以及教学资源等数据的各种参数,在了解的过程中,我们在这个页面中设置了醒目的分类菜单(课程信息、教学资料、教学大纲、课程表、练习题目、错题本),方便后台管理员根据各项不同信息上传以及前台教师进行各类信息查询,所以说在用户使用方面看来是比较容易操作的;在管理员管理部分,我们对系统各种参数的设置都是固定的,操作者只要进入后就能够实现增删改查,非常方便,综合来说,系统在操作上是可行的。
图2-1可行性分析图
分析完系统的可行性,接下来我们来看系统的业务流程,图2-2就是业务流程图:
图2-2业务流程图
按照教育教学系统的角色,我划分为了学生、教师用户模块、管理员管理模块这两大部分。
教师模块:
(1)登录;教师凭账户以及密码进行系统登录,教师可以对个人信息的增删改查,比如个人资料,密码修改。
(2)公告消息:可以进行公告信息的阅览,可以进行评论+收藏。
(3)课程信息:可以进行课程信息的编辑提交。
(4)个人信息:可以进行个人资料的修改,包括个人昵称、头像等更换。
(5)教学资源:可以在线进行教学资源视频资料的上传。
(6)教学大纲:可以在线进行教学大纲的编辑提交,包括材料编号、材料名称、材料内容、图片以及教师个人信息。
(7)课程表:可以对课程表信息进行增删改查。
(8)练习题目:发布练习题目信息。
(9)错题本:存储错题信息数据等。
(10)在线练习管理:对在线练习信息进行管理。
学生模块:
(1)注册登录:学生首先注册成为系统用户并登录教育教学系统;可以对个人信息的增删改查,比如个人资料,密码修改。
(2)公告消息:可以进行公告信息的阅览,可以进行评论+收藏。
(3)课程信息:可以进行课程信息的查询搜索等。
(4)课程表:可以进行课程表信息的查看。
(5)教学资源:可以在线进行教学资源视频资料的下载以及在线观看。
(6)教学大纲:可以在线了解教学大纲信息。
(7)在线提问:可以对进行在线提问操作。
(8)练习题目:可以进行练习题目练习。
管理员管理模块:
(1)公告管理:管理员可以对教育教学系统中首页显示的轮播图以及系统中的一些公告发布到系统当中,让用户及时的查看到系统信息,进行合理安排。
(2)用户管理:管理员可以对教育教学系统中所有的用户进行管控,包括了管理员,教师以及学生。
(3)课程类型管理:管理员在后台可以对教育教学系统中的课程分类信息进行增删改查。
(4)课程信息管理:管理员可以对教师发布的课程信息进行审核操作。
(5)更多模块管理:对教育教学系统的模块(包括:教学大纲、材料分类、课程表、练习题目、错题本、系统管理模块)进行维护与管理。
教育教学系统的非功能性需求比如教育教学系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下3-1表格中:
表3-1教育教学系统非功能需求表
安全性 | 主要指教育教学系统数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
可靠性 | 可靠性是指教育教学系统能够安装用户的指示进行操作,经过测试,可靠性90%以上。 |
性能 | 性能是影响教育教学系统占据市场的必要条件,所以性能最好要佳才好。 |
可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
易用性 | 用户只要跟着教育教学系统的页面展示内容进行操作,就可以了。 |
可维护性 | 教育教学系统开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
2.4 系统用例分析
通过2.3功能的分析,得出了本教育教学系统的用例图:
学生角色用例如图2-3所示。
图2-3 教育教学系统学生角色用例图
web后台管理上的管理员是维护整个教育教学系统中所有数据信息的。管理员角色用例如图2-4所示。
web后台管理上的教师是可以进行系统数据信息部分上传的,教师角色用例如图2-5所示。
图2-5 教育教学系统教师角色用例图
2.5本章小结
本章主要通过对教育教学系统的可行性分析、流程分析、功能需求分析、系统用例分析,确定整个教育教学系统要实现的功能。同时也为教育教学系统的代码实现和测试提供了标准。
本章主要讨论的内容包括教育教学系统的功能模块设计、数据库系统设计。
3.1 系统功能模块设计
在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本教育教学系统中的用例。那么接下来就要开始对本教育教学系统的架构、主要功能和数据库开始进行设计。教育教学系统根据前面章节的需求分析得出,其总体设计模块图如图3-1所示。
图3-1 教育教学系统功能模块图
3.1.2用户模块设计
后台管理者能够实现对前台注册的用户增删改查操作,用户模块结构图如下图:
图3-2用户模块结构图
3.1.3 教学资料管理模块设计
教育教学系统是中需要存储不少教学资料信息,其模块功能结构图如下:
图3-3教学资料模块结构图
3.1.4课程信息模块设计
教育教学系统是中需要存储不少课程信息数据,其模块功能结构,具体的结构图如下:
图3-4课程信息模块结构图
3.1.5上传信息管理模块设计
教育教学系统还有一个重要的功能就是信息的上传,(比如练习题目上传、课程表上传、教学大纲上传等),其模块功能结构,具体的结构图如下:
图3-5上传信息模块结构图
数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。
3.2.1 数据库概念结构设计
下面是整个教育教学系统中主要的数据库表总E-R实体关系图。
图3-6 教育教学系统总E-R关系图
通过上一小节中教育教学系统中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。
表名:exampaper
功能:练习题目表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
name | varchar | 200 | 练习题目名称 | ||
time | int | 在线练习时长(分钟) | |||
status | int | 练习题目状态 | 0 |
表名:chat
功能:在线提问
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
userid | bigint | 用户id | |||
adminid | bigint | 管理员id | |||
ask | longtext | 4294967295 | 提问 | ||
reply | longtext | 4294967295 | 回复 | ||
isreply | int | 是否回复 |
表名:kechengxinxi
功能:课程信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
kechengbianhao | varchar | 200 | 课程编号 | ||
kechengmingcheng | varchar | 200 | 课程名称 | ||
kechengleixing | varchar | 200 | 课程类型 | ||
kechengfengmian | longtext | 4294967295 | 课程封面 | ||
shangkeshijian | datetime | 上课时间 | |||
shangkedidian | varchar | 200 | 上课地点 | ||
kechengshizhang | varchar | 200 | 课程时长 | ||
kechengxiangqing | varchar | 200 | 课程详情 | ||
fabushijian | datetime | 发布时间 | |||
jiaoshigonghao | varchar | 200 | 教师工号 | ||
jiaoshixingming | varchar | 200 | 教师姓名 | ||
clicktime | datetime | 最近点击时间 |
表名:cailiaofenlei
功能:材料分类
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
cailiaofenlei | varchar | 200 | 材料分类 |
表名:kechengleixing
功能:课程类型
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
kechengleixing | varchar | 200 | 课程类型 |
表名:kechengbiao
功能:课程表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
banji | varchar | 200 | 班级 | ||
tupian | longtext | 4294967295 | 图片 | ||
kechengyi | varchar | 200 | 课程一 | ||
kechenger | varchar | 200 | 课程二 | ||
kechengsan | varchar | 200 | 课程三 | ||
kechengsi | varchar | 200 | 课程四 | ||
kechengwu | varchar | 200 | 课程五 | ||
kechengliu | varchar | 200 | 课程六 | ||
faburiqi | date | 发布日期 | |||
beizhu | longtext | 4294967295 | 备注 | ||
jiaoshigonghao | varchar | 200 | 教师工号 | ||
jiaoshixingming | varchar | 200 | 教师姓名 |
表名:xuesheng
功能:学生
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
xuehao | varchar | 200 | 学号 | ||
mima | varchar | 200 | 密码 | ||
xueshengxingming | varchar | 200 | 学生姓名 | ||
zhaopian | longtext | 4294967295 | 照片 | ||
xingbie | varchar | 200 | 性别 | ||
xueyuan | varchar | 200 | 学院 | ||
banji | varchar | 200 | 班级 | ||
lianxidianhua | varchar | 200 | 联系电话 |
表名:jiaoxueziliao
功能:教学资料
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
mingcheng | varchar | 200 | 名称 | ||
tupian | longtext | 4294967295 | 图片 | ||
ziliao | longtext | 4294967295 | 资料 | ||
ketangshipin | longtext | 4294967295 | 课堂视频 | ||
shipinxiangqing | longtext | 4294967295 | 视频详情 | ||
shangchuanshijian | datetime | 上传时间 | |||
jiaoshigonghao | varchar | 200 | 教师工号 | ||
jiaoshixingming | varchar | 200 | 教师姓名 |
表名:jiaoxuedagang
功能:教学大纲
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
cailiaobianhao | varchar | 200 | 材料编号 | ||
cailiaomingcheng | varchar | 200 | 材料名称 | ||
tupian | longtext | 4294967295 | 图片 | ||
cailiaojianjie | longtext | 4294967295 | 材料简介 | ||
cailiaofenlei | varchar | 200 | 材料分类 | ||
cailiaoneirong | longtext | 4294967295 | 材料内容 | ||
tijiaoshijian | datetime | 提交时间 | |||
jiaoshigonghao | varchar | 200 | 教师工号 | ||
jiaoshixingming | varchar | 200 | 教师姓名 |
3.4本章小结
整个教育教学系统的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。
4 教育教学系统详细设计与实现
教育教学系统的详细设计与实现主要是根据前面的教育教学系统的需求分析和教育教学系统的总体设计来设计页面并实现业务逻辑。主要从教育教学系统界面实现、业务逻辑实现这两部分进行介绍。
4.1用户功能模块
4.1.1 前台首页界面
当进入教育教学系统的时候,首先映入眼帘的是系统的导航栏,下面是轮播图以及系统内容,其主界面展示如下图4-1所示。
图4-1 前台首页界面图
4.1.2 用户注册界面
普通的用户只支持对系统资讯的浏览,想要观查看课程信息或者资料下载以及视频下载就必须登录到系统,如果你没有本教育教学系统的账号的话,添加“注册”根据提示输入好用户信息后,点击“注册”按钮后,系统会对输入的信息进行验证,验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可注册成功。其用户注册界面展示如下图4-2所示。
图4-2 前台用户注册界面图
前台用户注册逻辑代码如下:
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "用户已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 用户ID:[0,8388607]用户获取其他与用户相关的数据
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
/**
* 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)
*/
@Basic
@Column(name = "state")
private Integer state;
/**
* 所在用户组:[0,32767]决定用户身份和权限
*/
@Basic
@Column(name = "user_group")
private String userGroup;
/**
* 上次登录时间:
*/
@Basic
@Column(name = "login_time")
private Timestamp loginTime;
/**
* 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时
*/
@Basic
@Column(name = "phone")
private String phone;
/**
* 手机认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "phone_state")
private Integer phoneState;
/**
* 用户名:[0,16]用户登录时所用的账户名称
*/
@Basic
@Column(name = "username")
private String username;
/**
* 昵称:[0,16]
*/
@Basic
@Column(name = "nickname")
private String nickname;
/**
* 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
*/
@Basic
@Column(name = "password")
private String password;
/**
* 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
*/
@Basic
@Column(name = "email")
private String email;
/**
* 邮箱认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "email_state")
private Integer emailState;
/**
* 头像地址:[0,255]
*/
@Basic
@Column(name = "avatar")
private String avatar;
/**
* 创建时间:
*/
@Basic
@Column(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp createTime;
@Basic
@Transient
private String code;
}
4.1.3 用户登录界面
教育教学系统中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到教育教学系统的首页中;否则将会提示相应错误信息,用户登录界面如下图4-3所示。
图4-3用户登录界面图
用户登录的逻辑代码如下所示。
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
4.1.4课程信息界面
用户在点击导航栏上面的课程信息后,就可以搜索查看课程信息,用户根据自己的需求可以进行查询、点赞、评论,课程信息界面如下图4-4所示。
图4-4课程信息界面图
4.1.5 个人中心界面
当用户点击“个人中心”后,就会显示个人的资料信息,可以进行资料修改,界面如下图4-5所示。
图4-5个人中心界面图
个人中心的逻辑代码如下所示。
/**
* 修改密码
* @param data
* @param request
* @return
*/
@PostMapping("change_password")
public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
// 根据Token获取UserId
String token = request.getHeader("x-auth-token");
Integer userId = tokenGetUserId(token);
// 根据UserId和旧密码获取用户
Map<String, String> query = new HashMap<>();
String o_password = data.get("o_password");
query.put("user_id" ,String.valueOf(userId));
query.put("password" ,service.encryption(o_password));
Query ret = service.count(query, service.readConfig(request));
List list = ret.getResultList();
Object s = list.get(0);
int count = Integer.parseInt(list.get(0).toString());
if(count > 0){
// 修改密码
Map<String,Object> form = new HashMap<>();
form.put("password",service.encryption(data.get("password")));
service.update(query,service.readConfig(request),form);
return success(1);
}
return error(10000,"密码修改失败!");
}
4.1.6 教学资料列表界面
当用户点击了教学资料详情界面,可以了解到改系统发布的教学资料列表,同时可以对该教学资料进行在线播放以及下载视频,还可以对视频进行收藏+点赞+评论,教学资料展示页面如图4-6所示。
图4-6 教学资料界面图
教学资料的逻辑代码如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
StringBuffer sql = new StringBuffer("INSERT INTO ");
sql.append("`").append(table).append("`").append(" (");
for (Map.Entry<String,Object> entry:body.entrySet()){
sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
}
sql.deleteCharAt(sql.length()-1);
sql.append(") VALUES (");
for (Map.Entry<String,Object> entry:body.entrySet()){
Object value = entry.getValue();
if (value instanceof String){
sql.append("'").append(entry.getValue()).append("'").append(",");
}else {
sql.append(entry.getValue()).append(",");
}
}
sql.deleteCharAt(sql.length() - 1);
sql.append(")");
log.info("[{}] - 插入操作:{}",table,sql);
Query query = runCountSql(sql.toString());
query.executeUpdate();
}
4.1.7 练习题目界面
当用户点击“练习题目”链接后就进入题目在线练习界面,界面如下图4-7所示。
图4-7 练习题目界面图
练习题目界面逻辑代码如下:
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
Query select = service.select(service.readQuery(request), service.readConfig(request));
List resultList = select.getResultList();
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
public Query select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return runEntitySql(sql.toString());
}
4.2管理员功能模块
4.2.1 系统用户管理界面
管理员可以对教育教学系统中所有的用户进行管控,包括了管理员,教师,学生。界面如下图4-8所示。
图4-8 系统用户管理界面图
系统用户管理界面逻辑代码如下:
@RequestMapping(value = {"/avg_group", "/avg"})
public Map<String, Object> avg(HttpServletRequest request) {
Query count = service.avg(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
管理员在后台可以对教育教学系统中显示的教学大纲进行维护管理,界面如下图4-9所示。
图4-9教学大纲管理界面图
4.2.3 课程表管理界面
管理员可以对教育教学系统中的教师上传的课程表信息进行维护管理。界面如下图4-10所示。
图4-10课程表管理界面图
课程表管理界面逻辑代码如下:
@RequestMapping("auth")
public class AuthController extends BaseController<Auth, AuthService> {
/**
* 服务对象
*/
@Autowired
public AuthController(AuthService service) {
setService(service);
}
}
4.2.4错题本管理界面
管理员可以对教育教学系统中的错题本信息进行维护管理。界面如下图4-11所示。
图4-11错题本管理界面图
错题本管理界面逻辑代码如下:
@PostMapping("/upload")
public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {
log.info("进入方法");
if (file.isEmpty()) {
return error(30000, "没有选择文件");
}
try {
//判断有没路径,没有则创建
String filePath = System.getProperty("user.dir") + "\\target\\classes\\static\\upload\\";
File targetDir = new File(filePath);
if (!targetDir.exists() && !targetDir.isDirectory()) {
if (targetDir.mkdirs()) {
log.info("创建目录成功");
} else {
log.error("创建目录失败");
}
}
String fileName = file.getOriginalFilename();
File dest = new File(filePath + fileName);
log.info("文件路径:{}", dest.getPath());
log.info("文件名:{}", dest.getName());
file.transferTo(dest);
JSONObject jsonObject = new JSONObject();
jsonObject.put("url", "/api/upload/" + fileName);
return success(jsonObject);
} catch (IOException e) {
log.info("上传失败:{}", e.getMessage());
}
return error(30000, "上传失败");
}
4.2.5材料分类管理界面
管理员可以对教育教学系统中的材料信息进行分类管理。界面如下图4-12所示。
图4-12材料分类管理界面图
5系统测试
系统的前台、后台、数据库完成以后,这个系统才算是完成了一半,我们在这之后要对系统进行最后的一个阶段,那就是测试了,测试对一个系统来说是非常重要的,有的时候开发完一个系统,如果测试不合格的话,这个系统是没有办法进行投入使用的,所有我们要用测试对系统的功能进行检验,把不完善的功能尽量完善,把出现的bug解决掉,然后给用户呈现出一个完美的系统。通过对系统最后一步的测试,使得开发人员对自己的系统更加有信心,更加积极的为后期的系统版本的更新提供支持。
系统测试包括:用户登录功能测试、教学资料功能测试、课程信息、密码修改功能测试,如表5-1、5-2、5-3、5-4所示:
表5-1 用户登录功能测试表
教学资料管理功能测试:
表5-2 教学资料管理功能测试表
功能描述 | 用于教学资料管理 | |
测试目的 | 检测教学资料管理时的各种操作的运行情况 | |
测试数据以及操作 | 预期结果 | 实际结果 |
点击添加教学资料,必填项合法输入,点击保存 | 提示添加成功 | 与预期结果一致 |
点击添加教学资料,必填项输入不合法,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击修改教学资料,必填项修改为空,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击修改教学资料,必填项输入不合法,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击删除教学资料,选择教学资料删除 | 提示删除成功 | 与预期结果一致 |
点击搜索教学资料,输入存在的教学资料名 | 查找出教学资料 | 与预期结果一致 |
点击搜索教学资料,输入不存在的教学资料名 | 不显示教学资料 | 与预期结果一致 |
课程信息界面测试:
表5-3 课程信息管理的测试用例
功能描述 | 用于课程信息管理 | |
测试目的 | 检测课程信息管理时的各种操作的运行情况 | |
测试数据以及操作 | 预期结果 | 实际结果 |
点击添加课程信息,必填项合法输入,点击保存 | 提示添加成功 | 与预期结果一致 |
点击添加课程信息,必填项输入不合法,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击修改课程信息,必填项修改为空,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击修改课程信息,必填项输入不合法,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击删除课程信息,选择课程信息删除 | 提示删除成功 | 与预期结果一致 |
点击搜索课程信息,输入存在的课程信息名 | 查找出课程信息 | 与预期结果一致 |
点击搜索课程信息,输入不存在的课程信息名 | 不显示课程信息 | 与预期结果一致 |
密码修改功能测试:
表5-4 密码修改功能测试表
通过编写教育教学系统的测试用例,已经检测完毕用户登录模块、教学资源管理模块、课程信息模块、密码修改功能测试,通过这四大模块为教育教学系统的后期推广运营提供了强力的技术支撑。
结 论
在教育教学系统开发之前,需要先对用户的具体需求进行分析。包括系统的可行性分析、功能需求分析以及其他需求等。在可行性分析过程中,对系统实现的技术性、经济性以及管理等方面进行了分析。总体上证明了系统实施的可行性。
本文总结了教育教学系统实现背景与意义,然后阐述了系统的具体业务需求,并根据系统需求对系统结构以及功能模块等进行了详细地设计,将整个系统划分为多个不同的功能模块。在分析系统功能需求时,对整个系统的总体架构以及功能模块等进行了分析,并选择合适的系统开发技术完成了对各个模块的开发工作。系统开发完成之后进行了部署,同时进行了系统的测试过程,通过测试证明了系统在功能以及性能等方面都达到了预期的要求,具有较高的稳定性与可靠性。
参考文献
[1]李励泽. 智能人脸肌肤健康检测系统的研究[D].长春理工大学,2021.
[2]朱洪浪,李林,曾陈萍,董加强,张耀方.基于单片机的多功能健康检测系统设计[J].电脑知识与技术,2021,17(07):244-245+248.
[3]张红妍,刘阳,夏雪.基于C/S架构的服务器健康检测系统设计[J].中国科技信息,2020(24):72-73.
[4]能明凯,周广明,赵伟,赵立岭.老年人健康检测系统的设计[J].现代计算机,2020(16):33-36.
[5]陈春谋.基于Java系统的智能手环健康检测系统关键技术[J].微型电脑应用,2019,35(09):99-101.
[6]陆斯,孟广威,曲志鹏,孙贺亮.基于车联网和医疗大数据的车载健康检测系统[J].汽车零部件,2019(07):24-27.
[7]宋张骏,王虎霞,赵静,赵斌,周明,梁秀芬,杨晓民,韩丕华,陈楠,贺赛,王柚熙,侯艳妮,范拥国.基于深度学习技术的乳腺健康智能检测系统在乳腺肿瘤检测中的应用[J].中华乳腺病杂志(电子版),2019,13(01):37-43.
[8]蔡昂,刘晓敏.基于虹膜角点密度和瞳孔大小的健康检测系统设计与分析[J].江苏科技信息,2019,36(03):54-56.
[9]宋千,江成军.微波形变雷达的桥梁健康检测系统应用研究[J].中国公路,2018(24):113-115.
[10]刘路. 基于量子共振技术的人体健康检测系统软件研究与实现[D].重庆大学,2018.
[11]王浩, 基于物联网技术的空间结构(网架)健康检测系统开发与应用. 江苏省,徐州市产品质量监督检验中心,2018-07-24.
[12]顔志成.国民体质健康检测系统设计与开发[J].科教导刊(上旬刊),2018(07):166-167.
致 谢
逝者如斯夫,不舍昼夜。转眼间,大学生会员活便已经接近尾声,人面对着离别与结束,总是充满着不舍与茫然,我亦如此,仍记得那年秋天,我迫不及待的提前一天到了学校,面对学校巍峨的大门,我心里充满了期待:这里,就是我新生活的起点吗?那天,阳光明媚,学校的欢迎仪式很热烈,我面对着一个个对着我微笑的同学,仿佛一缕缕阳光透过胸口照进了我心里,同时,在那天我认识可爱的室友,我们携手共同度过了这难忘的两年。如今,我望着这篇论文的致谢,不禁又要问自己:现在,我们就要说再见了吗?
感慨莫名,不知所言。遥想当初刚来学校的时候,心里总是想着工科学校会过于板正,会缺乏一些柔情,当时心里甚至有一点点排斥,但是随着我对学校的慢慢认识与了解,我才认识到了她的美丽,她的柔情,并且慢慢的喜欢上了这个校园,但是时间太快了,快到我还没有好好体会她的美丽便要离开了,但是她带给我的回忆,永远不会离开我,也许真正离开那天我的眼里会满含泪水,我不是因为难过,我只是想将她的样子映在我的泪水里,刻在我的心里。最后,感谢我的老师们,是你们教授了我们知识与做人的道理;感谢我的室友们,是你们陪伴了我如此之久;感谢每位关心与支持我的人。
少年,追风赶月莫停留,平荒尽处是春山。
点赞+收藏+关注 →私信领取本源代码、数据库
关注博主下篇更精彩
一键三连!!!
一键三连!!!
一键三连!!!
感谢一键三连!!!