当前位置:首页 期刊杂志

基于B/S 模式的程序设计在线评测系统设计与实现

时间:2024-05-04

祝小玲

(北海职业学院 广西壮族自治区北海市 536000)

目前我国教育形势变化逐渐加剧,信息技术应用已经进入成熟阶段,高校在面临全新教学要求的情况下,应当采取现代化信息技术建设措施,使评测流程能够从传统体系框架内脱离,进一步贴合新时代要求,达到提高工作效率目标。通过利用B/S 模式建设的程序设计在线评测系统,可以为教师与学生提供高度自动化的应用服务,有利于解决传统评测体系存在的弊端问题,使评测工作能够进一步提高开展质量与效率,为专业建设发展打下坚实基础。

1 系统应用意义简析

目前系统的应用价值能够在程序设计评测环境中得到有效发挥作用,能够进一步创设理想评测条件,解决传统体系下存在的负面问题,可以将试卷以数字化形式进行存储,可以有效节约纸质资源的应用,同时还能够降低试卷出现污损或丢失的概率[1]。同时,在线评测试卷的题目可以进行重复应用,并根据网络层面教学趋势进行灵活改动,能够对学生的实际能力开展客观测试流程,具有优越的应用价值。此外,系统可以完成自动抽题任务,能够为教师提供直接阅卷的途径,有利于工作效率提升,进一步降低了教师的工作量级别,节约人力资源。

2 系统可行性与需求分析

2.1 可行性分析

程序设计评测系统属于无纸化在线应用类型系统,可以减少传统出卷环节,从而达到降低开支的目标。在现有信息技术框架下,系统的应用价值相对较高,同时开发成本较低、建设周期短,能够以少量资源应对大量学生。同时,系统的界面架构能够利用软件平台进行高效部署,完成处理的界面用户友好性高,符合实际应用标准,能够为传统评测流程提供改革途径。

2.2 需求分析

日常程序设计评测工作需求较为复杂,需要针对相关需求进行详细分析,为后续功能模块的部署提供重要参考。在系统应用过程中,主要提供对java、C 两种语言代码程序处理功能,具有用户管理模块,包括普通用户(学生)和超级管理员(教师),将超级管理员权限与普通用户权限进行分割处理,使相关操作能够从架构层面隔离,避免出现越权现象;普通用户可进行注册、登录和修改个人信息功能;超级管理员具有普通用户和题库增删改查操作管理功能,题库管理可以为超级管理员修改与调整评测试题内容提供重要工具。为降低题库建设时间,缩短处理周期,系统支持题库导入功能,使其能够合理利用其它应用题库文件,快速完成部署流程;以及比赛模块,包括比赛试题管理功能及评测功能。除此之外,在线评测系统查看排行榜及比赛状态功能具有重要应用意义,其处理需求相对较高,是核心模块。因此,系统提供成绩自动统计整合功能,自动快速统计分析成绩状态,要求防止用户抄袭作弊行为检测,为后续教学提供重要参考。同时,成绩还需要与个人信息进行整合,并利用大数据或云计算等形式,进一步挖掘相关内容价值,达到理想应用目标。

3 系统设计实现研究

3.1 开发架构

在线评测系统通常可应用C/S 或B/S 两种基础架构,由于C/S 架构模式在应用场景中需要利用独立客户端进行处理,完成开发操作、维护操作并落实跨平台建设,因此整体工作量相对较高。在互联网信息技术应用逐渐成熟的背景下,B/S 架构模式为最佳在线评测系统应用类型,因此需要合理利用其基础优势,确保在线评测活动能够正常进行。B/S 架构模式本身属于C/S 架构模式的子类延伸,其需要通过平台浏览器软件进行访问,获得相关内容并完成数据传输。相对于传统方案,B/S 可以将WEB 服务技术作为应用核心,使整体跨平台特性得到完整发挥[4]。通过将服务器分割为数据库、web、判题机三个部分组成,用户可以通过web 浏览器调用相关接口,强化数据处理质量,使后续解释反馈工作能够快速进行,有利于强化在线评测系统灵活性,系统总体架构图如图1。

图1:系统总体架构图

3.2 设计实现技术

3.2.1 spring 框架技术

B/S 架构模式在线评测系统设计过程中,需要应用多种技术类型,确保整体运行效果能够达到理想标准。在编写底层架构时,需要利用WebWork 作为基础组件应用平台,通过借助Spring MVC 提供的 Controller 完成拦截用户请求模块的编写,需要合理利用该技术将业务处理逻辑从传统体系中剥离,避免服务器承受过大压力。编写过程中,服务器在接收到用户请求前,首先需要配置相关 DispatcherServlet,之后再编写 Controller。在完成解析后,便可采用过滤模块分发对应处理请求,使逻辑系统能够完成信息处理操作,并产生响应信息,为前端用户提供操作选项。通过编写ErrorController 方法,用户对异常的捕获和处理 Controller,并返回错误的页面。

3.2.2 AJAX 异步请求技术

异步请求技术对在线评测系统具有重要影响意义,其能够有效解决经典WEB 应用存在的延时弊端问题,对传统等待插入响应的架构进行改进,达到异步处理目标,有效提高刷新效率。在应用过程中,其需要将JS 与HTTP 请求相互结合,利用浏览器软件平台内部的XML HTTP 请求机制,将对象以异步方式发送至服务器,达到传输与解析目标。

3.2.3 数据库连接池技术

通常情况下,在线评测系统存在时间限制需求,超过时间段后所有答题应当终止并立即提交试卷。在这种需求下,为实现相关目标,采用数据库连接池技术进行设计。此类技术的主要原因与登录阶段、提交阶段服务器压力较大存在密切关联,为避免出现服务端导致整体系统无法正常运转的情况,工作效率低,需要利用数据库连接池技术对相关架构进行改进,使系统并发性得到显著提升,降低请求耗时与资源消耗级别,满足快速响应标准。数据库连接池技术需要将数据源与JNDI 进行绑定处理,使系统在启动初始化阶段能够自动应用相关配置文件处理连接池,达到建立目标。在用户端发送连接处理请求时,服务系统需要首先对数据池进行遍历搜寻,获得对应空闲连接对象,并将其返回至用户端[4]。在用户端需要切断连接的情况下,系统可以释放连接对象,使其能够重新返回数据池内部,等待下一请求流程。通过这种技术,可以有效改善系统并发性能,达到处理架构目标。

3.3 功能模块设计

功能模块属于线上评测系统的核心组成部分,包括用户模块、后台管理模块、在线评测模块、比赛测试模块、公告模块共五大部分组成,用户模块主要分为普通用户和超级管理用户,普通用户自行注册、登录和修改个人信息等功能,超级管理用户主要对普通用户进行增删改管理,以及用户权限设置等功能;后台管理模块主要包括创建修改比赛,实现题库增删改查,公告发布、修改、删除等功能;在线评测模块主要包括查看题库、提交答案、查看排行榜以及比赛状态等功能,是系统核心模块;系统功能模块如图2 所示。

图2:系统功能模块

3.4 数据库设计

数据库可以为在线评测系统提供重要运行支持,是连接系统web 服务器和判题机服务器的桥梁,该系统选用MYSQL 作为数据库平台,主要有用户信息表、提交信息表、题库信息表、登录信息表、比赛状态信息表、排名信息表、公告信息表等数据表,数据表如表1 所示。系统用户信息表主要存储用户名、密码、做题正确数量、提交次数、正确率等信息;提交信息表主要存储提交用户名、题编号、运行结果、提交时间、运行时间以及运行内存等信息;题库信息表存储题编号,题标题、题内容、题类别、题难度以及模拟测试次数等信息;登录信息表存储用户登录情况,包括用户名、密码、登录时间,目的了解访问系统人数;比赛状态信息表存储比赛题库信息、比赛开始时间、结束时间;排名信息表存储做题数量,做题用时信息,以及排名信息;公告信息表存储公告标题、内容、时间等信息。系统数据库ER 图如图3 所示。

图3:数据库ER 图

表1:系统数据表

3.5 系统工作进程

在线上评测系统应用过程中,判题机是系统核心服务进程,主要功能是访问web 服务器和数据库服务器的任务队列,随时提取判题队列,工作流程图如图4 所示。评判原理是用户利用浏览器软件平台的代码上传控制器,即submitAction。控制其在获得相关请求内容后可以将代码进行自动注入处理,使其与服务器运行类整合,达到单线程操作目标。随后,需要调用命令工具的exeCmd 方法,完成用户提交程序代码的编译处理流程。编译阶段需要注重系统实时状态,并将程序控制开关进行规范化处理,为用户反馈多种应用结果。若程序编译处理失效,则自动结束相关流程,并将错误信息反馈至用户层面。若程序编译成功,则继续调用classloader 将编译代码完成加载,最终借助futuretask 与反射处理体系对main 模块进行处理,达到执行目标[5]。系统对输出结果与数据库内设定的标准结果进行对比,若对比结果正确则反馈通过信息,若对比结果错误则反馈答案异常信息。在执行操作阶段,若程序出现内存溢出问题,则需要自动向用户端反馈内存溢出错误信息。若运行时间超出限制标准,则需要返回超时错误信息。

图4:进程流程图

3.6 核心功能设计实现

在线上评测系统应用过程中,核心功能设计实现需要满足程序设计评测的基础需求。因此系统功能架构应当重视基础组成,确保其能够以平衡状态进行应用。线上评测系统目前主要支持 Java、C 的编译,包含顶部菜单区域,对公告内容进行轮播处理,题目模块、比赛模块、成绩数据分析等操作,为用户提供多样化的服务结构。在用户端利用浏览器发送对应请求内容后,首先对主要动作类请求进行处理,随后调用相关处理对象方法,使信息可以动态反馈至用户层面。核心功能设计实现的逻辑分析主要有以下几点:

3.6.1 判题模块

整个系统核心所在是判题部分,该系统把判题服务单独出来,这样既有利于增加判题元素加快判断速度,用户发送代码程序请求给RabbitMQ,形成可扩展的worker 判断元素,提高判断效率。通过派生出一个进程,设置时间、内容用量等限制,再利用ptrace 进行监控,限制系统调用次数,解决安全问题,利用开源的应用容器引擎Docker 扩展设置计算时间、内存的使用量、程序代码等参数,编译判断程序代码。Docker 编译 Java 命令代码是Docker run --rm -u root -v /oj:/oj openjdk:8 /bin/sh -c cd /oj&&javac Main.java,编译 C 命令代码是Docker run --rm -u root -v /oj:/oj openjdk:8 /bin/sh -c cd /oj&&g++ Main.cpp。

3.6.2 账号安全验证

Token 由header 密文、payload 密文、Signature 签名三部分组成,用户登录发送请求,生成一个由Base64 解密Token,服务端把Token 的Signature 签名存于redis 和服务器的数据库中进行HS256 运算,运算得出的签名与Token 自带的签名进行比较,如一致Token 合法,否则原文被修改。另利用Base64 解密payload 密文,授权时间与当前时间比较判断是否过期,保证账号安全验证通过。

3.6.3 读取导入文件

根据学生解题情况自动生成绩报表并支持导出功能,首先创建模板控制器。把文件传输到视图,DownImport Template()中的参数要与视图的或导出的文件名一致。用string 获取表的路径,文件转化成流才能传输。导入的文件也转化成流,然后进行判断,判断是否读取到文件,读取不到进行提示,否则文件返回,获取到文件。下载导入模板,事先要下载模板填入数据,就可以进行读取数据。主要是利用 POI 读取 Excel 文件,支持 xls、xlsx 格式。操作的顺序与 Excel 的结构基本一致,按顺序逐次获取Workbook →Sheet →Column →Row。其中Row 的内容可是多种类型,例如数字、字符串类型输出。最后返回获取数据,关键代码如下:

3.6.4 检测抄袭作弊

主要是利用 K-means 检测代码抄袭作弊情况,K-means是一种常用的聚类算法,具体原理初始化k 个样本数目,再针对每个样本Xi 计算到距离最小的聚类中心的应用类中,每个类aj 根据公式计算聚类中心,聚类中心公式如图5 所示,再利用WEKA 数据挖掘修改数据源,配置 MySQL 数据库连接,根据K-means 的流程,设置相关对象参数,执行算法。关键代码如下:

图5:聚类中心公式

4 结论

综上所述,B/S 架构在高校程序在线评测系统设计过程中具有重要应用意义。对在线评测系统的功能进行了全面设计,基本完成前期的分析和设计,为了能够体现系统整体效果,需进一步加强相关更细致的研究,实现理想系统平台目标,减少在性能和安全方面的缺陷。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!