版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 彩色電視機
- 彩色電視機常見故障與維修
- 彩色電視機原理答案集
- 彩色電視機原理與維修
- 彩色電視機實訓(xùn)考核評分細則
- 飛利浦彩色電視機開關(guān)電源的維修
- 彩色電視機顯像管及其顯色原理
- 飛利浦彩色電視機開關(guān)電源的維修
- 彩色電視機行掃描電路分析與維修
- 飛利浦彩色電視機開關(guān)電源的維修.doc
- 飛利浦彩色電視機開關(guān)電源的維修.doc
- 彩色電視機常用英中文詞匯對照表
- 環(huán)境標志產(chǎn)品認證技術(shù)要求-低輻射彩色電視機
- 《彩色電視機整機原理與維修實訓(xùn)》的教學(xué)探索
- 模組化液晶彩色電視機的總體設(shè)計.pdf
- 中國彩色電視機行業(yè)投資前景預(yù)測及行業(yè)發(fā)展戰(zhàn)略咨詢
- 電視機原理課程設(shè)計-提高nc-2t型彩色電視機清晰度的研究
- 短管頸高清彩色電視機M2992機芯的電路實現(xiàn).pdf
- 采用ta8759機芯/ta8659機芯彩色電視機黑屏,但有字符顯示
- 電視機課程設(shè)計--采用厚膜str-5412組成彩色電視機開關(guān)電源電路設(shè)計
評論
0/150
提交評論