版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> X X 學(xué) 院</b></p><p><b> 畢業(yè)設(shè)計 (論文)</b></p><p> 作 者: 學(xué) 號: </p><p> 院 系: </p><p> 專 業(yè):
2、 計算機(jī)科學(xué)與技術(shù) </p><p> 題 目: 旅館管理系統(tǒng)開發(fā) </p><p> 指導(dǎo)者: 講師 </p><p> (姓 名) (專業(yè)技術(shù)職務(wù))</p><p> 評閱者: 講師
3、 </p><p> (姓 名) (專業(yè)技術(shù)職務(wù))</p><p> 畢業(yè)設(shè)計說明書(論文)中文摘要</p><p> 畢業(yè)設(shè)計說明書(論文)外文摘要</p><p><b> 目 錄</b></p><p><b> 第一章 緒論i</
4、b></p><p> 1.1 旅館管理的文化和業(yè)務(wù)1</p><p> 1.2 關(guān)于本課題3</p><p> 第二章 開發(fā)環(huán)境與主要技術(shù)4</p><p> 2.1 開發(fā)平臺4</p><p> 2.2 主要技術(shù)5</p><p> 第三章 系統(tǒng)需求分析
5、8</p><p> 3.1 運行平臺8</p><p> 3.2 數(shù)據(jù)庫設(shè)計9</p><p> 第四章 系統(tǒng)設(shè)計與實現(xiàn)12</p><p> 4.1 項目創(chuàng)建12</p><p> 4.2 主框架設(shè)計12</p><p> 4.3 數(shù)據(jù)庫操縱16</p
6、><p> 4.4 樹視圖的實現(xiàn)19</p><p> 4.5 切換視圖的實現(xiàn)23</p><p> 4.6 功能對話框的實現(xiàn)25</p><p> 第五章 系統(tǒng)測試31</p><p> 5.1 測試的定義和目的31</p><p> 5.2 旅館管理系統(tǒng)的測試32
7、</p><p><b> 第六章 結(jié)論33</b></p><p><b> 致 謝34</b></p><p><b> 參考文獻(xiàn)35</b></p><p> 附錄:英文技術(shù)資料翻譯36</p><p>&l
8、t;b> 第一章 緒論</b></p><p> 本章主要對發(fā)展中的旅館管理系統(tǒng)進(jìn)行介紹,并對當(dāng)前流行的旅館管理系統(tǒng)進(jìn)行簡單的介紹。</p><p> 1.1 旅館管理的文化和業(yè)務(wù)</p><p> 當(dāng)今社會,是個高科技、高效率、高度競爭的全新社會。隨著人們物質(zhì)水平的逐步提高,人們的精神生活也開始趨向豐富多彩。人們已經(jīng)不再僅僅局限于待在家
9、中,不再把自己局限在周圍的生活圈子里。為了豐富自己的文化生活和自身娛樂,人們已經(jīng)習(xí)慣了利用假期外出旅游。各個地區(qū)的旅游業(yè)也因此出現(xiàn)了持續(xù)增長的好勢頭。這對于各地的酒店來說是一種機(jī)遇也是一種挑戰(zhàn)。商場如戰(zhàn)場,競爭十分激烈,在競爭中如果企業(yè)本身不能從企業(yè)內(nèi)部入手,提高自身的競爭力,就有可能被社會所淘汰。只有提高企業(yè)自身的生命力才是企業(yè)正確的發(fā)展方向。酒店部門以前那種老的運作機(jī)制已經(jīng)不能適應(yīng)當(dāng)今社會的需要,單純靠手工去進(jìn)行大量的信息處理,不但
10、給企業(yè)本身帶來很大的不便,同時也給顧客帶來很大的麻煩,造成企業(yè)耗費大量的人力、物力和時間,仍然導(dǎo)致工作效率的降低。所以,對于酒店部門來說,建立一套合理有效的管理信息系統(tǒng)迫在眉睫,這也是適應(yīng)社會發(fā)展和增強(qiáng)競爭力的主要手段。1.1.1 旅館管理的文化</p><p> 當(dāng)今社會,因特網(wǎng)技術(shù)的飛速發(fā)展正在迅速地改變著人們的生活方式,因特網(wǎng)正在由科學(xué)工作者的工具變?yōu)槠胀ò傩斋@取信息、進(jìn)行交流的場所,而因特網(wǎng)的商業(yè)應(yīng)用
11、則尤為引人注目。21世紀(jì)的酒店,從內(nèi)部管理到外部銷售都將發(fā)生質(zhì)的變化。激烈的市場競爭,要求酒店引入更多、更新、更高的IT技術(shù),非單一的前臺管理軟件甚至傳統(tǒng)的前、后臺軟件所能滿足。現(xiàn)代化的酒店是集客房、餐飲、通訊、娛樂,商務(wù)文化及其他各種服務(wù)與設(shè)施為一體化的消費場所,酒店組織龐大,服務(wù)項目多,信息量大,要想提高勞動生產(chǎn),降低成本,提高服務(wù)質(zhì)量和管理水平,進(jìn)而促進(jìn)經(jīng)濟(jì)效益,必須借助計算機(jī)來進(jìn)行現(xiàn)代化的信息管理。成功的酒店是將經(jīng)濟(jì)效益作為酒店
12、的運營宗旨,管理的核心是在于如何提高經(jīng)濟(jì)效益。優(yōu)秀的酒店客房信息管理系統(tǒng)以酒店的經(jīng)濟(jì)效益為目標(biāo),為酒店管理人員和員工提供簡單易用、功能強(qiáng)大并高度靈活的應(yīng)用工具,激勵他們的積極性,促使他們向酒店提供更好的服務(wù)。這些改進(jìn)使賓客感到更加滿意,為酒店帶來更多的回頭客和收入。同時,通過對人流、物流、資金流的科學(xué)管理和有效控制,提高員工的工作效率,降低各種經(jīng)營成本,從而獲取持久的利潤,因此酒店行業(yè)對于酒店管理系統(tǒng)的引進(jìn)勢在</p>&
13、lt;p> 伴隨著計算機(jī)的發(fā)展及網(wǎng)絡(luò)技術(shù)的應(yīng)用,我們正在快速地向信息化社會邁進(jìn),信息自動化的作用變得越來越大。</p><p> 在旅店行業(yè)中,旅館住宿規(guī)模正在不斷地擴(kuò)大,住宿人員的數(shù)量正在急劇的增加,有關(guān)客戶住宿的各種信息也成倍地增長。</p><p> 面對龐大地信息量,就需要有旅館管理系統(tǒng)來提高住宿管理工作的效率。通過這樣的系統(tǒng),可以方便地查詢、添加和修改住宿房間的基本情
14、況、客戶的登記注銷情況,實現(xiàn)信息的規(guī)范化管理、科學(xué)統(tǒng)計和快速查詢,從而減少管理方面的工作量,同時避免由于人為因素造成數(shù)據(jù)遺漏和誤報等。</p><p><b> 1.2 關(guān)于本課題</b></p><p> 本課題將在PC機(jī)上實現(xiàn)一個簡單的旅館管理系統(tǒng),可以對房間的標(biāo)準(zhǔn)進(jìn)行添加、修改和刪除,對房間也可以實現(xiàn)添加、修改和刪除,可以實現(xiàn)客戶信息的登記和注銷,所有操作簡
15、便、人性化。</p><p> 第二章 開發(fā)環(huán)境與主要技術(shù)</p><p> 本章通過一個旅館管理系統(tǒng)的完整開發(fā)過程,向讀者介紹目前流行的ADO對象操作技術(shù)。這里以單文檔結(jié)構(gòu)為設(shè)計基礎(chǔ),在界面設(shè)計方面,采用視圖切分和樹狀內(nèi)容分布以及快捷菜單操縱,數(shù)據(jù)庫采用Microsoft SQL Server2000。</p><p><b> 2.1 開發(fā)平臺
16、</b></p><p> 本系統(tǒng)的開發(fā)平臺為:</p><p> 操作系統(tǒng):Microsoft Windows XP</p><p><b> 程序語言:C++</b></p><p> 開發(fā)平臺:VC6.0 </p><p> 數(shù)據(jù)庫:Microsoft SQL Serv
17、er2000</p><p> 2.1.1 C++語言</p><p> 在該設(shè)計中所使用的編程開發(fā)語言是微軟公司所推出的C++語言。C++面向?qū)ο蟮恼Z言。</p><p> C++語言發(fā)展大概可以分為三個階段: </p><p> 第一階段從80年代到1995年。這一階段C++語言基本上是傳統(tǒng)類型上的面向?qū)ο笳Z言,并且憑借著接近C語
18、言的效率,在工業(yè)界使用的開發(fā)語言中占據(jù)了相當(dāng)大份額; </p><p> 第二階段從1995年到2000年,這一階段由于標(biāo)準(zhǔn)模板庫(STL)和后來的Boost等程序庫的出現(xiàn),泛型程序設(shè)計在C++中占據(jù)了越來越多的比重性。當(dāng)然,同時由于Java、C#等語言的出現(xiàn)和硬件價格的大規(guī)模下降,C++受到了一定的沖擊; </p><p> 第三階段從2000年至今,由于以Loki、MPL等程序庫為
19、代表的產(chǎn)生式編程和模板元編程的出現(xiàn),C++出現(xiàn)了發(fā)展歷史上又一個新的高峰,這些新技術(shù)的出現(xiàn)以及和原有技術(shù)的融合,使C++已經(jīng)成為當(dāng)今主流程序設(shè)計語言中最復(fù)雜的一員。</p><p> 2.1.2 C++的組成</p><p> 根據(jù)Effective C++第三版第一條款的描述,現(xiàn)在C++由以下四個“子語言”組成: </p><p> 1、C子語言。C++支
20、持C語言的幾乎全部功能,主要是c89的部分,在語法上與C語言僅有極微妙的差別(如括號表達(dá)式的左右值性,具體請參考C++標(biāo)準(zhǔn)文獻(xiàn))。 </p><p> 2、面向?qū)ο蟮腃++語言。C++語言原本不具備面向?qū)ο蟮脑O(shè)計功能,然而隨著面向?qū)ο缶幊痰母拍畹奶岢鲆约叭鏙ava等語言的發(fā)展成熟,C++語言也開發(fā)出了支持面向?qū)ο蠊δ艿陌姹? </p><p> 3、泛型編程語言。C++強(qiáng)大(但容易失控
21、的)模板功能使它能在編譯期完成許多工作,從而大大提高運行期效率。 </p><p> 4、STL(C++標(biāo)準(zhǔn)模板庫,Standard Template Library)。隨著STL的不斷發(fā)展,它已經(jīng)逐漸成為C++程序設(shè)計中不可或缺的部分,其效率可能比一般的native代碼低些,但是其安全性與規(guī)范性使它大受歡迎。 </p><p><b> 特點:</b></
22、p><p> C++設(shè)計成靜態(tài)類型、和C同樣高效且可移植的多用途程序設(shè)計語言。 </p><p> C++設(shè)計成直接的和廣泛的支援多種程序設(shè)計風(fēng)格(程序化程序設(shè)計、資料抽象化、面向?qū)ο蟪绦蛟O(shè)計、泛型程序設(shè)計)。 </p><p> C++設(shè)計成給程序設(shè)計者更多的選擇,即使可能導(dǎo)致程序設(shè)計者選擇錯誤。 </p><p> C++設(shè)計
23、成盡可能與C兼容,籍此提供一個從C到C++的平滑過渡。 </p><p> C++避免平臺限定或沒有普遍用途的特性。</p><p> C++不使用會帶來額外開銷的特性。 </p><p> C++設(shè)計成無需復(fù)雜的程序設(shè)計環(huán)境。 </p><p> 出于保證語言的簡潔和運行高效等方面的考慮,C++的很多特性都是以庫(如STL)或其他的
24、形式提供的,而沒有直接添加到語言本身里。關(guān)于此類話題,Bjarne Stroustrup的《C++語言的設(shè)計和演化》(1994)里做了詳盡的陳述。</p><p><b> 2.2主要技術(shù) </b></p><p> 2.2.1 Microsoft SQL Server2000</p><p> SQL Server 2000 是Micr
25、osoft公司推出的SQL Server 數(shù)據(jù)庫管理系統(tǒng)的一個版本。該版本繼承了SQL Server 7.0 版本的優(yōu)點同時又比它增加了許多更先進(jìn)的功能,具有使用方便,可伸縮性好與相關(guān)軟件集成程度高等優(yōu)點,可跨越從運行Microsoft Windows 98 的膝上型電腦到運行Microsoft Windows 2000 的大型多處理器的服務(wù)器等多種平臺使用。</p><p> SQL Server 2000的
26、優(yōu)點</p><p> 1、高性能設(shè)計,可充分利用WindowsNT的優(yōu)勢。 </p><p> 2、系統(tǒng)管理先進(jìn),支持Windows圖形化管理工具,支持本地和遠(yuǎn)程的系統(tǒng)管理和配置。 </p><p> 3、強(qiáng)壯的事務(wù)處理功能,采用各種方法保證數(shù)據(jù)的完整性。 </p><p> 4、支持對稱多處理器結(jié)構(gòu)、存儲過程、ODBC,并具有自主
27、的SQL語言。 SQLServer以其內(nèi)置的數(shù)據(jù)復(fù)制功能、強(qiáng)大的管理工具、與Internet的緊密集成和開放的系統(tǒng)結(jié)構(gòu)為廣大的用戶、開發(fā)人員和系統(tǒng)集成商提供了一個出眾的數(shù)據(jù)庫平臺。</p><p> 2.2.2 SQL Server 2000的特性</p><p> SQL Server 2000 數(shù)據(jù)庫引擎提供完整的XML 支持。它還具有構(gòu)成最大的Web 站點的數(shù)據(jù)存儲組件所需的可伸
28、縮性、可用性和安全功能。SQL Server 2000 程序設(shè)計模型與 Windows DNA 構(gòu)架集成,用以開發(fā) Web 應(yīng)用程序,并且SQL Server 2000 支持 English Query 和 Microsoft 搜索服務(wù)等功能,在Web 應(yīng)用程序中包含了用戶友好的查詢和強(qiáng)大的搜索功能。 </p><p><b> 可伸縮性和可用性</b></p><p&
29、gt; 同一個數(shù)據(jù)庫引擎可以在不同的平臺上使用,從運行 Microsoft Windows® 98 的便攜式電腦,到運行 Microsoft Windows 2000 數(shù)據(jù)中心版的大型多處理器服務(wù)器。SQL Server 2000 企業(yè)版支持聯(lián)合服務(wù)器、索引視圖和大型內(nèi)存支持等功能,使其得以升級到最大 Web 站點所需的性能級別。 </p><p><b> 企業(yè)級數(shù)據(jù)庫功能<
30、/b></p><p> SQL Server 2000 關(guān)系數(shù)據(jù)庫引擎支持當(dāng)今苛刻的數(shù)據(jù)處理環(huán)境所需的功能。數(shù)據(jù)庫引擎充分保護(hù)數(shù)據(jù)完整性,同時將管理上千個并發(fā)修改數(shù)據(jù)庫的用戶的開銷減到最小。SQL Server 2000 分布式查詢使您得以引用來自不同數(shù)據(jù)源的數(shù)據(jù),就好象這些數(shù)據(jù)是 SQL Server 2000 數(shù)據(jù)庫的一部分,同時分布式事務(wù)支持充分保護(hù)任何分布式數(shù)據(jù)更新的完整性。復(fù)制同樣使您得以維護(hù)
31、多個數(shù)據(jù)復(fù)本,同時確保單獨的數(shù)據(jù)復(fù)本保持同步??蓪⒁唤M數(shù)據(jù)復(fù)制到多個移動的脫接用戶,使這些用戶自主地工作,然后將他們所做的修改合并回發(fā)布服務(wù)器。 </p><p><b> 易于安裝部署和使用</b></p><p> SQL Server 2000 中包括一系列管理和開發(fā)工具,這些工具可改進(jìn)在多個站點上安裝、部署、管理和使用 SQL Server 的過程。SQL
32、 Server 2000 還支持基于標(biāo)準(zhǔn)的、與 Windows DNA 集成的程序設(shè)計模型,使 SQL Server 數(shù)據(jù)庫和數(shù)據(jù)倉庫的使用成為生成強(qiáng)大的可伸縮系統(tǒng)的無縫部分。這些功能使您得以快速交付 SQL Server 應(yīng)用程序,使客戶只需最少的安裝和管理開銷即可實現(xiàn)這些應(yīng)用程序。 </p><p> 數(shù)據(jù)倉庫。 SQL Server 2000 中包括析取和分析匯總數(shù)據(jù)以進(jìn)行聯(lián)機(jī)分析處理 (OLAP) 的工
33、具。SQL Server 中還包括一些工具,可用來直觀地設(shè)計數(shù)據(jù)庫并通過 English Query 來分析數(shù)據(jù)。</p><p> 第三章 系統(tǒng)需求分析</p><p><b> 3.1 系統(tǒng)分析</b></p><p> 本系統(tǒng)主要劃分為以下4個子模塊:房間標(biāo)準(zhǔn)模塊、房間信息模塊、登記客戶管理、注銷客戶管理。</p>&
34、lt;p> 圖3-1 系統(tǒng)功能模塊</p><p> 3.1.1 房間標(biāo)準(zhǔn)管理模塊</p><p> 房間標(biāo)準(zhǔn)是對一類房間的共同信息的管理。工作人員通過此模塊及時地修正房間的硬件升級信息及進(jìn)行價格調(diào)整。添加和修改房間標(biāo)準(zhǔn)沒有太大限制,而刪除房間標(biāo)準(zhǔn),意味著以房間標(biāo)準(zhǔn)為基礎(chǔ)的房間信息將被刪除,同時連帶著當(dāng)前住在這些房間的客戶信息也將被刪除,歷史記錄有關(guān)信息不刪除。</p&g
35、t;<p> 3.1.2 房間信息管理模塊</p><p> 房間是房間號與房間標(biāo)準(zhǔn)的具體組合。工作人員通過此模塊對房間信息進(jìn)行相應(yīng)的增加、修改和刪除操作。房間的添加必須指明房間的標(biāo)準(zhǔn),且房間標(biāo)準(zhǔn)已存在。房間號需獨一無二。房間修改不能修改房間號和房間標(biāo)準(zhǔn),可以修改房間備注。房間的刪除也會連帶著刪除當(dāng)前所住客戶的信息,但歷史記錄的信息不刪除。</p><p> 3.1.
36、3 登記客戶管理模塊</p><p> 一個新的客戶到來時,需填寫基本的客戶信息,并指定房間號。工作人員通過此模塊來記錄基本的客戶信息,以及入住信息。入住時間為登記的當(dāng)天,指定的房間號應(yīng)是系統(tǒng)中已存在的切可以入住。</p><p> 3.1.4 注銷客戶管理模塊</p><p> 注銷客戶是結(jié)算退房的操作。注銷時間為今天,應(yīng)付金額是住房天數(shù)與房間單價的乘積(
37、不足一天的,以一天計算)。工作人員通過此模塊完成結(jié)算退房操作,完成的結(jié)果添加到歷史數(shù)據(jù)庫,房間的該客戶入住信息將被刪除。</p><p> 圖3-2 系統(tǒng)功能模塊流程圖</p><p><b> 3.2 數(shù)據(jù)庫設(shè)計</b></p><p> 根據(jù)系統(tǒng)功能需求,數(shù)據(jù)庫采用Microsoft SQL Server2000建立。Microsof
38、t SQL Server2000是新一代大型電子商務(wù)、數(shù)據(jù)倉庫和數(shù)據(jù)庫解決方案。Microsoft SQL Server2000在分析服務(wù)、數(shù)據(jù)轉(zhuǎn)換服務(wù)、數(shù)據(jù)倉庫等方面引入了大量新特性。他為Web標(biāo)準(zhǔn)提供了強(qiáng)勁的支持,并為系統(tǒng)管理和調(diào)整提供了許多有力的工具。它完全可以適應(yīng)我們的工作需求,并且它所支持的數(shù)據(jù)類型十分豐富,操作簡便,維護(hù)費用比較低,容易升級。</p><p> 3.2.1 設(shè)計概念</p>
39、;<p> 標(biāo)準(zhǔn)和房間之間是一對多擁有的關(guān)系,一個房間有且只有一個標(biāo)準(zhǔn),而一個標(biāo)準(zhǔn)可以有多個房間。</p><p> 客戶和房間之間是一對多擁有的關(guān)系,一個客戶有且只有一個房間,而一個房間可以有多個客戶。</p><p> 圖3-3 旅館管理系統(tǒng)數(shù)據(jù)庫概念設(shè)計圖</p><p> 3.2.2 邏輯設(shè)計及表設(shè)計</p><p&
40、gt; 邏輯設(shè)計階段的任務(wù)是把概念結(jié)構(gòu)轉(zhuǎn)換為選用DBMS(數(shù)據(jù)庫管理系統(tǒng))所支持的模式。</p><p> 根據(jù)模塊的設(shè)計,以及根據(jù)規(guī)范化的設(shè)計要求,該系統(tǒng)的數(shù)據(jù)庫設(shè)計如表4至8所示。</p><p> 表3-4 標(biāo)準(zhǔn)信息表(roomtype)</p><p> 表3-5 房間信息表(rooms)</p><p> 表3-6 客戶信
41、息表(customer)</p><p> 表3-7 登記信息表(bookin)</p><p> 表3-8 注銷歷史信息表(history)</p><p> 第四章 系統(tǒng)設(shè)計與實現(xiàn)</p><p><b> 4.1 項目創(chuàng)建</b></p><p> 根據(jù)需求分析和系統(tǒng)的功能,使用
42、Visual C++6.0創(chuàng)建一個基于單文檔的MFC AppWizard(exe)項目,項目名為HMS(Hotel Management System)。如下圖:</p><p><b> 圖4-1</b></p><p> 4.2 主框架的設(shè)計</p><p> 4.2.1新增左邊的樹視圖類CLeftTreeView</p>
43、<p> 從菜單欄中選擇Insert——New Class命令,增加一個類,名為CLeftTreeView,基類為CTreeView。</p><p> 4.2.2 新增右邊顯示住房客戶信息的列表視圖CUserListView</p><p> 從菜單欄中選擇Insert——New Class命令,增加一個類,名為CUserListView,基類為CListView。&
44、lt;/p><p> 4.2.3 新增右邊顯示房間標(biāo)準(zhǔn)的Form視圖類CRoomTypeView</p><p> 由于Form視圖類需要Form資源才能建立,這里可以先建立一個沒有控件的Form資源,完成類的建立。從菜單欄中選擇Insert——Resource命令,彈出Insert Resource對話框。在Resource type列表中選擇Dialog——IDD_FORMVIEW,如
45、下圖所示,單擊New按鈕插入對話框資源,其ID設(shè)為IDD_FORMVIEW_TYPEINFO.</p><p><b> 圖4-2 </b></p><p> 4.2.4 創(chuàng)建主框架的客戶區(qū)</p><p><b> 1)定義視圖對象</b></p><p> 由于右邊的視圖是不確定的,會根
46、據(jù)具體情況在CUserListView和CRoomTypeView之間切換。所以在類CMainFrame聲明前定義兩個常量,表示右邊視圖的類型。并在其后加入聲明:</p><p> //定義右邊視的類型</p><p> #define ROOMTYPEVIEW0</p><p> #define USERLISTVIEW1</p>&l
47、t;p> class CLeftTreeView;</p><p> class CRoomTypeView;</p><p> class CUserListView;</p><p> class CMainFrame : public CFrameWnd</p><p><b> {</b><
48、/p><p> protected: // create from serialization only</p><p> CMainFrame();</p><p> DECLARE_DYNCREATE(CMainFrame)</p><p> // Attributes</p><p><b> p
49、ublic:</b></p><p> CRoomTypeView* m_pRoomTypeView;</p><p> CUserListView* m_pUserListView;</p><p> 由于左邊的視圖是控制區(qū),大部分操作需要調(diào)用左邊視圖來了解程序所處的情況。所以將其定義為全局變量。</p><p><
50、b> //HMS.cpp</b></p><p> CHMSApp theApp;</p><p> CLeftTreeView *m_pLeftView;</p><p><b> //HMS.h</b></p><p> extern CHMSApp theApp;</p>
51、<p> extern CLeftTreeView *m_pLeftView;</p><p><b> 2)視圖分割</b></p><p> 為了將客戶區(qū)分為左右兩部分,需要使用分隔條,于是在類CMainFrame中添加一個CSplitterWnd類型的成員變量m_wndSplitter,訪問方式為protected,其代碼如下:</p>
52、;<p> protected: // control bar embedded members</p><p> CStatusBar m_wndStatusBar;</p><p> CToolBar m_wndToolBar;</p><p> CSplitterWnd m_wndSplitter;</p><
53、;p> 通過ClassWizard為類CMainFrame添加虛函數(shù)OnCreateClient,在該函數(shù)中創(chuàng)建被分為兩部分的客戶區(qū)。其中左邊為CLeftTreeView,右邊開始設(shè)為CRoomTypeView,其代碼如下:</p><p> BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) &l
54、t;/p><p><b> {</b></p><p> // TODO: Add your specialized code here and/or call the base class</p><p> //return CFrameWnd::OnCreateClient(lpcs, pContext);</p><
55、;p> if(!m_wndSplitter.CreateStatic(this,1,2))</p><p> return FALSE;</p><p> if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CLeftTreeView),CSize(100,100),pContext))</p><p> re
56、turn FALSE;</p><p> if(!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CRoomTypeView),CSize(100,100),pContext))</p><p> return FALSE;</p><p> m_pLeftView = (CLeftTreeView*)m_wndSplit
57、ter.GetPane(0,0);</p><p> m_pRoomTypeView = (CRoomTypeView*)m_wndSplitter.GetPane(0,1);</p><p> return TRUE;</p><p> 3)視圖切換函數(shù)SwitchToView</p><p> 右邊的視圖是不確定的,會根據(jù)具體情況
58、在CUserListView和CRoomTypeView之間切換。為了實現(xiàn)切換,為類CmianFrame增加一個public類型的函數(shù)SwitchToView,他的實現(xiàn)代碼如下:</p><p> void CMainFrame::SwitchToView(int nViewType)</p><p><b> {</b></p><p>
59、 CView* pView = (CView*)m_wndSplitter.GetPane(0,1);</p><p> CRect rcRight,rcFrame;</p><p> pView->GetClientRect(&rcRight);</p><p> GetClientRect(&rcFrame);</p>
60、<p> switch(nViewType)</p><p><b> {</b></p><p> case ROOMTYPEVIEW://CRoomTypeView</p><p><b> {</b></p><p> m_wndSplitter.DeleteView
61、(0,1);</p><p> m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CRoomTypeView),</p><p> CSize(rcRight.Width(),rcRight.Height()),NULL);</p><p> m_wndSplitter.RecalcLayout();</p>
62、<p> m_pRoomTypeView= (CRoomTypeView*)m_wndSplitter.GetPane(0,1);</p><p><b> break;</b></p><p><b> }</b></p><p> case USERLISTVIEW://CUserListView&
63、lt;/p><p><b> {</b></p><p> CString str;</p><p> CTreeCtrl *pTree=&(m_pLeftView->GetTreeCtrl());</p><p> str=pTree->GetItemText(m_pLeftView->
64、m_hHitItem);</p><p> m_wndSplitter.DeleteView(0,1);</p><p> m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CUserListView),</p><p> CSize(rcRight.Width(),rcRight.Height()),NULL);</
65、p><p> m_wndSplitter.RecalcLayout();</p><p> m_pUserListView= (CUserListView*)m_wndSplitter.GetPane(0,1);</p><p> m_pUserListView->ShowUsers(str);</p><p><b>
66、break;</b></p><p><b> }</b></p><p><b> default:</b></p><p><b> break;</b></p><p><b> }</b></p><p>
67、; 4.3 數(shù)據(jù)庫操縱</p><p> 數(shù)據(jù)庫的操縱包括查詢、插入、修改和刪除等。為了實現(xiàn)同一接口操縱,我們用函數(shù)ADOExecute來統(tǒng)一所有的操作。</p><p> 4.3.1引入ADO動態(tài)鏈接庫</p><p> 1)在StdAfx.h中加入:</p><p> #import "C:\program file
68、s\common files\System\ado\msado15.dll" no_namespace \</p><p> rename("EOF","EndOfFile") \</p><p> rename("LockTypeEnum","newLockTypeEnum")\</p&
69、gt;<p> rename("DataTypeEnum","newDataTypeEnum")\</p><p> rename("FieldAttributeEnum","newFieldAttributeEnum")\</p><p> rename("EditModeEnu
70、m","newEditModeEnum")\</p><p> rename("RecordStatusEnum","newRecordStatusEnum")\</p><p> rename("ParameterDirectionEnum","newParameterDirectio
71、nEnum")</p><p> 4.3.2 定義智能指針對象</p><p> 1) 在類CHMSApp的頭文件中定義:</p><p> class CHMSApp : public CWinApp</p><p><b> {</b></p><p><b>
72、public:</b></p><p> CHMSApp();</p><p><b> public:</b></p><p> _RecordsetPtr m_pRs;</p><p> bool ADOExecute(_RecordsetPtr &ADOSet, _variant_t &
73、amp;strSQL);</p><p> // Overrides</p><p> // ClassWizard generated virtual function overrides</p><p> //{{AFX_VIRTUAL(CHMSApp)</p><p><b> public:</b><
74、;/p><p> virtual BOOL InitInstance();</p><p> //}}AFX_VIRTUAL</p><p> // Implementation</p><p> //{{AFX_MSG(CHMSApp)</p><p> afx_msg void OnAppAbout();&l
75、t;/p><p> // NOTE - the ClassWizard will add and remove member functions here.</p><p> // DO NOT EDIT what you see in these blocks of generated code !</p><p> //}}AFX_MSG</p>
76、<p> DECLARE_MESSAGE_MAP()</p><p><b> private:</b></p><p> // Define ADO Database Connnection</p><p> _ConnectionPtr m_pConn;</p><p><b> };
77、</b></p><p> 4.3.3 初始化智能指針</p><p> 1)在CHMSApp的InitInstance方法中初始化:</p><p> BOOL CHMSApp::InitInstance()</p><p><b> {</b></p><p> AfxE
78、nableControlContainer();</p><p> // Standard initialization</p><p> // If you are not using these features and wish to reduce the size</p><p> // of your final executable, you s
79、hould remove from the following</p><p> // the specific initialization routines you do not need.</p><p> #ifdef _AFXDLL</p><p> Enable3dControls();// Call this when using MFC
80、 in a shared DLL</p><p><b> #else</b></p><p> Enable3dControlsStatic();// Call this when linking to MFC statically</p><p><b> #endif</b></p><p
81、> // Create ADO Connection</p><p> if( FAILED(::CoInitialize(NULL)) ) </p><p><b> {</b></p><p> AfxMessageBox("ADO Init failed");</p><p>
82、return false;</p><p><b> }</b></p><p><b> try</b></p><p><b> {</b></p><p> m_pConn.CreateInstance(__uuidof(Connection));</p&g
83、t;<p> m_pConn->Open("DSN=HMS;Provider=MSDASQL","sa","", adConnectUnspecified);</p><p><b> }</b></p><p> // Catch Exceptions</p><
84、;p> catch(_com_error &e)</p><p><b> {</b></p><p> CString err;</p><p> err.Format("%s", (char*)(e.Description()) );</p><p> AfxMessage
85、Box(err);</p><p><b> }</b></p><p> catch(...)</p><p><b> {</b></p><p> AfxMessageBox("Unknown Error...");</p><p><
86、b> }</b></p><p> // Init ADO RecordSet</p><p> m_pRs.CreateInstance(__uuidof(Recordset));</p><p> // Change the registry key under which our settings are stored.</p&
87、gt;<p> // TODO: You should modify this string to be something appropriate</p><p> // such as the name of your company or organization.</p><p> SetRegistryKey(_T("Local AppWizard-
88、Generated Applications"));</p><p> LoadStdProfileSettings(); // Load standard INI file options (including MRU)</p><p> // Register the application's document templates. Document tem
89、plates</p><p> // serve as the connection between documents, frame windows and views.</p><p> CSingleDocTemplate* pDocTemplate;</p><p> pDocTemplate = new CSingleDocTemplate(<
90、;/p><p> IDR_MAINFRAME,</p><p> RUNTIME_CLASS(CHMSDoc),</p><p> RUNTIME_CLASS(CMainFrame), // main SDI frame window</p><p> RUNTIME_CLASS(CHMSView));</p>
91、<p> AddDocTemplate(pDocTemplate);</p><p> // Parse command line for standard shell commands, DDE, file open</p><p> CCommandLineInfo cmdInfo;</p><p> ParseCommandLine(cmdI
92、nfo);</p><p> // Dispatch commands specified on the command line</p><p> if (!ProcessShellCommand(cmdInfo))</p><p> return FALSE;</p><p> // The one and only window
93、 has been initialized, so show and update it.</p><p> m_pMainWnd->ShowWindow(SW_SHOW);</p><p> m_pMainWnd->UpdateWindow();</p><p> return TRUE;</p><p><b>
94、; }</b></p><p> 這里采用ADO連接數(shù)據(jù)源的方式,數(shù)據(jù)源名稱為HMS.</p><p> 4.3.4 統(tǒng)一接口ADOExecute的實現(xiàn)</p><p> 1)在CHMSApp中添加新方法:</p><p> bool CHMSApp::ADOExecute(_RecordsetPtr &ADOS
95、et, _variant_t &strSQL)</p><p><b> {</b></p><p> if ( ADOSet->State == adStateOpen)</p><p> ADOSet->Close();</p><p><b> try</b>&l
96、t;/p><p><b> {</b></p><p> ADOSet->Open(strSQL, m_pConn.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdUnknown);</p><p> return true;</p><p&g
97、t;<b> }</b></p><p> catch(_com_error &e)</p><p><b> {</b></p><p> CString err;</p><p> err.Format("ADO Error: %s",(char*)e.De
98、scription());</p><p> AfxMessageBox(err);</p><p> return false;</p><p><b> }</b></p><p><b> }</b></p><p> 4.4 樹視圖的實現(xiàn)</p>
99、<p><b> 4.4.1編輯圖標(biāo)</b></p><p> 樹視圖中的每一個樹項都對應(yīng)一個圖標(biāo),分別表示標(biāo)準(zhǔn)、房間。樹視圖中使用的圖標(biāo)共兩個。</p><p><b> 圖4-3 圖標(biāo)</b></p><p> 4.4.2 顯示樹視圖</p><p> 1)為類CLeft
100、TreeView增加protected類型的成員函數(shù)AddRoomTypeToTree和AddRoomToTree ,這兩個函數(shù)的作用分別是將房間類型顯示到樹狀圖中和將房間顯示到房間類型下。</p><p><b> 定義如下:</b></p><p> protected:</p><p> virtual ~CLeftTreeView
101、();</p><p> HTREEITEM AddRoomTypeToTree(CString strTypeName);</p><p> HTREEITEM AddRoomToTree(HTREEITEM hTypeItem, CString strRoomNum); </p><p><b> 實現(xiàn)如下:</b></p>
102、;<p> HTREEITEM CLeftTreeView::AddRoomTypeToTree(CString strTypeName)</p><p><b> {</b></p><p> CTreeCtrl* pCtrl = &GetTreeCtrl();</p><p> HTREEITEM hRootI
103、tem = pCtrl->GetRootItem();</p><p> if(hRootItem)</p><p><b> {</b></p><p> while(hRootItem)</p><p><b> {</b></p><p> CStrin
104、g strItemText = pCtrl->GetItemText(hRootItem);</p><p> if(strItemText == strTypeName)</p><p> return hRootItem;</p><p> hRootItem = pCtrl->GetNextSiblingItem(hRootItem);<
105、;/p><p><b> }</b></p><p><b> }</b></p><p> TV_INSERTSTRUCT TCItem;//插入數(shù)據(jù)項數(shù)據(jù)結(jié)構(gòu)</p><p> TCItem.hParent = TVI_ROOT;</p><p> TCItem.h
106、InsertAfter = TVI_LAST;</p><p> TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;//設(shè)屏蔽</p><p> TCItem.item.lParam=0;//序號</p><p> TCItem.item.iImage=0;//正常圖標(biāo)<
107、;/p><p> TCItem.item.iSelectedImage=0;//選中時圖標(biāo)</p><p> TCItem.item.pszText = (LPTSTR)(LPCTSTR)strTypeName;</p><p> HTREEITEM hSectionItem = pCtrl->InsertItem(&TCItem);</p&g
108、t;<p> //pCtrl->SortChildren(TVI_ROOT);</p><p> return hSectionItem;</p><p><b> }</b></p><p> HTREEITEM CLeftTreeView::AddRoomToTree(HTREEITEM hTypeItem,
109、CString strRoomNum)</p><p><b> {</b></p><p> if(hTypeItem == NULL)</p><p> return NULL;</p><p> CTreeCtrl* pCtrl = &GetTreeCtrl();</p><p&
110、gt; if(pCtrl->ItemHasChildren(hTypeItem))</p><p><b> {</b></p><p> HTREEITEM hItem = pCtrl->GetChildItem(hTypeItem);</p><p> while(hItem)</p><p>&
111、lt;b> {</b></p><p> CString strItemText = pCtrl->GetItemText(hItem);</p><p> if(strItemText == strRoomNum)</p><p> return hItem;</p><p> hItem = pCtrl-
112、>GetNextSiblingItem(hItem);</p><p><b> }</b></p><p><b> }</b></p><p> TV_INSERTSTRUCT TCItem;//插入數(shù)據(jù)項數(shù)據(jù)結(jié)構(gòu)</p><p> TCItem.hParent = hTypeIt
113、em;</p><p> TCItem.hInsertAfter = TVI_LAST;</p><p> TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE;//設(shè)屏蔽</p><p> TCItem.item.lParam=0;//序號</p><p&g
114、t; TCItem.item.iImage=2;//正常圖標(biāo)</p><p> TCItem.item.iSelectedImage=2;//選中時圖標(biāo)</p><p> TCItem.item.pszText = (LPTSTR)(LPCTSTR)strRoomNum;</p><p> HTREEITEM hRoomItem = pCtrl->In
115、sertItem(&TCItem);</p><p> //pCtrl->SortChildren(hTypeItem);</p><p> return hRoomItem;</p><p><b> }</b></p><p><b> 2)生成樹</b></p&g
116、t;<p> 為類CLeftTreeView增加public類型的成員函數(shù)FullfillTree,該函數(shù)調(diào)用時將根據(jù)數(shù)據(jù)庫的信息自動生成相應(yīng)的樹到樹視圖。</p><p><b> 定義如下:</b></p><p> void FullfillTree();</p><p><b> 實現(xiàn)如下:</b&
117、gt;</p><p> oid CLeftTreeView::FullfillTree()</p><p><b> {</b></p><p><b> //清空</b></p><p> CTreeCtrl* pCtrl = &GetTreeCtrl();</p>
118、<p> pCtrl->DeleteAllItems();</p><p><b> //添加房間類型</b></p><p> _variant_t Holder, strQuery;</p><p> strQuery = "select TypeID,TypeName from roomtype ord
119、er by TypeID";</p><p> theApp.ADOExecute(theApp.m_pRs, strQuery);</p><p> int iCount = theApp.m_pRs->GetRecordCount();</p><p> if ( 0==iCount ) return;</p><p&g
120、t; CString str;</p><p> theApp.m_pRs->MoveFirst();</p><p> for(int i=0; i<iCount; i++)</p><p><b> {</b></p><p> // Get typename</p><p&
121、gt; Holder = theApp.m_pRs->GetCollect("TypeName");</p><p> str = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;</p><p> AddRoomTypeToTree(str);</p><p>
122、theApp.m_pRs->MoveNext();</p><p><b> }</b></p><p><b> //添加房間</b></p><p> strQuery = "select roomtype.TypeName,rooms.RoomNO from rooms,roomtype whe
123、re rooms.TypeID=roomtype.TypeID";</p><p> theApp.ADOExecute(theApp.m_pRs, strQuery);</p><p> iCount = theApp.m_pRs->GetRecordCount();</p><p> if ( 0==iCount ) return;<
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機(jī)專業(yè)畢業(yè)論文---學(xué)校圖書管理系統(tǒng)的開發(fā)
- 計算機(jī)專業(yè)畢業(yè)論文---考勤管理系統(tǒng)
- 計算機(jī)專業(yè)酒店管理系統(tǒng)畢業(yè)論文
- 計算機(jī)專業(yè)畢業(yè)論文 考勤管理系統(tǒng)
- 計算機(jī)專業(yè)酒店管理系統(tǒng)畢業(yè)論文
- 計算機(jī)專業(yè)畢業(yè)論文--考勤管理系統(tǒng)
- 計算機(jī)專業(yè)畢業(yè)論文--考勤管理系統(tǒng)
- 計算機(jī)畢業(yè)論文范文畢業(yè)論文計算機(jī)專業(yè)
- 計算機(jī)專業(yè)畢業(yè)論文-圖書管理系統(tǒng)
- 計算機(jī)專業(yè)畢業(yè)論文---物業(yè)小區(qū)管理系統(tǒng)
- 計算機(jī)專業(yè)畢業(yè)論文---高校成績管理系統(tǒng)
- 計算機(jī)專業(yè)畢業(yè)論文-圖書管理系統(tǒng)
- 計算機(jī)應(yīng)用專業(yè)畢業(yè)論文---倉庫管理系統(tǒng)
- 計算機(jī)專業(yè)畢業(yè)論文圖書管理系統(tǒng)
- 計算機(jī)專業(yè)畢業(yè)論文-考勤管理系統(tǒng)設(shè)計
- 計算機(jī)專業(yè)畢業(yè)論文-圖書管理系統(tǒng)
- 大學(xué)計算機(jī)專業(yè)畢業(yè)論文-企業(yè)采購開發(fā)管理系統(tǒng)設(shè)計與實現(xiàn)
- 計算機(jī)故障與處理-計算機(jī)專業(yè)畢業(yè)論文
- 計算機(jī)專業(yè)畢業(yè)論文-圖書管理系統(tǒng)
- 計算機(jī)專業(yè)畢業(yè)論文
評論
0/150
提交評論