王順利 劉寶娥 馬元飛
[摘 要] 鑒于ACM國際大學(xué)生程序設(shè)計競賽(ACM/ICPC)在人才選拔和培養(yǎng)方面的顯著作用,如何將ACM/ICPC競賽活動嵌入常規(guī)教學(xué),創(chuàng)新教學(xué)模式,結(jié)合專業(yè)教學(xué),加強(qiáng)訓(xùn)練管理,提高培訓(xùn)效益,已成為人們關(guān)注的熱點(diǎn)問題。針對這一應(yīng)用需求,本文設(shè)計并開發(fā)了基于ACM/ICPC機(jī)制的大學(xué)生程序設(shè)計培訓(xùn)管理系統(tǒng)。系統(tǒng)采用B/S架構(gòu),以SQL Server 2005作為后臺管理數(shù)據(jù)庫,Visual Studio 和ASP.NET為前端開發(fā)工具。在分析系統(tǒng)功能的基礎(chǔ)上,著重闡述了該系統(tǒng)設(shè)計與實(shí)現(xiàn)的關(guān)鍵技術(shù)。該系統(tǒng)實(shí)際運(yùn)行穩(wěn)定、可靠,為開展ACM/ICPC競賽培訓(xùn)和教學(xué)提供了一種有效管理途徑。
[關(guān)鍵詞] ACM/ICPC;培訓(xùn)管理系統(tǒng);Web開發(fā);ASP.NET;數(shù)據(jù)庫技術(shù)
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2014 . 03. 015
[中圖分類號] TP311 [文獻(xiàn)標(biāo)識碼] A [文章編號] 1673 - 0194(2014)03- 0028- 03
1 引 言
ACM國際大學(xué)生程序設(shè)計競賽(ACM International Collegiate Programming Contest, ACM ICPC) 由美國計算機(jī)協(xié)會(ACM)主辦,始于1970年,至今已經(jīng)有40多年的歷史,是世界公認(rèn)的規(guī)模最大、水平最高、影響廣泛的國際大學(xué)生程序設(shè)計競賽,競賽優(yōu)勝者是各大IT企業(yè)和科研院所青睞和優(yōu)先選拔的人才[1]。近些年來,伴隨著ACM/ICPC大學(xué)生程序設(shè)計競賽在國內(nèi)如火如荼地開展,計算機(jī)高等教育界更加關(guān)注在計算機(jī)應(yīng)用人才培養(yǎng)方面,如何科學(xué)合理地引入、借鑒ACM/ICPC競賽訓(xùn)練經(jīng)驗(yàn),將ACM/ICPC競賽活動與常規(guī)專業(yè)課程教學(xué)有機(jī)結(jié)合起來,突破傳統(tǒng)教學(xué)內(nèi)容和教學(xué)方法,以有效培養(yǎng)學(xué)生的學(xué)習(xí)能力、創(chuàng)新意識和綜合素質(zhì)。這其中,如何有效組織開展ACM/ICPC競賽訓(xùn)練,加強(qiáng)培訓(xùn)管理,提高培訓(xùn)效益,亦是人們關(guān)注的熱點(diǎn)問題。
但就目前情況來看,組織開展此項競賽活動的訓(xùn)練指導(dǎo)或教學(xué)培訓(xùn)還沒有一個成熟通用的、基于ACM/ICPC競賽機(jī)制的ACM/ICPC 訓(xùn)練和活動的教學(xué)管理平臺。具體表現(xiàn)在:(1)盡管一些知名院校搭建了自己的在線測試平臺[2-3],但由于大多采用英文表述問題,對于英語水平不高的低年級本科生和??茖W(xué)生來說,在翻譯題目和理解內(nèi)容方面會出現(xiàn)偏差,導(dǎo)致在這些平臺上進(jìn)行在線模擬測驗(yàn)的效果并不理想;(2)很多網(wǎng)站雖然提供了ACM/ICPC競賽的相關(guān)資料,比如網(wǎng)上題庫、相關(guān)賽題的題解等,但這些資料在網(wǎng)上分布得比較分散,使得學(xué)生很難集中查閱,而且由于資料的層次性和難易性區(qū)分不明顯,使得學(xué)生在查閱和收集資料時遇到很多困難;(3)關(guān)于ACM/ICPC的網(wǎng)上論壇不少,但大多內(nèi)容僅介紹ACM/ICPC的發(fā)展、競賽取得的成績和心得體會,學(xué)生很難在程序的求解方法和求解過程方面進(jìn)行適時的互動;(4)雖然上述網(wǎng)上交流方式和測試學(xué)習(xí)方式符合現(xiàn)代化教育的理念,但是從系統(tǒng)管理的角度看,這些功能模塊比較分散,難以真正適應(yīng)目前ACM/ICPC競賽培訓(xùn)管理的需要。
基于上述應(yīng)用需求,結(jié)合集寧師范學(xué)院多年參加這一賽事、組織開展ACM/ICPC競賽訓(xùn)練活動的管理實(shí)踐經(jīng)驗(yàn),我們開發(fā)了一個本??仆ㄓ玫腁CM/ACPC培訓(xùn)管理系統(tǒng),該系統(tǒng)是一個基于B/S結(jié)構(gòu)的多用戶在線系統(tǒng), 實(shí)現(xiàn)了資源共享、在線討論、在線學(xué)習(xí)測試、網(wǎng)絡(luò)化管理等功能。
2 系統(tǒng)分析
2.1 系統(tǒng)功能結(jié)構(gòu)
ACM/ICPC培訓(xùn)管理系統(tǒng)是一個B/S結(jié)構(gòu)的Web應(yīng)用系統(tǒng)。ACM/ICPC培訓(xùn)管理系統(tǒng)的主要功能是完成網(wǎng)絡(luò)學(xué)習(xí)的綜合瀏覽、學(xué)習(xí)資源的上傳和下載、在線討論、在線測試和系統(tǒng)管理等功能,系統(tǒng)功能結(jié)構(gòu)如圖1所示。
2.2 功能模塊需求分析
用戶登錄模塊為用戶提供安全的訪問和數(shù)據(jù)操作,防止非法用戶進(jìn)入系統(tǒng)。本系統(tǒng)的登錄模塊分為系統(tǒng)管理員和登錄用戶。系統(tǒng)管理員可以完成登錄用戶的管理和系統(tǒng)后臺數(shù)據(jù)庫管理的功能;登錄用戶可以參與網(wǎng)上資源共享、在線討論和在線測試等多方面的操作。
資源在線模塊包括瀏覽資源、查找資源和下載資源3個部分,用來完成網(wǎng)上資源的查找、閱覽和下載。登錄用戶能夠?qū)⒎?wù)器中的資源下載到本地查看或進(jìn)一步學(xué)習(xí),也可以上傳自己的資源。
在線論壇模塊使得用戶不但可以發(fā)表意見,而且可以瀏覽到其他用戶在論壇發(fā)表的各種意見、問題等。本模塊主要包括瀏覽帖子、發(fā)表帖子和回復(fù)帖子3個子模塊。為了能夠更好地管理好論壇,本模塊主要提供了3種角色:匿名用戶(沒有注冊的用戶)、已經(jīng)注冊的用戶和管理員。當(dāng)匿名用戶進(jìn)入論壇之后,只能對網(wǎng)站的頁面進(jìn)行簡單瀏覽;而已經(jīng)注冊的用戶進(jìn)入論壇之后,可以發(fā)表自己的評論和回復(fù)帖子。
在線測試模塊包括在線選題、在線提交、系統(tǒng)測試的功能[2],該模塊提供了一個符合ACM/ICPC競賽需求的學(xué)習(xí)訓(xùn)練平臺。用戶可以按照問題的說明編寫源代碼,并通過在線提交子模塊上傳給系統(tǒng)。系統(tǒng)根據(jù)用戶提供的語言和源代碼生成對應(yīng)語言擴(kuò)展名的源程序文件,調(diào)出相應(yīng)的編譯器來運(yùn)行源程序并進(jìn)行測試。通過編譯、執(zhí)行后,系統(tǒng)將運(yùn)行時捕捉的輸出信息同預(yù)先存放的標(biāo)準(zhǔn)測試輸出文件進(jìn)行比較,返回測試結(jié)果(比較一致,則返回運(yùn)行成功信息,否則返回運(yùn)行錯誤信息),并將運(yùn)行成功后的有關(guān)信息(程序源代碼、用戶數(shù)據(jù)表的通過數(shù)量、問題類別表的通過數(shù)量、計算機(jī)耗時等)存入數(shù)據(jù)庫。
系統(tǒng)管理模塊為負(fù)責(zé)組織開展ACM/ICPC訓(xùn)練活動的主管教師提供一個對培訓(xùn)平臺信息集中管理的手段。主管教師以系統(tǒng)管理員身份登錄后,通過對數(shù)據(jù)庫信息的修改來實(shí)現(xiàn)對系統(tǒng)各個模塊數(shù)據(jù)信息的管理和完善,通過直接操作數(shù)據(jù)庫的方式,完成對數(shù)據(jù)庫存放各個模塊的數(shù)據(jù)信息增加、刪除和修改的功能。
3 系統(tǒng)設(shè)計
ACM/ICPC培訓(xùn)管理系統(tǒng)作為一個網(wǎng)絡(luò)化培訓(xùn)平臺,系統(tǒng)采用Browser/Server(瀏覽器/服務(wù)器)結(jié)構(gòu),由客戶端、WWW服務(wù)器和數(shù)據(jù)庫服務(wù)器三部分組成[4],如圖2所示。
B/S模式是一種平面型多層次的網(wǎng)狀結(jié)構(gòu),其最大的特點(diǎn)就是與軟硬件的無關(guān)性,應(yīng)用邏輯和業(yè)務(wù)處理規(guī)則在服務(wù)器端實(shí)現(xiàn),客戶端可以做得盡可能簡單,可以只是一個多媒體瀏覽器。在具體實(shí)現(xiàn)時,使用SQL Server 2005數(shù)據(jù)庫管理系統(tǒng)建立和管理網(wǎng)站數(shù)據(jù)庫;運(yùn)用動態(tài)網(wǎng)頁技術(shù)(ASP.Net)開發(fā)系統(tǒng),使用HTML、C#等語言編寫應(yīng)用程序;使用Visual Studio 2008平臺進(jìn)行系統(tǒng)開發(fā)。
3.1 Web應(yīng)用系統(tǒng)的開發(fā)技術(shù)
ASP.Net是Microsoft.Net Framework中一套用于生成Web應(yīng)用程序和XML Web Services的技術(shù),可以創(chuàng)建動態(tài)的Web頁面。本系統(tǒng)選擇了Visual Studio 2008作為開發(fā)ASP.Net程序的工具,網(wǎng)頁開發(fā)的腳本語言選用了C#語言。Visual Studio 2008 提供了各種增強(qiáng)功能[5],例如可視化設(shè)計器(使用 .Net Framework 加速開發(fā)),對 Web 開發(fā)工具的大量改進(jìn),以及能夠加速開發(fā)和處理所有類型數(shù)據(jù)的語言增強(qiáng)功能,并為開發(fā)人員提供了所有相關(guān)的工具和框架支持。C#是微軟公司隨.Net一起發(fā)布的新的語言。C#是C/C++語言家族中第一種面向組件的編程語言。它由C和C++派生而來,是一種使用簡單、面向?qū)ο?、類型安全的現(xiàn)代編程語言。C# 不僅具有Viusal Basic的高效性,而且具有C++的強(qiáng)大性,它是專門為.Net設(shè)計的一種語言,在.Net中起著不可替代的作用。
3.2 數(shù)據(jù)庫技術(shù)
本文采用SQL Server 2005作為數(shù)據(jù)庫管理系統(tǒng),并采用ADO.Net技術(shù)進(jìn)行數(shù)據(jù)庫的操作和訪問。ADO.Net是.Net Framework用于訪問數(shù)據(jù)的組件,它的一個重要優(yōu)點(diǎn)就是可以以離線方式操作數(shù)據(jù)庫,減少應(yīng)用程序?qū)Ψ?wù)器資源的占用,提高應(yīng)用程序的效率。.Net Framework提供了4個.Net Framework數(shù)據(jù)提供程序,其中SQL Server .Net Framework數(shù)據(jù)提供程序就是用于實(shí)現(xiàn)對SQL Server 的連接訪問[6]。SQL Server .Net Framework的框架如圖3所示。
針對ACM/ICPC培訓(xùn)管理系統(tǒng)的數(shù)據(jù)管理需求分析,本系統(tǒng)設(shè)計了用戶信息表、資源分類數(shù)據(jù)表、資源數(shù)據(jù)表、論壇模塊信息表、論壇帖子信息表、回復(fù)帖子信息表、問題類別信息表、問題表列信息表和運(yùn)行狀態(tài)信息表9個數(shù)據(jù)庫表。
4 關(guān)鍵技術(shù)的實(shí)現(xiàn)
4.1 資源上傳功能的實(shí)現(xiàn)
在上傳資源頁面管理中,系統(tǒng)先判斷文件大小和文件名是否存在,如果文件大小滿足要求且文件名不存在,為了節(jié)省存儲空間,先將該文件內(nèi)容轉(zhuǎn)成二進(jìn)制流,并和其他信息一起插入到資源數(shù)據(jù)表中。
獲取上傳文件、測試文件大小和將文件轉(zhuǎn)換成二進(jìn)制流的關(guān)鍵代碼如下:
string FileName = myFile.Value;//獲取上傳的文件名
HttpPostedFile UpFile = myFile.PostedFile;//獲取對由客戶端指定的上傳文件的訪問
FileLength = UpFile.ContentLength;//獲取上傳文件的字節(jié)大小
if (FileLength == 0)
{ Response.Write("");
}
if (FileLength > 102400000)//判斷文件是否大于5M(根據(jù)自己的需要判斷大小)
{ Response.Write("");
}
else
{FileName = FileName.Substring(FileName.LastIndexOf("\\") +1);//文件名。
Byte[] FileByte = new Byte[FileLength];//將指定文件儲存到數(shù)組
Stream ObjectStream = UpFile.InputStream;//建立數(shù)據(jù)流對象,該對象指向一個上載文件,讀取該文件的內(nèi)容
ObjectStream.Read(FileByte, 0, FileLength);//讀取指定文件數(shù)據(jù)
}
4.2 測試系統(tǒng)的實(shí)現(xiàn)
在線測試模塊的系統(tǒng)測試功能是本系統(tǒng)的設(shè)計關(guān)鍵,利用網(wǎng)絡(luò)技術(shù)讀取用戶輸入的源代碼,并把源代碼生成源代碼文件。利用服務(wù)器上提供的程序編譯器對源代碼進(jìn)行編譯、鏈接和運(yùn)行,把運(yùn)行結(jié)果與數(shù)據(jù)庫的標(biāo)準(zhǔn)答案進(jìn)行對比并給出結(jié)果。
下面以C++程序?yàn)槔齺斫榻B系統(tǒng)測試功能的實(shí)現(xiàn)方法。主要包括以下3步:
(1)系統(tǒng)通過web.config文件的配置信息獲取測試需要的路徑配置信息,路徑E:/Compiler/用于存放測試運(yùn)行中需要處理的文件,路徑E:/Compiler/Compiler/用于存放測試需要的編譯器。
web.config文件的配置信息如下: