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