admin 管理员组

文章数量: 1086019


2024年4月14日发(作者:简述什么是框架技术)

第36卷 第5期

2020年5月

福 建 电 脑

Journal of Fujian Computer

Vol. 36 No.5

May 2020

Moodle平台SQL在线评测系统的实现

曾棕根

(宁波职业技术学院电子信息工程学院 浙江 宁波 315800)

摘 要 SQL编程训练是《数据库原理及应用》相关课程的教学核心部分,如何现场检验学生的SQL编程能力和自动评价学

生的SQL编程作业,是该课程教学的最大痛点。本文应用Git中心和Docker中心提供的免费开源组件,在Moodle网络课

程平台中,使用CodeRunner插件和Jobe后端评测系统,在极短的时间内,快速构建自己的SQL在线评测系统。一个学期

以来,该系统快速稳定可靠,取得了非常好的应用效果。

关键词 Moodle;SQL;自动评测;源代码;Docker;Jobe;CodeRunner

中图法分类号 TP393 DOI:10.16707/.2020.05.030

Realization of SQL Online Evaluation System Based on Moodle

ZENG Zonggen

(School of Electronic Information Engineering, Ningbo Polytechnic, Ningbo, China, 315800)

1 引言

《数据库原理及应用》是计算机及其相关专业

的基础核心课程之一,批改学生提交的SQL编程作

业和考试题历来是一项非常耗时耗力的艰巨工作。

如何能像C、C++、Pascal、Java、Python、PHP、

NoteJS等其它编程语言一样,做到机器在线自动批

改,是广大数据库任课老师一直以来的期盼。

本文采用LNMP + Moodle + CodeRunner +

Docker + Jobe免费开源架构,轻松实现SQL编程

的在线评测的快速构建,并经过实际教学应用,改

善了数据库传统教学模式。

表1 info表

uid

1

2

3

idnumber

201901

201902

201903

name

Rose

Jack

Tom

score

87

58

46.5

2

SQL在线评测原理

SQL

在线评测的采用黑盒测试原理

[1]

,在同一

个数据库的同样的表和相同的记录中,执行学生提

交的

SQL

语句。如果输出结果与题目设定的输出数

据完全相同,那么这些

SQL

语句判定为正确答案。

比如,给定一个表

info

,要求输出成绩小于

60

的所有记录。题目中给出的是表的结构和几个字段

样例,如表

1

所示。

———————————————

那么,学生给出的答案至少可以出现以下几

种:

select * from info where score<60

select * from info where score>=0 and score<60

select uid,idnumber,name,score from info where

score<60

上述答案,提交给数据库系统去运行,通过字

符串比较输出结果与评测系统中设定的结果。如果

与文本内容完全相同,系统就认为学生编写的

SQL

语句是正确的。

3 SQL在线评测系统实现

实现一套

SQL

在线评测系统,难点在于:老师

在出题时,必须先在服务器上创建特定的数据库、

表和记录;另外,开发一套独立的评测系统,工作

量太大。

曾棕根,男,1975年生,硕士,副教授,主要研究领域为软件工程。E-mail:****************。

88 曾棕根:Moodle平台SQL在线评测系统的实现 第5期

3.1 SQLite数据库

SQLite

是一个开源、跨平台、支持

SQL

语法

和遵守

ACID

的关系型数据库管理系统,可以随意

拷贝修改分发,是世界上使用最多的数据库引擎

[2]

它最重要的一个特点就是,每个数据库只有一个独

立的、跨平台的文件。该文件包含了该数据库中所

有的表、记录及其它相关特性文件,具有消耗资源

小、存取效率高等优点

[3]

由于

SQLite

支持大部分标准

SQL

语句

[4]

,因

此该评测系统除了能进行

SQLite

数据库教学评测

外,也能用于

MySQL

MariaDB

SQL Server

Oracle

等数据库的

SQL

编程教学。在老师的电脑上,可以

使用免费的

SQLiteStudio

等第三方窗口界面工具来

创建和修改

SQLite

数据库。

3.2 CodeRunner + Jobe软件包

新西兰坎特伯雷大学计算机科学系的高级研

究员

Richard Lobb

博士花费数年时间,开发了一个

名为

Jobe

的计算机程序自动评测后端系统和名为

CodeRunner

的安装到

Moodle

网络课程平台的测验

题插件,实现了

C

C++

Java

Pascal

PHP

SQL

NoteJS

等编程语言的实时评测,并把成绩自动统计

Moodle

网络课程平台的学生作业得分中。

CodeRunner

插件和

Jobe

映像已经发布在

Git

中心和

Docker

中心的服务器上,供全球下载免费使用。评

测系统的软件结构如图

1

所示。

Chrome浏览器--客户机

Moodle + CodeRunner题型

Nginx

Docker

PHP-FPM:

Moodle + CodeRunner插件

Jobe

MariaDB

CentOS 7操作系统--服务器

图1 SQL评测系统软件结构

从图

1

可以看出,服务器采用了

LNMP

架构,

LNMP

架构运行了

Moodle

网络课程平台和

CodeRunner

编程前端界面插件。

LNMP

架构是当前

最流行的

Web

服务器架构,具有免费开源、开销小

和并发高的特点,技术资料丰富,易于安装部署,

可以下载各组件的源代码到服务器上,进行本地化

的编译、安装和配置

[5]

服务器中运行

Jobe

自动判题作业引擎的是

Docker

平台。

Docker

是一个开源的应用容器引擎,

开发者可以打包他们的应用以及依赖包为一个映

像文件,上传到

Docker

中心

.

com/

[6]

。使用者只需要在自己的服务器中使用

dock

pull

命令从

Docker

中心直接将想要的映像下载到本

地,此映像就可以在服务器的

Docker

中的一个容

器直接运行,而无需考虑当前的操作系统环境,也

无需任何配置。如果把

CentOS

操作系统比作大海,

那么

Docker

就是大海中的一艘巨轮,而容器则是

巨轮上的一个个标准化的集装箱,每个集装箱(容

器)中运行的就是某个应用程序和其依赖的全部环

境,容器之间完全是相互独立和隔离的。

Docker

现了同一个应用程序在不同操作系统上的零配置

极速部署和运行。

工程具体过程为:在

CentOS 7

操作系统上安装

Nginx 1.17.8

PHP 7.3.15

MariaDB 10.4.2

服务,

再安装

Moodle 3.6.8+

网络课程平台,接着在

Moodle

中安装

CodeRunner

插件,再在此服务器中安装

Docker 19.03.4

,最后在

Docker

中通过

[docker pull

trampgeek/jobeinabox:latest]

导入最新版的

Jobe

像。对于

LNMP

架构的运维人员来说,上述架设工

作一天时间就能完成,稍作适应的配置,系统就能

立即投入到教学应用中。

4 SQL题目出题方法

老师首先在自己的电脑上使用

SQLiteStudio

建一个数据库,名为

。再在

数据库中

创建一张名为

info

的表,

SQL

命令为

[CREATE

TABLE info (sid INTEGER PRIMARY KEY

AUTOINCREMENT UNIQUE,sname VARCHAR

(40) NOT NULL,score REAL,inserttime

TIMESTAMP NOT NULL DEFAULT

(CURRENT_TIMESTAMP));]

。这里特别注意的是,

每张表都应该设计一个名称类似

inserttime

的插入

时间字段,类型为

timestamp

,缺省值为

CURRENT_TIMESTAPE

,而且必须勾选“

Not

NULL

”(非空)。这样,这个字段的值不用人工在

前端或后台程序填入,

SQLite

数据库系统会去读取

服务器的当前时间,自动填入。

再输入几条记录,如图

2

所示。

2020年 福 建 电 脑 89

图2 输入记录

这样,在文件夹中就看到一个名为

的单

个文件,它里面就是保存上述创建的数据库、表和

记录。

再登录到

Moodle

网络课程平台中,创建一道

CodeRunner

类型的题型,选择

SQL

类型的评测题。

再在测试案例

1

中的输出部分,输入题目运行

的标准答案。需要注意的是,输出的二维表格式是

固定的,每列默认占用

10

个字符,字段间用两个

空格隔开;字段名下方默认打印

10

个“

-

”号,如

3

所示。

图3 输出数据

在支持文件中,将本地的

文件上传到

Moodle

平台中,如图

4

所示。

图4 上传数据库文件

5 SQL编程评测功能测试

从图

5

可以看到,界面中同时显示了期待的输

出结果和学生提交的

SQL

命令输出的结果。若两者

在文本比较上完全一致,那么就判对,否则就判错。

图5 SQL评测界面

参 考 文 献

[1] 曾棕根.源程序在线评测系统技术改进.计算机工程与应用,

2011(4):68-71

[2] 叶清明.基于MDA的SQLite碎片数据清除技术.计算机应用与软件,

2017(1):50-54

[3] 何文才.基于Android平台的SQLite数据库加密研究.计算机应用与软

件,2019(10):310-315,333

[4] 马庆杰.基于SQLite内容雕刻的恢复技术.计算机应用,

2017(2):392-396

[5] 曾棕根.便携式高性能WNMP架构的研制.

计算机应用与软件,

2018(4):168-171

[6] 张浩.RainbowD:一种异构云环境下高效的Docker镜像分发系统.计

算机学报, 2019(12):1-18


本文标签: 评测 系统 应用 数据库 技术