文檔資料管理系統(tǒng)的設(shè)計與實現(xiàn) 精品.doc_第1頁
文檔資料管理系統(tǒng)的設(shè)計與實現(xiàn) 精品.doc_第2頁
文檔資料管理系統(tǒng)的設(shè)計與實現(xiàn) 精品.doc_第3頁
文檔資料管理系統(tǒng)的設(shè)計與實現(xiàn) 精品.doc_第4頁
文檔資料管理系統(tǒng)的設(shè)計與實現(xiàn) 精品.doc_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

文檔資料管理系統(tǒng)的設(shè)計與實現(xiàn)1引 言當今世界是飛速發(fā)展的信息時代,在各行各業(yè)中離不開信息處理,這正是計算機被廣泛用于管理系統(tǒng)的環(huán)境。計算機的最大好處在于利用它能夠進行信息管理。但是在眾多的資料中,如何規(guī)范,準確,快速,全面的管理自己的資料,如書籍,電子資料等,并且方便自己查閱。使用計算機進行信息管理控制,不僅提高了工作效率,而且大大提高了其安全性。本系統(tǒng)就是為了管理好自己的各種有用資料信息而設(shè)計的。面對各種繁多的資料,很多人是沒有進行合理的分類整理和建立一個資料管理系統(tǒng)來管理它們,有時候在手頭研究需要一些資料的時候往往是靠記憶來尋找,但是這樣做會浪費很多時間和精力。由于數(shù)據(jù)繁多容易丟失,且不易查找??偟膩碚f缺乏系統(tǒng),規(guī)范的信息處理手段。盡管我們有計算機,但是尚未用于信息管理,沒有發(fā)揮它的效益,資料閑置比較突出,就是管理信息開發(fā)的基本環(huán)境?;诖祟悊栴},我認為有必要建立一個資料管理系統(tǒng),使資料管理工作規(guī)范化,程序化,避免資料管理隨意性,提高信息處理的速度和準確性,能夠及時、準確、有效的查詢和修改資料情況。本次是在老師指導下自己獨立完整的進行軟件的設(shè)計,程序編寫,調(diào)試等工作。通過自己對整個流程的設(shè)計和實現(xiàn),能夠完成最初提出的要求,也對一些功能進行了擴展和加深。利用文檔資料管理系統(tǒng)能夠比較完善的管理自己的資料,也能比較快速的找到自己以前看過或是記錄下的資料,使用起來也很方便,快速。2 設(shè)計理論依據(jù)2.1 MFC簡介MFC微軟基礎(chǔ)類(Microsoft Foundation Classes),實際上是微軟提供的,用于在C+環(huán)境下編寫應(yīng)用程序的一個框架和引擎。MFC就是掛在它之上的一個輸助軟件開發(fā)包,MFC作為與VC+血肉相連的部分(注意C+和VC+的區(qū)別:C+是一種程序設(shè)計語言,是一種大家都承認的軟件編制的通用規(guī)范,而VC+只是一個編譯器,或者說是一種編譯器+源程序編輯器的IDE,WS,PlatForm),MFC同BC+集成的VCL一樣是一個非外掛式的軟件包,類庫,只不過MFC類是微軟為VC+專配的. MFC是Win API與C+的結(jié)合,API,即微軟提供的Winos下應(yīng)用程序的編程語言接口,是一種軟件編程的規(guī)范,但不是一種程序開發(fā)語言本身。MFC不只是一個功能單純的界面開發(fā)系統(tǒng),它提供的類絕大部分用來進行界面開發(fā),關(guān)聯(lián)一個窗口的動作,但它提供的類中有好多類不與一個窗口關(guān)聯(lián),即類的作用不是一個界面類,不實現(xiàn)對一個窗口對象的控制(如創(chuàng)建,銷毀)MFC中的各種類結(jié)合起來構(gòu)成了一個應(yīng)用程序框架,它的目的就是讓程序員在此基礎(chǔ)上來建立Windows下的應(yīng)用程序。MFC框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標準實現(xiàn)方法,程序員所要做的就是通過預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個輪廓。Microsoft Visual C+提供了相應(yīng)的工具來完成這個工作:AppWizard可以用來生成初步的框架文件(代碼和資源等);資源編輯器用于幫助直觀地設(shè)計用戶接口;Class Wizard用來協(xié)助添加代碼到框架文件;最后,編譯,則通過類庫實現(xiàn)了應(yīng)用程序特定的邏輯。2.2 XML介紹XML是Extensible Markup Language的縮寫,即可擴展標記語言是一種您可以用來創(chuàng)建自己標記的標記語言。它由萬維網(wǎng)協(xié)會(W3C)創(chuàng)建,用來克服 (即超文本標記語言(Hypertext Markup Language),它是所有網(wǎng)頁的基礎(chǔ))的局限。和 一樣;XML 基于 SGML 標準通用標記語言(Standard Generalized Markup Language)XML實際上是Web上表示結(jié)構(gòu)化信息的一種標準文本格式,它沒有復雜的語法和包羅萬象的數(shù)據(jù)定義。XML同一樣,都來自SGML(標準通用標記語言)。SGML是一種在Web發(fā)明之前就早已存在的用標記來描述文檔資料的通用語言。但SGML十分龐大且難于學習和使用。鑒于此,人們提出了語言。但近年來,隨著Web應(yīng)用的不斷深入,在需求廣泛的應(yīng)用中已顯得捉襟見肘,有人建議直接使用SGML作為Web語言。但SGML太龐大了,學用兩難尚且不說,就是全面實現(xiàn)SGML的瀏覽器也非常困難。于是Web標準化組織W3C建議使用一種精簡的SGML版本XML。XML與SGML一樣,是一個用來定義其他語言的元語言。與SGML相比,XML規(guī)范不到SGML規(guī)范的1/10,簡單易懂,是一門既無標簽集也無語法的新一代標記語言。 可以說,XML的出現(xiàn)給數(shù)據(jù)交換帶來了一場革命;XML的出現(xiàn)是至今為止最聰明的一種符號化語言;XML成為下一代網(wǎng)絡(luò)發(fā)展的基石。 XML作為引人注目的核心技術(shù)應(yīng)用于BtoB、Web服務(wù)、.NET等許多系統(tǒng)中。XML可以作為電子數(shù)據(jù)交換的統(tǒng)一格式,用XML可以對數(shù)據(jù)關(guān)系進行定義形成特有的標準,因此各行各業(yè)都在建立自己的行業(yè)化標準,以應(yīng)用于網(wǎng)絡(luò)上處理電子商務(wù),把后臺系統(tǒng)通過Web站點表現(xiàn)出來。XML還可以作為數(shù)據(jù)倉儲,一個XML文件就是一個小的數(shù)據(jù)庫,通過對數(shù)據(jù)關(guān)系的定義形成各種關(guān)系、屬性的數(shù)據(jù),實現(xiàn)數(shù)據(jù)交換、上下文檢索、多媒體傳輸。XML具有其他方法所不具備的數(shù)據(jù)描述特點XML是以文本形式來描述的一種文件格式 由于XML是以文本形式描述的,所以適合于各種平臺環(huán)境的數(shù)據(jù)交換。同樣由于使用文本來描述內(nèi)容,可以越過不同平臺的障礙進行正常的數(shù)據(jù)交換。但是,文本形式也會因為文字代碼的不同造成不能閱讀的問題,在這一點上XML有著非常完美的解決方案。 XML使用有意義的標記(Tag) 在XML中文件是由一個個稱之為元素(Element)的部件構(gòu)成。使用標記(Tag)來描述元素。由于使用了標記的描述方法,可以保持原數(shù)據(jù)的意思和構(gòu)造在互聯(lián)網(wǎng)上進行數(shù)據(jù)交換,進而可以保持不同系統(tǒng)之間數(shù)據(jù)交換的靈活性。 可以說,XML是“定義語言的語言”,也即是一種元語言。由于XML具有元語言的功能,所以可以成為描述電子商務(wù)數(shù)據(jù)、多媒體演示數(shù)據(jù)、數(shù)學公式等各種各樣數(shù)據(jù)應(yīng)用語言的基礎(chǔ)語言。下面提供幾個以XML為基礎(chǔ)生成的數(shù)據(jù)描述語言(本文亦稱為XML應(yīng)用語言)的應(yīng)用例子,即出版媒體:Open eBook(電子書籍)、NewsML(新聞媒體);科學:MathML(數(shù)學表達式)、CML(化學);電子商務(wù):cXML(電子商務(wù))、FpML(金融);多媒體:SMIL(多媒體演示)、BML(衛(wèi)星數(shù)據(jù)傳送)。 XML是描述內(nèi)容的數(shù)據(jù)格式,在使用XML數(shù)據(jù)時,還需要XML數(shù)據(jù)的顯示、打印、數(shù)據(jù)結(jié)構(gòu)的變更等許多相關(guān)技術(shù)。如果這些相關(guān)技術(shù)也都標準化的話,即使在不同平臺開發(fā)應(yīng)用程序也都可以用相同的方法,使開發(fā)難度降低。 處理XML數(shù)據(jù)時,一定要使用XML Processor(也就是XML Parser),把XML數(shù)據(jù)結(jié)構(gòu)的檢查等交給XML Parser去做。應(yīng)用程序?qū)邮盏絏MLProcessor傳遞來的XML樹進行處理,向用戶提供服務(wù)。此時,不管是電子商務(wù),還是知識管理,都是定義XML數(shù)據(jù)結(jié)構(gòu)的技術(shù)、顯示打印XML數(shù)據(jù)的技術(shù)、XML數(shù)據(jù)結(jié)構(gòu)變更技術(shù)、XML數(shù)據(jù)聯(lián)接整合技術(shù)、用程序操作XML樹的API和其它應(yīng)用技術(shù)的組合。在XML中用戶可以自由的定義標記名以及與標記相關(guān)的元素及元素層次,這是XML的主要特征。但是,如果定義的都是只有自己才能理解的標記,就無法與其他人進行交換數(shù)據(jù)。為了在企業(yè)團體之間進行XML格式的數(shù)據(jù)的交換,XML數(shù)據(jù)的結(jié)構(gòu)、元素的名稱、元素的數(shù)據(jù)類型以及元素的親子關(guān)系都需要仔細考慮,一定要設(shè)計成人和系統(tǒng)能夠理解的語言。這樣設(shè)計的XML數(shù)據(jù)結(jié)構(gòu)在XML領(lǐng)域稱為Schema,描述Schema的語言稱為Schema語言。DTD是最普通XML的Schema語言是DTD(Document Type Definition:文檔類型定義)。DTD是遠在SGML時期就一直使用的Schema語言,1998年制訂XML語法時,沿用了描述Schema的DTD。XML Schema中有下述DTD中不具備的特征:多個Schema復合使用XML名字空間;用XML語法描述;可以詳細定義元素的內(nèi)容及屬性值的數(shù)據(jù)類型。由于在XML Schema中的數(shù)據(jù)結(jié)構(gòu)也都是用XML數(shù)據(jù)來表現(xiàn)的,與DTD相比數(shù)據(jù)量增大很多。但是,XML Schema的表現(xiàn)力要遠比DTD強得多,不僅支持字符串、10進制數(shù)、浮動小數(shù)點、日期等,還支持m回以上和n回以下出現(xiàn)的元素(m、n為整數(shù))的指定。例如“郵編xxxxxx”(x是字符)是郵政編碼元素的格式指定等都是DTD所不能表現(xiàn)的內(nèi)容。XML Schema于20XX年5月成為W3C的推薦規(guī)范,對XML的利用產(chǎn)生了重要的影響。 XML作為數(shù)據(jù)描述語言是非常優(yōu)秀的,但是并不是所有的電子數(shù)據(jù)都是轉(zhuǎn)換到XML是最有效的。例如XML的文本表現(xiàn)手法、標記的符號化等會導致XML數(shù)據(jù)比二進制表現(xiàn)方法數(shù)據(jù)量增加,尤其當數(shù)據(jù)量很大時,會成為很大的問題。也就是說,XML的導入要根據(jù)具體需求,比較其優(yōu)缺點,在充分發(fā)揮XML優(yōu)點的領(lǐng)域進行。盡管XML具備了作為通用數(shù)據(jù)描述語言的優(yōu)秀特征,但是XML不是編程語言,說到底它是一種數(shù)據(jù)描述的技術(shù)。因此XML文件的顯示、文件結(jié)構(gòu)的變更、應(yīng)用程序的操作等XML相關(guān)技術(shù)也是非常重要的。隨著計算機和網(wǎng)絡(luò)技術(shù)的不斷發(fā)展深入XML技術(shù)的應(yīng)用也將不斷擴大。該技術(shù)不僅在傳統(tǒng)的銀行之間數(shù)據(jù)交換、證券公司對上市公司情況的數(shù)據(jù)統(tǒng)計、圖書館對圖書的查詢檢索、企事業(yè)文件檔案管理等領(lǐng)域的應(yīng)用更加迫切,在電子商務(wù)、搜索引擎軟件、自動智能翻譯、文檔發(fā)聲軟件等領(lǐng)域也將得到更大的發(fā)展,特別是近期發(fā)展起來的移動通訊網(wǎng)絡(luò)服務(wù)的發(fā)展,將使各種各樣的信息經(jīng)過格式轉(zhuǎn)換到達PDA、甚至到達手持電話機,將來我們可以通過網(wǎng)絡(luò)數(shù)據(jù)格式轉(zhuǎn)換服務(wù)使小小的手機可以閱讀到大千世界的豐富信息。3文檔資料管理系統(tǒng)簡介3.1 系統(tǒng)開發(fā)背景本文檔資料管理系統(tǒng)是為個人管理自己的各種資料的一個基于Windows XP系統(tǒng)的一個應(yīng)用軟件.現(xiàn)在也有很多的資料管理系統(tǒng),其中都是一個運用界面和邏輯接口嵌入一個數(shù)據(jù)庫,這樣在編寫軟件的時候也很方便和快速。但是對于編程人員來說,利用別的工具來實現(xiàn)自己的東西總是不好的事,尤其對于我們這種經(jīng)驗不足的人來說,尤其是不好的事情。因此我就想自己編寫一個儲存結(jié)構(gòu)來代替數(shù)據(jù)庫。因為在以前學習過XML知道用它可以實現(xiàn)數(shù)據(jù)的存儲功能,于是決定利用它編寫文件存儲結(jié)構(gòu)來實現(xiàn)本系統(tǒng)的數(shù)據(jù)存儲?,F(xiàn)在人們有了電腦,對于存儲自己需要的資料有了一個好的地方,但是如何能夠有效的把日益增多的這些各種資料管理起來,能夠方便需要的時候取出來,這是一個難題;對于一些以前看過的書,如何在以后突然需要的時候,快速的找到它的擺放位子?這些都是開發(fā)本資料管理系統(tǒng)的一個原因。為了管理個人的資料例如:電子資料,紙版資料等不同的資料并對所有的資料進行歸類,如劃分為VC+資料,windows類資料,健康類資料等。當這些資料經(jīng)過科學的分類,并把各種不同屬性的資料各類管理起來,這樣就實現(xiàn)了對資料的有效管理,也方便了用戶在需要的時候很快能夠找到想要的資料,節(jié)約了很多人力物力和精力。3.2系統(tǒng)開發(fā)環(huán)境3.2.1 系統(tǒng)軟件環(huán)境本系統(tǒng)采用的軟件工具有: 操作系統(tǒng): Windows XP 開發(fā)環(huán)境:VC+6.03.2.2工具簡介 VC+6.0在提供可視化的編程方法的同時,也適用于編寫直接對系統(tǒng)進行底層操作的程序,其生成代碼的質(zhì)量要優(yōu)于很多其他的開發(fā)工具。VC+6.0所提供的基本類庫MFC,對Windows所用的Win32應(yīng)用程序接口進行了十分徹底的封裝,這使得開發(fā)人員可以使用完全面向?qū)ο蟮姆椒▉磉M行Windows編程,從而大大節(jié)省了應(yīng)用程序的開發(fā)周期,降低了開發(fā)成本。而且,其強大的調(diào)試功能也為大型復雜軟件的開發(fā)提供了有效的排錯手段。隨著多媒體技術(shù)和圖形圖像技術(shù)的不斷發(fā)展,可視化技術(shù)得到了廣泛的重視,愈來愈多的人開始研究并應(yīng)用可視化技術(shù)。所謂可視化技術(shù),一般是指軟件開發(fā)階段的可視化和對計算機圖形技術(shù)和方法的應(yīng)用。VC+是一個很好的可視化編程工具,使用VC+環(huán)境來開發(fā)基于Windows的應(yīng)用程序,其界面更友好,便于程序員操作。開發(fā)環(huán)境是程序員同VC+的交互界面,通過它程序員可以訪問C+源代碼編輯器、資源編輯器,使用內(nèi)部調(diào)試器,還可以創(chuàng)建項目文件3.3系統(tǒng)概述軟件主要提供的功能包括:資源管理方面添加資源,刪除資源;資源瀏覽按照目錄,按照搜索。因此把軟件大體分成三個部分進行實現(xiàn):第一部分: 用戶界面。包括整個程序的框架,以及用戶操作的接口設(shè)計等即就是實現(xiàn)用戶界面的部分.第二部分:用于處理事務(wù)的模塊.包括用戶添加,刪除,修改資源,用戶通過目錄瀏覽,通過搜索找尋,通過自己的收藏夾進行資源管理等業(yè)務(wù)邏輯的實現(xiàn)。第三部分: 用于進行數(shù)據(jù)物理存儲的模塊。使用XML文檔進行數(shù)據(jù)的存儲,所以在實現(xiàn)的過程中,XML的操作成為了這個模塊的主要工作。文檔資料管理系統(tǒng)是為個人管理自己的各種資料的軟件,首先將資料分為電子資料和非電子資料;電子資料主要包括自己電腦上面儲存的例如:電子文檔,電子書籍,影像資料等各種電子資料。非電子資料包括書籍,影碟,光碟等實物資料;對每一份資料均有命名,可以使用書名來指代這本書,也對每一份資料加了關(guān)鍵字和注釋,便于后面需要時候準確的找到需要的資料。對所有的資料進行歸類,如劃分為VC+資料,windows類資料,影像類資料等;指明資料的存放位置,若是電子資料(如電腦上的文件),可以通過鼠標點擊直接打開文件,對于非電子資料和非本機子上的資料,在注釋內(nèi)注明其放置的位子,便于快速找到自己需要的資料;系統(tǒng)也有增加,刪除,修改等工具條:增加是在有新資料需要用本系統(tǒng)管理的時候,可以通過它來增加。刪除是對無用的資料進行刪除。修改是需要對已有的資料增加一些說明的。另外也有目錄,搜索和收藏夾等功能。系統(tǒng)也在最下面的窗口有一個對選中的資料有一個類似統(tǒng)計的顯示,便于使用者,更加方便的使用本系統(tǒng)。4文檔資料管理系統(tǒng)的設(shè)計4.1系統(tǒng)需求分析及功能設(shè)計隨著信息時代的來臨,電腦用戶的資料日益增多,而這些資料可能有著不同的特點。比如,它可能是一本書,也可能是一張光碟,也可能是個電子文檔。如果稍有疏忽,資料的存放位置失去了某些特征,例如,某些電子文檔你可能放到了一個目錄下,而另外一個文檔你卻放到了其它的目錄下。當你需要的時候,將難于準確迅速的找到,更談不上有效的查詢和管理了??傊?,資料屬性的多元化和數(shù)量的增多給管理這些資料帶來了很多不便。文檔資料管理系統(tǒng)的設(shè)計目標正是為了解決這些問題。它將滿足用戶對資源的管理:增加,刪除,修改,搜索及查看資源。具體說來,該系統(tǒng)將具備下面的功能:(1)增加資源用戶能夠添加一個資源,該資源可以是電子資源(比如PC上某個目錄下的一張圖片)或者是非電子資源(例如書桌上的本書)。添加該資源后,用戶將可以通過該系統(tǒng)直接管理和使用該資源。(2)刪除資源用戶能夠?qū)⑾到y(tǒng)中的某個資源刪除掉,從而放棄系統(tǒng)對該資源的管理。(3)修改資源當某個資源的屬性發(fā)生變化的時候(例如存放位置發(fā)生變化),用戶能夠選中某個資源,對其屬性進行修改,以反映這種變化。(4)搜索資源用戶能夠通過提供資源的某個特征屬性進行查找,獲得相關(guān)的資源。(5)查看資源如果所選擇資源為電子文檔,用戶將能在系統(tǒng)中直接查看該資源。圖1 整體框架設(shè)計圖資源應(yīng)該具有以下屬性:資源的作者,資源名稱,資源的位置(若是電子資源,則是資源在電腦上的文件位置),資源添加日期,資源所屬目錄情況(一個資源可以屬于多個目錄),關(guān)鍵字(用于搜索), 資源的注釋等。 下面就系統(tǒng)中對以上屬性的定義:struct RESITEMint id; / 資源在文檔中的唯一標志string name; /資源名稱string author; /資源的作者string path; /資源的位置(若是電子資源,則是資源在電腦上的文件位置) bool bEbook;/是否是電子資源string date; /資源添加日期string keywords; /關(guān)鍵字,用于搜索int catalogs; /資源所屬目錄情況(一個資源可以屬于多個目錄)double bytes; /資源大?。ㄖ粚﹄娮淤Y源有效) string note; /資源的注釋;4.2 XML存儲結(jié)構(gòu)的設(shè)計 本系統(tǒng)的用XML編寫存儲結(jié)構(gòu),參照一般的XML編寫方法包含以下幾個類:XmlContainer(XmlTree),XmlFile,XmlLeaf,XmlNode,XmlParser。表1 XmlFile設(shè)計表類名:XmlFile設(shè)計用途:用于將一個磁盤上的XML文檔以字符串的方式讀入到內(nèi)存中,或者將以字符串方式存于內(nèi)存中的XML文檔輸出到磁盤。方法/屬性作用string _doc保存XML字符串的內(nèi)部成員變量。bool load(const char* file)將參數(shù)file指定的文件載入類的成員變量doc中。bool save(const char* file)將成員變量doc的值保存到file指定的文件中。const string& getdoc()返回doc的值。bool setdoc(const string& _doc)以_doc設(shè)置doc的值。表2 Xmlparser設(shè)計表類名:XmlParser設(shè)計用途:用于實現(xiàn)XmlTree和字符串化的XML文檔的相互轉(zhuǎn)換。方法/屬性作用static XmlTree* doc2tree(const string& doc)將doc轉(zhuǎn)換成一個XmlTree。static string tree2doc(XmlTree* pXmlTree)將一個XmlTree轉(zhuǎn)換為字符串。static int gettoken(string strDoc, string& token)從strDoc中獲取第一個標記(或者值)說明:正是通過這兩個類的協(xié)作,實現(xiàn)了XML文檔的讀寫和轉(zhuǎn)換。例如:XmlFile file;if(!file.load(Settingsitems.xml)AfxMessageBox(打開數(shù)據(jù)文件items.xml失敗);return;XmlTree* pTree = XmlParser:doc2tree(file.getdoc();if(!pTree)AfxMessageBox(轉(zhuǎn)換數(shù)據(jù)文件items.xml失敗);return;上面的代碼段首先使用XmlFile的實例load了一個XML文檔,然后使用XmlParser:doc2tree創(chuàng)建了一個XmlTree,從而為內(nèi)存中使用XML提供了基礎(chǔ)。下面說明一下對XML的處理方案。使用樹型結(jié)構(gòu)表達XML文檔,可以比較方便的進行相應(yīng)的讀寫刪改操作。因為XML本身就是一個數(shù)型的結(jié)構(gòu)。例如:tttttt13dxx7xx以上是一段程序中用到的XML文檔結(jié)構(gòu)。注意到整個文檔以開始,以結(jié)尾,表示之間的都是存儲的數(shù)據(jù)(實際上就是資源的屬性數(shù)據(jù))。中間共有兩個item,而每個item又各有幾個屬性(如,等)。所以可以用一顆樹來表示:圖2 Xml樹型結(jié)構(gòu)圖注意到上面的樹中有些節(jié)點只有Name沒有Value,而有些卻都有。雖然它們都是節(jié)點,但類型上還是有區(qū)別的。故,采用三個類表達這種信息:XmlNode,XmlLeaf,XmlContainer。首先定義一個接口類XmlNode,該類表達抽象的XML節(jié)點。然后使用XmlLeaf類和XmlContainer類來實現(xiàn)XmlNode,XmlLeaf表示葉節(jié)點(有Name和Value雙重屬性的節(jié)點,但自己沒有子節(jié)點),XmlContainer表示容器節(jié)點(只有Name屬性的節(jié)點,而且自己可以有子節(jié)點)。下面是它們的定義:class XmlNodepublic:XmlNode()name = node;parent = NULL;virtual XmlNode();virtual bool isleaf()=0; /是否葉節(jié)點virtual bool iscontainer()=0;/是否容器節(jié)點virtual XmlNode* getparent()return parent; /返回父節(jié)點virtual bool setparent(XmlNode* _parent) parent=_parent; return true; /設(shè)置父節(jié)點virtual const string& getname()return name; /返回節(jié)點名稱virtual bool setname(const string& _name)name=_name; return true; /設(shè)置節(jié)點名稱protected:XmlNode* parent;string name; class XmlContainer : public XmlNodepublic:XmlContainer()pos = -1; name=container;XmlContainer(const string& _name)name=_name; pos = -1;XmlContainer()release();bool isleaf() return false;bool iscontainer()return true;bool addchild(XmlNode* _node); /新增一個子節(jié)點bool remove(XmlNode* pNode); /刪除一個子節(jié)點XmlNode* firstchild(); /返回第一個子節(jié)點XmlNode* nextchild(); /返回下一個字節(jié)點XmlNode* getchild(int nIndex); /返回第nIndex個子節(jié)點XmlNode* search(const string& name); /找到第一個以name為名的子孫節(jié)點XmlNode* search(const string& name, const string& value); /找到第一個以name為名,以value為值的葉節(jié)點void trav(ostream& out); /遍歷并輸出到out中void print(int lev);protected:void release();int pos;vector children;typedef XmlContainer XmlTree;class XmlLeaf : public XmlNodepublic:XmlLeaf()name=leaf;XmlLeaf(const string& _name) name=_name;XmlLeaf(const string& _name, const string& _value) name=_name; value=_value;XmlLeaf();bool isleaf() return true; /是葉節(jié)點,返回truebool iscontainer()return false; /不是容器節(jié)點,返回falseconst string& getvalue()return value; /獲取值bool setvalue(const string& _value)value=_value; return true;/設(shè)置值protected:string value;下圖為數(shù)據(jù)流的轉(zhuǎn)化圖:圖3 Xml 數(shù)據(jù)流轉(zhuǎn)換圖在讀取文件數(shù)據(jù)的時候使用XmlFile從磁盤讀取文件數(shù)據(jù),并轉(zhuǎn)化為一個String 對象,然后使用XmlParser轉(zhuǎn)化為一個XmlTree對象,這樣就可以很方便的操作數(shù)據(jù)。當存儲數(shù)據(jù)的時候,使用XmlParser把一個XmlTree對象轉(zhuǎn)化為一個String 對象,然后通過XmlFile類將這個String 對象保存到磁盤文件中。上述過程就實現(xiàn)了系統(tǒng)數(shù)據(jù)流的轉(zhuǎn)化,也在次基礎(chǔ)上變于整個系統(tǒng)調(diào)用XML來實現(xiàn)具體的功能。4.3用戶界面和事物處理4.3.1用戶界面本系統(tǒng)的用戶界面是一個,類似VC的界面,左邊、底下有兩個可浮動、可變大小的控制窗口。具體實現(xiàn)的為:首先創(chuàng)建窗口的定義如下:先為CMainFrame增加成員變量:class CMainFrame : public CFrameWndprotected:CMainFrame();DECLARE_DYNCREATE(CMainFrame)public:CDlgInfo m_dlgInfo; /用于顯示信息,位于程序最下方CCoolTabCtrl m_TabCtrl;CCoolBarm_wndMyBar1; /我們將它作為左邊的窗口CCoolBarm_wndMyBar2;/我們將它作為右邊的窗口創(chuàng)建ControlBar即控制條和“刪除”,“修改”,“修改”按鈕: if (!m_wndMyBar1.Create(_T(我的控制條), this, CSize(230,260),TRUE,123);if (!m_wndMyBar2.Create(_T(我的控制條2), this,CSize(200,100),TRUE,124)m_wndToolBar.SetButtonText(0, 增加 );m_wndToolBar.SetButtonText(1, 刪除 );m_wndToolBar.SetButtonText(2, 修改 );創(chuàng)建TAB Control,并把它加入到ControlBar中。需要注意的是:同一個ControlBar只能加入一個一級子窗口m_TabCtrl.Create(TCS_DOWN|WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),&m_wndMyBar1,125);m_TabCtrl.AddPage(RUNTIME_CLASS(CCatalogDlg),IDD_DLG_CATALOG, 目 錄, IDI_ICON_CATALOG);m_TabCtrl.AddPage(RUNTIME_CLASS(CSearchDlg),IDD_DLG_SEARCH, 搜 索, IDI_ICON_SEARCH);m_TabCtrl.AddPage(RUNTIME_CLASS(CFavDlg), IDD_DLG_FAV, 收藏夾, IDI_ICON_FAC);??靠刂疲簃_wndMyBar1.SetBarStyle(m_wndMyBar1.GetBarStyle() |CBRS_TOOLTIPS | CBRS_FLYBY| CBRS_SIZE_DYNAMIC);m_wndMyBar2.SetBarStyle(m_wndMyBar2.GetBarStyle() |CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);m_wndMyBar1.EnableDocking(CBRS_ALIGN_ANY);m_wndMyBar2.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);DockControlBar(&m_wndMyBar1, AFX_IDW_DOCKBAR_LEFT);/停靠左邊DockControlBar(&m_wndMyBar2, AFX_IDW_DOCKBAR_BOTTOM);/??坑疫卪_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);此時我們已經(jīng)生成了兩個控制條窗口,但窗口中還沒有任何東西。在創(chuàng)建這些控件時將控制條窗口指針作為父窗口指針賦值給這些控件。在上面敘訴中,創(chuàng)建了“添加”“刪除”,“修改”按鈕。其他按鈕,控件在class CCoolTabCtrl : public CWnd類中聲明和定義,在使用中調(diào)用。由于它們涉及到對具體事件的處理,在下面部分分類說明。其中對于風格的使用,中沒有特別說明,在使用中可以看出來。4.3.2事務(wù)處理事務(wù)處理這個模塊就是對具體的按鈕,控件的設(shè)置和響應(yīng),通過對它們函數(shù)的定義和調(diào)用實現(xiàn)具體的功能,主要實現(xiàn)的就是添加,刪除,搜索,和一些具體功能的實現(xiàn)。下面就是對具體事務(wù)的介紹。添加資源:通過點擊工具條的增加按鈕彈出添加資源對話框,用戶對資源屬性進行逐一設(shè)置,并在點擊確定后保存。該功能的流程圖如下圖所示:圖4 添加功能流程圖響應(yīng)添加功能的類為class CAddResDlg,其中具體實現(xiàn)為:void CResManView:OnBtnAddres()響應(yīng)點擊添加按鈕,用戶在彈出窗口按照具體資源添加其具體屬性,填寫完畢,點擊“確定”按鈕,void CAddResDlg:OnOK()是確定按鈕的響應(yīng)函數(shù),然后BOOL CAddResDlg:ValidItem()判定資源的屬性填寫是否合法,合法就添加該資源即調(diào)用XmlFile file實現(xiàn)把數(shù)據(jù)寫入文件中,從而實現(xiàn)添加功能。在添加中也用了int CAddResDlg:GetCatalogs()來獲取資源的所屬目錄,這只是針對本機上的電子文檔。通過上述過程和具體函數(shù)實現(xiàn)了添加的功能。在列表視圖中選中某個資源的時候,在下面的窗口中會有關(guān)于該資源的具性的信息顯示出來,class CDlgInfo : public CDialog。在列表視圖中雙擊某個資源的時候,若該資源是電子資源,那么它將被打開。void CResManView:OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)刪除資源:在視圖列表中選中要刪除的項目,點擊工具條中的刪除,就會彈出一個詢問對話框,若點擊“確定”,將刪除所選擇的項目。并且支持同時刪除多個資源。刪除功能的流程圖如下圖所示圖5 刪除功能流程圖實現(xiàn)刪除的具體過程為:當用戶想要刪除一個或是多個資源的時候,首先選定要刪除的項,然后點擊“刪除”按鈕,響應(yīng)該按鈕的函數(shù)為void CResManView:OnUpdateBtnDelres(CcmdUI* pCmdUI).實現(xiàn)刪除的具體函數(shù)voidCResManView:OnBtnDelres(),最后調(diào)用XmlFile file實現(xiàn)在XML文件存儲結(jié)構(gòu)中刪除該資源,從而實現(xiàn)了刪除的功能。 搜索功能:圖6 搜索功能流程圖該功能實現(xiàn)的過程:按照搜索瀏覽資源:通過使用關(guān)鍵字,用戶可以搜索出自己感興趣的資源。如果使用高級選項,還可以指定資源的添

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論