摘 要:程序設(shè)計(jì)課程是大部分工科專業(yè)的基礎(chǔ)課程,對后續(xù)專業(yè)課程學(xué)習(xí)非常重要。為了提高課程的教學(xué)效果,結(jié)合學(xué)習(xí)通和在線判題系統(tǒng)對課程內(nèi)容、實(shí)踐環(huán)節(jié)等進(jìn)行研究與探索,根據(jù)學(xué)校教學(xué)特點(diǎn)設(shè)計(jì)了一款在線判題系統(tǒng)。該系統(tǒng)基于ThinkPHP框架搭建,使用目前流行的B/S架構(gòu),最終以網(wǎng)頁形式提供給教師與學(xué)生實(shí)踐操作。學(xué)生通過該系統(tǒng)能獲得測評實(shí)時(shí)反饋,增強(qiáng)了學(xué)習(xí)自主性,提高了編程能力,并減少了教師的工作量。
關(guān)鍵詞:學(xué)習(xí)通;在線判題系統(tǒng);程序設(shè)計(jì);ThinkPHP;數(shù)據(jù)分析
中圖分類號:TP31.1;TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2024)08-0032-05
0 引 言
計(jì)算機(jī)程序設(shè)計(jì)類課程是高校計(jì)算機(jī)、軟件工程、大數(shù)據(jù)、智能科學(xué)等專業(yè)的基礎(chǔ)課程,對后續(xù)的專業(yè)課程學(xué)習(xí)非常重要,主要目標(biāo)是培養(yǎng)學(xué)生解決實(shí)際問題的編程能力。程序設(shè)計(jì)不同于傳統(tǒng)理論教學(xué),需要在上機(jī)實(shí)踐操作過程理解、運(yùn)用和掌握知識點(diǎn)。傳統(tǒng)教學(xué)實(shí)踐中主要存在以下問題:
1)學(xué)生的設(shè)計(jì)風(fēng)格和編程實(shí)現(xiàn)各不相同,教師評閱過程需要耗費(fèi)大量的時(shí)間和精力。
2)練習(xí)作業(yè)提交到返回時(shí)間周期過長,導(dǎo)致學(xué)生編程思路的中斷,無法及時(shí)分析結(jié)果從而降低學(xué)習(xí)興趣和學(xué)習(xí)積極性。
3)傳統(tǒng)教學(xué)形式以教師為中心,無法積極調(diào)動(dòng)學(xué)生學(xué)習(xí)主動(dòng)性,容易養(yǎng)成期末突擊現(xiàn)象,不注重平時(shí)學(xué)習(xí)積累[1-3]。
為解決上述問題,論文基于ThinkPHP網(wǎng)頁開發(fā)框架搭建了在線判題系統(tǒng)并引入學(xué)習(xí)通平臺,組成“混合式”教學(xué)模式的重要一環(huán),提升人才培養(yǎng)效果和質(zhì)量。學(xué)習(xí)通是北京超星公司開發(fā)的一款在線教學(xué)平臺,貫通了課前備課預(yù)習(xí)、課中課堂教學(xué)與管理、課后復(fù)習(xí)考核與教學(xué)評估等整個(gè)教學(xué)過程,實(shí)現(xiàn)了混合式教學(xué)全過程的數(shù)據(jù)采集、云端分析和教學(xué)反饋,促進(jìn)教學(xué)模式和組織形式的改革,構(gòu)建了信息化時(shí)代的教學(xué)生態(tài)體系[4,5]。在線判題系統(tǒng)為學(xué)生提供了良好的實(shí)踐環(huán)境,可以在線提交程序源代碼,系統(tǒng)即時(shí)進(jìn)行編譯和執(zhí)行,并通過預(yù)先設(shè)計(jì)的數(shù)據(jù)檢驗(yàn)程序的正確性。基于學(xué)習(xí)通和在線判題系統(tǒng)的教學(xué)模式如圖1所示。
1 在線判題系統(tǒng)總體設(shè)計(jì)
在線判題系統(tǒng)基于普通用戶、教師用戶和管理員3種不同用戶角色設(shè)計(jì)了7個(gè)不同的功能模塊:登錄注冊、個(gè)人中心、測評隊(duì)列、問題管理、競賽管理、班級管理、用戶管理,如圖2所示。用戶權(quán)限由低至高分別為:普通用戶、教師用戶和管理員。角色之間的權(quán)限屬于包含關(guān)系,即高權(quán)限角色可使用的功能包含了比它權(quán)限低的角色可使用的功能。除此之外,未登錄狀態(tài)下默認(rèn)是游客身份,游客可以看到問題列表公開的題目、競賽和作業(yè)的標(biāo)題以及測評隊(duì)列的實(shí)時(shí)狀態(tài)。
系統(tǒng)采用ThinkPHP輕量級的國產(chǎn)PHP開發(fā)框架,該框架采用了MVC模式,方便開發(fā)人員快速實(shí)現(xiàn)網(wǎng)頁系統(tǒng)。判題系統(tǒng)采用前后端分離技術(shù),后端主要實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)、實(shí)時(shí)判題、業(yè)務(wù)處理等功能,并且使用MySQL數(shù)據(jù)庫對數(shù)據(jù)進(jìn)行永久保存,前端實(shí)現(xiàn)基本用戶交互和數(shù)據(jù)展示,系統(tǒng)架構(gòu)如圖3所示。
在線判題(Online Judge-OJ)是一種使用計(jì)算機(jī)程序進(jìn)行自動(dòng)判題技術(shù),一般采用B/S架構(gòu)實(shí)現(xiàn)。用戶在瀏覽器端編輯和提交源代碼,服務(wù)器編譯用戶源代碼生成可執(zhí)行文件,并調(diào)用測試數(shù)據(jù)評測程序運(yùn)行的正確性、運(yùn)行耗時(shí)與內(nèi)存占用等其他信息。如果輸出的結(jié)果與正確答案一致,則判定用戶提交的源代碼是正確的,即Accepted;否則系統(tǒng)反饋錯(cuò)誤信息給用戶[6-9]。例如:當(dāng)一位用戶提交了一份C++的源代碼后,本次的提交記錄和代碼會(huì)被存放至數(shù)據(jù)庫中,判題機(jī)將訪問數(shù)據(jù)庫,取出待測試的源代碼并對其進(jìn)行編譯。C++對應(yīng)的編譯選項(xiàng)為g++ test.cc -o Main -O -Wall -lm --static -DONLINE_JUDGE,如果編譯失敗,則會(huì)將編譯信息與結(jié)果錄入數(shù)據(jù)庫并反饋給用戶,否則取出管理員預(yù)先準(zhǔn)備好的數(shù)據(jù)對已編譯的可執(zhí)行文件進(jìn)行一次黑盒測試。測試結(jié)束后,將本次運(yùn)行的結(jié)果保存到數(shù)據(jù)庫中返回給用戶,只有正確通過黑盒測試的源代碼對應(yīng)的提交記錄才是正確的,否則會(huì)返回失敗的錯(cuò)誤信息。
系統(tǒng)前端采用Bootstrrap、Layui和sb-admin框架,根據(jù)不同框架的特性應(yīng)用到用戶交互和展示界面:
1)Bootstrap是一款基于HTML、JavaScript、CSS的網(wǎng)站前端框架和應(yīng)用程序,用于快速開發(fā)Web [10]。其優(yōu)點(diǎn)包括:輕松上手,只需具有CSS和HTML的相關(guān)知識即可學(xué)習(xí)并且使用;支持所有的主流瀏覽器;其響應(yīng)式的設(shè)計(jì)可以讓它的CSS自適應(yīng)于市面上的臺式電腦、平板電腦以及手機(jī);界面和UI簡約而美觀。系統(tǒng)的使用Bootstrap組件的前端樣式主要有導(dǎo)航條、按鈕風(fēng)格及顏色、分頁欄、數(shù)據(jù)表格、問題詳情排版等。
2)Layui是一套開源的Web UI解決方案,其風(fēng)格簡約,組件精細(xì),兼容除IE6/7的全部瀏覽器。本系統(tǒng)更多使用的是其中的layer彈出層模塊,該模塊作為網(wǎng)頁彈出層的首選交互方案,幾乎隨處可見。在本系統(tǒng)中,使用Layui框架的主要場景有提交代碼表單樣式、按鈕、表格、Layui圖標(biāo)、用戶任何提交相關(guān)操作后的彈出層等。
3)sb-admin是基于Bootstrap的簡約后臺管理系統(tǒng)模板,擁有儀表盤和WebAPP的啟動(dòng)UI,可自定義原圖標(biāo)按鈕、登錄頁面、菜單等,支持jQuery和Bootstrap。sb-admin主要應(yīng)用于本系統(tǒng)的管理頁面。
1.1 登錄注冊模塊
登錄注冊模塊主要負(fù)責(zé)處理用戶的注冊、登錄和重置密碼。未擁有賬號的用戶可以通過注冊功能獲取一個(gè)普通賬號,成功登錄后體驗(yàn)更多內(nèi)容。對于已經(jīng)擁有賬號但是忘記密碼的用戶,系統(tǒng)提供了發(fā)送郵箱驗(yàn)證碼進(jìn)行密碼重置的操作,用戶需要輸入與賬號綁定的郵箱來獲取驗(yàn)證碼,通過輸入驗(yàn)證碼和新密碼來覆蓋該賬號已經(jīng)被遺忘的舊密碼。登錄業(yè)務(wù)流程如圖4所示,用戶登錄時(shí)使用MVC中控制器login方法,發(fā)送POST請求,將輸入的賬號、密碼及驗(yàn)證碼發(fā)送給控制器進(jìn)行驗(yàn)證,驗(yàn)證正確情況才能正常登錄至首頁。
系統(tǒng)登錄界面如圖5所示。
1.2 個(gè)人中心模塊
個(gè)人中心模塊負(fù)責(zé)展示與用戶信息相關(guān)的內(nèi)容,包含用戶收藏的題目、競賽、作業(yè)、代碼、用戶的個(gè)人信息、用戶參與過的競賽、用戶加入的班級。用戶可以修改個(gè)人信息頁面中除用戶名以外的其他內(nèi)容;可以在加入的班級中查看當(dāng)前老師布置的作業(yè)及各作業(yè)完成的情況。本模塊主要分為以下4個(gè)部分:
1)身份信息:用戶可以看到并修改自己的身份信息,包括昵稱、郵箱、學(xué)校和密碼。該功能通過User控制器下的info方法實(shí)現(xiàn),訪問時(shí)模型直接從數(shù)據(jù)庫中取出對應(yīng)用戶信息并展示,修改信息是同控制器下的update方法,用戶輸入需要修改的信息提交以后發(fā)送Ajax的post請求,其中昵稱的長度限制為24,學(xué)校的長度限制為36,郵箱必須符合格式,密碼長度在6到16位,同時(shí)滿足以上情況則修改成功,否則提示錯(cuò)誤信息。
2)提交記錄:在個(gè)人信息頁面中,用戶可以查看個(gè)人所有的提交記錄,該模塊通過User控制器下的mystatus方法實(shí)現(xiàn),此方法通過調(diào)用模型XujcRun中的getLimitData方法查詢當(dāng)前用戶的所有提交,由于用戶的提交可能存在于競賽、作業(yè)或問題列表,所以在查到數(shù)據(jù)后根據(jù)題目所在位置和ID去查詢該題目的具體信息,最后呈現(xiàn)給用戶。
3)最近登錄:用戶可以查看最近10次的登錄記錄,訪問該頁面時(shí)客戶端向服務(wù)器發(fā)送GET請求,User控制器下的loginfo方法調(diào)用模型XujcLoginfo,該模型的getLogInfo方法根據(jù)當(dāng)前用戶ID查詢近十次的登錄記錄并返回。
4)我的收藏:用戶可以對問題、競賽、作業(yè)和代碼進(jìn)行收藏和查看。收藏時(shí)通過點(diǎn)擊收藏圖標(biāo)發(fā)送Ajax的post請求,攜帶的數(shù)據(jù)為收藏類型、收藏ID和一個(gè)二者生成的固定哈希值,Collect控制器的collect方法接收到這三個(gè)參數(shù)后先進(jìn)行一次對比,若比較成功則將該數(shù)據(jù)保存入庫,否則返回失敗信息,此舉用來防止用戶通過修改頁面元素來保存其權(quán)限之外的內(nèi)容。
1.3 測評隊(duì)列模塊
測評隊(duì)列模塊包含兩大部分,第一是狀態(tài)的展示,系統(tǒng)會(huì)根據(jù)當(dāng)前所在頁面和URL攜帶的參數(shù)來顯示有關(guān)的測評狀態(tài);第二是管理員和教師可以通過不同的競賽作業(yè)號、題號、編譯編號來重判問題。具體功能為3個(gè)部分實(shí)現(xiàn):
1)提交代碼:用戶可以在問題列表或競賽作業(yè)中提交程序源代碼,其分別位于Problem和Contest控制器的submit方法中,該方法接收到用戶提交的代碼后,將當(dāng)前攜帶的信息一同加入數(shù)據(jù)中傳給XujcRun模型的InsertData方法。模型方法接收到數(shù)據(jù)后,先對代碼進(jìn)行長度和內(nèi)容的驗(yàn)證,若長度為0或超過定義常量max_code_length時(shí)返回代碼長度錯(cuò)誤的信息,若代碼中不包含英文字符或包含JavaScript語句的均提示代碼內(nèi)容有誤,最后判斷該源代碼的語言是否為當(dāng)前可選語言,如果是則提交源代碼成功,否則返回不支持該語言的信息。
2)狀態(tài)展示:用戶可以在主頁的狀態(tài)欄或競賽作業(yè)中的狀態(tài)欄查看相關(guān)提交記錄和代碼。在主頁的狀態(tài)欄中,用戶可以對編譯編號、題號和用戶名進(jìn)行篩選,其中固定的篩選條件為contestid=0表示該記錄不屬于任何一次競賽,即在問題列表中的提交,再把用戶輸入的條件添加至where條件中,把符合條件的記錄分頁返回給用戶。在競賽和作業(yè)中的提交記錄中,固定的篩選條件為contestid=競賽作業(yè)ID,用戶可以根據(jù)競賽中的題號、用戶名、提交狀態(tài)和語言進(jìn)行篩選,最后將滿足條件的記錄分頁返回給用戶。圖6為提交記錄以及測評狀態(tài)結(jié)果,用戶可以實(shí)時(shí)獲取結(jié)果反饋。
3)查看代碼:在狀態(tài)展示頁面中,若用戶對某條運(yùn)行記錄有查看的權(quán)限,則該記錄的語言會(huì)顯示為鏈接文本,用戶可以通過點(diǎn)擊鏈接查看該記錄的源代碼,除了可以查看自己的代碼。
1.4 問題管理模塊
教師和管理員可以添加題目,默認(rèn)狀態(tài)下,題目只對創(chuàng)建者可見,教師可以修改自己的題目狀態(tài)為共享,以供其他教師使用。只有題目創(chuàng)建者擁有對題目的編輯權(quán)限,包括修改題面、文件的上傳、下載和刪除。管理員可以把自己的題目移至問題列表中供其他教師和管理員使用,管理員擁有對問題列表的編輯權(quán)限,同時(shí)可以修改其中題目的狀態(tài)為公開供普通用戶查看和提交。
1.5 競賽管理模塊
競賽管理模塊負(fù)責(zé)對競賽和作業(yè)進(jìn)行添加、編輯等操作。管理者可以修改其標(biāo)題、問題、開始時(shí)間、結(jié)束時(shí)間、可用語言、是否公開或共享、是否自動(dòng)解除封榜等信息。其中,向競賽或作業(yè)中添加問題時(shí)只能使用當(dāng)前管理者可用的題目集。競賽和作業(yè)支持作弊分析和導(dǎo)出排名,前者通過對正確代碼的兩兩比較,篩選出存在抄襲嫌疑的用戶和代碼,在將所有信息輸出到Word文檔后統(tǒng)一壓縮并導(dǎo)出。后者則是將排行榜的內(nèi)容以Excel文檔的形式導(dǎo)出。為增加競賽的神秘性與觀賞性,在競賽最后20%的時(shí)間中,提交狀態(tài)不予在排行榜中顯示,正常情況下,比賽結(jié)束的那一刻排行榜將自動(dòng)刷新,恢復(fù)正常顯示狀態(tài),為保留懸念,管理員可以選擇其是否在賽后自動(dòng)解除該狀態(tài)。
1.6 班級管理模塊
班級管理模塊分為兩個(gè)子模塊,一個(gè)是班級管理,另一個(gè)是作業(yè)管理。教師可以直接上傳從教務(wù)系統(tǒng)下載的修課名單來創(chuàng)建一個(gè)班級,也可以手動(dòng)輸入學(xué)號和姓名添加學(xué)生,支持從某個(gè)班級中將某個(gè)學(xué)生移除的操作。教師可以把自己或其他教師分享的作業(yè)布置到某個(gè)班級,也可以從班級中移除作業(yè)。班級作業(yè)能夠以Excel文檔的形式導(dǎo)出,使教師可以更加方便地統(tǒng)計(jì)該班學(xué)生作業(yè)的完成情況。
1.7 問題管理模塊
用戶管理模塊為管理員提供對用戶進(jìn)行權(quán)限調(diào)整、修改密碼、修改狀態(tài)和刪除的功能。用戶列表默認(rèn)按權(quán)限從高到低的順序顯示,管理員可以通過輸入關(guān)鍵詞對用戶進(jìn)行篩選查找,如:當(dāng)管理員輸入CST時(shí),將查詢ID=CST或用戶名包含CST或昵稱包含CST的所有用戶。
權(quán)限調(diào)整是通過url攜帶參數(shù)的形式發(fā)送POST請求,User控制器下的changetype方法接收到被修改的用戶ID和權(quán)限,由于該控制器只有管理員權(quán)限可以訪問,故省略對操作者的權(quán)限判斷,直接將userid=被修改的用戶ID的type設(shè)為選擇的角色即可。
管理員修改密碼時(shí)會(huì)觸發(fā)Layui輸入彈窗,管理員可以對用戶密碼隨意設(shè)置,默認(rèn)值為123456,填寫完成后發(fā)送Ajax的post請求,User控制器下的resetpwd方法通過調(diào)用XujcUsers模型的changepwd方法對該用戶的密碼進(jìn)行重置。
管理員點(diǎn)擊刪除用戶按鈕后彈出Layui提示框,確認(rèn)刪除后發(fā)送Ajax的post請求,User控制器下的deleteuser方法根據(jù)接收到的userid進(jìn)行對用戶的刪除操作,并返回刪除成功信息。
2 驗(yàn)證與分析
通過數(shù)據(jù)分析方式來驗(yàn)證在線教學(xué)與練習(xí)平臺的教育教學(xué)效果。圖7為某專業(yè)學(xué)生線上練習(xí)與考試成績的數(shù)據(jù),其中橫坐標(biāo)為學(xué)生在線判題系統(tǒng)練習(xí)通過數(shù),縱坐標(biāo)是期末考試分?jǐn)?shù),可以看出學(xué)生的練習(xí)數(shù)與考試成績基本線性關(guān)系,在線練習(xí)數(shù)越多其相應(yīng)考試成績越高。
3 結(jié) 論
本文針對計(jì)算機(jī)程序設(shè)計(jì)課程設(shè)計(jì)了一個(gè)基于ThinkPHP框架的在線判題系統(tǒng),系統(tǒng)提供了題庫構(gòu)建、在線學(xué)習(xí)與練習(xí)、作業(yè)代碼查重、同時(shí)結(jié)合學(xué)習(xí)通等教學(xué)平臺,極大地減少了教師的工作量。學(xué)生也通過實(shí)時(shí)反饋的測評結(jié)果快速有效地提升個(gè)人程序設(shè)計(jì)能力,徹底改變了學(xué)生對編程畏難情緒,調(diào)動(dòng)了學(xué)生學(xué)習(xí)的積極性,為后續(xù)的專業(yè)學(xué)習(xí)建立了堅(jiān)實(shí)的基礎(chǔ)。
參考文獻(xiàn):
[1] 吳舜歆,梁寶蘭.Online Judge在C++程序設(shè)計(jì)課程實(shí)踐教學(xué)中的應(yīng)用 [J].高教學(xué)刊,2016(9):164+167.
[2] 鄭亮,趙厚寶,周志釗.基于雨課堂和OJ系統(tǒng)的C++課程計(jì)算思維教學(xué)方法 [J].科教文匯:中旬刊,2020(8):79-82.
[3] 杜祥軍,李建波,李敏,等.基于Online Judge的計(jì)算機(jī)類課程教學(xué)評價(jià)方法研究 [J].計(jì)算機(jī)教育,2019(3):55-57.
[4] 曹天彥.基于超星學(xué)習(xí)通的混合式教學(xué)模式探究——以人機(jī)工程學(xué)課程為例 [J].美術(shù)教育研究,2023(15):150-152.
[5] 李博,張國慶,于楚泓.基于學(xué)習(xí)通的傳感器及工程測試技術(shù)在線開放課程建設(shè) [J].中國教育技術(shù)裝備,2023(1):33-35.
[6] 王榮芝.基于在線評測系統(tǒng)的程序設(shè)計(jì)類課程混合學(xué)習(xí)模式設(shè)計(jì) [J].計(jì)算機(jī)教育,2018(8):126-129.
[7] 呂英華.在線評測系統(tǒng)中判題機(jī)的設(shè)計(jì)與實(shí)現(xiàn) [J].無線互聯(lián)科技,2022,19(6):78-79.
[8]林子慧.面向在線判題系統(tǒng)的程序設(shè)計(jì)教學(xué)方法的研究與實(shí)踐 [J].無線互聯(lián)科技,2021,18(15):156-158.
[9] 劉展.基于學(xué)生認(rèn)知的自適應(yīng)習(xí)題推薦研究與系統(tǒng)實(shí)現(xiàn) [D].揚(yáng)州:揚(yáng)州大學(xué),2023.
[10] 鄔宇達(dá).基于Bootstrap的變可信度序貫建模與優(yōu)化方法研究[D].武漢:華中科技大學(xué),2022.
作者簡介:邱義(1984—),男,漢族,湖南瀏陽人,副教授,碩士,主要研究方向:物聯(lián)網(wǎng)技術(shù)、機(jī)器視覺等;通訊作者:趙東鋒(1979—),男,漢族,江西上饒人,教育技術(shù)服務(wù)中心主任,本科,主要研究方向:教育信息化、教育技術(shù)應(yīng)用。
收稿日期:2023-09-26
基金項(xiàng)目:2022年度福建省中青年教師教育科研項(xiàng)目(高校教育信息化專項(xiàng))(JAT220835);福建省高校教育技術(shù)研究會(huì)項(xiàng)目(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 college's 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