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