?

基于C#試題生成系統的設計與分析

2022-12-17 10:07肖仁鋒李興福
濟南職業學院學報 2022年4期
關鍵詞:綜合題題型試題

肖仁鋒 李興福

(濟南職業學院,山東 濟南 250103)

一、概述

(一)背景描述

近年來,為了保證考試的公平性和統一性,也為了試題建設的規范化,學校正在興起題庫建設,需要組織多位教師進行出題、審核等工作。目前,這項工作基本還是靠相關教師多年的經驗積累來人工完成。從出題人的角度來看,人工完成試題庫建設,工作量大且容易出錯,大大降低了題庫建設的工作質量;從試題質量的角度來分析,如果需要形成多套試題,就會出現重復率高等問題,無法保證考試的公平性。因而,在題庫建設工作中,如何提高試題的質量,如何將教師從繁重的重復工作中解放出來,是亟待解決的問題。本文中提到的試題生成系統,正是在這種情境下,依據實際的工作情況,利用現有的編程工具,設計實施的基于C#的試題自動生成系統[1]。

(二)開發環境介紹

考慮到系統的通用性和易用性,本系統使用的操作系統平臺為Windows7及其后續相關產品,比如Windows8、Windows10等;以C#作為系統開發的程序語言,選用Visual Studio 2008作為語言處理程序,系統也支持更新的Visual Studio環境。為了保證準確性,系統開發完成后,曾在多個版本中測試過,均能運行正常。而數據庫管理系統則使用了最為常見的SQL Server,既能滿足數據庫開發的需求,通用性又強。

二、系統功能設計及開發方案

在系統設計時,系統采用了三層的設計模式,即:表現層(UI)、業務邏輯層(BLL)和數據訪問層(DAL)。表現層主要的作用是提供一個系統與使用者之間的接口,規范系統的頁面布局,用于數據的寫入和輸出,既可以把使用者的意圖寫入系統中,也可以將使用者想要看到的數據展示出來;而業務邏輯層是設計模式的中間模塊,上接表現層,下連數據訪問層,是上、下兩層的連接器,這一層的性質與另外兩層明顯不同,另外兩層是單純的功能實現,而這一層則是復雜的、繁雜的業務邏輯處理和實現。在一些簡單軟件中,這一層的功能和地位并不明顯,甚至被忽略,但是在大型的、復雜的軟件中,該層卻是非常重要的??梢哉f,軟件的效率和后期的維護工作就取決于開發人員在這一層的設計是否足夠高端。在本系統中,該層并不復雜,主要用于實現了驗證和一些常規的計算、統計功能。最后的層次是數據訪問層。顧名思義,它的作用是通過對數據庫的訪問,實現對試題數據的增加、刪除、修改、查詢等操作。通過分層次的系統設計開發,實現了“高內聚低耦合”的思想,提高了系統開發的效率,為今后系統的升級和維護奠定了良好的基礎。在本系統中由于業務邏輯關系并不復雜,因此,業務邏輯層的實現就相對簡單,這里主要介紹表現層和數據訪問層的設計和實現[2]。

本系統是一個試題自動生成系統,大致功能分為兩大模塊:題目管理和試題生成。在題目管理模塊中,首先根據常見的試題類型分別建立了相關的類,主要的試題類型有判斷題、選擇題、填空題、簡答題和綜合題。在每類題目中都涉及了題目的增加、刪除、修改、查找等常規管理操作。雖然系統在開發時只做了這些類型的題目處理,但是有了這些題型做基礎,再開發其他題型的模塊,比如名詞解釋、論述題等,就變得比較容易了。在試題生成模塊中,根據實際的工作需要,設計了三種試題的生成模式:直接抽題模式、自定義抽題模式和高級抽題模式。直接抽題模式是最簡單也是最直接的抽題方式,抽題人不需要任何操作,直接點擊生成試題按鈕即可,試題生成系統會根據設計好的既定模式生成試題,并生成相關的答案;自定義抽題模式允許抽題人根據自己的需要選擇相關的題型和數量,然后再生成試題和答案;高級抽題模式是為了滿足抽題人的更高要求而設計的。首先是將抽題的過程分開了,按照題型分步抽題,當系統抽出的題目不能滿足抽題人的要求時可以根據需要進行替換,直到抽題人滿意為止,然后點擊“寫入緩存”按鈕,將選好的題目保存下來,接著更換另外一種題型,繼續選擇相應的題目,待最后所有題目選擇完畢,選擇“生成試題”按鈕,可以將緩存中的所有題目寫入Word文檔中,生成試題和答案。另外,在高級抽題模式中,還設置了過濾功能,可以根據題目所屬的知識范疇過濾題目,知識范疇對應于某個課程的章節,對應數據庫中的point字段。比如學完了網絡課程第一章,需要做一個階段性測試,則可以將知識范疇選為第一章,那么過濾出來的題目就都是第一章的。該項功能是為了更好地滿足使用者的一些個性化需求而設置,增加了選題的靈活性。

三、相關問題及解決方案

圍繞常見的題目類型,在系統的設計開發中,共涉及五種題型:判斷題、選擇題、填空題、簡答題和綜合題。其中,前四種題型在技術實現上基本類似,而綜合題則與前四種完全不同。由于綜合題涉及較多的題目介紹,甚至有的題目中會有圖像,在處理過程中會相對復雜一點。下面根據在設計開發的過程中遇到的重點問題做詳細介紹。

在開發過程中,遇到的主要問題有四個:數據預處理問題、題目重復問題、圖像處理問題、題目輸出問題。

(一)數據預處理問題

在題目增加模塊中,本系統設計了兩種方式增加新題目:錄入和導入。錄入方式就是將已有的題目的詳細情況(包括題干、答案、科目及對應的知識點),根據提示寫入相應的文本框中,然后點擊“增加”按鈕將題目寫入數據庫中;導入是指將題目事先寫入Excel文檔中,由系統自動導入。在錄入方式中,如果所有的選項是直接錄入的不會有問題,但是如果題目的題干和答案是從別的文檔中復制粘貼過來的,就容易產生問題。尤其是從網頁上直接粘貼下來的題目,會有很多問題。最突出的問題就是很多數據帶有一些網絡的格式或者一些特殊符號,會造成輸出格式的混亂,在生成試題時,后期對試題維護處理時的工作量變大、工作效率降低。

為了解決這個問題,需要在寫入數據庫之前對數據進行處理,將特殊的格式和多余的無用字符去掉,也就是數據的預處理,或者可以稱之為數據清洗。實現這一目標的方法有很多種,可以使用trim()方法,該種方法比較簡單,但是經過測試,效果不理想;也可以使用replace()方法,替換數據中的指定字符,這種辦法需要自定義一個方法,將其處理過程寫在方法中,由于這里的數據清洗比較簡單,過程并不復雜,就是將數據轉換為字符串,使用replace()函數,替換掉一些指定的字符。因此,本系統就采用了這種辦法。當然,就其原理而言,不僅這些方法可以去掉這些特殊字符和標記,采用SQL中的一些語句,等數據寫入數據庫后,統一修改也是可以的,但是這種方法是在數據錄入后,可能會有漏掉的,查找起來相對麻煩一些。因此,本系統并沒有采用這種辦法[3]。

在數據預處理的過程中還要防止數據冗余,也就是防止重復題的出現。由于向題庫中錄入的題目會越來越多,難免出現將相同的題目再次錄入的情況,為了避免這種問題,本系統也在數據錄入數據庫之前,進行了一次遍歷,看數據庫中是否有題干完全相同的題目,如果數據已經存在了,則不再錄入,以防止出現重復題。

總之,數據的預處理需要耗費一定的時間,導致題目錄入變慢,但卻減少了后期的維護時間,提升了整體的效率,也提高了試題的質量。

(二)題目重復問題

本系統是自動試題生成系統,從數據庫中抽取題目的時候,首先是由系統產生一個隨機數,并以這個隨機數作為題目的編號在數據庫中抽取相應的題目,而隨機數的生成是有范圍的,這樣當抽取的題量過大時,難免會產生重復的隨機數,因而需要在抽取過程中處理數字重復的問題,具體的處理過程如下:

1.首先采用Random()函數來生成一個隨機的數字SelectNum,數字的范圍跟數據庫中現存的題量相關,不能超過現有題目數量,不然會出現產生的數字抽不到題目。

2.判斷該數字SelectNum是否已經存在。方法是將該數字與已經抽取的題號逐個進行比較,也就是遍歷已經存在的題號數組tempsetpd,如果數組為空,則證明是第一次抽題,可以直接跳到第3步;如果是在數組中找到了抽取的數字,則證明該題目已經抽取過,不能再抽??;如果遍歷整個數組都沒找到抽取的數字,則證明尚未抽取過該題目,可以抽取該題號的題目。

3.將抽取到的題目寫入緩沖區,以備后續輸出使用。同時,需要將SelectNum寫入題號數組tempsetpd,以備后續的比較使用。

4.循環上邊的過程,繼續抽取下一個題目。

經過上述過程的處理,如果數字不重復,則可以選擇該習題,并把該題目放入緩沖區,用于后續的輸出;否則就重新產生隨機數,繼續上述的操作,直到找到合適的題目,以生成試題和答案。經過上述過程的處理,抽取的試題不會出現重復。

(三)圖像處理問題

在綜合題中,題目的題干和答案都采用圖像的方式來處理。通常情況下,對圖像的處理有兩種方式:第一種是將圖像存在指定的文件夾中,數據庫中寫入圖像的路徑;第二種是將圖像進行數據轉換直接寫入數據庫中。二者各有所長,在這里選擇第二種方式。這種方式在數據處理時相對復雜,但是后期的維護卻相對簡單。下面以增加題目時對圖像的數據處理為例,介紹圖像處理過程。

1.創建具體的題目對象,此處要注意對象中相關屬性的類型,在定義類時將相關的返回值類型定義為byte,具體代碼為public byte[] Options,用于接收圖像數據。

2.需要在界面中設置輸入的數據類型為圖像,可以將題干中的圖像和答案中的圖像輸入到系統中。

3.將題目對象中的圖像數據傳輸到參數列表中,具體代碼為:SqlParameter("@options",SqlDbType.Image);parameters[2].Value = model.Answer。

4.借助DBHelperSQL中的方法,將參數列表中的數據寫入數據庫,即可完成題目的增加。

(四)題目輸出問題

題目輸出問題是指試題選擇完成后,將試題生成文件的問題。通常的處理方式有兩種:一種是將試題寫入記事本;另一種是將試題寫入Word文檔。由于第一種只能處理文本信息,而試題生成系統中的綜合題是需要輸出圖像的,因此在這里選擇將試題直接輸出Word文檔。由于綜合題與其他四種類型題目的處理方式不同,在輸出時也做了區別處理,因此寫入時用了不同的處理方式。具體過程如下:

1.在系統中創建一個Word文檔對象WordDoc。

2.將數據庫中抽取的題目數據寫入WordDoc中,具體語句為WordDoc.Paragraphs.Last.Range.Text += sbzdyzh.ToString()。

3.將題目中的圖像數據進行轉換后,輸出到WordDoc中,具體轉換語句為:

Imagezhimg = Image.FromStream(new MemoryStream((byte[])

(dszdyzh.Tables[0].Rows[k]["options"])));

Bitmapzhtu = new Bitmap(zhimg, 100, 100);

stringsfpath= "D://TEMP/" + DateTime.Now.ToFileTime() + ".jpg";

zhtu.Save(sfpath, ImageFormat.Jpeg);

myselzh.EndKey(refuniform, ref ObjNoth2);

WordDoc.InlineShapes.AddPicture(sfpath, ref ObjNoth, ref ObjNoth, ref ObjNoth);

4.關閉WordDoc對象。

四、總結和展望

試題生成系統建成后,可以根據需要自行抽題。通過測試,該試題生成系統可以在10秒內生成一套涵蓋判斷、選擇、填空、簡答和綜合題等五種題型的完整試題,同時生成答案,將教師從煩瑣復雜的出題工作中解放出來,并可以作為題庫建設的重要工具。

雖然該試題生成系統能夠實現正常的抽題功能,有力地促進了題庫建設工作,但是在很多方面還存在不足,比如統計功能、智能化設置等都未能涉及,這將是今后優化試題生成系統開發工作的重點方向。

猜你喜歡
綜合題題型試題
離散型隨機變量??碱}型及解法
一次函數與幾何圖形綜合題
常見數列創新題型歸納
2021年高考數學模擬試題(四)
巧妙構造函數 破解三類題型
2019年高考數學模擬試題(五)
《陳涉世家》初三復習試題
2019屆高考數學模擬試題(二)
隨機抽樣題型“曬一曬”
圓周運動與拋體運動的綜合問題求解策略
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合