项目编号:BS-GX-052
前言:
随着现代社会的不断发展,越来越多的业务趋向于线上实现。在教育学习领域,传统的学习发展模式已经不能完全满足当今时代的发展。在过去,学生的题目练习总是依赖于纸质化,具有一定的空间和时间限制,而由于试题册的大量印刷在一定程度上也造成了资源的浪费。为此,实现一套网上题库系统能够大大提升学生试题训练的效率,可以让用户随时随地打开题库进行训练,再结合适当的组卷算法在短时间内随机生成一套符合要求的试题,达到了资源的合理利用。本系统是基于Web的题库系统,采用B/S三层架构模式、jQuery、MySQL等技术实现对整个系统的完善。适用性强、易于操作。
一,项目简介
随着网络技术的深入发展,互联网在学习领域越来越占据优势地位。特别的,近几年受疫情影响,高校为不影响教学进程,积极响应教育部号召,组织开展线上教学[1],保障学生即使身在家中,也能每天按时按量地学习到新知识,保障了教学的连贯性和完整性。那么,通过线上学习掌握知识后,该如何让学生加深对知识的理解呢?众所周知,巩固和强化已学知识是非常重要的,任何知识只有在实际运用中才能强化和加深对它的记忆和理解。所以做题越多,印象越深,做题就越有感觉。就像开车一样,即使你知道怎样开车,如果缺少了锻炼这一环节,那你就永远也达不到熟练驾驶的开车境界。在这样的背景下,题库系统应运而生。
题库系统一直是学校教育系统的一个重要组成部分,国内外高校目前也有很多各式各样的题库系统。但是目前已有的题库系统形式过于单一,专业性强,不满足于各个学科的通用性。现阶段,对于一名大学生而言,无论是专业技术还是个人能力,社会的高速发展都给予了他们更高的要求。在校期间,他们需要不断地通过考试来提升锻炼自己,由于现在信息的过分零散化,学生往往需要通过多种方式去搜集不同的试题,而这样繁琐的工作就大大地浪费了学生的有效学习时间。提高和改进搜集题库的效率成为学生共同追求的一个原则。对于学校来说,许多院校都开展了教务管理系统、成绩管理、课程评价、虚拟课堂,以及各种形式复杂多样的现代化网上教学系统。但出于某些因素,大部分院校还是采取了传统的人工考试方法。这样的考核方式要求老师工作人员自动出考卷、进行考核、布置考场、人工监考、人工收卷、批阅试题和解析试题等。教师为了寻找出一本优质的备考试卷,往往需要到处找考题,根据考核大纲要求以及学生所掌握的知识,按照个人经验进行重新整合,确定考题比例和难易程度,但现在的大部分高校一个老师往往需要带几个不同的班级,师资力量不够充沛,而这一系列看似简单的过程却需要耗费教师大量的精力和资源,而且在出试卷、改试卷的过程中也不可避免的会因为个人主观因素而造成最后试卷分数的偏差,从而影响考试结果的准确性[2]。
本系统是基于Web的大学生题库测试系统。使用这套题库测试系统,不仅可以使学生的学习效率得到很大程度提升,而且可以让教师把更多的时间投入到教学和课堂中,有利于提高教学质量。也因为随机组卷算法的实现,本系统在维护考试公平公正方面也能起到很大作用[3]。既便于重复使用,也符合了节能减排的发展趋势。
基于当前题库考试系统与传统考试形式中存在的多种问题与不足,为设计出一套基于Web的大学生题库管理系统,保证系统的实现是符合当前社会的需要,现对系统有关需求分析如下:
(1)建立统一的题库
题库建设的好坏直接关系到评价的最终结果。题库的建设应采取专人工作、协同工作的模式,让各科教师通过各种途径搜集出所任课的不同类型练习题,然后对题目进行分类整理,再发送给学科负责人审核校队后由管理员对题目进行上传,最终形成原始题库。
(2)学科全面性
不同的试题应该涵盖课程中的所有知识点,如果题目数量过多,最好将不同种类题目进行区分,将不同的试题分别储存在不同的科目中。
(3)随机组卷
系统可以随时从题库中随机抽取不同类型以及不同难度的题目自动生成一套完整的试卷,组卷过程可包含手动选题、自动生成两种形式,充分体现用户的个性化要求,确保试题的公平公正。教师在利用题库系统对学生进行考核时可以根据考核标准来设置试卷的整体结构以及每类试题容量,在对班级整体进行考核时,可以设置每个人抽取的每套卷具有相同的难度而题目本身又是相异的。
(4)系统安全可靠
随着科技的快速发展,人们对个人信息的安全性要求也越来越高,所以无论是哪一个系统都不得不把安全性放在首要地位。本系统在必要的时候可以通过对数据库进行加密处理来保证系统信息的安全[11]。首先在进入系统时,应当采用不同的识别方式,为不同身份的用户分别开放不同的功能,将权限划分清楚。
基于该题库管理系统的设计初衷,对题库系统的核心功能规划如下:
(1)用户注册登录功能:为系统提供识别验证用户身份信息的功能。
(2)课程修改功能:方便用户对课程的添加、删除和查看。
(3)用户管理功能:上级用户可以对下级用户进行查看、删除、增加等相关操作。
(4)题库管理功能:用户可以自行选择所需要进行训练的题库。
(5)试卷管理功能:对已完成的试卷进行浏览查看或成绩分析。
(6)个人管理功能:提供给用户进行个人信息修改的功能。
该系统的主要使用群体包括老师、学生、和管理员。下面对这些用户的主要功能进行说明。
管理员是该系统的最高级用户,具有管理员登陆、添加对低权限用户管理的功能,如添加查看教师、学生、班级、课程等功能,如图2所示。
对使用教师身份登陆系统的用户分配的权限包括对题库进行管理,根据不同的要求进行组卷选择,对测试结果的分析和统计以及学生教学资料的管理。如图3所示
学生主要对题库,试卷、个人资料等进行操作。学生模块功能如图4所示。
系统总的功能模块如下图所示:
二,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
开发技术:Javaweb技术
三,系统展示
本题库系统采用简洁的界面,致力于为用户带来良好的体验。系统首页如图19所示。
图19 系统首页图
6.1 系统登录注册模块实现
6.1.1 用户注册功能模块的实现
用户在进入网站首页后点击“登录”按钮进入注册登录页面,在该页面,若是第一次登录可点击下方“注册”,在跳转页面后选择用户身份、输入账号密码以及性别后点击“注册”,即可完成注册。注册页面如图20所示。
图20 注册页面
6.1.2 用户登录功能模块的实现
使用者在登陆网页上根据提示选择自己的身份,然后在框内输入账号密码和验证码,最后单击“登录”,待信息验证成功后即可完成登录。登录页面如图21所示。
图21 登陆页面
6.2 管理员功能模块实现
6.2.1 学生管理模块的实现
(1)添加学生功能模块的实现
作为高级用户的管理员,可以手动为系统添加学生用户,在该页面中按照提示框的信心将学生信息进行录入点击“提交”按钮即可完成添加学生;在需要批量导入学生信息时可以点击“批量导入”,将储存学生信息的文件导入即可。添加学生页面如图22所示。
图22 添加学生页面
(2)学生列表功能模块的实现
在该页面下可以对所有学生的信息进行查看,修改,或删除,当需要快速定位到某一位学生时可以点击上方“搜索”按钮。学生列表页面如图23所示。
图23 学生列表页面
(3)导出学生信息功能模块的实现
该系统能将班上的学生信息进行一键输出,在输出时需要对学生基本信息进行选择,然后单击“导出”或者“全部导出”按钮。导出学生信息页面如图24所示。
图24 导出学生信息页面
6.2.2 教师管理功能模块的实现
(1)添加教师功能模块的实现
添加教师信息时,可以在该页面按照提示框内信息将教师信息一一填写,点击“提交”即可,以文件形式导入时可以在批量导入后选择文件点击批量导入。添加教师页面如图25所示。
图25 添加教师页面
(2)教师列表功能模块的实现
在该页面下,输入教师的相关信息后点击“提交”即可,教师列表页面如图26所示。
图26 教师列表
6.2.3 班级管理功能模块的实现
(1)添加班级功能模块的实现
在添加班级时进入该页面,输入班级名称、专业、年级信息,然后单击“提交”按钮,完成新班级的加入,添加班级页面如图27所示。
图27 添加班级页面
(2)班级列表页面功能的实现
在该页面实现所有班级信息的查询,可以准确的看到班级所属专业和年级。班级列表页面如图28所示。
图28 班级列表页面
6.2.4 课程管理功能模块的实现
(1)添加课程功能模块的实现
输入课程名称、班级,后点击“提交”按钮,就可以完成新增课程。添加课程页面如图29所示。
图29 添加课程页面
(2)课程列表功能模块的实现
浏览所有的课程咨询,可以对其更改,删除等。课程列表页面如图30所示。
图30 课程列表页面
四,核心代码展示
package top.tmithy.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import top.tmithy.daomain.AdminUser; import top.tmithy.service.AdminUserService; @WebServlet("/adminUserServlet") public class AdminUserServlet extends HttpServlet { private static final long serialVersionUID = 1L; private AdminUserService adminUserService = new AdminUserService(); private AdminUser adminUser = new AdminUser(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getParameter("action"); if ("login".equals(action)) { login(request, response); } } private void login(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { request.setCharacterEncoding("UTF-8"); /* * 1.判断验证码是否输入正确 * 2.获取表单信息; * 3.验证表单信息的合法性,调用Service层验证账号密码的正确性; * 4.正确,储存用户信息跳转至index.jsp; * 5.失败,跳转至login.jsp。 */ //1.判断验证码是否输入正确 String vcode = request.getParameter("vcode"); String csode = (String)request.getSession().getAttribute("vscode"); if(!vcode.equalsIgnoreCase(csode)) { request.setAttribute("msg", "<script>alert('登录失败,验证码错误!');window.location.herf='"+ request.getContextPath() +"/login.jsp';</script>"); } // 2.获取表单信息; String username = request.getParameter("username"); String password = request.getParameter("password"); // 3.验证表单验证表单信息的合法性,调用Service层验证账号密码的正确性; adminUser = adminUserService.VerifyInfo(username, password); if (adminUser != null) { // 4.正确,储存用户信息跳转至index.jsp; request.getSession().setAttribute("role", "0"); request.getSession().setAttribute("user", adminUser); request.setAttribute("msg", "<script>alert('登录成功!'); window.location.href='" + request.getContextPath() + "/admin/index.jsp';</script>"); request.getRequestDispatcher("msg.jsp").forward(request, response); } else { // 5.失败,跳转至login.jsp。 request.setAttribute("msg", "<script>alert('登录失败,账号或密码错误!'); window.location.href='" + request.getContextPath() + "/login.jsp';</script>"); request.getRequestDispatcher("msg.jsp").forward(request, response); } } }
package top.tmithy.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import top.tmithy.daomain.TeacherUser; import top.tmithy.service.TeaUserService; @WebServlet("/teaUserServlet") public class TeaUserServlet extends HttpServlet { private static final long serialVersionUID = 1L; private TeaUserService teaUserService = new TeaUserService(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getParameter("action"); if ("login".equals(action)) { login(request, response); } } private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 1.判断验证码是否输入正确 * 2.获取表单信息; * 3.验证表单信息的合法性,调用service层判断用户名和密码的正确性; * 4.正确,跳转至index.jsp; * 5.错误,跳转至login.jsp。 */ //1.判断验证码是否输入正确 String vcode = request.getParameter("vcode"); String csode = (String)request.getSession().getAttribute("vscode"); if(!vcode.equalsIgnoreCase(csode)) { request.setAttribute("msg", "<script>alert('登录失败,验证码错误!'); window.location.href='" + request.getContextPath() + "/login.jsp';</script>"); request.getRequestDispatcher("msg.jsp").forward(request, response); } // 2.获取表单信息; String username = request.getParameter("username"); String password = request.getParameter("password"); // 3.验证表单信息的合法性,调用service层判断用户名和密码的正确性; TeacherUser teacherUser = teaUserService.VerifyInfo(username, password); if (teacherUser != null) { // 4.正确,跳转至index.jsp; request.getSession().setAttribute("role", "1"); request.getSession().setAttribute("user", teacherUser); request.setAttribute("msg", "<script>alert('登录成功!'); window.location.href='" + request.getContextPath() + "/teacher/index.jsp';</script>"); request.getRequestDispatcher("msg.jsp").forward(request, response); } else { // 5.错误,跳转至login.jsp。 request.setAttribute("msg", "<script>alert('登录失败,账号或密码错误!'); window.location.href='" + request.getContextPath() + "/login.jsp';</script>"); request.getRequestDispatcher("msg.jsp").forward(request, response); } } }
五,项目总结
题库测试系统在以后的发展主要体现在以下几个方面:
(1)智能随机组卷[6]。目前为止各个题库系统中随机组卷功能已经做得越来越完善。在用户抽取题目的时候,题库系统可以根据用户自定义的题目难度系数以及题目类型去随机地抽取相匹配的试题,计算机算法保障题目抽取的随机性与连贯性。在用户需求不断更新,计算机算法不断进步的同时,题库管理系统日后的发展一定会日新月异。
(2)人脸识别测试[7]。近年来人工智能已经越来越进入大众视野,随处可见的智能家居,智能机器人等,人工智能产品已经慢慢成为我们生活中不可或缺的一部分。在付款时,我们甚至不需要携带任何东西,只需将面部放在收银系统的镜头前便可轻松付款;在装入了智能门锁的家庭,也早早实现了钥匙自由,只需人脸识别便可省去携带钥匙的麻烦。对于此,人脸识别势必也将继续运用到题库管理系统中,这样的举措,将大大提升考试的公平性。现今,已经有许多的考试系统中运用了人脸识别系统,如驾照考试,普通话考试等。这更加彰显了人脸识别系统在题库管理系统中的应用前景。
(3)智能批阅试卷。由于主观题的开放性,一个题目往往会有很多个答案,甚至有些主观题存在言之成理即可的现象,这就造成了大多数的题库管理系统都存在只针对客观题进行判别的弊端,剩下很少一部分系统会对主观题进行系统自动判别却也不够准确。对于这样的技术缺口更加激励着软件工程从业人员继续探索的决心。争取将这样的题库系统适用于所有的题型,设计出一组更加完美的算法可以根据答题的语境和语义以及题目的个性化要求对作答内容进行判别,使题库系统变得更加人性化和普遍化。这也是未来题库系统迫切需要发展的关键所在。
(4)测试结果的智能分析。当前题库系统生成的报告都是基本的学生姓名、班级、成绩、排名等信息。随着用户需求的不断扩大,一些用户可能需要统计某一类型题目的正确率或从不同的角度更加深入分析此次测试的整体情况等。而完善这些技术就需要更高级别的基于数据仓库挖掘技术的报告分析技术。