摘 要:程序设计课程是大部分工科专业的基础课程,对后续专业课程学习非常重要。为了提高课程的教学效果,结合学习通和在线判题系统对课程内容、实践环节等进行研究与探索,根据学校教学特点设计了一款在线判题系统。该系统基于ThinkPHP框架搭建,使用目前流行的B/S架构,最终以网页形式提供给教师与学生实践操作。学生通过该系统能获得测评实时反馈,增强了学习自主性,提高了编程能力,并减少了教师的工作量。
关键词:学习通;在线判题系统;程序设计;ThinkPHP;数据分析
中图分类号:TP31.1;TP393 文献标识码:A 文章编号:2096-4706(2024)08-0032-05
0 引 言
计算机程序设计类课程是高校计算机、软件工程、大数据、智能科学等专业的基础课程,对后续的专业课程学习非常重要,主要目标是培养学生解决实际问题的编程能力。程序设计不同于传统理论教学,需要在上机实践操作过程理解、运用和掌握知识点。传统教学实践中主要存在以下问题:
1)学生的设计风格和编程实现各不相同,教师评阅过程需要耗费大量的时间和精力。
2)练习作业提交到返回时间周期过长,导致学生编程思路的中断,无法及时分析结果从而降低学习兴趣和学习积极性。
3)传统教学形式以教师为中心,无法积极调动学生学习主动性,容易养成期末突击现象,不注重平时学习积累[1-3]。
为解决上述问题,论文基于ThinkPHP网页开发框架搭建了在线判题系统并引入学习通平台,组成“混合式”教学模式的重要一环,提升人才培养效果和质量。学习通是北京超星公司开发的一款在线教学平台,贯通了课前备课预习、课中课堂教学与管理、课后复习考核与教学评估等整个教学过程,实现了混合式教学全过程的数据采集、云端分析和教学反馈,促进教学模式和组织形式的改革,构建了信息化时代的教学生态体系[4,5]。在线判题系统为学生提供了良好的实践环境,可以在线提交程序源代码,系统即时进行编译和执行,并通过预先设计的数据检验程序的正确性。基于学习通和在线判题系统的教学模式如图1所示。
1 在线判题系统总体设计
在线判题系统基于普通用户、教师用户和管理员3种不同用户角色设计了7个不同的功能模块:登录注册、个人中心、测评队列、问题管理、竞赛管理、班级管理、用户管理,如图2所示。用户权限由低至高分别为:普通用户、教师用户和管理员。角色之间的权限属于包含关系,即高权限角色可使用的功能包含了比它权限低的角色可使用的功能。除此之外,未登录状态下默认是游客身份,游客可以看到问题列表公开的题目、竞赛和作业的标题以及测评队列的实时状态。
系统采用ThinkPHP轻量级的国产PHP开发框架,该框架采用了MVC模式,方便开发人员快速实现网页系统。判题系统采用前后端分离技术,后端主要实现数据存储、实时判题、业务处理等功能,并且使用MySQL数据库对数据进行永久保存,前端实现基本用户交互和数据展示,系统架构如图3所示。
在线判题(Online Judge-OJ)是一种使用计算机程序进行自动判题技术,一般采用B/S架构实现。用户在浏览器端编辑和提交源代码,服务器编译用户源代码生成可执行文件,并调用测试数据评测程序运行的正确性、运行耗时与内存占用等其他信息。如果输出的结果与正确答案一致,则判定用户提交的源代码是正确的,即Accepted;否则系统反馈错误信息给用户[6-9]。例如:当一位用户提交了一份C++的源代码后,本次的提交记录和代码会被存放至数据库中,判题机将访问数据库,取出待测试的源代码并对其进行编译。C++对应的编译选项为g++ test.cc -o Main -O -Wall -lm --static -DONLINE_JUDGE,如果编译失败,则会将编译信息与结果录入数据库并反馈给用户,否则取出管理员预先准备好的数据对已编译的可执行文件进行一次黑盒测试。测试结束后,将本次运行的结果保存到数据库中返回给用户,只有正确通过黑盒测试的源代码对应的提交记录才是正确的,否则会返回失败的错误信息。
系统前端采用Bootstrrap、Layui和sb-admin框架,根据不同框架的特性应用到用户交互和展示界面:
1)Bootstrap是一款基于HTML、JavaScript、CSS的网站前端框架和应用程序,用于快速开发Web [10]。其优点包括:轻松上手,只需具有CSS和HTML的相关知识即可学习并且使用;支持所有的主流浏览器;其响应式的设计可以让它的CSS自适应于市面上的台式电脑、平板电脑以及手机;界面和UI简约而美观。系统的使用Bootstrap组件的前端样式主要有导航条、按钮风格及颜色、分页栏、数据表格、问题详情排版等。
2)Layui是一套开源的Web UI解决方案,其风格简约,组件精细,兼容除IE6/7的全部浏览器。本系统更多使用的是其中的layer弹出层模块,该模块作为网页弹出层的首选交互方案,几乎随处可见。在本系统中,使用Layui框架的主要场景有提交代码表单样式、按钮、表格、Layui图标、用户任何提交相关操作后的弹出层等。
3)sb-admin是基于Bootstrap的简约后台管理系统模板,拥有仪表盘和WebAPP的启动UI,可自定义原图标按钮、登录页面、菜单等,支持jQuery和Bootstrap。sb-admin主要应用于本系统的管理页面。
1.1 登录注册模块
登录注册模块主要负责处理用户的注册、登录和重置密码。未拥有账号的用户可以通过注册功能获取一个普通账号,成功登录后体验更多内容。对于已经拥有账号但是忘记密码的用户,系统提供了发送邮箱验证码进行密码重置的操作,用户需要输入与账号绑定的邮箱来获取验证码,通过输入验证码和新密码来覆盖该账号已经被遗忘的旧密码。登录业务流程如图4所示,用户登录时使用MVC中控制器login方法,发送POST请求,将输入的账号、密码及验证码发送给控制器进行验证,验证正确情况才能正常登录至首页。
系统登录界面如图5所示。
1.2 个人中心模块
个人中心模块负责展示与用户信息相关的内容,包含用户收藏的题目、竞赛、作业、代码、用户的个人信息、用户参与过的竞赛、用户加入的班级。用户可以修改个人信息页面中除用户名以外的其他内容;可以在加入的班级中查看当前老师布置的作业及各作业完成的情况。本模块主要分为以下4个部分:
1)身份信息:用户可以看到并修改自己的身份信息,包括昵称、邮箱、学校和密码。该功能通过User控制器下的info方法实现,访问时模型直接从数据库中取出对应用户信息并展示,修改信息是同控制器下的update方法,用户输入需要修改的信息提交以后发送Ajax的post请求,其中昵称的长度限制为24,学校的长度限制为36,邮箱必须符合格式,密码长度在6到16位,同时满足以上情况则修改成功,否则提示错误信息。
2)提交记录:在个人信息页面中,用户可以查看个人所有的提交记录,该模块通过User控制器下的mystatus方法实现,此方法通过调用模型XujcRun中的getLimitData方法查询当前用户的所有提交,由于用户的提交可能存在于竞赛、作业或问题列表,所以在查到数据后根据题目所在位置和ID去查询该题目的具体信息,最后呈现给用户。
3)最近登录:用户可以查看最近10次的登录记录,访问该页面时客户端向服务器发送GET请求,User控制器下的loginfo方法调用模型XujcLoginfo,该模型的getLogInfo方法根据当前用户ID查询近十次的登录记录并返回。
4)我的收藏:用户可以对问题、竞赛、作业和代码进行收藏和查看。收藏时通过点击收藏图标发送Ajax的post请求,携带的数据为收藏类型、收藏ID和一个二者生成的固定哈希值,Collect控制器的collect方法接收到这三个参数后先进行一次对比,若比较成功则将该数据保存入库,否则返回失败信息,此举用来防止用户通过修改页面元素来保存其权限之外的内容。
1.3 测评队列模块
测评队列模块包含两大部分,第一是状态的展示,系统会根据当前所在页面和URL携带的参数来显示有关的测评状态;第二是管理员和教师可以通过不同的竞赛作业号、题号、编译编号来重判问题。具体功能为3个部分实现:
1)提交代码:用户可以在问题列表或竞赛作业中提交程序源代码,其分别位于Problem和Contest控制器的submit方法中,该方法接收到用户提交的代码后,将当前携带的信息一同加入数据中传给XujcRun模型的InsertData方法。模型方法接收到数据后,先对代码进行长度和内容的验证,若长度为0或超过定义常量max_code_length时返回代码长度错误的信息,若代码中不包含英文字符或包含JavaScript语句的均提示代码内容有误,最后判断该源代码的语言是否为当前可选语言,如果是则提交源代码成功,否则返回不支持该语言的信息。
2)状态展示:用户可以在主页的状态栏或竞赛作业中的状态栏查看相关提交记录和代码。在主页的状态栏中,用户可以对编译编号、题号和用户名进行筛选,其中固定的筛选条件为contestid=0表示该记录不属于任何一次竞赛,即在问题列表中的提交,再把用户输入的条件添加至where条件中,把符合条件的记录分页返回给用户。在竞赛和作业中的提交记录中,固定的筛选条件为contestid=竞赛作业ID,用户可以根据竞赛中的题号、用户名、提交状态和语言进行筛选,最后将满足条件的记录分页返回给用户。图6为提交记录以及测评状态结果,用户可以实时获取结果反馈。
3)查看代码:在状态展示页面中,若用户对某条运行记录有查看的权限,则该记录的语言会显示为链接文本,用户可以通过点击链接查看该记录的源代码,除了可以查看自己的代码。
1.4 问题管理模块
教师和管理员可以添加题目,默认状态下,题目只对创建者可见,教师可以修改自己的题目状态为共享,以供其他教师使用。只有题目创建者拥有对题目的编辑权限,包括修改题面、文件的上传、下载和删除。管理员可以把自己的题目移至问题列表中供其他教师和管理员使用,管理员拥有对问题列表的编辑权限,同时可以修改其中题目的状态为公开供普通用户查看和提交。
1.5 竞赛管理模块
竞赛管理模块负责对竞赛和作业进行添加、编辑等操作。管理者可以修改其标题、问题、开始时间、结束时间、可用语言、是否公开或共享、是否自动解除封榜等信息。其中,向竞赛或作业中添加问题时只能使用当前管理者可用的题目集。竞赛和作业支持作弊分析和导出排名,前者通过对正确代码的两两比较,筛选出存在抄袭嫌疑的用户和代码,在将所有信息输出到Word文档后统一压缩并导出。后者则是将排行榜的内容以Excel文档的形式导出。为增加竞赛的神秘性与观赏性,在竞赛最后20%的时间中,提交状态不予在排行榜中显示,正常情况下,比赛结束的那一刻排行榜将自动刷新,恢复正常显示状态,为保留悬念,管理员可以选择其是否在赛后自动解除该状态。
1.6 班级管理模块
班级管理模块分为两个子模块,一个是班级管理,另一个是作业管理。教师可以直接上传从教务系统下载的修课名单来创建一个班级,也可以手动输入学号和姓名添加学生,支持从某个班级中将某个学生移除的操作。教师可以把自己或其他教师分享的作业布置到某个班级,也可以从班级中移除作业。班级作业能够以Excel文档的形式导出,使教师可以更加方便地统计该班学生作业的完成情况。
1.7 问题管理模块
用户管理模块为管理员提供对用户进行权限调整、修改密码、修改状态和删除的功能。用户列表默认按权限从高到低的顺序显示,管理员可以通过输入关键词对用户进行筛选查找,如:当管理员输入CST时,将查询ID=CST或用户名包含CST或昵称包含CST的所有用户。
权限调整是通过url携带参数的形式发送POST请求,User控制器下的changetype方法接收到被修改的用户ID和权限,由于该控制器只有管理员权限可以访问,故省略对操作者的权限判断,直接将userid=被修改的用户ID的type设为选择的角色即可。
管理员修改密码时会触发Layui输入弹窗,管理员可以对用户密码随意设置,默认值为123456,填写完成后发送Ajax的post请求,User控制器下的resetpwd方法通过调用XujcUsers模型的changepwd方法对该用户的密码进行重置。
管理员点击删除用户按钮后弹出Layui提示框,确认删除后发送Ajax的post请求,User控制器下的deleteuser方法根据接收到的userid进行对用户的删除操作,并返回删除成功信息。
2 验证与分析
通过数据分析方式来验证在线教学与练习平台的教育教学效果。图7为某专业学生线上练习与考试成绩的数据,其中横坐标为学生在线判题系统练习通过数,纵坐标是期末考试分数,可以看出学生的练习数与考试成绩基本线性关系,在线练习数越多其相应考试成绩越高。
3 结 论
本文针对计算机程序设计课程设计了一个基于ThinkPHP框架的在线判题系统,系统提供了题库构建、在线学习与练习、作业代码查重、同时结合学习通等教学平台,极大地减少了教师的工作量。学生也通过实时反馈的测评结果快速有效地提升个人程序设计能力,彻底改变了学生对编程畏难情绪,调动了学生学习的积极性,为后续的专业学习建立了坚实的基础。
参考文献:
[1] 吴舜歆,梁宝兰.Online Judge在C++程序设计课程实践教学中的应用 [J].高教学刊,2016(9):164+167.
[2] 郑亮,赵厚宝,周志钊.基于雨课堂和OJ系统的C++课程计算思维教学方法 [J].科教文汇:中旬刊,2020(8):79-82.
[3] 杜祥军,李建波,李敏,等.基于Online Judge的计算机类课程教学评价方法研究 [J].计算机教育,2019(3):55-57.
[4] 曹天彦.基于超星学习通的混合式教学模式探究——以人机工程学课程为例 [J].美术教育研究,2023(15):150-152.
[5] 李博,张国庆,于楚泓.基于学习通的传感器及工程测试技术在线开放课程建设 [J].中国教育技术装备,2023(1):33-35.
[6] 王荣芝.基于在线评测系统的程序设计类课程混合学习模式设计 [J].计算机教育,2018(8):126-129.
[7] 吕英华.在线评测系统中判题机的设计与实现 [J].无线互联科技,2022,19(6):78-79.
[8]林子慧.面向在线判题系统的程序设计教学方法的研究与实践 [J].无线互联科技,2021,18(15):156-158.
[9] 刘展.基于学生认知的自适应习题推荐研究与系统实现 [D].扬州:扬州大学,2023.
[10] 邬宇达.基于Bootstrap的变可信度序贯建模与优化方法研究[D].武汉:华中科技大学,2022.
作者简介:邱义(1984—),男,汉族,湖南浏阳人,副教授,硕士,主要研究方向:物联网技术、机器视觉等;通讯作者:赵东锋(1979—),男,汉族,江西上饶人,教育技术服务中心主任,本科,主要研究方向:教育信息化、教育技术应用。
收稿日期:2023-09-26
基金项目:2022年度福建省中青年教师教育科研项目(高校教育信息化专项)(JAT220835);福建省高校教育技术研究会项目(FJET202205)
DOI:10.19850/j.cnki.2096-4706.2024.08.008
Research on the Programming Course Assessment System Based on Chaoxing Learning Platform and Online Question Judging System
QIU Yi1, GUO Yijing1, CHEN Nannan1, CHEN Junren1, ZHAO Dongfeng2
(1.School of Information Science amp; Technology, Xiamen University Tan Kah Kee College, Zhangzhou 363105, China;
2.Center for Educational Technology Support, Xiamen University Tan Kah Kee College, Zhangzhou 363105, China)
Abstract: Programming courses are the fundamental courses in the most engineering majors, and are very important for follow-up courses learning. In order to improve the teaching effectiveness of the course, we use the Chaoxing learning platform and online question judging system to research the course content and practice in this paper, and design an online question judging system based on the colleges teaching features. This system is based on the ThinkPHP framework and B/S architecture, it finally will be provided to teachers and students in the form of a webpage for practical operation. Through this system, students can receive real-time feedback on evaluations, enhance their learning autonomy, improve their programming skills, and reduce the workload of teachers.
Keywords: Chaoxing learning platform; online question judging system; programming; ThinkPHP; data analysis