2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩46頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  彩色電視機故障信息管理系統(tǒng)(客戶端)</p><p>  The MIS fo TV applying in failure information</p><p><b>  摘 要</b></p><p>  本文介紹了如何使用Visual C++6.0編程制作以彩色電視機故障信息管理系統(tǒng)(客戶端部分)為例,實現(xiàn)信

2、息管理的自動化。由此實現(xiàn)了信息的增加、刪除、修改、查看等功能,并且進而實現(xiàn)信息的安全管理,使信息的管理更加人性化,規(guī)范化。集計算機技術(shù)、網(wǎng)絡(luò)通信技術(shù)為一體的信息管理系統(tǒng)。采用先進有效的管理體制,可以改善企業(yè)的經(jīng)營環(huán)境、降低經(jīng)營生產(chǎn)成本,提高企業(yè)的競爭力;使得企業(yè)的運行數(shù)據(jù)更加準確、及時、全面、詳實,同時對各種信息進一步加工,使企業(yè)領(lǐng)導(dǎo)層的決策依據(jù)充分,更具科學(xué)性,從而提高故障排除效率,提高信息利用率,有助于進一步提高了生產(chǎn)效率,使企業(yè)的

3、管理水平跨上新臺階,為企業(yè)持續(xù)、健康、穩(wěn)定的發(fā)展打下基礎(chǔ)。</p><p><b>  Abstract</b></p><p>  The main work of this paper is introduce how to use Visual C++6.0 programming a Color TV Malfunction-Information In-Co

4、mmon System, achieve the auto-manage of the Malfunction-Information. According these, this system achieves the information’s function of add、delete、edit and view., it also get the information managed safety, so the manag

5、ement of the information will be more humanity & normalize.Thereby, it can improve the efficiency of the malfunction’s elimination, enhance the exploitation of th</p><p>  關(guān)鍵詞: 數(shù)據(jù)庫   信息管理  模塊化管理 MI

6、S信息管理系統(tǒng)</p><p><b>  目錄</b></p><p><b>  摘 要1</b></p><p><b>  目錄2</b></p><p><b>  1.緒論4</b></p><p><b

7、>  1.1 前言4</b></p><p>  1.2 課題背景 目標 研究方法4</p><p>  1.3 主要完成工作及要求5</p><p>  2.MIS系統(tǒng)設(shè)計及功能分析介紹5</p><p>  2.1 MIS系統(tǒng)介紹5</p><p>  2.2 系統(tǒng)設(shè)計及功能分析7

8、</p><p>  2.3 功能模塊設(shè)計7</p><p>  3. 數(shù)據(jù)庫設(shè)計及ADO訪問數(shù)據(jù)庫7</p><p>  3.1 數(shù)據(jù)庫設(shè)計過程7</p><p>  3.2 創(chuàng)建應(yīng)用程序9</p><p>  3.3 數(shù)據(jù)庫操作準備11</p><p>  3.4 ADO訪問數(shù)據(jù)庫

9、13</p><p>  4.功能模塊的創(chuàng)建19</p><p>  4.1 系統(tǒng)主體窗體的創(chuàng)建19</p><p>  4.1.1主菜單的創(chuàng)建20</p><p>  4.1.2右鍵菜單的創(chuàng)建21</p><p>  4.1.3工具欄的創(chuàng)建22</p><p>  4.1.4數(shù)據(jù)顯

10、示與表格控件的創(chuàng)建22</p><p>  4.2 系統(tǒng)用戶權(quán)限管理模塊的創(chuàng)建24</p><p>  4.2.1添加用戶對話框的創(chuàng)建24</p><p>  4.2.2 更改密碼對話框的創(chuàng)建26</p><p>  4.2.3 刪除用戶對話框的創(chuàng)建27</p><p>  4.2.4 用戶登錄對話框的創(chuàng)建

11、27</p><p>  4.3 信息管理模塊的創(chuàng)建27</p><p>  4.3.1 添加記錄對話框的創(chuàng)建28</p><p>  4.3.2 查詢記錄對話框的創(chuàng)建30</p><p>  4.3.3 修改記錄對話框的創(chuàng)建31</p><p>  4.3.4 查看記錄對話框的創(chuàng)建32</p>

12、<p>  4.4 打印預(yù)覽模塊的創(chuàng)建32</p><p>  5. Windows Sockets34</p><p>  5.1 規(guī)范簡介34</p><p>  5.2 Bekeley套接口36</p><p>  5.3 Microsoft Windows和針對Windows的擴展36</p>&l

13、t;p>  5.4 接口網(wǎng)絡(luò)編程原理36</p><p>  5.5 Windows Sockets編程原理39</p><p>  6. 遠程數(shù)據(jù)的管理和系統(tǒng)的實現(xiàn)41</p><p>  6.1遠程數(shù)據(jù)的管理41</p><p>  6.2 程序的編譯和系統(tǒng)的實現(xiàn)42</p><p>  7. 問題

14、擴展43</p><p>  8. 小 結(jié)45</p><p><b>  致 謝46</b></p><p><b>  參考文獻47</b></p><p><b>  1.緒論</b></p><p><b>  1.1

15、前言</b></p><p>  信息化建設(shè)對企業(yè)來說無疑已經(jīng)成為企業(yè)在現(xiàn)代競爭社會中立足的重要因素。而從中國大陸企業(yè)現(xiàn)狀來看,大部分企業(yè)的信息化建設(shè)都是依靠專業(yè)化軟件公司。毋庸置疑,對于大規(guī)模的管理系統(tǒng),例如CRM(Client Relation Manager),ERP(Enterprise Resource Plan)等,使用專業(yè)軟件公司開發(fā)的產(chǎn)品,功能相對齊全,安全級別也相對較高。但對于企業(yè)內(nèi)

16、部小范圍內(nèi)所需的一些小系統(tǒng)而言,如也依靠此種方式,勢必會產(chǎn)生無謂的成本流失。鑒于這種形式,借助這次畢業(yè)設(shè)計的機會,在龔迪琛教師的指導(dǎo)下,經(jīng)過一段時間的努力,開發(fā)出了這套彩色電視機故障信息管理系統(tǒng)(客戶端部分)。本系統(tǒng)主要用于對已有故障信息進行更高效的管理,提高信息的利用率,改變了以往煩瑣的查找,大大提高了故障的排除速度及正確率,對進一步提高生產(chǎn)及管理效率具有十分重要的意義。</p><p>  1.2 課題背景

17、目標 研究方法 </p><p><b>  (1)背景</b></p><p>  隨著中國加入WTO,競爭也越來越慘烈,中國的制造業(yè)同樣面臨者巨大的挑戰(zhàn)??茖W(xué)技術(shù)的飛速發(fā)展,產(chǎn)品功能要求的日益增多,復(fù)雜性增加,壽命期縮短,更新?lián)Q代速度加快。然而,產(chǎn)品的管理,尤其是機械產(chǎn)品方案的遠程管理手段,則顯得力不從心,跟不上時代發(fā)展的需要。目前,機械產(chǎn)品遠程管理已得

18、到了比較廣泛和深入的研究,并初見成效,企業(yè)中龐大的激烈變化的產(chǎn)品數(shù)據(jù)僅僅依靠手工方式來管理是很難做到準確性、完整性、及時性和可追溯性的要求的。因此,將企業(yè)產(chǎn)品塊化的管理創(chuàng)新成果與信息系統(tǒng)的建設(shè)結(jié)合起來是很好的解決方案。模塊化的產(chǎn)品遠程管理可以在保持產(chǎn)品較高通用性的同時提供產(chǎn)品的多樣化配置和服務(wù),因此,機械產(chǎn)品遠程管理方案應(yīng)該得到進一步的研究和開發(fā)。在這里以彩色電視機故障信息管理系統(tǒng)(客戶端部分)作為研究對象。</p>&l

19、t;p> ?。?)目標設(shè)計(主要研究內(nèi)容或創(chuàng)新點)</p><p>  本著提高效率降低成本為出發(fā)點,以彩色電視機故障信息管理為具體范例,探討對企業(yè)產(chǎn)品信息管理MIS系統(tǒng)的開發(fā),并增加遠程管理功能,使生產(chǎn)工程部的故障處理工作系統(tǒng)化,規(guī)范化。</p><p>  (3) 研究方法與技術(shù)路線及預(yù)期結(jié)果</p><p>  本課題為應(yīng)用型管理系統(tǒng)的開發(fā),嘗試增加遠程

20、管理功能,采用小型DBMS(數(shù)據(jù)庫管理系統(tǒng))ACESS,通過TCP/IP協(xié)議利用winsockect結(jié)合,DAO或者ADO與關(guān)系數(shù)據(jù)的接口實現(xiàn)產(chǎn)品信息的管理,查詢,整理等工作。 本部分為客戶端部分。</p><p>  1.3 主要完成工作及要求</p><p>  (1)盡量采用生產(chǎn)工程部現(xiàn)有的軟硬件環(huán)境及齊全的故障信息,從而達到充分利用現(xiàn)有資源,提高系統(tǒng)開發(fā)水平和應(yīng)用效果的目的。&l

21、t;/p><p>  (2)系統(tǒng)應(yīng)符合生工部資料管理規(guī)范,符合普通員工操作的規(guī)范,達到操作過程中的直觀、方便、實用、安全等要求。</p><p> ?。?)系統(tǒng)采用Visual C++6.0環(huán)境,用ADO(ActiveX Data Objects)數(shù)據(jù)訪問方式,采用Microsoft Access 2003作為數(shù)據(jù)源,使整個系統(tǒng)易于使用及維護。</p><p>  (4

22、)系統(tǒng)采用模塊化程序設(shè)計方法,既便于系統(tǒng)功能的各種組合和修改,又便于未參與開發(fā)的技術(shù)維護人員補充、維護。</p><p>  (5)系統(tǒng)應(yīng)具備數(shù)據(jù)維護功能,及時根據(jù)數(shù)據(jù)變化進行添加、刪除、修改、查詢等操作,并加入擁護權(quán)限功能,以及遠程管理功能,使系統(tǒng)更加安全適用。</p><p>  2.MIS系統(tǒng)設(shè)計及功能分析介紹</p><p>  2.1 MIS系統(tǒng)介紹<

23、;/p><p>  所謂MIS(管理信息系統(tǒng)--Management Information System)系統(tǒng) ,是一個由人、計算機及其他外圍設(shè)備等組成的能進行信息的收集、傳遞、存貯、加工、維護和使用的系統(tǒng)。是一門新興的科學(xué),其主要任務(wù)是最大限度的利用現(xiàn)代計算機及網(wǎng)絡(luò)通訊技術(shù)加強企業(yè)的信息管理,通過對企業(yè)擁有的人力、物力、財力、設(shè)備、技術(shù)等資源的調(diào)查了解,建立正確的數(shù)據(jù),加工處理并編制成各種信息資料及時提供給管理人

24、員,以便進行正確的決策,不斷提高企業(yè)的管理水平和經(jīng)濟效益。目前,企業(yè)的計算機網(wǎng)絡(luò)已成為企業(yè)進行技術(shù)改造及提高企業(yè)管理水平的重要手段。隨著我國與世界信息高速公路的接軌,企業(yè)通過計算機網(wǎng)絡(luò)獲得信息必將為企業(yè)帶來巨大的經(jīng)濟效益和社會效益,企業(yè)的辦公及管理都將朝著高效、快速、無紙化的方向發(fā)展。MIS系統(tǒng)通常用于系統(tǒng)決策,例如,可以利用MIS系統(tǒng)找出目前迫切需要解決的問題,并將信息及時反饋給上層管理人員,使他們了解當(dāng)前工作發(fā)展的進展或不足。換句話

25、說,MIS系統(tǒng)的最終目的是使管理人員及時了解公司現(xiàn)狀,把握將來的發(fā)展路徑。 </p><p>  一個完整的MIS應(yīng)包括:輔助決策系統(tǒng)(DSS)、工業(yè)控制系統(tǒng)(IPC)、辦公自動化系統(tǒng)(OA)以及數(shù)據(jù)庫、模型庫、方法庫、知識庫和與上級機關(guān)及外界交換信息的接口。其中,特別是辦公自動化系統(tǒng)(OA)、與上級機關(guān)及外界交換信息等都離不開Intranet的應(yīng)用??梢赃@樣說,現(xiàn)代企業(yè)MIS不能沒有Intranet,但Intr

26、anet的建立又必須依賴于MIS的體系結(jié)構(gòu)和軟硬件環(huán)境。</p><p>  傳統(tǒng)的MIS系統(tǒng)的核心是CS(Client/Server——客戶端/服務(wù)器)架構(gòu),而基于Internet的MIS系統(tǒng)的核心是BS(Browser/Server——瀏覽器/服務(wù)器)架構(gòu)。BS架構(gòu)比起CS架構(gòu)有著很大的優(yōu)越性,傳統(tǒng)的MIS系統(tǒng)依賴于專門的操作環(huán)境,這意味著操作者的活動空間受到極大限制;而BS架構(gòu)則不需要專門的操作環(huán)境,在任何

27、地方,只要能上網(wǎng),就能夠操作MIS系統(tǒng),這其中的優(yōu)劣差別是不言而喻的。</p><p>  基于Internet上的MIS系統(tǒng)是對傳統(tǒng)MIS系統(tǒng)概念上的擴展,它不僅可以用于高層決策,而且可以用于進行普通的商務(wù)管理。通過用戶的具名登錄(或匿名登錄),以及相應(yīng)的權(quán)限控制,可以實現(xiàn)在遠端對系統(tǒng)的瀏覽、查詢、控制和審閱。隨著Internet的擴展,現(xiàn)有的公司和學(xué)校不再局限于物理的有形的真實的地域,網(wǎng)絡(luò)本身成為事實上發(fā)展的

28、空間。基于Internet上的MIS系統(tǒng),彌補了傳統(tǒng)MIS系統(tǒng)的不足,充分體現(xiàn)了現(xiàn)代網(wǎng)絡(luò)時代的特點。隨著Internet技術(shù)的高速發(fā)展,因特網(wǎng)必將成為人類新社會的技術(shù)基石?;贗nternet的MIS系統(tǒng)必將成為網(wǎng)絡(luò)時代的新一代管理信息系統(tǒng),前景極為樂觀。</p><p>  2.2 系統(tǒng)設(shè)計及功能分析</p><p>  通過一個彩電故障信息管理系統(tǒng),使生產(chǎn)工程部客戶端部分的故障處理工作

29、模塊化,系統(tǒng)化,規(guī)范化,自動化,從而達到提高故障排除效率,提高信息利用率的目的。本系統(tǒng)功能分析是在系統(tǒng)開發(fā)總體任務(wù)的基礎(chǔ)上完成的,本系統(tǒng)需要完成的功能如下:</p><p>  故障信息的輸入、查詢、修改、刪除</p><p><b>  故障信息的打印</b></p><p>  系統(tǒng)用戶管理,權(quán)限管理</p><p>

30、;  2.3 功能模塊設(shè)計</p><p>  在系統(tǒng)功能分析的基礎(chǔ)上,考慮Visual C++程序編制的特點,得到圖1所示的系統(tǒng)功能模塊圖。</p><p>  圖1 系統(tǒng)功能模塊圖 圖2 數(shù)據(jù)流程</p><p>  3. 數(shù)據(jù)庫設(shè)計及ADO訪問數(shù)據(jù)庫</p><p>  3.1 數(shù)據(jù)庫設(shè)計過程&

31、lt;/p><p>  數(shù)據(jù)庫技術(shù)是信息資源管理最有效的手段。數(shù)據(jù)庫設(shè)計是指對于一個給定的應(yīng)用環(huán)境,構(gòu)造最優(yōu)的數(shù)據(jù)庫模式,建立數(shù)據(jù)庫及其應(yīng)用系統(tǒng),有效存儲數(shù)據(jù),滿足用戶信息要求和處理要求。數(shù)據(jù)庫設(shè)計中需求分析階段綜合各個用戶的應(yīng)用需求(現(xiàn)實世界的需求),在概念設(shè)計階段形成獨立于機器特點、獨立于各個DBMS產(chǎn)品的概念模式(信息世界模型),用E-R圖來描述。在邏輯設(shè)計階段將E-R圖轉(zhuǎn)換成具體的數(shù)據(jù)庫產(chǎn)品支持的數(shù)據(jù)模型如關(guān)

32、系模型,形成數(shù)據(jù)庫邏輯模式。然后根據(jù)用戶處理的要求,安全性的考慮,在基本表的基礎(chǔ)上再建立必要的視圖(VIEW)形成數(shù)據(jù)的外模式。在物理設(shè)計階段根據(jù)DBMS特點和處理的需要,進行物理存儲安排,設(shè)計索引,形成數(shù)據(jù)庫內(nèi)模式。數(shù)據(jù)結(jié)構(gòu)的好壞將直接影響到系統(tǒng)的效率以及實現(xiàn)的效果。好的數(shù)據(jù)庫結(jié)構(gòu)會減少數(shù)據(jù)庫的存儲量、冗余度,數(shù)據(jù)的完整性和一致性比較高,系統(tǒng)具有較快的響應(yīng)速度,簡化基于數(shù)據(jù)庫的應(yīng)用程序的實現(xiàn)方法等,一般可將數(shù)據(jù)庫結(jié)構(gòu)設(shè)計分為四個階段,

33、即需求分析、概念結(jié)構(gòu)設(shè)計、邏輯結(jié)構(gòu)設(shè)計和物理設(shè)計。</p><p> ?。?)數(shù)據(jù)庫需求分析</p><p>  需求分析的任務(wù)是具體了解應(yīng)用環(huán)境,了解與分析用戶對數(shù)據(jù)和數(shù)據(jù)處理的需求,對應(yīng)用系統(tǒng)的性能的要求,提出新系統(tǒng)的目標,為第二階段、第三階段的設(shè)計奠定基礎(chǔ)。在仔細研究資料管理過程的基礎(chǔ)上,歸納出系統(tǒng)的數(shù)據(jù)流程圖如上圖2所示,所有數(shù)據(jù)均由管理員輸入管理。</p><

34、p>  根據(jù)圖2的數(shù)據(jù)流程圖,可得到所須設(shè)計的數(shù)據(jù)項和數(shù)據(jù)結(jié)構(gòu)如下:</p><p>  故障信息,包括的數(shù)據(jù)項有顯象管、機芯、機殼、器件、技術(shù)員、時間、其他、信息名、具體內(nèi)容等。</p><p>  權(quán)限驗證,包括的數(shù)據(jù)項有用戶名、密碼等。</p><p>  由上分析,為此需要有2個數(shù)據(jù)表分別用來存放故障信息的用戶信息。這兩個數(shù)據(jù)表均用Access 200

35、0實現(xiàn)。Access中的設(shè)計視圖如圖3、圖4所示,其中數(shù)據(jù)類型根據(jù)具體的數(shù)據(jù)字段來設(shè)置。</p><p>  圖3 info1視圖</p><p>  圖4 login視圖</p><p>  (2)數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計</p><p>  概念模型用于信息世界的建模。概念模型不依賴于某一個DBMS支持的數(shù)據(jù)模型。概念模型可以轉(zhuǎn)換為計算機上某一

36、DBMS支持的特定數(shù)據(jù)模型。概念結(jié)構(gòu)設(shè)計是在需求分析的基礎(chǔ)上對所有數(shù)據(jù)要求按一定方法進行抽象與綜合處理,設(shè)計出不依賴于某種具體DBMS的滿足用戶應(yīng)用需求的信息結(jié)構(gòu)。這種信息結(jié)構(gòu)我們稱為概念模型。通過對用戶需求進行綜合、歸納與抽象,形成一個獨立于具體DBMS的概念模型,可以用E-R圖表示,概念模型特點: (1) 具有較強的語義表達能力,能夠方便、直接地表達應(yīng)用中的各種語義知識。  (2) 應(yīng)簡單、清晰、易

37、于用戶理解,是用戶與數(shù)據(jù)庫設(shè)計人員之間進行交流的語言。 最常用的概念結(jié)構(gòu)設(shè)計方法有實體分析法、面向?qū)ο笤O(shè)計方法、屬性綜合法和規(guī)范化關(guān)系方法。我們此處主要討論實體分析法。這是一種自上而下抽象的方法。這種方法要求根據(jù)前面數(shù)據(jù)的需求分析,確定系統(tǒng)范圍,確定實體及其屬性,畫出系統(tǒng)的實體聯(lián)系模型(E-R圖)。在分析需求的基礎(chǔ)上,我們得到整個系統(tǒng)的E-R圖。</p><p>  3.2 創(chuàng)建應(yīng)用程序</p>

38、;<p>  本彩電故障信息共享系統(tǒng)采用Visual C++ 6.0的ADO方法開發(fā)。工程創(chuàng)建具體步驟如下:</p><p>  打開Visual C++后,選擇菜單“File/New”中的“Project”選項卡中的“MFC AppWizard [exe]”,設(shè)置工程名字為“CaidianGuzhang”,選擇存儲位置,單擊“OK”。</p><p>  創(chuàng)建一個單文檔應(yīng)用

39、程序,在Step1中,選擇“Single Document”,然后單擊“Next”按扭,進入“Step 2 of 6”。</p><p>  一直單擊“Next”按扭,直到進入“Step 6 of 6”。因為為了能使數(shù)據(jù)更直觀,我們采用列表形式,所以需要在本步驟中,選擇CCaidianGuzhangView類的Base Class(基類)為ClistView。然后單擊“Finish”,最后將出現(xiàn)確認窗口,如圖6所

40、示,檢查無誤后,單擊“確定”,即可完成工程創(chuàng)建。</p><p><b>  圖6 確認</b></p><p>  為了使程序能支持ADO數(shù)據(jù)庫對象,以使程序能正確的調(diào)用數(shù)據(jù)庫,應(yīng)該在頭文件stdafx.h中加入</p><p>  #import "c:\Program Files\Common Files\System\ado\

41、msado15.dll"\</p><p>  rename_namespace("AdoNS")\</p><p>  rename("EOF","adoEOF")</p><p>  using namespace AdoNS; 導(dǎo)入ADO庫</p><p>  并

42、在主程序入口:BOOL CCaidianGuzhangApp::InitInstance()中加入AfxOleInit();初始化COM環(huán)境。</p><p>  ADO類的定義是作為一種資源存儲在ADO DLL(msado15.dll)中,在其內(nèi)部稱為類型庫。類型庫描述了自治接口,以及C++使用的COM vtable接口。當(dāng)使用#import指令時,在運行時Visual C++需要從ADO DLL中讀取這個類型

43、庫,并以此創(chuàng)建一組C++頭文件。</p><p>  ADO庫包含三個智能指針:_ConnectionPtr、_CommandPtr和_RecordsetPtr。  _ConnectionPtr通常被用來創(chuàng)建一個數(shù)據(jù)連接或執(zhí)行一條不返回任何結(jié)果的SQL語句,如一個存儲過程?! CommandPtr返回一個記錄集。它提供了一種簡單的方法來執(zhí)行返回記錄集的存儲過程和SQL語句。在使用_CommandPtr接口時

44、,可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用連接串?! ?_RecordsetPtr是一個記錄集對象。與以上兩種對象相比,它對記錄集提供了更多的控制功能,如記錄鎖定、游標控制等。</p><p>  3.3 數(shù)據(jù)庫操作準備</p><p> ?。?) 初始化接口: initialDbConnect(CString mdbname)&l

45、t;/p><p>  在本系統(tǒng)中通過建立一個數(shù)據(jù)庫類class DatabaseOperate 來實現(xiàn)整個信息系統(tǒng)對數(shù)據(jù)的操作,下面是對其提供的主要接口的設(shè)計:</p><p>  該接口函數(shù)的作用是初始化連接數(shù)據(jù)源。</p><p>  BOOL DatabaseOperate::InitialDbConnect(CString mdbname)</p>

46、<p>  { m_pConnection.CreateInstance(_uuidof(Connection));</p><p><b>  //先連接數(shù)據(jù)庫</b></p><p>  CString strConnect;</p><p>  BSTR bstrSQL;</p><p>  str

47、Connect.Format(_T("Provider = Microsoft.JET.OLEDB.4.0; </p><p>  Data ource=%s"),mdbname);</p><p>  bstrSQL = strConnect.AllocSysString();</p><p><b>  ……………</b&g

48、t;</p><p>  AfxMessageBox(e.ErrorMessage());</p><p>  return false; }</p><p>  return true; } 該接口的主要功能是連接我們在Access 2003中設(shè)計的數(shù)據(jù)源,CString mdbname變量作為數(shù)據(jù)庫文件mdb的名稱,由調(diào)用 DatabaseOper

49、ate 類的主程序給出。在本設(shè)計中是“info1.mdb”</p><p> ?。?)執(zhí)行查詢,修改,添加,刪除等功能的接口函數(shù)的設(shè)計</p><p>  BOOL DatabaseOperate::ExecuteSQLEx(CString strSQL)</p><p><b>  {</b></p><p>  _

50、variant_t RecordsAffected;//</p><p>  _bstr_t bstrSql(strSQL);</p><p><b>  try</b></p><p>  { m_pConnection->Execute(bstrSql,&RecordsAffected,adCmdText);</p&g

51、t;<p><b>  }</b></p><p>  catch (_com_error e)</p><p><b>  {</b></p><p>  AfxMessageBox(e.ErrorMessage());</p><p>  return FALSE; }<

52、/p><p>  return TRUE; }</p><p>  通過執(zhí)行一條SQL語句來實現(xiàn)數(shù)據(jù)庫的讀寫操作,其中m_pConnection是我們在調(diào)用InitialDbConnect初始化接口時候創(chuàng)建的連接型智能指針,我們可以通過它來執(zhí)行SQL語句</p><p> ?。?) 獲取數(shù)據(jù)信息接口函數(shù)的設(shè)計</p><p>  BOOL Da

53、tabaseOperate:: GetCurrentRecordSet(Recordstruct&result,long Shijiansuoyin,CString tablename)</p><p><b>  {</b></p><p>  _RecordsetPtr tem_pRecordset;</p><p>  tem

54、_pRecordset.CreateInstance(_uuidof(Recordset));//初始化Recordset指針</p><p>  CString strSql;</p><p>  strSql.Format( _T("select * from %s where sjsy=%d "), tablename, Shijiansuoyin);</

55、p><p>  BSTR bstrSQL = strSql.AllocSysString(); </p><p><b>  try</b></p><p>  {tem_pRecordset->Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,ad

56、CmdText); </p><p><b>  }</b></p><p>  catch (_com_error e)//異常處理</p><p><b>  {</b></p><p>  AfxMessageBox(e.ErrorMessage());</p><p>

57、;  if (tem_pRecordset->State) {</p><p>  tem_pRecordset->Close();</p><p>  tem_pRecordset.Release();</p><p><b>  }</b></p><p>  return FALSE;</p>

58、;<p><b>  }</b></p><p>  while(!tem_pRecordset->adoEOF)//遍歷所有記錄</p><p>  { _variant_t v_xxg,v_jx,v_jk, v_qj</p><p>  v_ xxg = tem_pRecordset->GetCollect(_

59、T("顯象管"));</p><p>  v_ jx = tem_pRecordset->GetCollect(_T("機芯"));</p><p>  v_ jk = tem_pRecordset->GetCollect(_T("機殼"));</p><p>  v_ qj = tem_pRe

60、cordset->GetCollect(_T("器件"));</p><p>  …………………………..</p><p>  //獲取各個字段的信息</p><p>  //將各字段信息賦值給result結(jié)構(gòu)體,此處省略</p><p>  tem_pRecordset->MoveNext();//轉(zhuǎn)到下一條

61、紀錄</p><p><b>  }</b></p><p>  if (tem_pRecordset->State) {</p><p>  tem_pRecordset->Close();</p><p>  tem_pRecordset.Release();</p><p>&l

62、t;b>  }</b></p><p>  return TRUE;</p><p><b>  }</b></p><p>  其中參數(shù)Recordstruct&result是對查詢結(jié)果定義的結(jié)構(gòu)體,與前面我們在數(shù)據(jù)庫中建立的彩電信息的結(jié)構(gòu)一致:</p><p>  typedef struc

63、t _Recordstruct</p><p><b>  { </b></p><p>  CString xxg ;//顯象管</p><p>  CString jx;//機芯</p><p>  CString qj;//器件</p><p>  CString jsy;

64、//技術(shù)員</p><p>  CString sj;//時間</p><p>  CString qita;//其他信息</p><p>  CString sj;//信息名</p><p>  CString qita;//具體內(nèi)容</p><p>  long sjsy;//時間索引&l

65、t;/p><p>  }Recordstruct,* pRecordstruct;</p><p>  3.4 ADO訪問數(shù)據(jù)庫</p><p> ?。?) 生成應(yīng)用程序框架并初始化OLE/COM庫環(huán)境 </p><p>  創(chuàng)建一個標準的MFC AppWizard(exe)應(yīng)用程序,然后在使用ADO數(shù)據(jù)庫InitInstance函數(shù)中初始化OL

66、E/COM庫(因為ADO庫是一個COM DLL庫)。</p><p>  創(chuàng)建一個標準的MFC AppWizard(exe)應(yīng)用程序,然后在使用ADO數(shù)據(jù)庫的InitInstance函數(shù)中初始化OLE/COM庫(因為ADO庫是一個COM DLL庫)。本例為: </p><p>  BOOL CAdotestDlg::OnInitDialog()</p><p>&

67、lt;b>  {</b></p><p>  ::CoInitialize(NULL); //初始化OLE/COM庫環(huán)境 </p><p><b>  } </b></p><p>  程序最后要調(diào)用 ::CoUninitialize();//釋放程序占用的COM 資源。  另外:</p><p>

68、  m_pRecordset->Close(); 注意?。?!不要多次關(guān)閉!?。。。。。。。。。?!</p><p>  m_pConnection->Close();</p><p>  m_pRecordset = NULL;</p><p>  m_pConnection = NULL; </p><p> ?。?) 引入ADO

69、庫文件 </p><p>  使用ADO前必須在工程的stdafx.h文件最后用直接引入符號#import引入ADO庫文件,以使編譯器能正確編譯。ADO類的定義是作為一種資源存儲在ADO DLL(msado15.dll)中,在其內(nèi)部稱為類型庫。類型庫描述了自治接口,以及C++使用的COM vtable接口。當(dāng)使用#import指令時,在運行時Visual C++需要從ADO DLL中讀取這個類型庫,并以此創(chuàng)建一組

70、C++頭文件。這些頭文件具有.tli 和.tlh擴展名,讀者可以在項目的目錄下找到這兩個文件。在C++程序代碼中調(diào)用的ADO類要在這些文件中定義。     程序的第三行指示ADO對象不使用名稱空間。在有些應(yīng)用程序中,由于應(yīng)用程序中的對象與ADO中的對象之間可能會出現(xiàn)命名沖突,所以有必要使用名稱空間。如果要使用名稱空間,則可把第三行程序修改為: rename_namespace("AdoNS")。第四行代碼

71、將ADO中的EOF(文件結(jié)束)更名為adoEOF,以避免與定義了自己的EOF的其他庫沖突。 </p><p> ?。?) 利用智能指針進行數(shù)據(jù)庫操作 </p><p>  在CaboutDlg頭文件中定義兩個ADO智能指針類實例,并在對話框中加入一個ListCtrl。</p><p>  class CAdotestDlg : public CDialog</

72、p><p>  { _ConnectionPtr m_pConnection;</p><p>  _RecordsetPtr m_pRecordset;</p><p>  ClistCtrl m_List; </p><p><b>  ......</b></p><p><b>

73、  } </b></p><p>  ADO庫包含三個智能指針:_ConnectionPtr、_CommandPtr和_RecordsetPtr。_ConnectionPtr通常被用來創(chuàng)建一個數(shù)據(jù)連接或執(zhí)行一條不返回任何結(jié)果的SQL語句,如一個存儲過程。  _CommandPtr返回一個記錄集。它提供了一種簡單的方法來執(zhí)行返回記錄集的存儲過程和SQL語句。在使用_CommandPtr接口時

74、,可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用連接串。  _RecordsetPtr是一個記錄集對象。與以上兩種對象相比,它對記錄集提供了更多的控制功能,如記錄鎖定、游標控制等。 </p><p>  在使用ADO程序的事件響應(yīng)中OnButton1加入以下代碼: </p><p>  void CAdotestDlg::OnButton1()

75、</p><p><b>  {</b></p><p>  m_List.ResetContent();</p><p>  m_pConnection.CreateInstance(_uuidof(Connection)); //初始化Connection指針</p><p>  m_pRecordset.Creat

76、eInstance(_uuidof(Recordset));//初始化Recordset指針</p><p><b>  try</b></p><p><b>  {</b></p><p>  m_pConnection->Open("DSN=ADOTest","",&qu

77、ot;",0); //連接叫作ADOTest的ODBC數(shù)據(jù)源</p><p>  //注意:這是連接不需要用戶ID或密碼的open 函數(shù)</p><p>  // 否則形式為 ->Open("DSN=test;uid=sa;pwd=123;","","",0); </p><p>  //

78、執(zhí)行SQL語句得到一個記錄集把其指針賦值給m_pRecordset</p><p>  CString strSql="select * from middle";</p><p>  BSTR bstrSQL = strSql.AllocSysString(); </p><p>  m_pRecordset->Open(bstrSQL,

79、(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); </p><p>  //adOpenDynamic:動態(tài) adLockOptimistic樂觀封鎖法 adCmdText:文本查詢語句</p><p>  while(!m_pRecordset->adoEOF)//遍歷所有記錄</p&g

80、t;<p><b>  { </b></p><p>  //取紀錄字段值方式之一</p><p>  _variant_t TheValue; //VARIANT數(shù)據(jù)類型</p><p>  TheValue = m_pRecordset->GetCollect("BIG_NAME");//得到字段BI

81、G_NAME的值</p><p>  if(TheValue.vt!=VT_NULL)</p><p>  m_List.AddString((char*)_bstr_t(TheValue));</p><p>  //將該值加入到列表控件中</p><p>  //取紀錄字段值方式之二</p><p>  // _b

82、str_t TheValue1=m_pRecordset->Fields->GetItem("BIG_NAME")->Value;</p><p>  // CString temp=TheValue1.copy();</p><p>  // m_List.AddString(temp);</p><p><b> 

83、 //數(shù)據(jù)類型轉(zhuǎn)換</b></p><p>  _variant_t vUsername,vBirthday,vID,vOld;</p><p>  TRACE("id:%d,姓名:%s,年齡:%d,生日:%s\r\n",</p><p>  vID.lVal,(LPCTSTR)(_bstr_t)vUsername,vOld.lVal

84、,(LPCTSTR)(_bstr_t)vBirthday);</p><p>  m_pRecordset->MoveNext();//轉(zhuǎn)到下一條紀錄</p><p><b>  }</b></p><p>  m_pRecordset->Close();</p><p>  m_pConnection-&g

85、t;Close();</p><p><b>  }</b></p><p>  catch (_com_error e)//異常處理</p><p><b>  {</b></p><p>  AfxMessageBox(e.ErrorMessage());</p><p>

86、;<b>  }</b></p><p>  m_pRecordset->Close(); //注意?。?!不要多次關(guān)閉?。。?!否則會出錯</p><p>  m_pConnection->Close();</p><p>  m_pRecordset = NULL;</p><p>  m_pConnecti

87、on = NULL; </p><p><b>  } </b></p><p>  程序中通過_variant_t和_bstr_t轉(zhuǎn)換COM對象和C++類型的數(shù)據(jù), _variant_t類封裝了OLE自治VARIANT數(shù)據(jù)類型。在C++中使用_variant_t類要比直接使用VARIANT數(shù)據(jù)類型容易得多。好,編譯后該程序就能運行了,但記住運行前要創(chuàng)建一個叫ADOT

88、est的ODBC數(shù)據(jù)源。該程序?qū)驯韒iddle中的BIG_NAME字段值顯示在列表控件中。</p><p>  (4) 執(zhí)行SQL命令并取得結(jié)果記錄集</p><p>  為了取得結(jié)果記錄集,我們定義一個指向Recordset對象的指針:_RecordsetPtr m_pRecordset;并為其創(chuàng)建Recordset對象的實例: </p><p>  m_pRe

89、cordset.CreateInstance("ADODB.Recordset");SQL命令的執(zhí)行可以采用多種形式,下面我們一進行簡單介紹。 1.利用Connection對象的Execute方法執(zhí)行SQL命令Execute方法的原型如下所示:</p><p>  _RecordsetPtr Connection15::Execute ( _bstr_t CommandText,

90、VARIANT * RecordsAffected,long Options ) </p><p>  其中CommandText是命令字串,通常是SQL命令。</p><p>  參數(shù)RecordsAffected是操作完成后所影響的行數(shù), </p><p>  參數(shù)Options表示CommandText中內(nèi)容的類型,Options可以取如下值之一:</p

91、><p>  adCmdText:表明CommandText是文本命令</p><p>  adCmdTable:表明CommandText是一個表名</p><p>  adCmdProc:表明CommandText是一個存儲過程</p><p>  adCmdUnknown:未知</p><p>  Execute執(zhí)行

92、完后返回一個指向記錄集的指針。</p><p>  2.利用Command對象來執(zhí)行SQL命令 </p><p>  _CommandPtr m_pCommand;</p><p>  m_pCommand.CreateInstance("ADODB.Command");</p><p>  _variant_t vNUL

93、L;</p><p>  vNULL.vt = VT_ERROR;</p><p>  vNULL.scode = DISP_E_PARAMNOTFOUND;///定義為無參數(shù)</p><p>  m_pCommand->ActiveConnection = m_pConnection;///非常關(guān)鍵的一句,將建立的連接賦值給它</p><

94、p>  m_pCommand->CommandText = "SELECT * FROM users";///命令字串</p><p>  m_pRecordset = m_pCommand->Execute(&vNULL,&vNULL,adCmdText);///執(zhí)行命令,取得記錄集。</p><p>  在這段代碼中我們只是用Com

95、mand對象來執(zhí)行了SELECT查詢語句,Command對象在進行存儲過程的調(diào)用中能真正體現(xiàn)它的作用。  3.直接用Recordset對象進行查詢?nèi)〉糜涗浖?lt;/p><p> ?。?)記錄集的遍歷、更新 根據(jù)我們剛才通過執(zhí)行SQL命令建立好的users表,它包含四個字段:ID,username,old,birthday以下的代碼實現(xiàn):打開記錄集,遍歷所有記錄,刪除第一條記錄,添加三條記錄,移動光標到第

96、二條記錄,更改其年齡,保存到數(shù)據(jù)庫。 </p><p>  _variant_t vUsername,vBirthday,vID,vOld;</p><p>  _RecordsetPtr m_pRecordset;</p><p>  m_pRecordset.CreateInstance("ADODB.Recordset");</p&

97、gt;<p>  m_pRecordset->Open("SELECT * FROM users",</p><p>  _variant_t((IDispatch*)m_pConnection,true),</p><p>  adOpenStatic,</p><p>  adLockOptimistic,</p&g

98、t;<p>  adCmdText);</p><p>  while(!m_pRecordset->adoEOF)</p><p><b>  {</b></p><p>  vID = m_pRecordset->GetCollect(_variant_t((long)0));///取得第1列的值,從0開始計數(shù),&

99、lt;/p><p>  ///你也可以直接給出列的名稱,如下一行</p><p>  vUsername = m_pRecordset->GetCollect("username");///取得username字段的值</p><p>  vOld = m_pRecordset->GetCollect("old");&

100、lt;/p><p>  vBirthday = m_pRecordset->GetCollect("birthday");</p><p>  ///在DEBUG方式下的OUTPUT窗口輸出記錄集中的記錄</p><p>  if(vID.vt != VT_NULL && vUsername.vt != VT_NULL &

101、;& vOld.vt != VT_NULL && vBirthday.vt != VT_NULL)</p><p>  TRACE("id:%d,姓名:%s,年齡:%d,生日:%s\r\n",</p><p><b>  vID.lVal,</b></p><p>  (LPCTSTR)(_bstr

102、_t)vUsername,</p><p>  vOld.lVal,</p><p>  (LPCTSTR)(_bstr_t)vBirthday);</p><p>  m_pRecordset->MoveNext();///移到下一條記錄</p><p><b>  }</b></p><p&

103、gt;  m_pRecordset->MoveFirst();///移到首條記錄</p><p>  m_pRecordset->Delete(adAffectCurrent);///刪除當(dāng)前記錄</p><p>  ///添加三條新記錄并賦值</p><p>  for(int i=0;i<3;i++)</p><p>&

104、lt;b>  {</b></p><p>  m_pRecordset->AddNew();///添加新記錄</p><p>  m_pRecordset->PutCollect("ID",_variant_t((long)(i+10)));</p><p>  m_pRecordset->PutCollect

105、("username",_variant_t("葉利欽"));</p><p>  m_pRecordset->PutCollect("old",_variant_t((long)71));</p><p>  m_pRecordset->PutCollect("birthday",_variant

106、_t("1930-3-15"));</p><p><b>  }</b></p><p>  m_pRecordset->Move(1,_variant_t((long)adBookmarkFirst));///從第一條記錄往下移動一條記錄,即移動到第二條記錄處</p><p>  m_pRecordset->

107、;PutCollect(_variant_t("old"),_variant_t((long)45));///修改其年齡</p><p>  m_pRecordset->Update();///保存到庫中 </p><p>  備注:多次查詢可把查詢過程做成一個函數(shù)ExecuteSQL讓m_pRecordset獲得連接指針m_pConnection查詢結(jié)果

108、</p><p>  void ExecuteSQL(_ConnectionPtr m_pConnection, _RecordsetPtr m_pRecordset,CString strSql)</p><p><b>  {</b></p><p>  //執(zhí)行Select 語句</p><p>  BSTR

109、bstrSQL = strSql.AllocSysString(); </p><p><b>  try</b></p><p><b>  {</b></p><p>  m_pRecordset->Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDy

110、namic,adLockOptimistic,adCmdText); </p><p>  //adOpenDynamic:動態(tài) adLockOptimistic樂觀封鎖法 adCmdText:文本查詢語句</p><p><b>  }</b></p><p>  catch(_com_error error)</p>&

111、lt;p><b>  {</b></p><p>  CString errorMessage;</p><p>  errorMessage.Format("%s",(LPTSTR)error.Description());</p><p>  AfxMessageBox(errorMessage);</p&g

112、t;<p><b>  }</b></p><p><b>  } </b></p><p><b>  //出錯處理:</b></p><p>  3127——沒有找到目標表</p><p>  3092——目標表已經(jīng)存在</p>&

113、lt;p><b>  例如:</b></p><p>  catch(const _com_error e)</p><p><b>  {</b></p><p>  AfxMessageBox(e.Description());</p><p>  long errorCode=e.WCo

114、de();</p><p>  if(3127==errorCode) AfxMessageBox("表不存在");</p><p>  if(3092==errorCode) AfxMessageBox("表已經(jīng)存在");</p><p>  return FALSE;</p><p><b&g

115、t;  } </b></p><p><b>  4.功能模塊的創(chuàng)建</b></p><p>  在建立了數(shù)據(jù)庫操作類后,接下來我們就可以開始進行各功能模塊的創(chuàng)建。</p><p>  4.1 系統(tǒng)主體窗體的創(chuàng)建</p><p>  在我們按照VC++的AppWizard創(chuàng)建完工程后,為了使主窗口框架更適合整

116、個系統(tǒng)的操作,我們有必要進行修改,重新創(chuàng)建。</p><p>  4.1.1主菜單的創(chuàng)建</p><p>  在WorkSpase中選擇ResourseView,然后雙擊Menu文件夾,再雙擊IDR_MAINFRAME選項,單擊右邊窗口中“幫助”旁邊的虛線框,在雙擊或按回車鍵,就會出現(xiàn)“Menu Item Properties”對話框,在這個對話框中輸入菜單項的內(nèi)容,如圖8所示。</

117、p><p><b>  圖8設(shè)置一級菜單</b></p><p>  二級菜單的設(shè)置基本上都和圖8相同,只是必須設(shè)置ID。按照這種方法,最終創(chuàng)建出如表2所示的菜單結(jié)構(gòu)。</p><p><b>  表2 菜單結(jié)構(gòu)</b></p><p>  4.1.2右鍵菜單的創(chuàng)建</p><p&g

118、t;  為了實現(xiàn)操作的方便、快捷,我們在程序中加入了右鍵菜單。在VC的主菜單中,按“Project”—>“Add to Project”—>“Components and Controls Gallery”即可進入“Components and Controls Gallery”對話框,然后再打開Visual C++ Components文件,再選擇“Pop-up Menu”,單擊“insert”,隨后在跳出的對話框中選擇“

119、CCaidianGuzhangView”,最后單擊“OK”。完成后,需要對其進行編輯。單擊WorkSpase中的ResourseView,在Menu文件夾中選擇CG_IDR_POPUP_MAIN_FRAME,之后邊可在右邊窗口對其進行編輯。編輯方法與主菜單相同,其中各項的ID分別對應(yīng)相應(yīng)的菜單項,對應(yīng)關(guān)系如表3所示。</p><p>  表3右鍵菜單對應(yīng)的菜單項ID</p><p>  4

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論