找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5598|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

試題庫自動組卷系統(tǒng)(VB源碼與設(shè)計(jì)論文)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
基于vb做的vb試題組卷系統(tǒng)


全部資料51hei下載地址:
VB058試題庫自動組卷系統(tǒng)計(jì)算機(jī)畢業(yè)設(shè)計(jì).rar (552.88 KB, 下載次數(shù): 32)



目 錄

摘要........2
英文摘要.2
第一章 引言 .......3
第二章 系統(tǒng)分析....3
2.1 試題庫分析..3
2.2 組卷分析..4
2.3 系統(tǒng)簡介..5
第三章 數(shù)據(jù)庫設(shè)計(jì)....6
3.1 系統(tǒng)數(shù)據(jù)庫..6
3.2 臨時(shí)數(shù)據(jù)庫..7
第四章 系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)......8
第五章 模塊設(shè)計(jì)及實(shí)現(xiàn).......9
5.1 用戶登錄模塊..9
5.2 系統(tǒng)維護(hù)模塊....10
5.2.1 新建數(shù)據(jù)庫...10
5.2.2 修改密碼 ..11
5.2.3 添加用戶11
5.3題庫管理模塊...11
      5.4自動組卷模塊...13
5.4.1 功能 ..14
5.4.2 設(shè)計(jì)思路14
  5.4.3 組卷策略分析....14
  5.4.4 代碼實(shí)現(xiàn)....16
  5.4.5 試卷編輯22

結(jié)束語23
參考文獻(xiàn)...23

  • 引言
考試是教師檢查學(xué)生學(xué)習(xí)情況的必要手段,但出卷卻是一種繁重的智力和體力勞動,傳統(tǒng)的標(biāo)準(zhǔn)化試卷命題,需要由教學(xué)專家組成一個(gè)命題班子,根據(jù)許多優(yōu)秀教師多年的教學(xué)經(jīng)驗(yàn),從貫徹教學(xué)大綱要求,到試卷意圖的組織,經(jīng)過反復(fù)的推敲,才能完成一份標(biāo)準(zhǔn)化的試卷。這樣的命題方式不僅工作任務(wù)繁重而且試卷的標(biāo)準(zhǔn)化程度、難易程度、題量大小等各方面難以控制,難以形成有效的試題庫,給試題和試卷的管理帶來很多問題和困難。鑒于這種情況,利用計(jì)算機(jī)進(jìn)行試卷的自動生成并逐步積累形成有效的試題庫,對試題和試卷的管理將變得高效而便捷,對提高工作效率,使試卷管理逐步走向正規(guī)化自動化將起到十分重要的作用。同時(shí)使出卷工作變得輕松愉快,從很大程度上減輕了教師利用傳統(tǒng)的出卷方式組卷的繁重工作量,大大節(jié)省了老師的工作時(shí)間,便于教師有更多的時(shí)間和精力致力于教學(xué)方法的研究。今日, 隨著計(jì)算機(jī)的應(yīng)用的普及和硬件設(shè)備性能和軟件制作水平的提高,為研制開發(fā)高性能的試題管理軟件提供了條件。   




      • 系統(tǒng)分析___

作為在教學(xué)第一線的老師,往往需要及時(shí)了解學(xué)生對某一章節(jié)知識掌握的情況,經(jīng)常需要對學(xué)生進(jìn)行形成性測驗(yàn)和終結(jié)性測試,來發(fā)現(xiàn)教學(xué)中的問題,從而調(diào)整教學(xué)進(jìn)度,改進(jìn)教學(xué)方法。不少軟件開發(fā)者看到了教育工作者在這一領(lǐng)域的需求相繼推出了一批與試題管理有關(guān)的操作軟件,其中不乏非常出色的作品。但是從試題管理這一方面來看,用戶反應(yīng)平淡,感覺中意的不多。我們不禁要問:為什么是這樣的結(jié)局?老師們最需要的是什么呢?
§2.1 試題庫分析  在試題庫方面,老師最需要的是對試題庫管理的自主性。老師們渴望能自由地操縱試題庫,具體表現(xiàn)在以下三個(gè)方面:
   (1)自主初始化試題庫;
   (2)自主維護(hù)試題庫;
   (3)自主設(shè)計(jì)試卷。
※自主初始化試題庫
即用戶擁有創(chuàng)建新試題庫的權(quán)力,用戶能夠根據(jù)自己的需要,設(shè)計(jì)試題的儲存方案以及試題的屬性名和各屬性值,實(shí)現(xiàn)試題庫用戶個(gè)性化設(shè)計(jì),讓試題庫真正成為用戶自己的試題庫。。用戶不喜歡這一種不能自主控制的試題分類方案,用戶希望自主地初始化試題庫。
※自主維護(hù)試題庫
即用戶具有添加、修改和刪除試題的權(quán)力,實(shí)現(xiàn)試題庫的可擴(kuò)充性和開放性,使用戶對試題庫具有至高無上的支配權(quán),F(xiàn)在已經(jīng)推出的幾乎所的試題管理軟件都不具備這樣的功能,用戶所使用的試題被程序制作者預(yù)先寫在某個(gè)文件中,這些文件不是隱藏得讓用戶難以找到就是經(jīng)過加密處理,用戶根本就不可能通過其它方式(比如Word、Access、WPS等)打開并看到它,更談不上對它的擴(kuò)充、修改和對某個(gè)試題的刪除了。由于用戶沒有自主維護(hù)試題庫的權(quán)力,新試題無法錄入,陳舊試題無法刪除,這樣的試題庫在較短的時(shí)間內(nèi)就逐漸老化、失去活力。用戶需要自主地維護(hù)試題庫,希望及時(shí)地更新試題庫。
※自主設(shè)計(jì)試卷
現(xiàn)有的某些試題管理軟件不僅不支持試題庫中試題的修改,生成的試卷也不可以修改,連加一個(gè)空格修改字體都不行,試卷保存后不能為其它系統(tǒng)(比如Word、WPS等)識別,只能從打印機(jī)上輸出,這種方案沒有多少實(shí)用性。
試題庫要保證一定的規(guī)模,給隨機(jī)選擇以較大的范圍。建立題庫是一個(gè)復(fù)雜的系統(tǒng)工程,首先要建立系統(tǒng)的數(shù)學(xué)模型,然后確定試題的屬性指標(biāo)以及試題的組成結(jié)構(gòu),再組織大批量的優(yōu)秀學(xué)科教師編寫試題,為了保證這些試題的科學(xué)性和有效性,對每一題試題進(jìn)行抽樣測試,對試題參數(shù)標(biāo)注的有效性進(jìn)行校正,建立起一個(gè)實(shí)用的題庫系統(tǒng),另外,應(yīng)該對題庫的管理實(shí)行一定程度上的開放性,以不斷提高題庫的質(zhì)量和可維護(hù)性。建立題庫是一項(xiàng)相當(dāng)復(fù)雜的系統(tǒng)工程,不僅開發(fā)需要大量的人力和時(shí)間,而且還要花費(fèi)相當(dāng)?shù)臅r(shí)間和人力物力去維護(hù)調(diào)整,才能真正在教育中發(fā)揮作用。
§2.2 組卷分析 一般地說,對題庫系統(tǒng)組織試卷的要求是根據(jù)出卷者的需求產(chǎn)生一份對于測驗(yàn)?zāi)繕?biāo)(如教學(xué)評價(jià)、學(xué)生能力水平評價(jià)等)有價(jià)值的測驗(yàn)試卷。因此,在組卷時(shí),用戶要提出組卷要求,通常包括題目內(nèi)容范圍、題目類型、題目數(shù)量和測驗(yàn)?zāi)繕?biāo)等方面。這些要求應(yīng)轉(zhuǎn)化成試卷每個(gè)題目的量化參數(shù)才能被系統(tǒng)使用。例如按照測驗(yàn)?zāi)繕?biāo)各知識點(diǎn)內(nèi)容所占比例數(shù),各層次的目標(biāo)(記憶、理解、綜合、應(yīng)用等)分別由哪些題型反映,每種題型在試卷中的數(shù)量,各難度級在卷中所占比例,難度等要求。量化工作可以由人工完成,然后按一定格式送入系統(tǒng)中。也可以由系統(tǒng)在一定程度上自動完成量化轉(zhuǎn)換,形成相應(yīng)的組卷參數(shù)。
要解決的一個(gè)首要問題是組卷策略的選擇。它在很大程度上決定著系統(tǒng)的成敗與否。組卷策略的實(shí)質(zhì)是將對人比較直觀明了的組卷參數(shù)變換成計(jì)算機(jī)能夠直接操作的試題屬性項(xiàng),然后根據(jù)這些屬性項(xiàng),在題庫中抽取試題組成試卷。因此,完整的組卷策略應(yīng)該由三部份組成:試題屬性項(xiàng)定義、組卷參數(shù)的定義、變換算法的說明。所謂計(jì)算機(jī)組卷至少應(yīng)該保證以下幾個(gè)方面的平衡方可考慮試卷的可接受性:
a)  整卷的題型比例要合理

    •          整卷的章節(jié)比例要合理
    •          整卷的難度分配要適度
d)  要保證隨機(jī)性
一種做法是,讓出題者按照一定格式描述試卷編制計(jì)劃信息,如卷內(nèi)題目在題型和難度上的分布,知識點(diǎn)內(nèi)容在各目標(biāo)層次上的分布(包括數(shù)量),然后通過一定算法變換成試卷試題的具體要求。另外一種做法是將課程目標(biāo)與內(nèi)容信息在系統(tǒng)中建立一個(gè)目標(biāo)/內(nèi)容分布關(guān)系表。
在題庫中按上述量化的組卷要求查找符合條件的題目進(jìn)行出題組卷,一般都采用匹配方法。精確匹配可以組出完全符合量化標(biāo)準(zhǔn)的試卷,但有時(shí)會出現(xiàn)組卷策略無法實(shí)現(xiàn)的情況(即查不到完全符合條件要求的題目)。為了避免這種情況,設(shè)計(jì)組卷策略時(shí)要考慮怎樣解決它。常用的辦法之一是形成并試用新的組卷策略,這種做法會帶來時(shí)間上的浪費(fèi)。另一種辦法是把精確匹配改成近似匹配。采用近似匹配時(shí)應(yīng)事先規(guī)定所選題目在內(nèi)容、目標(biāo)、題型與難度等各指標(biāo)上是否可以與出題要求不完全一致,能不能有一一定的模糊度。若模糊度為0表示必須精確匹配;而非零值則青示可有多大的變異度。在后種條件下,若找不到完全符合要求的題目,就可以在模糊度許可范圍內(nèi)查找近似匹配的題目。
        §2.3本系統(tǒng)簡介:基于以上諸因素的考慮,設(shè)計(jì)了本系統(tǒng):本系統(tǒng)以高一的英語教育為背景進(jìn)行設(shè)計(jì),其意旨在于提供一個(gè)適合于形成性測試和階段性測試的自動組卷系統(tǒng)。本系統(tǒng)能快速方便地提供各種要求的試卷,幫助教師把握教學(xué)的進(jìn)度,及時(shí)地反饋教學(xué)中的問題,以改進(jìn)教學(xué)方法和調(diào)整教學(xué)重點(diǎn)。
功能:本系統(tǒng)主要有2大功能模塊組成:一,題庫管理;二,自動組卷。具體的功能及實(shí)現(xiàn)將在后面做詳細(xì)介紹。
特點(diǎn):1.易用性:人機(jī)交互界面友好,不要求使用者具有太多的計(jì)算機(jī)知識
      2.先進(jìn)性:前端自動組卷+后端題庫管理+優(yōu)選試題
3.合理性:結(jié)合國家教材,符合教學(xué)大綱。
4.實(shí)用性:教師減負(fù)第一步,幫助教師從煩瑣的出卷工作中解脫出來
實(shí)現(xiàn)工具:基于試題庫的自動組卷系統(tǒng)即以強(qiáng)大的試題數(shù)據(jù)庫作為后臺支持,由于Access是目前比較流行的一種數(shù)據(jù)庫軟件,它允許并很容易地用多種方式進(jìn)行篩選、分類和更新數(shù)據(jù),因此本系統(tǒng)中采用Access來構(gòu)建系統(tǒng)數(shù)據(jù)庫。作為與用戶做交互界面的前臺,本系統(tǒng)采用Visual Basic 6.0作為開發(fā)工具,它具有豐富的控件、先進(jìn)的ADO數(shù)據(jù)訪問技術(shù)、數(shù)據(jù)報(bào)表輸出技術(shù)等。

第三章  數(shù)據(jù)庫的設(shè)計(jì)
數(shù)據(jù)庫的庫結(jié)構(gòu)對于整個(gè)系統(tǒng)的性能起著重要作用。它是本系統(tǒng)的基礎(chǔ)。一個(gè)題庫將存放大量的題目,這些題目在計(jì)算機(jī)內(nèi)如何存儲將直接影響題庫系統(tǒng)的工作效率和效果,因此題庫結(jié)構(gòu)的設(shè)計(jì)是題庫系統(tǒng)設(shè)計(jì)開發(fā)的關(guān)鍵一環(huán)。題庫結(jié)構(gòu)設(shè)計(jì)時(shí)要考慮題庫的基本特征。題庫結(jié)構(gòu)設(shè)計(jì)最基礎(chǔ)的工作應(yīng)包括確定題目類型、規(guī)定試題屬性及題庫總體數(shù)據(jù)結(jié)構(gòu)的確立等幾方面。題庫是計(jì)算機(jī)輔助測驗(yàn)系統(tǒng)的基礎(chǔ)。一個(gè)大的測驗(yàn)系統(tǒng)的題庫應(yīng)能容納足夠數(shù)量的題目,這些題目在題庫中的組織、分類及其特征信息的確立與描述將直接影響系統(tǒng)的工作效率與效果。
本系統(tǒng)總共構(gòu)建了2個(gè)數(shù)據(jù)庫文件:系統(tǒng)數(shù)據(jù)庫datadb和臨時(shí)數(shù)據(jù)庫temp。
  §3.1 datadb 數(shù)據(jù)庫   因?yàn)楸鞠到y(tǒng)是以英語教學(xué)為例,因此構(gòu)建了一個(gè)用于存儲英語試題及相關(guān)屬性的試題數(shù)據(jù)庫。在程序中設(shè)置別名為datadb。在該庫中共建立了6張表,其表名分別為:
   a:選擇題
   b:完型填空
   c:閱讀理解
   d:短文改錯(cuò)
   e:書面表達(dá)
   f:登錄
◘3.1.1 試題文件
a~e是對應(yīng)于英語中常見的五種題型的試題文件表。為了通用起鑒,為每張表設(shè)置了相同的字段,依次為題號、分值、難度、章節(jié)分布、題目以及答案6個(gè)屬性。
· 題號---整型,設(shè)置為主鍵,即為試題庫中題目的編號;
· 分值----整型,是該題的分?jǐn)?shù);
· 難度----字符型,它的設(shè)置采用了3位編碼:用三個(gè)數(shù)字來表示該題的難度。對于不同的表,它的含義略微不同。在完型填空、短文改錯(cuò)中,左起第一位、第二、第三位依次表示在該題中較容易、中等難度、較難得分的題目總分值(比如在完型填空中,有25小題,若每題為1分,則難度系數(shù)為988表示的意思為有9題是容易的題目,有8題為中等的,另外的8題是較難的題目),對于書面表達(dá)這種大題,沒有小題的設(shè)置,則難度系數(shù)的含義稍有差異(若書面表達(dá)的總分為20分,則難度為875表示8分是比較容易得到的,7分是中等水平的學(xué)生才能獲得的,而最后的5分則是較少部分的學(xué)生才能的到。)對于選擇題而言,它每題的分值較少,因此不再對分值拆分,只在相對難度位置上出現(xiàn)該題分值,如100表示該題屬于容易題,總分為1分,010表示該題為中等題。雖然各表中的難度屬性的含義看似有上述的差異,但是對于表達(dá)難度這個(gè)概念而言,它們所能實(shí)現(xiàn)的功能是一樣的,因此在程序中對于每個(gè)表中的難度做同樣的處理。
· 章節(jié)分布----字符型。在該系統(tǒng)設(shè)計(jì)的過程中,通過對高一的英語教材的分析和研究,把整個(gè)年級階段的知識點(diǎn)按教學(xué)進(jìn)度劃分為十個(gè)章節(jié),用A~J表示,在A~J之后用數(shù)字表示的則是該章節(jié)中所涉及的細(xì)微的知識點(diǎn)。(001:虛詞;010實(shí)詞;011: 時(shí)態(tài);100:語法;101:結(jié)構(gòu);110:語態(tài);111:情景意境),比如某選擇題的的章節(jié)分布為C110表示的是它所要考查的知識點(diǎn)是屬于第三章中的語態(tài)。定義了總體上的A~J個(gè)章節(jié),則可以在不同的教學(xué)時(shí)期,選擇不同章節(jié)屬性的試題來測試,以避免試題不適合教學(xué)進(jìn)度的情況。之所以要對每個(gè)章節(jié)分開定義001~111等知識點(diǎn),是因?yàn)橛捎诮虒W(xué)進(jìn)度不同,雖然是相同的知識點(diǎn),但是在不同階段對學(xué)生的要求是不一樣的。
· 題目---備注型。這是在最終生成的試卷中真正要出現(xiàn)的部分。
· 答案---備注型。同題目的性質(zhì)一樣,但它們是分別輸出到不同的文檔中相互獨(dú)立保存和打印的。
以上描述了存儲五種題型的5張數(shù)據(jù)表中各個(gè)字段含義。接下來來介紹一下最后一張數(shù)據(jù)表---登錄表中的屬性設(shè)置。
◘3.1.2 登錄文件
該表中總共設(shè)置了三個(gè)字段屬性---用戶名,密碼,訪問次數(shù)。
· 用戶名--字符型,是每條記錄中的主鍵,值唯一,不能重復(fù)。數(shù)字、字母都可以。在系統(tǒng)的使用過程中,具有一定權(quán)限的管理員可以對其進(jìn)行刪除和增加。
· 密碼--用于核準(zhǔn)用戶的權(quán)限,避免一些不合法的人進(jìn)入系統(tǒng)進(jìn)行破壞活動。
· 訪問次數(shù)--整型  用來顯示該用戶已經(jīng)使用過本系統(tǒng)的次數(shù)。
§3.2 tempdb數(shù)據(jù)庫
其中只有一張數(shù)據(jù)表—temp。它用來存儲在抽取試題過程中產(chǎn)生的一些中間數(shù)據(jù)。有2個(gè)字段:題目和答案,均為備注型。在系統(tǒng)運(yùn)行過程中,該表中的數(shù)據(jù)會被不斷的更新。
  •            系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)
根據(jù)系統(tǒng)各模塊的實(shí)現(xiàn),系統(tǒng)主要結(jié)構(gòu)即流程圖如下所示:
瀏覽試題
刪除試題
修改試題
更新試題
添加試題
退出
數(shù)
據(jù)庫
添加用戶
修改密碼
隨機(jī)抽題
編輯試卷
              
圖4-1總體結(jié)構(gòu)圖
  •                  功能模塊的設(shè)計(jì)及其實(shí)現(xiàn)
§5.1   用戶登錄模塊
● 功能:該模塊是檢驗(yàn)用戶的合法性

● 窗口設(shè)計(jì)如下:
               圖5-1 登錄界面
● 設(shè)計(jì)思路:當(dāng)該模塊被加載時(shí),從數(shù)據(jù)庫中的登錄表中讀取已經(jīng)存在的用戶名。將用戶名逐一添加到組合列表框的選項(xiàng)中,以供用戶選擇,(可以避免用戶手動輸入之繁),在用戶選擇了某個(gè)用戶以及在密碼框中輸入了密碼之后(以*顯示),在按下“登錄”鍵的時(shí)候,系統(tǒng)從數(shù)據(jù)表中找到對應(yīng)該用戶名的記錄,然后檢查所輸入的密碼是否與數(shù)據(jù)庫中的密碼一致,若不一致,則提示密碼錯(cuò)誤,拒絕登錄;若一致,則顯示該用戶以往登錄的次數(shù),允許進(jìn)行后面的操作。
● 代碼實(shí)現(xiàn) (以下代碼中‘后為注釋)
    Private Sub Form_Load()   
login.Picture = LoadPicture(App.Path & "\login2.jpg")
Adodc1.ConnectionString= “provider=Microsoft.Jet.OLEDB.4.0;DataSource="+App.Path+\datadb.mdb"         
Adodc1.RecordSource = "登錄"              ‘ 數(shù)據(jù)庫連接
Adodc1.Refresh
Adodc1.Recordset.MoveFirst
Do While Not Adodc1.Recordset.EOF
   Combo1.AddItem Adodc1.Recordset("用戶名")
   Adodc1.Recordset.MoveNext
Loop
End Sub
     Private Sub denglu_Click()
Adodc1.Recordset.MoveFirst
For p = 1 To userid
   Adodc1.Recordset.MoveNext  
Next
  If Text1.Text <> Adodc1.Recordset("密碼")  Then
    MsgBox "您輸入的密碼不正確,請重新登錄", vbCritical, "錯(cuò)誤提示"
Else
cnt = Adodc1.Recordset("訪問次數(shù)") + 1
k = MsgBox("祝賀你成功登錄 " + Chr(13) + "這是您第" & cnt & "次訪問該系統(tǒng)", vbOKOnly, "Congratulations")
     Adodc1.Recordset("訪問次數(shù)") = cnt
     Adodc1.Recordset.update
  End If
If  k = 1  Then
enter.Visible = True
Unload Me
Load enter
End If
End Sub
§5.2  系統(tǒng)維護(hù)模塊
功能:對系統(tǒng)的安全等做一些基本的維護(hù),如添加數(shù)據(jù)庫,修改密碼,增加用戶等。由于該模塊功能只有具有一定權(quán)限的管理員才能使用,因此在激活該菜單之前要求輸入管理員密碼。各具體功能設(shè)計(jì)如下:
◘5.2.1  新建數(shù)據(jù)庫:用戶通過文件對話框選擇保存數(shù)據(jù)庫的路徑,鍵入數(shù)據(jù)庫名,完成以后就會在選定的路徑下新建一個(gè)access數(shù)據(jù)庫。
其實(shí)現(xiàn)代碼如下:
  Private Sub newdb_Click( )
CommonDialog1.Flags = 0
CommonDialog1.ShowSave
newd = CommonDialog1.FileName
Set MSAccess = New Access.Application
  MSAccess.Visible = True
MSAccess.NewCurrentDatabase (newd)
   End Sub

◘5.2.2 修改密碼:窗口啟動時(shí),從數(shù)據(jù)庫中讀取所有用戶名,添加于列表中,要求用戶輸入原始密碼和新密碼,若原始密碼與數(shù)據(jù)庫中的密碼數(shù)據(jù)一致,則把新密碼中值替換數(shù)據(jù)庫中的原始密碼字段,保存,若輸入的原始密碼不正確,則給出出錯(cuò)信息。窗口如圖5-2所示:
圖5-2 修改密碼界面
     代碼實(shí)現(xiàn)同登錄類似,在此略。
◘5.2.3添加用戶:通過向文本框中輸入用戶名和密碼向“登錄”表中追加一條新的記錄,同時(shí)設(shè)置該字段的“訪問次數(shù)”值為0。
§5.3 題庫管理模塊
        ● 功能 包括對庫中試題的瀏覽、刪除、修改、更新、添加等。
        ● 特點(diǎn)
1.難度、題型、分值、章節(jié)均可根據(jù)學(xué)校實(shí)際教學(xué)使用需要任意設(shè)置。
2.提供開放式試題數(shù)據(jù)庫功能,用戶可方便的錄入、編輯、修改和保存自己的試題和試卷,并且能直接加入本系統(tǒng)的數(shù)據(jù)庫,利用本系統(tǒng)進(jìn)行統(tǒng)一管理。
        窗口設(shè)計(jì)如下:

                           圖5-3  題庫管理窗口
◘5.3.1 瀏覽 當(dāng)單擊“題庫管理”下的“瀏覽”子菜單時(shí),出現(xiàn)類似如上窗口的界面,從左邊的組合框中選擇科目“英語”及題型,就可以在主窗體中顯示相對應(yīng)的數(shù)據(jù)庫中的內(nèi)容,它是由adodc1(0..4)5個(gè)控件對各題型的數(shù)據(jù)表進(jìn)行綁定,然后利用datagrid1(0..4)控件顯示出來。由于題目這個(gè)備注型字段中的字符較多,不能全部在字段欄里顯示,加之題目的內(nèi)容是用戶最為關(guān)注的,因此單獨(dú)設(shè)立了對應(yīng)的題目區(qū),它也由5個(gè)文本框text1(0 ..4)實(shí)現(xiàn),當(dāng)用戶選擇了題型后,在程序中,通過設(shè)置各個(gè)datagrid控件及文本控件的Zorder值以達(dá)到只向用戶展示所選擇題型的內(nèi)容的出現(xiàn)效果。
Private Sub Combo2_Click()
   i = Combo2.ListIndex
     Text1(i).ZOrder
     DataGrid1(i).ZOrder
     Adodc1(i).ZOrder
     Adodc1(i).Visible = True
End Sub
      ◘5.3.2刪除:單擊該子菜單以后,會彈出確認(rèn)窗口,以免誤操作。它將刪除當(dāng)前指向的記錄。
    Private Sub delete_Click()
Dim r As Integer
r = MsgBox("確定刪除當(dāng)前記錄?", vbExclamation + vbYesNo)
If r = vbYes Then
i = Combo2.ListIndex
Adodc1(i).Recordset.delete
Adodc1(i).Recordset.MoveNext
If Adodc1(i).Recordset.EOF Then
Adodc1(i).Recordset.MoveLast
End If
End If
End Sub
◘5.3.3添加:單擊該項(xiàng)后,主窗體中會顯示一個(gè)新的界面,有5個(gè)文本框,用于用戶輸入題目的屬性.
◘5.3.4 更新:在對所要添加的記錄數(shù)據(jù)輸入完以后,再單擊“更新”,一條新的記錄就才添加到數(shù)據(jù)庫中,可以使用“瀏覽”查看新的數(shù)據(jù)庫結(jié)構(gòu)。
Private Sub update_Click()
i = Combo2.ListIndex
Adodc1(i).Recordset.AddNew
Adodc1(i).Recordset("題號") = CInt(Text2(0).Text)
If i = 0 Or i = 4 Then
Adodc1(i).Recordset("知識點(diǎn)") = (Text2(3).Text)
End If
Adodc1(i).Recordset("分值") = CInt(Text2(1).Text)
Adodc1(i).Recordset("難度") = Text2(2).Text
Adodc1(i).Recordset("題目") = Text2(4).Text
Label1.Visible = True
Label2.Visible = True
Label3.Visible = True
Label4.Visible = False
Label5Visible = False
Label6Visible = False
Label7.Visible = False
For i = 0 To 4
DataGrid1(i).Visible = True
Text1(i).Visible = True
Combo1.Visible = True
Combo2.Visible = True
Text2(i).Visible = False
Next i
Label3.Visible = True
End Sub
◘5.3.5 修改:由于已經(jīng)把datagrid控件的屬性設(shè)置為可以修改的,因此可以直接在控件中修改數(shù)據(jù),但是要注意的一點(diǎn)是,僅僅在datagrid中修改過的數(shù)據(jù)并不能保存到數(shù)據(jù)庫中,因此修改完以后需要按“修改”菜單,這樣修改過的記錄在數(shù)據(jù)庫中才會被更新。
Private Sub modify_Click()
i = Combo2.ListIndex
Adodc1(i).Recordset.update
End Sub
§5. 4 自動組卷模塊
              ◘5.4.1功能: 根據(jù)用戶輸入的題型分布、章節(jié)分布以及難度分布等要求,根據(jù)一定的組卷策略從試題庫中隨機(jī)抽取出滿足條件的試題組成一份使用戶滿意的試卷。
            ◘5.4.2設(shè)計(jì)思路:
    首先由用戶選擇試卷中知識點(diǎn)的范圍,即所屬涉及的章節(jié),給出需要的各章節(jié)分布、題型分布(各種題型中分值的百分比)和難度分布。章節(jié)的選擇由具有10個(gè)項(xiàng)的組合框給出,用戶選定了某個(gè)章節(jié)以后,該章節(jié)就會被添加到一個(gè)新的列表中,通過在文本框中輸入數(shù)值來確定章節(jié)分布。題型分布只需在對應(yīng)文本框中輸入值即可。難度有三種級別:容易,中等,難。對應(yīng)的數(shù)值表示所要求的試卷生成后整份試卷中容易、中等和難題的分值,它們對應(yīng)于試題庫中“難度”屬性的值。輸入要求得到確認(rèn)后,開始組卷工作,即從試題庫中抽取滿足條件的試題。根據(jù)一定的組卷策略,組卷過程中產(chǎn)生的一些臨時(shí)數(shù)據(jù)放在一個(gè)臨時(shí)庫文件temp中,同時(shí)temp中的數(shù)據(jù)也要不斷的更新,使得最后留在temp庫中的數(shù)據(jù)是滿足條件的試題。當(dāng)完成抽題以后,調(diào)用word應(yīng)用程序,將temp中的記錄逐一的寫入到word文檔中,這樣用戶就可以利用word提供的一些編輯功能對試題做一些編輯調(diào)整和打印存檔。
◘5.4.3組卷策略分析:
組卷策略是指系統(tǒng)進(jìn)行組卷的方式方法。它是題庫系統(tǒng)自動生成有效(對測驗(yàn)?zāi)繕?biāo)來說)試卷的關(guān)鍵。組卷策略設(shè)計(jì)主要涉及成卷要求的數(shù)量化、卷面分?jǐn)?shù)分配、庫中選題等問題的處理。
  本系統(tǒng)主要是依托于隨機(jī)函數(shù)實(shí)現(xiàn),在考慮滿足各約束條件間的相互制約的過程中又利用動態(tài)優(yōu)先權(quán)和誤差平均分配等策略。
隨機(jī)函數(shù)指的是系統(tǒng)vb提供的隨機(jī)函數(shù),從滿足某些檢索條件的試題庫中隨機(jī)的抽取一題,之后來判斷它的各個(gè)屬性。若最終隨機(jī)產(chǎn)生的n個(gè)試題中,他們之間的約束條件滿足要求,則可以被做為一份試卷的試題。
動態(tài)優(yōu)先指的在組卷過程中先進(jìn)行大題的選擇,如書面表達(dá),短文改錯(cuò)等。在組卷過程中局部的約束條件多達(dá)好幾種,在本系統(tǒng)中涉及到的有題型的比例,章節(jié)的比例以及難度的比例。選中一道題,對應(yīng)著這些指標(biāo)中的值就會增加,使它們更接近預(yù)定的分值。在選題的開始階段,不存在約束條件間的牽制問題,因?yàn)楦黜?xiàng)屬性都有很大的取值范圍。但隨著被選題數(shù)的增加,取值范圍的縮小,矛盾便隨之產(chǎn)生,出現(xiàn)了一道待選試題的某項(xiàng)指標(biāo)中達(dá)到了預(yù)定值,而其它項(xiàng)指標(biāo)卻超出了范圍的現(xiàn)象,尤其是分值較高的大題,到后期很難滿足要求,往往會導(dǎo)致選題進(jìn)行到一定程度的時(shí)候,徘徊在某一個(gè)狀態(tài)下,無法繼續(xù)進(jìn)行下去的局面,為了避免這中情況的發(fā)生,可考慮利用優(yōu)先權(quán)的方法把越不容易選擇的試題放在
前面優(yōu)先選擇,而把選擇題放在最后選擇,主要依靠選擇題的選擇來平衡各約束屬性間的制約。
誤差平均分配:理想的組卷結(jié)果是各項(xiàng)約束值之間百分之百的滿足約束條件,但是事實(shí)上,由于隨機(jī)技術(shù)的采用,約束間的互相牽制,以及試題庫中題量的限制和屬性設(shè)置間的重疊等,在組題過程中很難達(dá)到理想的狀態(tài)。如果把條件限制的過于絕對,則有時(shí)候往往會因?yàn)閿?shù)分之差,就需要計(jì)算機(jī)重新不斷的篩選,甚至進(jìn)入無休止的循環(huán)狀態(tài),永遠(yuǎn)無法完成抽題,這種代價(jià)是不必要的,為了解決上述情況,我們在系統(tǒng)設(shè)計(jì)的過程中允許約束條件間可以有一定的誤差,在總分值滿足滿分的條件下,它們之間可以在一定的范圍內(nèi)調(diào)節(jié)。

◘5.4.4 具體實(shí)現(xiàn)過程及相應(yīng)代碼:

        窗口界面如下:
        組卷過程:在這里先給出窗體加載時(shí)的代碼,主要是完成一些數(shù)據(jù)庫的綁定:
        Private Sub Form_Load()
Image1.Picture = LoadPicture(App.Path & "\zj.gif")
          For i = 0 To 4
            Adodc1(i).ConnectionString= "Provider=Microsoft.Jet.OLEDB.4.0;Data
1



基于試題庫的自動組卷系統(tǒng)
Source=" + App.Path + "\datadb.mdb;"
Next
Adodc1(0).RecordSource = "選擇題"
Adodc1(1).RecordSource = "書面表達(dá)"
Adodc1(2).RecordSource = "短文改錯(cuò)"
Adodc1(3).RecordSource = "閱讀理解"
Adodc1(4).RecordSource = "完型填空"
For i = 0 To 4
Adodc1(i).Refresh
Adodc1(i).Recordset.Filter = adFilterNone
Next
Data1.DatabaseName = App.Path & "\tempdb.mdb"
Data1.RecordSource = "temp"
Adodc2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path + "\tempdb.mdb"
Adodc2.RecordSource = "temp"
Adodc2.Refresh
Data1.DatabaseName = App.Path & "\tempdb.mdb"
Data1.RecordSource = "temp"
End Sub
1. 首先用戶在界面上輸入各種約束條件:章節(jié)分布、題型分布、難度分布。檢查深入無誤以后,單擊確定按扭(否則可以按“重置”按扭進(jìn)行重新設(shè)置)進(jìn)行組卷。
2. 組卷!按_定”按扭的代碼如下:(之后將給出具體的介紹和解釋)
       Private Sub zujuan_Click()
Dim zj As Integer
aval(0) = 1  ,aval(1) = 20                 
aval(2) = 15,aval(3) = 8
aval(4) = 25
fstr = ""
         For j = 1 To z - 1
           szhj(j) = Chr(zhj(j) + 64)
           fstr = fstr & "章節(jié)分布  like '" & szhj(j) & "*'" & "or "
Next
fstr = fstr & "章節(jié)分布  like '" & Chr(zhj(j) + 64) & "*'"
L:
Data1.DatabaseName = App.Path & "\tempdb.mdb"
Data1.RecordSource = "temp"
1



基于試題庫的自動組卷系統(tǒng)
Data1.Refresh
Data1.Database.Execute ("DELETE * FROM temp")  ‘ 清空臨時(shí)庫
Data1.Database.Close                       Adodc2.Recordset.MoveFirst
While Adodc2.Recordset.EOF <> True
Adodc2.Recordset.delete
Adodc2.Recordset.MoveNext
Wend
lc = lc + 1                         ‘lc 用來記錄重復(fù)抽取的次數(shù)
If  lc > 5000 Then
msg = MsgBox("抽題失敗,請重試", vbOKCancel)
If msg = 1 Then
lc = 0
GoTo L
Else
End                           ‘用戶沒有選擇重試,則終止程序
End If
End If
etotalf = 0                            ‘etotalf 、mtotal、htotal分別表示
mtotalf = 0                             所有已抽取的題目中的容易、中
htotalf = 0                               等、較難的總分值
For s = 1 To z                                
zhjf(zhj(s)) = 0                      ‘zhjf() 數(shù)組表示所選擇的章節(jié)
Next
For i = 1 To 4
Adodc1(i).Recordset.Filter = fstr      ‘只打開所選擇章節(jié)內(nèi)的試題記錄
cnt(i) = Adodc1(i).Recordset.RecordCount
tl(i) = CInt(Text3(i).Text) \ aval(i)          ‘tl( )表示在最終的試卷中某
yushu = CInt(Text3(i).Text) Mod aval(i)                 題型的題量  
If yushu > aval(i) \ 2 Then
tl(i) = tl(i) + 1
End If
For t = 1 To tl(i)
Randomize
        vth(i, t) = Int(Rnd * cnt(i)) + 1 Adodc1(i).Recordset.MoveFirst
For n = 1 To vth(i, t) – 1             ‘將記錄移到隨機(jī)數(shù)所對應(yīng)的
              Adodc1(i).Recordset.MoveNext                       記錄上
           Next
timu = Adodc1(i).Recordset("題目")
Adodc2.Recordset.AddNew
Adodc2.Recordset("題目") = timu        ‘將找到的記錄里的題目和答
  daan = Adodc1(i).Recordset("答案")  案字段寫進(jìn)臨時(shí)庫文件中的題目
Adodc2.Recordset("答案") = daan            和答案字段中
Adodc2.Recordset.update
nandustr = Adodc1(i).Recordset("難度")
        echar = Mid(nandustr, 1, 1)                     ‘取得難度字段各位上的字符
        mchar = Mid(nandustr, 2, 1)
hchar = Mid(nandustr, 3, 1)
e(i, t) = CInt(echar)                            ‘類型轉(zhuǎn)換
m(i, t) = CInt(mchar)
h(i, t) = CInt(hchar)
zj = Asc(Adodc1(i).Recordset("章節(jié)分布")) – 64     ‘ 將章節(jié)中的A~J答應(yīng)
zhjf(zj)=zhjf(zj)+Adodc1(i).Recordset(’’分值’’)      為1~10
Next
Next
                                                    ‘大題抽取完畢
For i = 1 To 4                                    
For t = 1 To tl(i)
etotalf = e(i, t) + etotalf
mtotalf = m(i, t) + mtotalf
htotalf = h(i, t) + htotalf
Next
Next
xetotalf = CInt(Text2(0).Text) – etotalf                   ‘ xetotal表示還需要
   xmtotalf = CInt(Text2(1).Text) – mtotalf              選擇的容易的題目的分值
xhtotalf = CInt(Text2(2).Text) – htotalf
For j = 1 To z
  zhjxtotalf(zhj(j)) = zhjtotalf(zhj(j)) - zhjf(zhj(j))         ‘判斷是否有章節(jié)
  If zhjxtotalf(zhj(j)) < 0 Then                  中的分值已經(jīng)超過了要求的值
    GoTo L
End If
Next
xtotalf = xetotalf + xmtotalf + xhtotalf
  If xtotalf < 0 Then
GoTo L
End If
Adodc1(0).Recordset.Filter = fstr                ‘開始選擇題的抽取
For j = 1 To z
  zhjfx(j) = 0
Next
cnt(0) = Adodc1(0).Recordset.RecordCount
tl(0) = xtotalf \ aval(0)
For t = 1 To tl(0)
Randomize
  vth(0, t) = Int(Rnd * cnt(0)) + 1
Adodc1(0).Recordset.MoveFirst
For n = 1 To vth(0, t) - 1
   Adodc1(0).Recordset.MoveNext
Next
timu = Adodc1(0).Recordset("題目")
Adodc2.Recordset.AddNew
Adodc2.Recordset("題目") = timu
nandustr = Adodc1(0).Recordset("難度")
echar = Mid(nandustr, 1, 1)
mchar = Mid(nandustr, 2, 1)
hchar = Mid(nandustr, 3, 1)
e(0, t) = CInt(echar)                                 
m(0, t) = CInt(mchar)
h(0, t) = CInt(hchar)
p = Asc(Adodc1(0).Recordset("章節(jié)分布")) - 64
zhjfx(p) = zhjfx(p) + Adodc1(0).Recordset("分值")
Next
xe = 0
xm = 0
xh = 0
For t = 1 To tl(0)
xe = e(0, t) + xe
xm = m(0, t) + xm
xh = h(0, t) + xh
Next
For q = 1 To z
If Abs(zhjxtotalf(zhj(q)) - zhjfx(zhj(q))) > 5 Then
b = True
Exit For
End If
Next
If Abs(xe - xetotalf) > 10 Or Abs(xm - xmtotalf) > 10 Or Abs(xhtotalf - xh) > 10
GoTo L
'Else
msgc = MsgBox("已經(jīng)成功完成抽題")
If msgc = 1 Then
editcmd.Enabled = True
End If
End If
End Sub
1



基于試題庫的自動組卷系統(tǒng)
部分解釋如下:其中的aval0~aval4 表示對應(yīng)的選擇題、書面表達(dá)、短文改錯(cuò)、閱讀理解、完型填空中每題的平均分?jǐn)?shù)。數(shù)組zhj(1 to 10)由combo1(即章節(jié)選擇列表框)的代碼中定義zhj(z + 1) = Combo1.ListIndex + 1,z =z+1;用來表示所選中的章節(jié),取值范圍是1~10 例如zhj(2)=4 表示選擇的第2種章節(jié)類型是第4章。fstr 用來做過濾變量,即若用戶選擇了第一、三、八章3個(gè)章節(jié)的時(shí)候,在后面的組卷過程中,只是從這三章的試題中抽取試題,而不是從整個(gè)數(shù)據(jù)表中搜索,大題即完型填空、書面表達(dá)、短文改錯(cuò)、閱讀理解的抽取試題方法相同:text3(i)中得到的數(shù)值為對應(yīng)的題型I的試題總分值。tl(i)表示為了滿足text3(i)的條件需要抽取的題量。利用隨機(jī)函數(shù)vth(i, t) = Int(Rnd * cnt(i)) + 1 依次從試題庫中抽取試題,cnt(i)是所選中章節(jié)中的題型I的總題量,vth(I,t)表示題型I中 第t題在數(shù)據(jù)表(經(jīng)過filter以后的表)中的位置,然后數(shù)據(jù)表中的記錄從第一條到最后一條之間掃描,找到對應(yīng)的記錄vth(I,t)的位置,利用recordset(“題目”)和recordset(“答案”)的方法把所找到的記錄中的題目和答案字段復(fù)制到臨時(shí)庫文件temp中(它由程序中的adodc2控件綁定)。然后把記錄的其他一些屬性保存起來,后面將用它們來判斷約束條件的成立與否。具體提取的屬性值如下:難度----在數(shù)據(jù)庫中我們已經(jīng)解釋過“難度”字段的含義,現(xiàn)在就用三個(gè)變量來分別提取該字段中的三個(gè)位的值,e(i, t) = CInt(echar)表示所選取的題型I的第t題的難度屬性中對應(yīng)的容易的分值,m(i, t) 、h(i, t)則依次答應(yīng)中等和較難的分值;章節(jié)----因?yàn)樵跀?shù)據(jù)庫中利用A~J表示章節(jié),所以在程序中需要利用Asc(Adodc1(i).Recordset("章節(jié)分布")) – 64 把屬性中的A~J轉(zhuǎn)化成相對應(yīng)的1~10, 使之與zhjf(1 to10)中下標(biāo)匹配,zhjf()表示已抽取的題目中某章節(jié)占的總分?jǐn)?shù),例如zhjf(2)=30,表示第2章已抽取的總分?jǐn)?shù)為30分。當(dāng)大題一次遍歷抽取之后,把所有已抽取的題目中的容易、中等、較難的分值做累加,用xetotlaf、metotalf、htotalf表示。xetotalf=text2(0)-etotalf 、xmtotalf=text2(1)-mtotalf、xhtotalf=text2(2)-htotalf得出需要從選擇題題抽取的題目難度分布。zhjtotalf(1to10 )表示的是在界面中輸入的對各章節(jié)分布的要求,用代碼中的zhjtotalf(zhj(j)) - zhjf(zhj(j)) 就可以求得在選擇題中可以在各章節(jié)中抽取的分?jǐn)?shù),用zhjxtotalf()表示,若數(shù)組zhjxtotalf()中的某一個(gè)值小于零,則重新開始大題的抽題。因?yàn)檫@意味著在抽取大題的過程中,某個(gè)章節(jié)的比重已經(jīng)超出了預(yù)定的值。最后開始選擇題的抽取。選擇題的隨機(jī)抽取過程與大題一致,在此不再解釋,主要介紹一下涉及最后一些約束條件判斷的變量。zhjfx() 表示實(shí)際抽取出來的選擇題中各章節(jié)的分?jǐn)?shù),Abs(zhjxtotalf(zhj(q)) - zhjfx(zhj(q)))是否大于5作為判斷本次隨機(jī)抽取過程有效性的標(biāo)準(zhǔn)之一,若大于5,則視抽題失敗,重新開始新一輪的選擇;若小于則再判斷其他條件是否滿足。用xe、xm、xh表示實(shí)際抽取出來的選擇題中各難度的值的分布。用Abs(xe - xetotalf) > 5來判斷實(shí)際抽取的選擇題與要求的在容易題上的誤差,類似有Abs(xm - xmtotalf) > 5 、Abs(xhtotalf –xhtotalf)的定義。如果以上三個(gè)限制條件中有一個(gè)不滿足,則視為抽題失敗,重新開始隨機(jī)抽題過程,若總的循環(huán)次數(shù)超過了某個(gè)值,如5000,則視無法按預(yù)定義要求組卷,要求退出系統(tǒng)重新設(shè)置參數(shù)。在又一輪的循環(huán)之前,有一項(xiàng)需要做的工作是把temp數(shù)據(jù)表中的數(shù)據(jù)清空,因?yàn)檫@都是些中間數(shù)據(jù),它們已經(jīng)被判定為不滿足條件的,繼續(xù)存儲在表中,會給后面的組卷工作帶來錯(cuò)誤,因此要刪除。當(dāng)出現(xiàn)提示“完成抽題”的提示后,單擊確定,界面上的“編輯試卷”按扭置為可編輯,進(jìn)入組卷的最后一個(gè)環(huán)節(jié)。
◘5.4.5 試卷編輯。 將臨時(shí)庫文件中的試題記錄逐條的讀入word文檔中。具體操作是:先建立一個(gè)word OLE自動化對象 ,利用其的insert方法將記錄從數(shù)據(jù)表中讀取出來插入到文檔中。在此過程中,通過判斷tl()的值在適當(dāng)?shù)臅r(shí)候插入題型的標(biāo)題和題號,如在選擇題試題插入完之后應(yīng)該插入一行文本“完型填空”。用戶可以對其進(jìn)行試題做一些調(diào)整以及打印、存檔。實(shí)現(xiàn)代碼如下:
  Private Sub editcmd_Click()
For c = 0 To 4
ttl = ttl + tl(c)
Next
bh = 1
Dim objWord As Object
Set objWord = CreateObject("word.basic")
objWord.appshow
objWord.filenew
Adodc2.Recordset.MoveLast
objWord.Insert "第一大題 選擇題" & Chr(13)
For j = 1 To ttl
If  j <= tl(0) Then
objWord.Insert "(" & bh & ")" & " " & Adodc2.Recordset("題目") & Chr(13)
Else
          objWord.Insert Adodc2.Recordset("題目") & Chr(13)
    End If
If  j = tl(0) + tl(4) Then objWord.Insert "第三大題 閱讀理解" & Chr(13)
If  j = tl(0) + tl(4) + tl(3) Then objWord.Insert "第四大題 短文改錯(cuò)" & Chr(13)
If  j = tl(0) + tl(1) + tl(3) + tl(2) Then objWord.Insert "第五大題 書面表達(dá)" & Chr(13)
Adodc2.Recordset.MovePrevious
bh = bh + 1
Next
End Sub

結(jié)束語:  自動組卷并不是一個(gè)新的領(lǐng)域,但它仍處在需要不斷的完善的階段之中。由于各個(gè)學(xué)科的不同,基于試題庫的自動組卷系統(tǒng)在數(shù)據(jù)庫設(shè)計(jì)等方面會有些許的差異,本系統(tǒng)的實(shí)現(xiàn)實(shí)質(zhì)上是拋張引玉。本文介紹和完成了一個(gè)具體的組卷系統(tǒng)的開發(fā),它具有一定的實(shí)際應(yīng)用價(jià)值,然而由于在時(shí)間、能力、技術(shù)等諸方面的不足,在算法優(yōu)化和庫結(jié)構(gòu)的設(shè)計(jì)上還有一些有待于改進(jìn)的地方,還有許多功能有待于日后來增強(qiáng)。這是本人第一次真正的做軟件開發(fā),在一次次的發(fā)現(xiàn)問題、解決問題的過程中,學(xué)到了許多專業(yè)知識以及處理事務(wù)的方法,為以后的學(xué)習(xí)和工作積累了豐富的經(jīng)驗(yàn),這是本人認(rèn)為比這個(gè)完成軟件更具有意義價(jià)值的。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:410407 發(fā)表于 2018-10-16 13:20 | 只看該作者
正好,學(xué)習(xí)學(xué)習(xí)!
回復(fù)

使用道具 舉報(bào)

板凳
ID:419274 發(fā)表于 2018-11-1 18:12 | 只看該作者
密碼多少
回復(fù)

使用道具 舉報(bào)

地板
ID:518311 發(fā)表于 2019-12-14 18:19 | 只看該作者
下載來學(xué)習(xí)學(xué)習(xí),謝謝
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表