胡開明
(廣東松山職業(yè)技術(shù)學院 計算機系,廣東 韶關(guān) 512126)
網(wǎng)絡技術(shù)的發(fā)展使得考試的技術(shù)手段和載體發(fā)生了革命性的變化。隨著越來越多的考試采用無紙化考試,特別是學校的普通期末考試,很多科目都是在機房考試,現(xiàn)很多人利用不同的技術(shù)來開發(fā)在線考試系統(tǒng)即基于B/S模式的在線考試系統(tǒng)。這樣一方面可以減輕教師的工作負擔,提高工作效率,同時也可以提高考試的質(zhì)量,使考試更趨于公證、客觀。然而這種基于B/S模式的在線考試系統(tǒng)并是不適合所有的科目,它也有著自己局限性?,F(xiàn)在高校的普通期末考試中很多考試都是采用機試,一門課程開發(fā)一個基于B/S模式的在線考試系統(tǒng)并不現(xiàn)實,很多考試只需要把試卷從服務器上發(fā)到工作站,學生做完,然后再將考試結(jié)果文件交到服務器,任課教師再據(jù)學生的考試文件改卷,在此提出了用.NET開發(fā)通用性很強的適合很多課程考試的發(fā)卷交卷系統(tǒng)。
在服務器上建立一個文件夾并共享,權(quán)限設置為只讀、更改,用來存放考生考試結(jié)果文件。另外在服務器上再建立一個文件夾并共享,權(quán)限設置為只讀,該文件夾用來存放各種考試科目試卷,考試時學生利用“發(fā)卷”程序?qū)⒎掌魃蠈嚲戆l(fā)到工作站,學生可以打開試卷在本機做題,做完試卷后,學生再利用“交卷”程序?qū)⒃嚲斫煌掌魃弦呀?jīng)建立好的考試結(jié)果文件夾中,在服務器上考試結(jié)果文件夾中試卷存放文件夾一般以學生考號命名,在這個以考號命名的文件夾中存放著該學生的所有試題文件,其原理示意圖如圖1所示。
圖1 原理示意圖
(1).NET中的獲取目錄中的子目錄及文件的操作。在.NET中有System.Io.Directory類,使用時需要引用System.Io命名空間[1],主要提供關(guān)于目錄的各種操作,利用Directory.GetDirectories可以返回一個目錄下的子目錄[2],而利用Directory.GetFiles可以返回一個目錄中的所有文件。
(2)文件夾存在檢查方法。Directory類提供了各種目錄處理的靜態(tài)方法[3]。這些靜態(tài)方法對所有方法都執(zhí)行安全性檢查,用Io.Directory.Exists可以檢測一個指定的路徑是否存在[4]。路徑參數(shù)可以指定相對或絕對路徑信息。相對路徑信息解釋為相對當前工作目錄,利用此方法同時可以檢測局域網(wǎng)中服務器上的指定的文件夾是否存在。
(3)遍歷目錄下所有文件夾的遞歸函數(shù)。利用有System.Io.Directory類中的Directory.GetDirectories可返加當目錄下的子目錄[5],但由于目錄中還存在子目錄,所以要獲取一個目錄中的所有子目錄必須使用遞歸。
(4).NET中的文件復制。在.NET中操作文件可以使用兩個類,一個是Fileinfo類,另一個是File類,F(xiàn)ile類是靜態(tài)的,不需要創(chuàng)建File類的實例就可以使用,復制文件可以使用 File類的 copy方法[6]。實現(xiàn)方示如下:Io.file.copy(Sourcefile as string,destfilename as string),其中第一個參數(shù)Sourcefile表示源文件完整路徑,第二個參數(shù)destfilename表示目標文件的完整路徑。
界面設計如圖2所示,學生輸入考號和坐位號后,再從樹形目錄中選擇考試科目及試卷類型,然后再點擊“發(fā)卷”按鈕即可發(fā)卷,從而實現(xiàn)從服務器上將對應科目對應類型試卷發(fā)到本學生考試機器上。
圖2 “發(fā)卷”程序界面設計
在服務器新建一個文件夾,名稱為“各類考試”,作為試卷存放文件夾,共享為“各類考試MYM”,權(quán)限只讀,在共享名后面加“MYM”,可實現(xiàn)隱藏“各類考試”文件夾。再在其中建立試卷文件夾,試卷名任起,如“A卷”、“B卷”等,試卷的數(shù)量沒有限制。
3.3.1 生成試卷科目樹形目錄
“發(fā)卷”的過程實質(zhì)上就是將服務器上共享的考試試卷復制到考試機上,發(fā)卷前要先從服務器上獲取試卷科目及試卷類型并生成樹形目錄,以供學生在發(fā)卷前選擇當場考試的科目及試卷類型。使用前面“2.3遍歷目錄下所有文件夾的遞歸函數(shù)”可獲取服務器中試卷科目及試卷類型,從而動態(tài)生成樹形目錄,效果如圖2所示。實現(xiàn)方法如下:
3.3.2 生成考生資料文件
發(fā)卷的同時考生的相關(guān)信息以及考試的相關(guān)信息是需要保存的,這些信息一方面可以用來給老師備查,一方面這些信息在交卷時是還需要使用到的,需要保存的資料有準考證號、坐位號、考試科目及試卷類型。可以在發(fā)卷的同時生成一個文本文件,將這些信息寫入到該文本文件中。實現(xiàn)方法如下:
其中參數(shù)str是考生的需要保存的相關(guān)信息,可以從主界面中學生的輸入框中和樹形目錄中去獲取;參數(shù)strfile是文本文件路徑及文件名。
3.3.3發(fā)卷
“發(fā)卷”的過程實質(zhì)上就是將服務器上共享的考試試卷復制到考試機上,.NET中的文件復制使用前面“2.4.NET中的文件復制”中提到的File類的copy方法,但從服務器上復制到本機的試卷是文件夾,而.NET中沒有復制文件夾的方法,所以必須使用前面“2.3遍歷目錄下所有文件夾的遞歸函數(shù)”,遞歸調(diào)用copy方法可實現(xiàn)“發(fā)卷”。實現(xiàn)方法如下:
界面設計如圖3所示,系統(tǒng)從存放學生資料的文本文件中獲取學生的準考證號、坐位號、科目及試卷類型,分別自動填入到對應文本框中,并自動從樹形目錄中選擇考試科目及試卷類型并將對應節(jié)點以藍色顯示,然后再點擊“交卷”按鈕即可交卷,從而實現(xiàn)將學生所做的試卷文件從本機上發(fā)送到服務器上。
圖3 “交卷”程序界面設計
在服務器新建一個文件夾,名稱為“答卷”文件夾,作為學生交卷的答卷結(jié)果文件存放文件夾,共享為“答卷MYM”,權(quán)限只讀、更改。在共享名后面加“MYM”,可實現(xiàn)隱藏“答卷”文件夾。學生交卷時將在“答卷”文件夾中新建以學生考號命名的文件夾,學生的所有答卷文件將放在這個以自己考號命名的文件夾中。
4.3.1 提取資料文件中的考號及坐位號
在前面發(fā)卷的同時考生的相關(guān)信息以及考試的相關(guān)信息被保存到了一個文本文件中,被保存的學生信息有準考證號、坐位號、考試科目及試卷類型。在交卷前可使用讀文本文件的方法讀取存放的信息,再使用如下方法便可以使學生考號及坐位號提取到發(fā)卷界面的對應文本框中。
其中,khfile是存放學生信息的資料文件,readfile是讀取資料文件內(nèi)容的自定義函數(shù)。
4.3.2 提取資料文件中的科目及試卷類型
發(fā)卷時學生所考科目及試卷類型被保存,交卷前一方面先要從服務器上獲取試卷科目及試卷類型并生成樹形目錄,實現(xiàn)方法跟上面發(fā)卷時生成樹形目錄類似;另一方面要從資料文件中提取科目及試卷類型,并在樹形目錄中自動選中對應科目及試卷類型,同時展開對應節(jié)點并以藍色顯示。實現(xiàn)方法如下,效果如圖3所示。
其中,khfile是存放學生信息的資料文件,readfile是讀取資料文件內(nèi)容的自定義函數(shù)。
4.3.3交卷
“發(fā)卷”的過程實質(zhì)上就是將服務器上共享的考試試卷復制到考試機上,而“交卷”的過程則是“發(fā)卷”的逆過程,實質(zhì)上就是考試機上的學生答卷文件復制到服務器上共享的“答卷”文件夾中,其實現(xiàn)方法類似,在此不再贅述。
隨著越來越多的考試采用無紙化考試,特別是學校的普通期末考試,很多科目都是在機房考試,然而基于B/S模式的在線考試系統(tǒng)也有著自己局限性,并是不適合所有的科目。利用.NET設計的該發(fā)卷交卷系統(tǒng),具有很大的通用性,不僅可以在各種考試中適用,而且可以在平時上機練習或?qū)嶒炛惺褂茫喈敺奖?,可以大大減少工作量。
[1]RICHARD B.Visual Basic.NET入門經(jīng)典[M].北京:清華大學出版社,2004
[2]龔沛曾,楊志強,陸慰民.Visual Basic.NET程序設計教程[M].北京:高等教育出版社,2005
[3]銀華強.Visual Basic.NET經(jīng)典開發(fā)案例[M].北京:中國鐵道出版社,2003
[4]唐樹才.Visual Basic.NET程序設計與應用[M].北京:電子工業(yè)大學出版社,2002
[5]鄭阿奇,彭作民.Visual Basic.NET程序設計教程[M].北京:機械工業(yè)出版社,2007
[6]張志學..NET框架程序開發(fā)指南[M].北京:清華大學出版社,2002