專利名稱:一種基于BLOB存儲(chǔ)及增強(qiáng)RichEdit控件的試卷自動(dòng)生成裝置及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種基于BLOB存儲(chǔ)及增強(qiáng)Richedit控件的試卷自動(dòng)生成裝置。
背景技術(shù):
考試作為考核學(xué)生知識(shí)、技能的一種手段,是學(xué)校日常工作中不可或缺的元素。試卷是考試內(nèi)容的載體,試卷內(nèi)容的覆蓋面、客觀性、區(qū)分性等指標(biāo)在很大程度上決定了一次考試的考核效果,因此試卷的組織和生成是整個(gè)考試流程中非常重要的一環(huán)。傳統(tǒng)的試卷生成都是以人工方式進(jìn)行的。每次在考試前,由負(fù)責(zé)該科目的教師人工組織試卷素材,這些素材可能來(lái)源于各種文獻(xiàn)資料,也可能來(lái)源于已形成的題庫(kù)。不可否認(rèn),一些經(jīng)驗(yàn)豐富的教師精心準(zhǔn)備的試卷具有很高的質(zhì)量,但是這畢竟要投入大量的時(shí)間和精力,并且很難長(zhǎng)期穩(wěn)定地保證試卷質(zhì)量,也不可避免地會(huì)有一些主觀因素影響。隨著信息技術(shù)、辦公自動(dòng)化技術(shù)的進(jìn)步,試卷生成的形式也發(fā)生了一些改革。出現(xiàn)了一些在線考試系統(tǒng),或是基于題庫(kù)的試卷自動(dòng)生成系統(tǒng)。這些系統(tǒng)能夠以隨機(jī)的方式在試題數(shù)據(jù)庫(kù)中抽取試題,組織成完整的試卷,在一定程度上提高了試卷內(nèi)容的客觀性和隨機(jī)性,但存在一個(gè)明顯的不足,即試題類型單一。造成以上問(wèn)題的原因有二 一是現(xiàn)有試卷生成系統(tǒng)的輸入模塊功能薄弱,不支持圖像、公式等元素的輸入;二是此類系統(tǒng)都是以文本的形式在數(shù)據(jù)庫(kù)中存儲(chǔ)試題,盡管有一些試卷生成系統(tǒng)支持圖像的存儲(chǔ),但對(duì)公式、圖文混合排版等復(fù)雜情況不能提供有效支持。這樣就極大限制了組織試卷的靈活性,導(dǎo)致現(xiàn)有試卷生成系統(tǒng)只能完成一些簡(jiǎn)單形式試卷的組織。此外,現(xiàn)有的系統(tǒng)在試卷參數(shù)設(shè)置的細(xì)節(jié)方面還不夠完善,也需要做出改進(jìn)。
發(fā)明內(nèi)容
本發(fā)明針對(duì)現(xiàn)有試卷生成系統(tǒng)不支持復(fù)雜對(duì)象,導(dǎo)致試卷形式單一,考核內(nèi)容的形式及靈活性差,以及試卷構(gòu)成的細(xì)節(jié)不完善問(wèn)題,從而提出一種基于BLOB存儲(chǔ)及增強(qiáng)RichEdit控件的試卷自動(dòng)生成裝置。一種基于BLOB存儲(chǔ)及增強(qiáng)RichEdit控件的試卷自動(dòng)生成裝置,它包括用戶數(shù)據(jù)庫(kù)1、科目數(shù)據(jù)庫(kù)2、試題數(shù)據(jù)庫(kù)3、科目信息數(shù)據(jù)庫(kù)4、系統(tǒng)管理模塊5、試卷生成模塊8、試題修改模塊9、試題錄入模塊10、試題檢索模塊11和科目信息管理模塊12 ;試卷生成模塊8、試題修改模塊9、試題錄入模塊10中均包括一個(gè)BLOB轉(zhuǎn)換模塊6和一個(gè)RTF流導(dǎo)入/導(dǎo)出模塊7 ;BLOB轉(zhuǎn)換模塊6,用于實(shí)現(xiàn)RTF數(shù)據(jù)流和二進(jìn)制對(duì)象之間的相互轉(zhuǎn)換;在存儲(chǔ)試題時(shí),把用戶錄入的原始試題導(dǎo)出的RTF流轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)塊,存儲(chǔ)到試題數(shù)據(jù)庫(kù)3中;在讀取試題時(shí),從試題數(shù)據(jù)庫(kù)3中讀出二進(jìn)制數(shù)據(jù)塊,恢復(fù)為RTF流;RTF流導(dǎo)入/導(dǎo)出模塊7,以一個(gè)增強(qiáng)的RichEdit控件作為含OLE對(duì)象的數(shù)據(jù)的載體,該控件擴(kuò)展了 MFC中RichEdit控件的IRichEditOleCallback接口,用于支持OLE對(duì)象的導(dǎo)入導(dǎo)出;在存儲(chǔ)試題時(shí),把用戶輸入控件中的內(nèi)容導(dǎo)出為RTF流,輸出到BLOB轉(zhuǎn)換模塊6 ;在讀取試題時(shí),從BLOB轉(zhuǎn)換模塊6接收到導(dǎo)出的RTF流,并解析為原始數(shù)據(jù),即試題內(nèi)容;用戶數(shù)據(jù)庫(kù)1,用于存儲(chǔ)所有用戶的信息;所述用戶信息中的用戶角色類型包括管理員和普通教師;科目數(shù)據(jù)庫(kù)2,用于存儲(chǔ)試題科目名稱;試題數(shù)據(jù)庫(kù)3,用于存儲(chǔ)試題內(nèi)容及各試題的相關(guān)信息;其中試題內(nèi)容以BLOB方式存儲(chǔ),各試題的相關(guān)信息以文本或數(shù)值類型存儲(chǔ);試題的相關(guān)信息包括該試題的題型、分值、重點(diǎn)考核內(nèi)容/非重點(diǎn)考核內(nèi)容標(biāo)記以及關(guān)鍵字;科目信息數(shù)據(jù)庫(kù)4,用于存儲(chǔ)所有科目相關(guān)的信息,每門考試科目相關(guān)的信息包括該科目要考核的題型、每種題型的總分值、該科目在重點(diǎn)內(nèi)容和非重點(diǎn)內(nèi)容中抽取試題的百分比;系統(tǒng)管理模塊5,用于添加系統(tǒng)用戶,包括管理員用戶及教師用戶;還用于管理員創(chuàng)建考試科目;還用于系統(tǒng)維護(hù);試卷生成模塊8,用于根據(jù)科目信息模塊中的參數(shù)設(shè)置,在試題數(shù)據(jù)庫(kù)3中隨機(jī)抽取試題,經(jīng)BLOB轉(zhuǎn)換模塊6把二進(jìn)制試題數(shù)據(jù)流轉(zhuǎn)換為RTF流,導(dǎo)入增強(qiáng)RichEdit控件,最后輸出到Word模板文檔中,生成試卷;試題修改模塊9,用于用戶以關(guān)鍵字在試題數(shù)據(jù)庫(kù)3中進(jìn)行檢索;還用于對(duì)試題進(jìn)行修改,以及修改后對(duì)試題數(shù)據(jù)庫(kù)3進(jìn)行更新;試題錄入模塊10,用于用戶把試題輸入試題數(shù)據(jù)庫(kù)3中,具體為用戶把試題內(nèi)容輸入增強(qiáng)RichEdit控件后,由增強(qiáng)RichEdit控件將試題內(nèi)容轉(zhuǎn)換為RTF流,再通過(guò)BLOB轉(zhuǎn)換模塊6將RTF流轉(zhuǎn)換為二進(jìn)制對(duì)象,存儲(chǔ)在試題數(shù)據(jù)庫(kù)3中;試題檢索模塊11,用于用戶以關(guān)鍵詞的方式在試題數(shù)據(jù)庫(kù)3中對(duì)試題進(jìn)行檢索,并返回相關(guān)試題記錄;科目信息管理模塊12,用于用戶對(duì)考試科目的相關(guān)信息進(jìn)行設(shè)置和更新,所述對(duì)考試科目的相關(guān)信息包括該科目要考核的題型、每種題型的總分值、該科目在重點(diǎn)內(nèi)容和非重點(diǎn)內(nèi)容中抽取試題的百分比。使用上述裝置的一種基于BLOB存儲(chǔ)及增強(qiáng)RichEdit控件的試卷自動(dòng)生成方法,它由以下步驟實(shí)現(xiàn)步驟a :從科目信息數(shù)據(jù)庫(kù)4中讀取科目信息,所述科目信息包括該科目各題型的總分值,重點(diǎn)內(nèi)容與非重點(diǎn)內(nèi)容的考核比例;步驟b :判斷是否完成所有題型的抽取,如果判斷結(jié)果為是,則執(zhí)行步驟e ;如果判斷結(jié)果為否,則執(zhí)行步驟c ;步驟c :判斷當(dāng)前題型下已抽取試題的總分值是否達(dá)到預(yù)設(shè)值,如果判斷結(jié)果為是,則執(zhí)行返回步驟b,如果判斷結(jié)果為否,則執(zhí)行步驟d ;步驟d :在試題數(shù)據(jù)庫(kù)3中查詢所有與當(dāng)前題型匹配的試題,根據(jù)當(dāng)前剩余分值在記錄集中隨機(jī)抽取,將抽到的試題主鍵加入已抽取試題集中;所述已抽取試題集將進(jìn)行重復(fù)元素檢查,防止抽取相同試題,并返回執(zhí)行步驟c ;
步驟e:已抽取試題集中存儲(chǔ)了所有被抽取的試題在試題數(shù)據(jù)庫(kù)3中的主鍵,這些主鍵對(duì)應(yīng)的試題即構(gòu)成一份完整試卷。根據(jù)這些主鍵值,在試題數(shù)據(jù)庫(kù)3中讀取相應(yīng)記錄的BLOB字段,通過(guò)BLOB轉(zhuǎn)換模塊6轉(zhuǎn)換為RTF流,并將RTF流導(dǎo)入增強(qiáng)RichEdit控件;步驟f:將增強(qiáng)RichEdit控件中的內(nèi)容通過(guò)Office Automation接口導(dǎo)入到預(yù)制的word模板中;步驟g:釋放數(shù)據(jù)庫(kù)連接,完成試卷生成。步驟e中BLOB數(shù)據(jù)與RTF數(shù)據(jù)流之間轉(zhuǎn)換的方法由以下步驟實(shí)現(xiàn):步驟一、BLOB轉(zhuǎn)換模塊6判斷是讀取試題還是存儲(chǔ)試題,如果為存儲(chǔ)試題,則執(zhí)行步驟二 ;如果為讀取試題,則執(zhí)行步驟四;步驟二:以二進(jìn)制模式讀取待存儲(chǔ)的RTF數(shù)據(jù)流,同時(shí)讀入該試題的相關(guān)信息;步驟三:將步驟二中讀入的二進(jìn)制流與試題相關(guān)信息組織為一條記錄,插入到試題數(shù)據(jù)庫(kù)3中,并執(zhí)行步驟六;步驟四:從試題數(shù)據(jù)庫(kù)3中,查詢到相關(guān)記錄,讀取各個(gè)字段;步驟五:把讀出的記錄中的BLOB字段以二進(jìn)制的方式恢復(fù)為RTF數(shù)據(jù)流;步驟六:釋放數(shù)據(jù)庫(kù)連接,完成BLOB數(shù)據(jù)與RTF數(shù)據(jù)流之間轉(zhuǎn)換。步驟e中RTF流導(dǎo)入/導(dǎo)出的步驟為:步驟a:RTF流導(dǎo)入/導(dǎo)出模塊7判斷是讀取試題還是存儲(chǔ)試題,如果為存儲(chǔ)試題,則執(zhí)行步驟β ;如果為讀取試題,則執(zhí)行步驟Y ;步驟β:將增強(qiáng)RichEdit控件中的內(nèi)容輸出為RTF流;步驟Y:讀取RTF流,解析為原始試題內(nèi)容。采用試題修改模塊9實(shí)現(xiàn)試題修改,其具體步驟為:步驟A:根據(jù)用戶輸入的關(guān)鍵詞在試題數(shù)據(jù)庫(kù)3中進(jìn)行檢索,找出與該關(guān)鍵詞匹配的所有試題,返回結(jié)果記錄集;步驟B:通過(guò)BLOB轉(zhuǎn)換模塊6將記錄集中的BLOB字段轉(zhuǎn)換為RTF流,再把RTF流導(dǎo)入試題修改模塊9集成的增強(qiáng)RichEdit控件,完成原始試題內(nèi)容的恢復(fù);步驟C:用戶用新內(nèi)容代替原始試題內(nèi)容,將修改后的試題導(dǎo)出為RTF流,再通過(guò)BLOB轉(zhuǎn)換模塊6將其轉(zhuǎn)換為二進(jìn)制流,用其更新試題數(shù)據(jù)庫(kù)3中原始試題的BLOB字段;步驟D:釋放數(shù)據(jù)庫(kù)連接,完成試題修改。采用試題錄入模塊10實(shí)現(xiàn)試題錄入,其具體步驟為:步驟1:用戶將試題內(nèi)容輸入試題錄入模塊10集成的增強(qiáng)RichEdit控件;步驟II:RTF導(dǎo)入/導(dǎo)出模塊7將增強(qiáng)RichEdit控件中的內(nèi)容轉(zhuǎn)換為RTF流,送入BLOB轉(zhuǎn)換模塊6 ;步驟III =BLOB轉(zhuǎn)換模塊6將RTF流轉(zhuǎn)換為二進(jìn)制流,形成BLOB字段,結(jié)合該試題的其他信息,構(gòu)成一條記錄,將該記錄添加到試題數(shù)據(jù)庫(kù)3中;步驟IV:釋放數(shù)據(jù)庫(kù)連接,完成試題錄入。本發(fā)明基于BLOB存儲(chǔ)方式及支持OLE對(duì)象的增強(qiáng)RichEdit控件,實(shí)現(xiàn)了一種支持復(fù)雜對(duì)象的試卷生成裝置,該裝置良好地支持圖像、公式等復(fù)雜對(duì)象的錄入,能夠?qū)崿F(xiàn)文本及各類對(duì)象的混合排版,極大地提高了試卷內(nèi)容形式的靈活性、豐富了試卷的信息量。此夕卜,該裝置對(duì)考核內(nèi)容進(jìn)行了重點(diǎn)內(nèi)容和非重點(diǎn)內(nèi)容的區(qū)分,在試卷的考核重心的平衡方 面也更加靈活。
圖1是本發(fā)明中裝置的結(jié)構(gòu)示意圖;圖2是本發(fā)明中試卷生成功能的流程圖;圖3是本發(fā)明中RTF數(shù)據(jù)流與BLOB數(shù)據(jù)轉(zhuǎn)換的流程圖;圖4是本發(fā)明中RTF流導(dǎo)入/導(dǎo)出的流程圖;圖5是本發(fā)明中試題修改功能的流程圖;圖6是本發(fā)明中試題錄入功能的流程圖。
具體實(shí)施例方式具體實(shí)施方式
一下面結(jié)合圖1說(shuō)明本實(shí)施方式。一種基于BLOB存儲(chǔ)及增強(qiáng)RichEdit控件的試卷自動(dòng)生成裝置,包括如下模塊用戶數(shù)據(jù)庫(kù)1、科目數(shù)據(jù)庫(kù)2、試題數(shù)據(jù)庫(kù)3、科目信息數(shù)據(jù)庫(kù)4、系統(tǒng)管理模塊5、BL0B轉(zhuǎn)換模塊6、RTF(Rich Text Format,富文本格式)流導(dǎo)入/導(dǎo)出模塊7、試卷生成模塊8、試題修改模塊9、試題錄入模塊10、試題檢索模塊11和科目信息管理模塊12。所述的用戶數(shù)據(jù)庫(kù)1,是存儲(chǔ)所有用戶信息的數(shù)據(jù)庫(kù),用戶角色類型包括管理員和普通教師,每個(gè)普通教師用戶對(duì)應(yīng)著相應(yīng)的考試科目,以保證每個(gè)教師用戶只能修改其對(duì)應(yīng)科目的試題數(shù)據(jù);所述的科目數(shù)據(jù)庫(kù)2,存儲(chǔ)試卷生成系統(tǒng)中所有的科目名稱;所述的試題數(shù)據(jù)庫(kù)3,存儲(chǔ)試題內(nèi)容及與各試題的相關(guān)信息。其中試題內(nèi)容以BLOB (Binary Large Object, 二進(jìn)制大對(duì)象)方式存儲(chǔ),相關(guān)信息以文本或數(shù)值類型存儲(chǔ);試題的相關(guān)信息包括該試題的題型、分值、重點(diǎn)考核內(nèi)容/非重點(diǎn)考核內(nèi)容標(biāo)記以及關(guān)鍵
字等;所述的科目信息數(shù)據(jù)庫(kù)4,存儲(chǔ)所有科目相關(guān)的信息,每門考試科目相關(guān)的信息包括該科目要考核的題型、每種題型的總分值、該科目在重點(diǎn)內(nèi)容和非重點(diǎn)內(nèi)容中抽取試題的百分比等;所述的系統(tǒng)管理模塊5,有三方面功能,一是添加系統(tǒng)用戶,包括管理員用戶及教師用戶;二是管理員創(chuàng)建考試科目,只有管理員創(chuàng)建過(guò)的考試科目,教師才能在該科目中添加試題等信息;三是系統(tǒng)維護(hù)功能,如數(shù)據(jù)庫(kù)備份、恢復(fù)等。所述的BLOB轉(zhuǎn)換模塊6,實(shí)現(xiàn)RTF數(shù)據(jù)流和二進(jìn)制大對(duì)象之間的相互轉(zhuǎn)換。在存儲(chǔ)試題時(shí),把用戶錄入的原始試題導(dǎo)出的RTF流轉(zhuǎn)換為二進(jìn)制塊,存儲(chǔ)到試題數(shù)據(jù)庫(kù)3中;在讀取試題時(shí),從試題數(shù)據(jù)庫(kù)3中讀出二進(jìn)制數(shù)據(jù)塊,恢復(fù)為RTF流。所述的RTF流導(dǎo)入/導(dǎo)出模塊7,以一個(gè)增強(qiáng)的RichEdit控件作為含OLE對(duì)象的數(shù)據(jù)的載體,該控件擴(kuò)展了 MFC中RichEdit控件的IRichEditOleCallback接口,使其支持OLE對(duì)象的導(dǎo)入導(dǎo)出。在存儲(chǔ)試題時(shí),把用戶輸入控件中的內(nèi)容導(dǎo)出為RTF流,輸出到BLOB轉(zhuǎn)換模塊;在讀取試題時(shí),從BLOB轉(zhuǎn)換模塊接收到導(dǎo)出的RTF流,將其解析為原始數(shù)據(jù),即試題內(nèi)容;所述的試卷生成模塊8,集成了 BLOLB轉(zhuǎn)換模塊和RTF流導(dǎo)入/導(dǎo)出模塊,根據(jù)科目信息模塊中的參數(shù)設(shè)置,在試題數(shù)據(jù)庫(kù)3中隨機(jī)抽取試題,經(jīng)BLOB轉(zhuǎn)換模塊把二進(jìn)制試題數(shù)據(jù)流轉(zhuǎn)換為RTF流,導(dǎo)入增強(qiáng)RichEdit控件,最后輸出到Word模板文檔中,生成試卷。所述的試題修改模塊9,集成了 BLOLB轉(zhuǎn)換模塊和RTF流導(dǎo)入/導(dǎo)出模塊,允許用戶以關(guān)鍵字在試題數(shù)據(jù)庫(kù)3中進(jìn)行檢索,找出需要修改的試題后進(jìn)行修改,對(duì)試題數(shù)據(jù)庫(kù)進(jìn)行更新。所述的試題錄入模塊10,集成了 BLOLB轉(zhuǎn)換模塊和RTF流導(dǎo)入/導(dǎo)出模塊,是用戶把試題輸入試題數(shù)據(jù)庫(kù)3的接口。用戶把試題內(nèi)容輸入增強(qiáng)RichEdit控件后,由增強(qiáng)RichEdit控件將試題內(nèi)容轉(zhuǎn)換為RTF流,再通過(guò)BLOB轉(zhuǎn)換模塊將RTF流轉(zhuǎn)換為二進(jìn)制對(duì)象,存儲(chǔ)在試題數(shù)據(jù)庫(kù)3中。所述的試題檢索模塊11,是用戶以關(guān)鍵詞的方式在試題數(shù)據(jù)庫(kù)中對(duì)試題進(jìn)行檢索,并返回相關(guān)試題記錄。所述的科目信息管理模塊12,允許用戶對(duì)科目信息數(shù)據(jù)庫(kù)4中考試科目的相關(guān)信息進(jìn)行設(shè)置和更新,這些信息包括該科目要考核的題型、每種題型的總分值、該科目在重點(diǎn)內(nèi)容和非重點(diǎn)內(nèi)容中抽取試題的百分比等。
具體實(shí)施方式
二 結(jié)合圖2說(shuō)明本實(shí)施方式,使用具體實(shí)施方式
一的一種基于BLOB存儲(chǔ)及增強(qiáng)RichEdit控件的試卷自動(dòng)生成方法,它由以下步驟實(shí)現(xiàn)步驟a:從科目信息數(shù)據(jù)庫(kù)4中讀取科目信息設(shè)置,包括該科目各題型的總分值,重點(diǎn)內(nèi)容與非重點(diǎn)內(nèi)容的考核比例等信息;步驟b :若已完成所有題型的抽取,轉(zhuǎn)到步驟e,否則轉(zhuǎn)到步驟c ;步驟c :若當(dāng)前題型已抽取試題的總分值已經(jīng)達(dá)到預(yù)設(shè)值,轉(zhuǎn)到步驟b,否則轉(zhuǎn)到步驟d ;步驟d :在試題數(shù)據(jù)庫(kù)3中查詢所有與當(dāng)前題型匹配的試題,根據(jù)當(dāng)前剩余分值在記錄集中隨機(jī)抽取,將抽到的試題主鍵加入已抽取試題集中。已抽取試題集將進(jìn)行重復(fù)元素檢查,防止抽取相同試題,轉(zhuǎn)到步驟c ;步驟e :此時(shí)已抽取試題集中存儲(chǔ)了所有被抽取的試題在試題數(shù)據(jù)庫(kù)3中的主鍵,這些主鍵對(duì)應(yīng)的試題即構(gòu)成一份完整試卷。根據(jù)這些主鍵值,在試題數(shù)據(jù)庫(kù)3中讀取相應(yīng)記錄的BLOB字段,通過(guò)BLOB轉(zhuǎn)換模塊6轉(zhuǎn)換為RTF流,并將RTF流導(dǎo)入增強(qiáng)RichEdit控件;步驟f :將增強(qiáng)RichEdit控件中的內(nèi)容通過(guò)Office Automation接口導(dǎo)入到預(yù)制的word模板中;步驟g :釋放數(shù)據(jù)庫(kù)連接,完成試卷生成。
具體實(shí)施方式
三下面結(jié)合圖3說(shuō)明本實(shí)施方式。本實(shí)施方式是實(shí)施方式二的進(jìn)一步限定所述的BLOB轉(zhuǎn)換模塊6實(shí)現(xiàn)RTF數(shù)據(jù)流與BLOB數(shù)據(jù)之間轉(zhuǎn)換的步驟為步驟一若存儲(chǔ)試題,轉(zhuǎn)到步驟二,若讀取試題,轉(zhuǎn)到步驟四;步驟二 以二進(jìn)制模式讀取待存儲(chǔ)的RTF數(shù)據(jù)流,同時(shí)讀入該試題相關(guān)信息;步驟三將步驟二中讀入的二進(jìn)制流與試題相關(guān)信息組織為一條記錄,插入到試題數(shù)據(jù)庫(kù)3中,轉(zhuǎn)到步驟六;步驟四從試題數(shù)據(jù)庫(kù)3中,查詢到相關(guān)記錄,讀取各個(gè)字段;步驟五把讀出的記錄中的BLOB字段以二進(jìn)制的方式恢復(fù)為RTF數(shù)據(jù)流;
步驟六:釋放數(shù)據(jù)庫(kù)連接,退出BLOB轉(zhuǎn)換模塊6。
具體實(shí)施方式
四:結(jié)合圖4說(shuō)明本實(shí)施方式。本實(shí)施方式是實(shí)施方式二的進(jìn)一步限定:所述的RTF流導(dǎo)入/導(dǎo)出模塊7實(shí)現(xiàn)RTF流導(dǎo)入/導(dǎo)出的步驟為:步驟α:若存儲(chǔ)試題,轉(zhuǎn)到步驟β,若讀取試題,轉(zhuǎn)到步驟Y ;步驟β:將增強(qiáng)RichEdit控件中的內(nèi)容輸出為RTF流;步驟Y:讀取RTF流,解析為原始試題內(nèi)容;具體實(shí)施方式
五:結(jié)合圖5說(shuō)明本實(shí)施方式。本實(shí)施方式與實(shí)施方式一的不同之處在于:所述的試題修改模塊9實(shí)現(xiàn)試題修改的步驟為:步驟A:根據(jù)用戶輸入的關(guān)鍵詞在試題數(shù)據(jù)庫(kù)3中進(jìn)行檢索,找出與該關(guān)鍵詞匹配的所有試題,返回結(jié)果記錄集;步驟B:通過(guò)BLOB轉(zhuǎn)換模塊6將記錄集中的BLOB字段轉(zhuǎn)換為RTF流,再把RTF流導(dǎo)入試題修改模塊9集成的增強(qiáng)RichEdit控件,完成原始試題內(nèi)容的恢復(fù);步驟C:用戶用新內(nèi)容代替原始試題內(nèi)容,將修改后的試題導(dǎo)出為RTF流,再通過(guò)BLOB轉(zhuǎn)換模塊6將其轉(zhuǎn)換為二進(jìn)制流,用其更新試題數(shù)據(jù)庫(kù)3中原始試題的BLOB字段;步驟D:釋放數(shù)據(jù)庫(kù)連接,完成試題修改。
具體實(shí)施方式
六:結(jié)合圖6說(shuō)明本實(shí)施方式。本實(shí)施方式與實(shí)施方式一的不同之處在于:所述的試題錄入模塊10實(shí)現(xiàn)試題錄入的步驟為:步驟1:用戶將試題內(nèi)容輸入試題錄入模塊10集成的增強(qiáng)RichEdit控件;步驟II:RTF導(dǎo)入/導(dǎo)出模塊7將增強(qiáng)RichEdit控件中的內(nèi)容轉(zhuǎn)換為RTF流,送入BLOB轉(zhuǎn)換模塊6 ;步驟III =BLOB轉(zhuǎn)換模塊6將RTF流轉(zhuǎn)換為二進(jìn)制流,形成BLOB字段,結(jié)合該試題的其他信息,構(gòu)成一條記錄,將該記錄添加到試題數(shù)據(jù)庫(kù)3中;步驟IV:釋放數(shù)據(jù)庫(kù)連接,完成試題錄入。本發(fā)明不局限于上述實(shí)施方式,還可以是上述各實(shí)施方式中所述技術(shù)特征的合理組合。
權(quán)利要求
1.一種基于BLOB存儲(chǔ)及增強(qiáng)RichEdit控件的試卷自動(dòng)生成裝置,其特征是:它包括用戶數(shù)據(jù)庫(kù)(I)、科目數(shù)據(jù)庫(kù)(2)、試題數(shù)據(jù)庫(kù)(3)、科目信息數(shù)據(jù)庫(kù)(4)、系統(tǒng)管理模塊(5)、試卷生成模塊(8)、試題修改模塊(9)、試題錄入模塊(10)、試題檢索模塊(11)和科目信息管理模塊(12); 試卷生成模塊(8)、試題修改模塊(9)、試題錄入模塊(10)中均包括一個(gè)BLOB轉(zhuǎn)換模塊(6)和一個(gè)RTF流導(dǎo)入/導(dǎo)出模塊(7); BLOB轉(zhuǎn)換模塊¢),用于實(shí)現(xiàn)RTF數(shù)據(jù)流和二進(jìn)制對(duì)象之間的相互轉(zhuǎn)換;在存儲(chǔ)試題時(shí),把用戶錄入的原始試題導(dǎo)出的RTF流轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)塊,存儲(chǔ)到試題數(shù)據(jù)庫(kù)(3)中;在讀取試題時(shí),從試題數(shù)據(jù)庫(kù)(3)中讀出二進(jìn)制數(shù)據(jù)塊,恢復(fù)為RTF流; RTF流導(dǎo)入/導(dǎo)出模塊(7),以一個(gè)增強(qiáng)的RichEdit控件作為含OLE對(duì)象的數(shù)據(jù)載體,該控件擴(kuò)展了 MFC中RichEdit控件的IRichEditOleCallback接口,用于支持OLE對(duì)象的導(dǎo)入導(dǎo)出;在存儲(chǔ)試題時(shí),把用戶輸入控件中的內(nèi)容導(dǎo)出為RTF流,輸出到BLOB轉(zhuǎn)換模塊(6);在讀取試題時(shí),從BLOB轉(zhuǎn)換模塊(6)接收到導(dǎo)出的RTF流,并解析為原始數(shù)據(jù),即:試題內(nèi)容; 用戶數(shù)據(jù)庫(kù)(1),用于存儲(chǔ)所有用戶的信息;所述用戶信息中的用戶角色類型包括管理員和普通教師; 科目數(shù)據(jù)庫(kù)(2),用于存儲(chǔ)試題科目名稱; 試題數(shù)據(jù)庫(kù)(3),用于存儲(chǔ)試題內(nèi)容及各試題的相關(guān)信息; 其中試題內(nèi)容以BLOB方式存儲(chǔ),各試題的相關(guān)信息以文本或數(shù)值類型存儲(chǔ);試題的相關(guān)信息包括該試題的題型、分值、重點(diǎn)考核內(nèi)容/非重點(diǎn)考核內(nèi)容標(biāo)記以及關(guān)鍵字; 科目信息數(shù)據(jù)庫(kù)(4),用于存儲(chǔ)所有科目相關(guān)的信息,每門考試科目相關(guān)的信息包括該科目要考核的題型、每種題型的總分值、該科目在重點(diǎn)內(nèi)容和非重點(diǎn)內(nèi)容中抽取試題的百分比; 系統(tǒng)管理模塊(5),用于添加系統(tǒng)用戶,包括管理員用戶及教師用戶;還用于管理員創(chuàng)建考試科目;還用于系統(tǒng)維護(hù); 試卷生成模塊(8),用于根據(jù)科目信息模塊中的參數(shù)設(shè)置,在試題數(shù)據(jù)庫(kù)(3)中隨機(jī)抽取試題,經(jīng)BLOB轉(zhuǎn)換模塊(6)把二進(jìn)制試題數(shù)據(jù)流轉(zhuǎn)換為RTF流,導(dǎo)入增強(qiáng)RichEdit控件,最后輸出到Word模板文檔中,生成試卷; 試題修改模塊(9),用于用戶以關(guān)鍵字在試題數(shù)據(jù)庫(kù)(3)中進(jìn)行檢索;還用于對(duì)試題進(jìn)行修改,以及修改后對(duì)試題數(shù)據(jù)庫(kù)(3)進(jìn)行更新; 試題錄入模塊(10),用于用戶把試題輸入試題數(shù)據(jù)庫(kù)(3)中,具體為:用戶把試題內(nèi)容輸入增強(qiáng)RichEdit控件后,由增強(qiáng)RichEdit控件將試題內(nèi)容轉(zhuǎn)換為RTF流,再通過(guò)BLOB轉(zhuǎn)換模塊(6)將RTF流轉(zhuǎn)換為二進(jìn)制對(duì)象,存儲(chǔ)在試題數(shù)據(jù)庫(kù)(3)中; 試題檢索模塊(11),用于用戶以關(guān)鍵詞的方式在試題數(shù)據(jù)庫(kù)(3)中對(duì)試題進(jìn)行檢索,并返回相關(guān)試題記錄; 科目信息管理模塊(12),用于用戶對(duì)考試科目的相關(guān)信息進(jìn)行設(shè)置和更新,所述對(duì)考試科目的相關(guān)信息包括該科目要考核的題型、每種題型的總分值、該科目在重點(diǎn)內(nèi)容和非重點(diǎn)內(nèi)容中抽取試題的百分比。
2.使用權(quán)利要求1的一種基于BLOB存儲(chǔ)及增強(qiáng)RichEdit控件的試卷自動(dòng)生成方法,其特征是:它由以下步驟實(shí)現(xiàn): 步驟a:從科目信息數(shù)據(jù)庫(kù)(4)中讀取科目信息,所述科目信息包括該科目各題型的總分值,重點(diǎn)內(nèi)容與非重點(diǎn)內(nèi)容的考核比例; 步驟b:判斷是否完成所有題型的抽取,如果判斷結(jié)果為是,則執(zhí)行步驟e ;如果判斷結(jié)果為否,則執(zhí)行步驟c ; 步驟c:判斷當(dāng)前題型下已抽取試題的總分值是否達(dá)到預(yù)設(shè)值,如果判斷結(jié)果為是,則執(zhí)行返回步驟b,如果判斷結(jié)果為否,則執(zhí)行步驟d ; 步驟d:在試題數(shù)據(jù)庫(kù)(3)中查詢所有與當(dāng)前題型匹配的試題,根據(jù)當(dāng)前剩余分值在記錄集中隨機(jī)抽取,將抽到的試題主鍵加入已抽取試題集中;所述已抽取試題集將進(jìn)行重復(fù)元素檢查,防止抽取相同試題,并返回執(zhí)行步驟c ;步驟e:已抽取試題集中存儲(chǔ)了所有被抽取的試題在試題數(shù)據(jù)庫(kù)(3)中的主鍵,這些主鍵對(duì)應(yīng)的試題即構(gòu)成一份完整試卷。根據(jù)這些主鍵值,在試題數(shù)據(jù)庫(kù)(3)中讀取相應(yīng)記錄的BLOB字段,通過(guò)BLOB轉(zhuǎn)換模塊(6)轉(zhuǎn)換為RTF流,并將RTF流導(dǎo)入增強(qiáng)RichEdit控件;步驟f:將增強(qiáng)RichEdit控件中的內(nèi)容通過(guò)Office Automation接口導(dǎo)入到預(yù)制的word模板中; 步驟g:釋放數(shù)據(jù)庫(kù)連接,完成試卷生成。
3.根據(jù)權(quán)利要求2所述的一種基于BLOB存儲(chǔ)及增強(qiáng)RichEdit控件的試卷自動(dòng)生成方法,其特征在于,步驟e中BLOB數(shù)據(jù)與RTF數(shù)據(jù)流之間轉(zhuǎn)換的方法由以下步驟實(shí)現(xiàn): 步驟一、BLOB轉(zhuǎn)換模塊(6)判斷是讀取試題還是存儲(chǔ)試題,如果為存儲(chǔ)試題,則執(zhí)行步驟二 ;如果為讀取試題,則執(zhí)行步`驟四; 步驟二:以二進(jìn)制模式讀取待存儲(chǔ)的RTF數(shù)據(jù)流,同時(shí)讀入該試題的相關(guān)信息; 步驟三:將步驟二中讀入的二進(jìn)制流與試題相關(guān)信息組織為一條記錄,插入到試題數(shù)據(jù)庫(kù)(3)中,并執(zhí)行步驟六; 步驟四:從試題數(shù)據(jù)庫(kù)(3)中,查詢到相關(guān)記錄,讀取各個(gè)字段; 步驟五:把讀出的記錄中的BLOB字段以二進(jìn)制的方式恢復(fù)為RTF數(shù)據(jù)流; 步驟六:釋放數(shù)據(jù)庫(kù)連接,完成BLOB數(shù)據(jù)與RTF數(shù)據(jù)流之間轉(zhuǎn)換。
4.根據(jù)權(quán)利要求2所述的一種基于BLOB存儲(chǔ)及增強(qiáng)RichEdit控件的試卷自動(dòng)生成方法,其特征在于,步驟e中RTF流導(dǎo)入/導(dǎo)出的步驟為: 步驟a:RTF流導(dǎo)入/導(dǎo)出模塊(7)判斷是讀取試題還是存儲(chǔ)試題,如果為存儲(chǔ)試題,則執(zhí)行步驟β ;如果為讀取試題,則執(zhí)行步驟Y ; 步驟β:將增強(qiáng)RichEdit控件中的內(nèi)容輸出為RTF流; 步驟Y:讀取RTF流,解析為原始試題內(nèi)容。
5.根據(jù)權(quán)利要求2所述的一種基于BLOB存儲(chǔ)及增強(qiáng)RichEdit控件的試卷自動(dòng)生成方法,其特征在于,采用試題修改模塊(9)實(shí)現(xiàn)試題修改,其具體步驟為: 步驟A:根據(jù)用戶輸入的關(guān)鍵詞在試題數(shù)據(jù)庫(kù)(3)中進(jìn)行檢索,找出與該關(guān)鍵詞匹配的所有試題,返回結(jié)果記錄集; 步驟B:通過(guò)BLOB轉(zhuǎn)換模塊(6)將記錄集中的BLOB字段轉(zhuǎn)換為RTF流,再把RTF流導(dǎo)入試題修改模塊(9)集成的增強(qiáng)RichEdit控件,完成原始試題內(nèi)容的恢復(fù); 步驟C:用戶用新內(nèi)容代替原始試題內(nèi)容,將修改后的試題導(dǎo)出為RTF流,再通過(guò)BLOB轉(zhuǎn)換模塊(6)將其轉(zhuǎn)換為二進(jìn)制流,用其更新試題數(shù)據(jù)庫(kù)(3)中原始試題的BLOB字段; 步驟D:釋放數(shù)據(jù)庫(kù)連接,完成試題修改。
6.根據(jù)權(quán)利要求2所述的一種基于BLOB存儲(chǔ)及增強(qiáng)RichEdit控件的試卷自動(dòng)生成方法,其特征在于,采用試題錄入模塊(10)實(shí)現(xiàn)試題錄入,其具體步驟為: 步驟1:用戶將試題內(nèi)容輸入試題錄入模塊(10)集成的增強(qiáng)RichEdit控件; 步驟II =RTF導(dǎo)入/導(dǎo)出模塊(7)將增強(qiáng)RichEdit控件中的內(nèi)容轉(zhuǎn)換為RTF流,送入BLOB轉(zhuǎn)換模塊(6); 步驟III =BLOB轉(zhuǎn)換模塊(6)將RTF流轉(zhuǎn)換為二進(jìn)制流,形成BLOB字段,結(jié)合該試題的其他信息,構(gòu)成一條記錄,將該記錄添加到試題數(shù)據(jù)庫(kù)(3)中; 步驟IV:釋放數(shù)據(jù)庫(kù)連接, 完成試題錄入。
全文摘要
一種基于BLOB存儲(chǔ)及增強(qiáng)RichEdit控件的試卷自動(dòng)生成裝置及方法,涉及一種基于BLOB存儲(chǔ)及增強(qiáng)Richedit控件的試卷自動(dòng)生成裝置。它解決了現(xiàn)有試卷生成系統(tǒng)不支持復(fù)雜對(duì)象,考核內(nèi)容的形式及靈活性差,以及試卷構(gòu)成的細(xì)節(jié)不完善問(wèn)題。它的用戶數(shù)據(jù)庫(kù)存儲(chǔ)所有用戶信息;科目數(shù)據(jù)庫(kù)存儲(chǔ)所有科目名稱;試題數(shù)據(jù)庫(kù),存儲(chǔ)試題內(nèi)容及各試題的相關(guān)信息;科目信息數(shù)據(jù)庫(kù)存儲(chǔ)考試科目相關(guān)信息;系統(tǒng)管理模塊提供系統(tǒng)管理功能;BLOB轉(zhuǎn)換模塊實(shí)現(xiàn)RTF數(shù)據(jù)流和二進(jìn)制大對(duì)象之間的相互轉(zhuǎn)換;RTF流導(dǎo)入/導(dǎo)出模塊用于RTF流導(dǎo)入導(dǎo)出;試卷生成模塊在試題數(shù)據(jù)庫(kù)中抽取試題并生成試卷。本發(fā)明適用于試卷自動(dòng)生成。
文檔編號(hào)G06Q50/20GK103077492SQ20131002304
公開(kāi)日2013年5月1日 申請(qǐng)日期2013年1月22日 優(yōu)先權(quán)日2013年1月22日
發(fā)明者王晶晶, 于立洋, 楊文君, 梁際華, 楊春文 申請(qǐng)人:牡丹江師范學(xué)院