梁祥慶
摘 要:一般情況教師想出一份試卷,要么到龐大的題庫(kù)里一道一道的把題找出來(lái),或是從幾本相關(guān)的書(shū)里把題一道一道挑出來(lái)。這樣即費(fèi)時(shí)又費(fèi)力,而且很難保證試題的覆蓋面和把握好試卷的難度。正是為了能夠幫助教師輕松的出一份高質(zhì)量的試卷而開(kāi)發(fā)了本軟件。在開(kāi)發(fā)本軟件之前,正是我努力提高自己的Delphi開(kāi)發(fā)水平的時(shí)期。因此我選擇了Delphi做為我的開(kāi)發(fā)工具,然而這次開(kāi)發(fā)的軟件和以前不一樣。最主要的區(qū)別在于這個(gè)軟件要以Microsoft Office Word做為試卷的終端輸出。而它們又是兩個(gè)不同公司的產(chǎn)品。因而,剛一開(kāi)始我特別擔(dān)心這個(gè)技術(shù)能否得到比較圓滿的解決。在開(kāi)發(fā)的過(guò)程中我不斷的對(duì)VBA技術(shù)進(jìn)行研究,并且將它應(yīng)用于這次的軟件開(kāi)發(fā)中。因而比較好的解決了Microsoft Office Word的接口編程問(wèn)題。還有一個(gè)比較棘手的問(wèn)題就是Delphi提供的控件都是很基本的,而這次開(kāi)發(fā)中要用到一個(gè)可以標(biāo)記選中狀態(tài)的樹(shù)型控件,在對(duì)Delphi的TtreeView的深入研究后確認(rèn)它不能勝任這個(gè)任務(wù)。在深入研究Windows的消息機(jī)制和VCL框架對(duì)Windows消息機(jī)制的封裝技術(shù)后我成功的修改了那個(gè)TCheckTree控件。在程序開(kāi)發(fā)的后期測(cè)試中,我充分利用各個(gè)同學(xué)電腦平臺(tái)的多樣性。
關(guān)鍵詞:Delphi;VBA;題庫(kù)
1 開(kāi)發(fā)工具簡(jiǎn)介Delphi 7.0的特點(diǎn)
Delphi是Borland公司出品的開(kāi)發(fā)工具,在眾多的開(kāi)發(fā)工具中,我們?yōu)槭裁匆x擇Delphi呢?因?yàn)镈elphi具有眾多其它開(kāi)發(fā)工具所沒(méi)有的優(yōu)點(diǎn):語(yǔ)言的高效、編譯的高效、執(zhí)行的高效、維護(hù)的高效。基于以上理由,我們毫不憂郁的選擇了Delphi做為我們的開(kāi)發(fā)工具??!
1.1 數(shù)據(jù)庫(kù)連接方式選擇
Delphi連接數(shù)據(jù)庫(kù)的主要方式有兩種:一是:BDE,二是ADO?,F(xiàn)在我們來(lái)大致比較一下這兩種技術(shù)的優(yōu)缺點(diǎn):
BDE(Borland Database Engine)是Delphi頗具特色的數(shù)據(jù)庫(kù)連接管理技術(shù)。憑借窗體和報(bào)表,BDE可以訪問(wèn)諸如Paradox,dBASE,本地InterBase服務(wù)器的數(shù)據(jù)庫(kù),也可訪問(wèn)遠(yuǎn)程數(shù)據(jù)庫(kù)服務(wù)器上的數(shù)據(jù)庫(kù),如Oracle,SyBase,Informix等C/S數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù),也可訪問(wèn)經(jīng)ODBC可訪問(wèn)的數(shù)據(jù)庫(kù)管理系統(tǒng)中的數(shù)據(jù)庫(kù)。
ADO(ActiveX Data Objects)是微軟提供的一項(xiàng)技術(shù)。通過(guò)ADO,可以方便的訪問(wèn)各種類型的數(shù)據(jù)庫(kù),特別是OLEDB數(shù)據(jù)庫(kù)。ADO已成為訪問(wèn)數(shù)據(jù)庫(kù)的新的標(biāo)準(zhǔn)接口。從Delphi 6.0開(kāi)始Delphi添加了對(duì)ADO的支持,以便讓用戶能迅速實(shí)現(xiàn)對(duì)終端用戶用來(lái)做商業(yè)決策的數(shù)據(jù)庫(kù)的一致性訪問(wèn),結(jié)合Delphi本身的開(kāi)發(fā)式數(shù)據(jù)組件結(jié)構(gòu),程序員可以很快地建立應(yīng)用程序,用來(lái)把自己的商業(yè)數(shù)據(jù)庫(kù)通過(guò)Internet發(fā)送給客戶,最終用戶以及整個(gè)銷售環(huán)節(jié)。通過(guò)ADO,Delphi 7.0也能讓用戶快速訪問(wèn)關(guān)系或非關(guān)系數(shù)據(jù)庫(kù)以及E-Mail和商務(wù)文件系統(tǒng)。
這兩者提供了幾乎相同的功能,在進(jìn)行產(chǎn)品開(kāi)發(fā)時(shí),勢(shì)必要做一個(gè)精心的比較。雖然ADO技術(shù)提出的時(shí)間不長(zhǎng),并被定位為工業(yè)標(biāo)準(zhǔn)的,而且其在性能上由于當(dāng)前沒(méi)有良好的數(shù)據(jù)庫(kù)引擎支持,其性能還不夠完美,但是,我們應(yīng)該要注意到Borland公司已經(jīng)宣布停止發(fā)展BDE了,其性能被ADO超越也是遲早的事,因此,在開(kāi)發(fā)長(zhǎng)期應(yīng)用的產(chǎn)品時(shí),推薦采用ADO技術(shù)。這樣還有另一個(gè)好處是,在進(jìn)行產(chǎn)品分發(fā)時(shí),可以避開(kāi)大量BDE的鏈接庫(kù)DLL的分發(fā)。
基于以上原因我們選擇了ADO做為我們的數(shù)據(jù)庫(kù)訪問(wèn)組件。
2 軟件實(shí)現(xiàn)
2.1 OOP簡(jiǎn)介
每一個(gè)軟件開(kāi)發(fā)人員都會(huì)經(jīng)常聽(tīng)到,看到“面向?qū)ο蟆边@個(gè)詞,程序員也時(shí)常把它掛在嘴上。那么什么還是真正的“面向?qū)ο蟆??什么是面向?qū)ο蟮木幊蹋渴遣皇菍?xiě)幾個(gè)類就算面向?qū)ο罅??為什么要面向?qū)ο螅俊懊嫦驅(qū)ο笫且环N思維方式,一種方法論”,“結(jié)構(gòu)化編程”(SP)是一種編程方法,是從計(jì)算機(jī)的視角來(lái)抽象問(wèn)題的方法。而“面向?qū)ο缶幊獭保∣OP)也是一種編程方法,只不過(guò)它是從更接近真實(shí)世界的視角來(lái)分析問(wèn)題,使用更接近人們理解真實(shí)世界的方法來(lái)抽象問(wèn)題,這種方法稱為“面向?qū)ο蟆薄?/p>
“面向?qū)ο蟆边@個(gè)詞代表的是一種認(rèn)識(shí)世界,分析問(wèn)題,解決問(wèn)題的方法,因此它是一種方法論。而面向?qū)ο缶幊虅t是將這種方法應(yīng)用于程序設(shè)計(jì)的方法。當(dāng)你會(huì)使用面向?qū)ο蟮姆椒ㄈニ伎?,用面向?qū)ο蟮哪J街Х治龊徒鉀Q問(wèn)題的時(shí)候,才是真正的“面向?qū)ο蟆绷耍。?/p>
“面向?qū)ο蟆弊钪饕奶匦杂腥齻€(gè):
⑴繼承性。Delphi提供大量的可被二次開(kāi)發(fā)的類。每個(gè)類都可被繼承。
⑵封裝性。Delphi的封裝性主要由類的私有域和保護(hù)域來(lái)實(shí)現(xiàn)的。
⑶多態(tài)性。Delphi的多太性主要是通過(guò)虛擬方法和動(dòng)態(tài)方法來(lái)實(shí)現(xiàn)的。
2.2 開(kāi)發(fā)的關(guān)鍵技術(shù)
⑴VBA編程技術(shù)
Visual Basic for Applications(簡(jiǎn)稱VBA)是新一代標(biāo)準(zhǔn)宏語(yǔ)言。在沒(méi)有VBA 以前,一些應(yīng)用軟件如Excel,Word, Access等都采用自己的宏語(yǔ)言供用戶開(kāi)發(fā)使用,但每一種宏語(yǔ)言都是相互獨(dú)立的并且它們之間是互不兼容的。這導(dǎo)致了應(yīng)用軟件之間不能在程序上互聯(lián)。找到一種可被所有的Microsoft 可編程應(yīng)用軟件所共享的通用宏語(yǔ)言是Microsoft公司長(zhǎng)期追求的目標(biāo)。VBA作為新一代的標(biāo)準(zhǔn)宏語(yǔ)言具有了跨越多種OFFICE 應(yīng)用軟件并且控制應(yīng)用軟件對(duì)象的能力。
3 系統(tǒng)測(cè)試
測(cè)試在軟件開(kāi)發(fā)過(guò)程中一直都是備受關(guān)注的,即使在傳統(tǒng)的軟件工程中,也有一個(gè)明確、獨(dú)立的測(cè)試階段。隨著軟件危機(jī)的頻頻出現(xiàn)以及人們對(duì)于軟件本質(zhì)的進(jìn)一步認(rèn)識(shí),測(cè)試的地位得到了前所未有的提高。測(cè)試已經(jīng)不僅僅局限于軟件開(kāi)發(fā)中的一個(gè)階段,它已經(jīng)開(kāi)始貫穿于整個(gè)軟件開(kāi)發(fā)過(guò)程,人們已經(jīng)開(kāi)始認(rèn)識(shí)到:測(cè)試開(kāi)始的時(shí)間越早,測(cè)試執(zhí)行的越頻繁,所帶來(lái)的整個(gè)軟件開(kāi)發(fā)成本的下降就會(huì)越多。Extreme Programming更是把測(cè)試推到了極限的位置,一切軟件開(kāi)發(fā)活動(dòng)都要從首先編寫(xiě)測(cè)試代碼開(kāi)始。
為了使本軟件運(yùn)行更加穩(wěn)定,我對(duì)它進(jìn)行了全面的測(cè)試,測(cè)試分為二部分來(lái)進(jìn)行,一是:界面測(cè)試;二是功能測(cè)試。
首先是界面測(cè)試,為了使軟件在不同的的操作系統(tǒng)平臺(tái)上運(yùn)行界面能保持原來(lái)的風(fēng)格。我的開(kāi)發(fā)平臺(tái)如上介紹。我把完整程序拷貝到我同學(xué)的機(jī)子,同學(xué)機(jī)子的相關(guān)配置如下:Windows 7+14.5寸筆記本顯示器;程序運(yùn)行界面正常,界面上的字體等設(shè)置都保持得相當(dāng)好。沒(méi)有出現(xiàn)類似字體變形的情況!第二個(gè)平臺(tái):Windows XP+19寸顯示器,測(cè)試結(jié)果:字體有些不正常。后來(lái)在網(wǎng)查找了很多相關(guān)的資料,得出這是由于WindowXP和我的開(kāi)發(fā)平臺(tái)的操作系統(tǒng)Window 7的字體集不一樣造成的。解決方案是:把軟件的字體設(shè)置成:宋體+9號(hào),字符集使用:CHINASE_GB2312。至此軟件的界面測(cè)試順利完成。
二是進(jìn)行功能的測(cè)試。我的功能模塊主要是試卷生成。而試卷生成后都是輸出到Microsoft Office Word里。實(shí)際測(cè)試結(jié)果如下:在Windows 7+Microsoft Office 2003的平臺(tái)下,試卷功能里的預(yù)覽功能不能用了。界面停留在“正在鏈接Microsoft Office Word ......”這里,一看就知道沒(méi)有辦法和Microsoft Office Word鏈接了。換平臺(tái)測(cè)試,這回是在Windows 7+Office 2007,程序正常運(yùn)行了包括試卷預(yù)覽等功能都正常運(yùn)行。再換平臺(tái):Windows XP+Office 2007程序同樣完全正常運(yùn)行,由此可以總結(jié)出在低于Office 2007的平臺(tái)下程序無(wú)法和辦公軟件交互。至此到這里在功能的測(cè)試上也已經(jīng)比較圓滿的完成了!
4 系統(tǒng)維護(hù)
由于在開(kāi)發(fā)本程序的時(shí)候我就特別注意軟件的后續(xù)維護(hù)和再開(kāi)發(fā)上。因此極努力的想把它開(kāi)發(fā)成一個(gè)強(qiáng)內(nèi)聚、弱耦合、接口明確、意圖明晰的軟件。對(duì)于程序里的功能我盡力把它們封裝在類的私有過(guò)程或私有函數(shù)里,這樣可以大大提高軟件的內(nèi)聚性,在各個(gè)功能模塊和窗體之間盡可能減少它們之間的調(diào)用關(guān)系,以減少軟件的耦合性。在軟件設(shè)計(jì)初期我就預(yù)留了接口用于調(diào)用另一個(gè)同學(xué)的模塊。為了保證兩人開(kāi)發(fā)出的功能模塊能在最后能順利地聯(lián)合。在一開(kāi)始我就預(yù)先編了一個(gè)公共的“數(shù)據(jù)模塊”以提高軟件連接數(shù)據(jù)庫(kù)能高效共享。并且給他規(guī)定一些如控件的命名規(guī)則,代碼的規(guī)范等。這些都大大提高了軟件后續(xù)的可維護(hù)性。
[參考文獻(xiàn)]
[1]陳明.軟件工程學(xué)教程.科技出版社,2002.
[2]薩師煊,王珊.數(shù)據(jù)庫(kù)系統(tǒng)概論.第三版.高等教育出版社,2000.
[3]飛思科技產(chǎn)品研發(fā)中心.Delphi7數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā).電子工業(yè)出版社,2003.
[4]飛思科技產(chǎn)品研發(fā)中心.Delphi6開(kāi)發(fā)者手冊(cè).電子工業(yè)出版社,2002.
[5]申旻.Delphi高手突破.清華大學(xué)出版社,2002,302.