




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、彩色電視機故障信息管理系統(tǒng)(客戶端)The MIS fo TV applying in failure information學生:全俊林 指導教師:龔迪琛摘 要本文介紹了如何使用Visual C+.0編程制作以彩色電視機故障信息管理系統(tǒng)(客戶端部分)為例,實現(xiàn)信息管理的自動化。由此實現(xiàn)了信息的增加、刪除、修改、查看等功能,并且進而實現(xiàn)信息的安全管理,使信息的管理更加人性化,規(guī)范化。集計算機技術、網(wǎng)絡通信技術為一體的信息管理系統(tǒng)。采用先進有效的管理體制,可以改善企業(yè)的經(jīng)營環(huán)境、降低經(jīng)營生產(chǎn)成本,提高企業(yè)的競爭力;使得企業(yè)的運行數(shù)據(jù)更加準確、及時、全面、詳實,同時對各種信息進一步加工,使企業(yè)領導
2、層的決策依據(jù)充分,更具科學性,從而提高故障排除效率,提高信息利用率,有助于進一步提高了生產(chǎn)效率,使企業(yè)的管理水平跨上新臺階,為企業(yè)持續(xù)、健康、穩(wěn)定的發(fā)展打下基礎。AbstractThe main work of this paper is introduce how to use Visual C+.0programming a Color TV Malfunction-Information In-Common System, achieve the auto-manage of the Malfunction-Information. According these, this syste
3、m achieves the informations function of add、delete、edit and view., it also get the information managed safety, so the management of the information will be more humanity & normalize.Thereby, it can improve the efficiency of the malfunctions elimination, enhance the exploitation of the information, a
4、nd also help improving the efficiency of the produce by a large step. 關鍵詞: 數(shù)據(jù)庫 信息管理 模塊化管理 MIS信息管理系統(tǒng)目錄TOC o 1-3 h z u HYPERLINK l _Toc137031805 摘要 PAGEREF _Toc137031805 h 1 HYPERLINK l _Toc137031806 目錄 PAGEREF _Toc137031806 h 2 HYPERLINK l _Toc137031807 1.緒論 PAGEREF _Toc137031807 h 3 HYPERLINK l _Toc
5、137031808 1.1 前言 PAGEREF _Toc137031808 h 3 HYPERLINK l _Toc137031809 1.2 課題背景目標研究方法 PAGEREF _Toc137031809 h 4 HYPERLINK l _Toc137031810 1.3 主要完成工作及要求 PAGEREF _Toc137031810 h 5 HYPERLINK l _Toc137031811 2MIS系統(tǒng)設計及功能分析介紹 PAGEREF _Toc137031811 h 5 HYPERLINK l _Toc137031812 2.1 MIS系統(tǒng)介紹 PAGEREF _Toc137031
6、812 h 5 HYPERLINK l _Toc137031813 2.2 系統(tǒng)設計及功能分析 PAGEREF _Toc137031813 h 6 HYPERLINK l _Toc137031814 2.3 功能模塊設計 PAGEREF _Toc137031814 h 7 HYPERLINK l _Toc137031815 3. 數(shù)據(jù)庫設計及ADO訪問數(shù)據(jù)庫 PAGEREF _Toc137031815 h 7 HYPERLINK l _Toc137031816 3.1 數(shù)據(jù)庫設計過程 PAGEREF _Toc137031816 h 7 HYPERLINK l _Toc137031817 3.2
7、 創(chuàng)建應用程序 PAGEREF _Toc137031817 h 9 HYPERLINK l _Toc137031818 3.3 數(shù)據(jù)庫操作準備 PAGEREF _Toc137031818 h 11 HYPERLINK l _Toc137031819 3.4 ADO訪問數(shù)據(jù)庫 PAGEREF _Toc137031819 h 13 HYPERLINK l _Toc137031820 4.功能模塊的創(chuàng)建 PAGEREF _Toc137031820 h 19 HYPERLINK l _Toc137031821 4.1 系統(tǒng)主體窗體的創(chuàng)建 PAGEREF _Toc137031821 h 19 HYPER
8、LINK l _Toc137031822 4.1.1主菜單的創(chuàng)建 PAGEREF _Toc137031822 h 19 HYPERLINK l _Toc137031823 4.1.2右鍵菜單的創(chuàng)建 PAGEREF _Toc137031823 h 20 HYPERLINK l _Toc137031824 4.1.3工具欄的創(chuàng)建 PAGEREF _Toc137031824 h 21 HYPERLINK l _Toc137031825 4.1.4數(shù)據(jù)顯示與表格控件的創(chuàng)建 PAGEREF _Toc137031825 h 22 HYPERLINK l _Toc137031826 4.2 系統(tǒng)用戶權限管理
9、模塊的創(chuàng)建 PAGEREF _Toc137031826 h 23 HYPERLINK l _Toc137031827 4.2.1添加用戶對話框的創(chuàng)建 PAGEREF _Toc137031827 h 24 HYPERLINK l _Toc137031828 4.2.2 更改密碼對話框的創(chuàng)建 PAGEREF _Toc137031828 h 26 HYPERLINK l _Toc137031829 4.2.3 刪除用戶對話框的創(chuàng)建 PAGEREF _Toc137031829 h 26 HYPERLINK l _Toc137031830 4.2.4 用戶登錄對話框的創(chuàng)建 PAGEREF _Toc137
10、031830 h 26 HYPERLINK l _Toc137031831 4.3 信息管理模塊的創(chuàng)建 PAGEREF _Toc137031831 h 27 HYPERLINK l _Toc137031832 4.3.1 添加記錄對話框的創(chuàng)建 PAGEREF _Toc137031832 h 27 HYPERLINK l _Toc137031833 4.3.2 查詢記錄對話框的創(chuàng)建 PAGEREF _Toc137031833 h 29 HYPERLINK l _Toc137031834 4.3.3 修改記錄對話框的創(chuàng)建 PAGEREF _Toc137031834 h 30 HYPERLINK l
11、 _Toc137031835 4.3.4 查看記錄對話框的創(chuàng)建 PAGEREF _Toc137031835 h 32 HYPERLINK l _Toc137031836 4.4 打印預覽模塊的創(chuàng)建 PAGEREF _Toc137031836 h 32 HYPERLINK l _Toc137031837 5. Windows Sockets PAGEREF _Toc137031837 h 33 HYPERLINK l _Toc137031838 5.1 規(guī)范簡介 PAGEREF _Toc137031838 h 33 HYPERLINK l _Toc137031839 5.2 Bekeley套接口
12、 PAGEREF _Toc137031839 h 35 HYPERLINK l _Toc137031840 5.3 Microsoft Windows和針對Windows的擴展 PAGEREF _Toc137031840 h 35 HYPERLINK l _Toc137031841 5.4 接口網(wǎng)絡編程原理 PAGEREF _Toc137031841 h 36 HYPERLINK l _Toc137031842 5.5 Windows Sockets編程原理 PAGEREF _Toc137031842 h 38 HYPERLINK l _Toc137031843 6. 遠程數(shù)據(jù)的管理和系統(tǒng)的實
13、現(xiàn) PAGEREF _Toc137031843 h 40 HYPERLINK l _Toc137031844 6.1遠程數(shù)據(jù)的管理 PAGEREF _Toc137031844 h 40 HYPERLINK l _Toc137031845 6.2 程序的編譯和系統(tǒng)的實現(xiàn) PAGEREF _Toc137031845 h 41 HYPERLINK l _Toc137031846 7. 問題擴展 PAGEREF _Toc137031846 h 42 HYPERLINK l _Toc137031847 8. 小結 PAGEREF _Toc137031847 h 44 HYPERLINK l _Toc13
14、7031848 致謝 PAGEREF _Toc137031848 h 45 HYPERLINK l _Toc137031849 參考文獻 PAGEREF _Toc137031849 h 461.緒論1.1 前言信息化建設對企業(yè)來說無疑已經(jīng)成為企業(yè)在現(xiàn)代競爭社會中立足的重要因素。而從中國大陸企業(yè)現(xiàn)狀來看,大部分企業(yè)的信息化建設都是依靠專業(yè)化軟件公司。毋庸置疑,對于大規(guī)模的管理系統(tǒng),例如CRM(Client Relation Manager),ERP(Enterprise Resource Plan)等,使用專業(yè)軟件公司開發(fā)的產(chǎn)品,功能相對齊全,安全級別也相對較高。但對于企業(yè)內(nèi)部小范圍內(nèi)所需的一些
15、小系統(tǒng)而言,如也依靠此種方式,勢必會產(chǎn)生無謂的成本流失。鑒于這種形式,借助這次畢業(yè)設計的機會,在龔迪琛教師的指導下,經(jīng)過一段時間的努力,開發(fā)出了這套彩色電視機故障信息管理系統(tǒng)(客戶端部分)。本系統(tǒng)主要用于對已有故障信息進行更高效的管理,提高信息的利用率,改變了以往煩瑣的查找,大大提高了故障的排除速度及正確率,對進一步提高生產(chǎn)及管理效率具有十分重要的意義。1.2 課題背景 目標 研究方法(1)背景隨著中國加入WTO,競爭也越來越慘烈,中國的制造業(yè)同樣面臨者巨大的挑戰(zhàn)。科學技術的飛速發(fā)展,產(chǎn)品功能要求的日益增多,復雜性增加,壽命期縮短,更新?lián)Q代速度加快。然而,產(chǎn)品的管理,尤其是機械產(chǎn)品方案的遠程管
16、理手段,則顯得力不從心,跟不上時代發(fā)展的需要。目前,機械產(chǎn)品遠程管理已得到了比較廣泛和深入的研究,并初見成效,企業(yè)中龐大的激烈變化的產(chǎn)品數(shù)據(jù)僅僅依靠手工方式來管理是很難做到準確性、完整性、及時性和可追溯性的要求的。因此,將企業(yè)產(chǎn)品塊化的管理創(chuàng)新成果與信息系統(tǒng)的建設結合起來是很好的解決方案。模塊化的產(chǎn)品遠程管理可以在保持產(chǎn)品較高通用性的同時提供產(chǎn)品的多樣化配置和服務,因此,機械產(chǎn)品遠程管理方案應該得到進一步的研究和開發(fā)。在這里以彩色電視機故障信息管理系統(tǒng)(客戶端部分)作為研究對象。(2)目標設計(主要研究內(nèi)容或創(chuàng)新點)本著提高效率降低成本為出發(fā)點,以彩色電視機故障信息管理為具體范例,探討對企業(yè)產(chǎn)
17、品信息管理MIS系統(tǒng)的開發(fā),并增加遠程管理功能,使生產(chǎn)工程部的故障處理工作系統(tǒng)化,規(guī)范化。(3) 研究方法與技術路線及預期結果本課題為應用型管理系統(tǒng)的開發(fā),嘗試增加遠程管理功能,采用小型DBMS(數(shù)據(jù)庫管理系統(tǒng))ACESS,通過TCP/IP協(xié)議利用winsockect結合,DAO或者ADO與關系數(shù)據(jù)的接口實現(xiàn)產(chǎn)品信息的管理,查詢,整理等工作。 本部分為客戶端部分。1.3 主要完成工作及要求(1)盡量采用生產(chǎn)工程部現(xiàn)有的軟硬件環(huán)境及齊全的故障信息,從而達到充分利用現(xiàn)有資源,提高系統(tǒng)開發(fā)水平和應用效果的目的。(2)系統(tǒng)應符合生工部資料管理規(guī)范,符合普通員工操作的規(guī)范,達到操作過程中的直觀、方便、實
18、用、安全等要求。(3)系統(tǒng)采用Visual C+6.0環(huán)境,用ADO(ActiveX Data Objects)數(shù)據(jù)訪問方式,采用Microsoft Access 2003作為數(shù)據(jù)源,使整個系統(tǒng)易于使用及維護。(4)系統(tǒng)采用模塊化程序設計方法,既便于系統(tǒng)功能的各種組合和修改,又便于未參與開發(fā)的技術維護人員補充、維護。(5)系統(tǒng)應具備數(shù)據(jù)維護功能,及時根據(jù)數(shù)據(jù)變化進行添加、刪除、修改、查詢等操作,并加入擁護權限功能,以及遠程管理功能,使系統(tǒng)更加安全適用。2MIS系統(tǒng)設計及功能分析介紹2.1 MIS系統(tǒng)介紹所謂MIS(管理信息系統(tǒng)-Management Information System)系統(tǒng)
19、,是一個由人、計算機及其他外圍設備等組成的能進行信息的收集、傳遞、存貯、加工、維護和使用的系統(tǒng)。是一門新興的科學,其主要任務是最大限度的利用現(xiàn)代計算機及網(wǎng)絡通訊技術加強企業(yè)的信息管理,通過對企業(yè)擁有的人力、物力、財力、設備、技術等資源的調(diào)查了解,建立正確的數(shù)據(jù),加工處理并編制成各種信息資料及時提供給管理人員,以便進行正確的決策,不斷提高企業(yè)的管理水平和經(jīng)濟效益。目前,企業(yè)的計算機網(wǎng)絡已成為企業(yè)進行技術改造及提高企業(yè)管理水平的重要手段。隨著我國與世界信息高速公路的接軌,企業(yè)通過計算機網(wǎng)絡獲得信息必將為企業(yè)帶來巨大的經(jīng)濟效益和社會效益,企業(yè)的辦公及管理都將朝著高效、快速、無紙化的方向發(fā)展。MIS系
20、統(tǒng)通常用于系統(tǒng)決策,例如,可以利用MIS系統(tǒng)找出目前迫切需要解決的問題,并將信息及時反饋給上層管理人員,使他們了解當前工作發(fā)展的進展或不足。換句話說,MIS系統(tǒng)的最終目的是使管理人員及時了解公司現(xiàn)狀,把握將來的發(fā)展路徑。 一個完整的MIS應包括:輔助決策系統(tǒng)(DSS)、工業(yè)控制系統(tǒng)(IPC)、辦公自動化系統(tǒng)(OA)以及數(shù)據(jù)庫、模型庫、方法庫、知識庫和與上級機關及外界交換信息的接口。其中,特別是辦公自動化系統(tǒng)(OA)、與上級機關及外界交換信息等都離不開Intranet的應用??梢赃@樣說,現(xiàn)代企業(yè)MIS不能沒有Intranet,但Intranet的建立又必須依賴于MIS的體系結構和軟硬件環(huán)境。傳統(tǒng)
21、的MIS系統(tǒng)的核心是CS(Client/Server客戶端/服務器)架構,而基于Internet的MIS系統(tǒng)的核心是BS(Browser/Server瀏覽器/服務器)架構。BS架構比起CS架構有著很大的優(yōu)越性,傳統(tǒng)的MIS系統(tǒng)依賴于專門的操作環(huán)境,這意味著操作者的活動空間受到極大限制;而BS架構則不需要專門的操作環(huán)境,在任何地方,只要能上網(wǎng),就能夠操作MIS系統(tǒng),這其中的優(yōu)劣差別是不言而喻的。基于Internet上的MIS系統(tǒng)是對傳統(tǒng)MIS系統(tǒng)概念上的擴展,它不僅可以用于高層決策,而且可以用于進行普通的商務管理。通過用戶的具名登錄(或匿名登錄),以及相應的權限控制,可以實現(xiàn)在遠端對系統(tǒng)的瀏覽、
22、查詢、控制和審閱。隨著Internet的擴展,現(xiàn)有的公司和學校不再局限于物理的有形的真實的地域,網(wǎng)絡本身成為事實上發(fā)展的空間?;贗nternet上的MIS系統(tǒng),彌補了傳統(tǒng)MIS系統(tǒng)的不足,充分體現(xiàn)了現(xiàn)代網(wǎng)絡時代的特點。隨著Internet技術的高速發(fā)展,因特網(wǎng)必將成為人類新社會的技術基石。基于Internet的MIS系統(tǒng)必將成為網(wǎng)絡時代的新一代管理信息系統(tǒng),前景極為樂觀。2.2系統(tǒng)設計及功能分析通過一個彩電故障信息管理系統(tǒng),使生產(chǎn)工程部客戶端部分的故障處理工作模塊化,系統(tǒng)化,規(guī)范化,自動化,從而達到提高故障排除效率,提高信息利用率的目的。本系統(tǒng)功能分析是在系統(tǒng)開發(fā)總體任務的基礎上完成的,本系
23、統(tǒng)需要完成的功能如下:故障信息的輸入、查詢、修改、刪除故障信息的打印系統(tǒng)用戶管理,權限管理2.3 功能模塊設計在系統(tǒng)功能分析的基礎上,考慮Visual C+程序編制的特點,得到圖1所示的系統(tǒng)功能模塊圖。增加新信息信息數(shù)據(jù)彩電故障信息共享系統(tǒng)增加新信息信息數(shù)據(jù)彩電故障信息共享系統(tǒng)信息變動管理員信息管理修改新信息權限驗證打印管理信息變動管理員信息管理修改新信息權限驗證打印管理系統(tǒng)管理刪除新信息刪除新信息查 詢信息查詢用戶權限增加查 詢信息查詢用戶權限增加刪除修改圖1系統(tǒng)功能模塊圖 圖2數(shù)據(jù)流程3. 數(shù)據(jù)庫設計及ADO訪問數(shù)據(jù)庫3.1數(shù)據(jù)庫設計過程數(shù)據(jù)庫技術是信息資源管理最有效的手段。數(shù)據(jù)庫設計是指
24、對于一個給定的應用環(huán)境,構造最優(yōu)的數(shù)據(jù)庫模式,建立數(shù)據(jù)庫及其應用系統(tǒng),有效存儲數(shù)據(jù),滿足用戶信息要求和處理要求。數(shù)據(jù)庫設計中需求分析階段綜合各個用戶的應用需求(現(xiàn)實世界的需求),在概念設計階段形成獨立于機器特點、獨立于各個DBMS產(chǎn)品的概念模式(信息世界模型),用E-R圖來描述。在邏輯設計階段將E-R圖轉換成具體的數(shù)據(jù)庫產(chǎn)品支持的數(shù)據(jù)模型如關系模型,形成數(shù)據(jù)庫邏輯模式。然后根據(jù)用戶處理的要求,安全性的考慮,在基本表的基礎上再建立必要的視圖(VIEW)形成數(shù)據(jù)的外模式。在物理設計階段根據(jù)DBMS特點和處理的需要,進行物理存儲安排,設計索引,形成數(shù)據(jù)庫內(nèi)模式。數(shù)據(jù)結構的好壞將直接影響到系統(tǒng)的效率以
25、及實現(xiàn)的效果。好的數(shù)據(jù)庫結構會減少數(shù)據(jù)庫的存儲量、冗余度,數(shù)據(jù)的完整性和一致性比較高,系統(tǒng)具有較快的響應速度,簡化基于數(shù)據(jù)庫的應用程序的實現(xiàn)方法等,一般可將數(shù)據(jù)庫結構設計分為四個階段,即需求分析、概念結構設計、邏輯結構設計和物理設計。(1)數(shù)據(jù)庫需求分析需求分析的任務是具體了解應用環(huán)境,了解與分析用戶對數(shù)據(jù)和數(shù)據(jù)處理的需求,對應用系統(tǒng)的性能的要求,提出新系統(tǒng)的目標,為第二階段、第三階段的設計奠定基礎。在仔細研究資料管理過程的基礎上,歸納出系統(tǒng)的數(shù)據(jù)流程圖如上圖2所示,所有數(shù)據(jù)均由管理員輸入管理。根據(jù)圖2的數(shù)據(jù)流程圖,可得到所須設計的數(shù)據(jù)項和數(shù)據(jù)結構如下:故障信息,包括的數(shù)據(jù)項有顯象管、機芯、機
26、殼、器件、技術員、時間、其他、信息名、具體內(nèi)容等。權限驗證,包括的數(shù)據(jù)項有用戶名、密碼等。由上分析,為此需要有2個數(shù)據(jù)表分別用來存放故障信息的用戶信息。這兩個數(shù)據(jù)表均用Access 2000實現(xiàn)。Access中的設計視圖如圖3、圖4所示,其中數(shù)據(jù)類型根據(jù)具體的數(shù)據(jù)字段來設置。圖3 info1視圖圖4 login視圖(2)數(shù)據(jù)庫概念結構設計概念模型用于信息世界的建模。概念模型不依賴于某一個DBMS支持的數(shù)據(jù)模型。概念模型可以轉換為計算機上某一DBMS支持的特定數(shù)據(jù)模型。概念結構設計是在需求分析的基礎上對所有數(shù)據(jù)要求按一定方法進行抽象與綜合處理,設計出不依賴于某種具體DBMS的滿足用戶應用需求的信
27、息結構。這種信息結構我們稱為概念模型。通過對用戶需求進行綜合、歸納與抽象,形成一個獨立于具體DBMS的概念模型,可以用E-R圖表示,概念模型特點:(1)具有較強的語義表達能力,能夠方便、直接地表達應用中的各種語義知識。(2)應簡單、清晰、易于用戶理解,是用戶與數(shù)據(jù)庫設計人員之間進行交流的語言。最常用的概念結構設計方法有實體分析法、面向對象設計方法、屬性綜合法和規(guī)范化關系方法。我們此處主要討論實體分析法。這是一種自上而下抽象的方法。這種方法要求根據(jù)前面數(shù)據(jù)的需求分析,確定系統(tǒng)范圍,確定實體及其屬性,畫出系統(tǒng)的實體聯(lián)系模型(ER圖)。在分析需求的基礎上,我們得到整個系統(tǒng)的E-R圖。3.2 創(chuàng)建應用
28、程序本彩電故障信息共享系統(tǒng)采用Visual C+ 6.0的ADO方法開發(fā)。工程創(chuàng)建具體步驟如下:打開Visual C+后,選擇菜單“File/New”中的“Project”選項卡中的“MFC AppWizard exe”,設置工程名字為“CaidianGuzhang”,選擇存儲位置,單擊“OK”。創(chuàng)建一個單文檔應用程序,在Step1中,選擇“Single Document”,然后單擊“Next”按扭,進入“Step 2 of 6”。一直單擊“Next”按扭,直到進入“Step 6 of 6”。因為為了能使數(shù)據(jù)更直觀,我們采用列表形式,所以需要在本步驟中,選擇CCaidianGuzhangVie
29、w類的Base Class(基類)為ClistView。然后單擊“Finish”,最后將出現(xiàn)確認窗口,如圖6所示,檢查無誤后,單擊“確定”,即可完成工程創(chuàng)建。圖6 確認為了使程序能支持ADO數(shù)據(jù)庫對象,以使程序能正確的調(diào)用數(shù)據(jù)庫,應該在頭文件stdafx.h中加入#import c:Program FilesCommon FilesSystemadomsado15.dll rename_namespace(AdoNS) rename(EOF,adoEOF)using namespace AdoNS; 導入ADO庫并在主程序入口:BOOL CCaidianGuzhangApp:InitInsta
30、nce()中加入AfxOleInit();初始化COM環(huán)境。ADO類的定義是作為一種資源存儲在ADODLL(msado15.dll)中,在其內(nèi)部稱為類型庫。類型庫描述了自治接口,以及C使用的COMvtable接口。當使用import指令時,在運行時Visual C需要從ADODLL中讀取這個類型庫,并以此創(chuàng)建一組C頭文件。ADO庫包含三個智能指針:_ConnectionPtr、_CommandPtr和_RecordsetPtr。_ConnectionPtr通常被用來創(chuàng)建一個數(shù)據(jù)連接或執(zhí)行一條不返回任何結果的SQL語句,如一個存儲過程。_CommandPtr返回一個記錄集。它提供了一種簡單的方法
31、來執(zhí)行返回記錄集的存儲過程和SQL語句。在使用_CommandPtr接口時,可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用連接串。 _RecordsetPtr是一個記錄集對象。與以上兩種對象相比,它對記錄集提供了更多的控制功能,如記錄鎖定、游標控制等。3.3 數(shù)據(jù)庫操作準備(1)初始化接口: initialDbConnect(CString mdbname)在本系統(tǒng)中通過建立一個數(shù)據(jù)庫類class DatabaseOperate 來實現(xiàn)整個信息系統(tǒng)對數(shù)據(jù)的操作,下面是對其提供的主要接口的設計:該接口函數(shù)的作用是初始化連接數(shù)據(jù)源。BOOL Databa
32、seOperate:InitialDbConnect(CString mdbname)m_pConnection.CreateInstance(_uuidof(Connection);/先連接數(shù)據(jù)庫CString strConnect;BSTR bstrSQL;strConnect.Format(_T(Provider = Microsoft.JET.OLEDB.4.0; Data ource=%s),mdbname);bstrSQL = strConnect.AllocSysString();AfxMessageBox(e.ErrorMessage();return false;return
33、 true;該接口的主要功能是連接我們在Access 2003中設計的數(shù)據(jù)源,CString mdbname變量作為數(shù)據(jù)庫文件mdb的名稱,由調(diào)用 DatabaseOperate 類的主程序給出。在本設計中是“info1.mdb”(2)執(zhí)行查詢,修改,添加,刪除等功能的接口函數(shù)的設計BOOL DatabaseOperate:ExecuteSQLEx(CString strSQL)_variant_t RecordsAffected;/_bstr_t bstrSql(strSQL);trym_pConnection-Execute(bstrSql,&RecordsAffected,adCmdTe
34、xt);catch (_com_error e)AfxMessageBox(e.ErrorMessage();return FALSE;return TRUE;通過執(zhí)行一條SQL語句來實現(xiàn)數(shù)據(jù)庫的讀寫操作,其中m_pConnection是我們在調(diào)用InitialDbConnect初始化接口時候創(chuàng)建的連接型智能指針,我們可以通過它來執(zhí)行SQL語句(3) 獲取數(shù)據(jù)信息接口函數(shù)的設計BOOL DatabaseOperate: GetCurrentRecordSet(Recordstruct&result,long Shijiansuoyin,CString tablename)_RecordsetP
35、tr tem_pRecordset;tem_pRecordset.CreateInstance(_uuidof(Recordset);/初始化Recordset指針CString strSql;strSql.Format( _T(select * from %s where sjsy=%d ), tablename, Shijiansuoyin);BSTR bstrSQL = strSql.AllocSysString(); trytem_pRecordset-Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimist
36、ic,adCmdText); catch (_com_error e)/異常處理AfxMessageBox(e.ErrorMessage();if (tem_pRecordset-State) tem_pRecordset-Close();tem_pRecordset.Release();return FALSE;while(!tem_pRecordset-adoEOF)/遍歷所有記錄 _variant_t v_xxg,v_jx,v_jk, v_qjv_ xxg = tem_pRecordset-GetCollect(_T(顯象管);v_ jx = tem_pRecordset-GetColl
37、ect(_T(機芯);v_ jk = tem_pRecordset-GetCollect(_T(機殼);v_ qj = tem_pRecordset-GetCollect(_T(器件);./獲取各個字段的信息/將各字段信息賦值給result結構體,此處省略tem_pRecordset-MoveNext();/轉到下一條紀錄if (tem_pRecordset-State) tem_pRecordset-Close();tem_pRecordset.Release();return TRUE;其中參數(shù)Recordstruct&result是對查詢結果定義的結構體,與前面我們在數(shù)據(jù)庫中建立的彩電信
38、息的結構一致:typedef struct _RecordstructCString xxg ;/顯象管CString jx;/機芯CString qj;/器件CString jsy;/技術員CString sj;/時間CString qita;/其他信息CString sj;/信息名CString qita;/具體內(nèi)容long sjsy;/時間索引Recordstruct,* pRecordstruct;3.4 ADO訪問數(shù)據(jù)庫(1) 生成應用程序框架并初始化OLE/COM庫環(huán)境創(chuàng)建一個標準的MFCAppWizard(exe)應用程序,然后在使用ADO數(shù)據(jù)庫InitInstance函數(shù)中初始
39、化OLE/COM庫(因為ADO庫是一個COMDLL庫)。創(chuàng)建一個標準的MFCAppWizard(exe)應用程序,然后在使用ADO數(shù)據(jù)庫的InitInstance函數(shù)中初始化OLE/COM庫(因為ADO庫是一個COMDLL庫)。本例為:BOOL CAdotestDlg:OnInitDialog():CoInitialize(NULL); /初始化OLE/COM庫環(huán)境 程序最后要調(diào)用 :CoUninitialize();/釋放程序占用的COM 資源。另外:m_pRecordset-Close(); 注意!不要多次關閉!m_pConnection-Close();m_pRecordset = NU
40、LL;m_pConnection = NULL; (2) 引入ADO庫文件使用ADO前必須在工程的stdafx.h文件最后用直接引入符號import引入ADO庫文件,以使編譯器能正確編譯。ADO類的定義是作為一種資源存儲在ADODLL(msado15.dll)中,在其內(nèi)部稱為類型庫。類型庫描述了自治接口,以及C使用的COMvtable接口。當使用import指令時,在運行時Visual C需要從ADODLL中讀取這個類型庫,并以此創(chuàng)建一組C頭文件。這些頭文件具有.tli和.tlh擴展名,讀者可以在項目的目錄下找到這兩個文件。在C程序代碼中調(diào)用的ADO類要在這些文件中定義。 程序的第三行指示AD
41、O對象不使用名稱空間。在有些應用程序中,由于應用程序中的對象與ADO中的對象之間可能會出現(xiàn)命名沖突,所以有必要使用名稱空間。如果要使用名稱空間,則可把第三行程序修改為:rename_namespace(AdoNS)。第四行代碼將ADO中的EOF(文件結束)更名為adoEOF,以避免與定義了自己的EOF的其他庫沖突。(3) 利用智能指針進行數(shù)據(jù)庫操作在CaboutDlg頭文件中定義兩個ADO智能指針類實例,并在對話框中加入一個ListCtrl。 class CAdotestDlg : public CDialog _ConnectionPtr m_pConnection; _RecordsetP
42、tr m_pRecordset; ClistCtrl m_List; ADO庫包含三個智能指針:_ConnectionPtr、_CommandPtr和_RecordsetPtr。_ConnectionPtr通常被用來創(chuàng)建一個數(shù)據(jù)連接或執(zhí)行一條不返回任何結果的SQL語句,如一個存儲過程。_CommandPtr返回一個記錄集。它提供了一種簡單的方法來執(zhí)行返回記錄集的存儲過程和SQL語句。在使用_CommandPtr接口時,可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用連接串。_RecordsetPtr是一個記錄集對象。與以上兩種對象相比,它對記錄集提供了
43、更多的控制功能,如記錄鎖定、游標控制等。在使用ADO程序的事件響應中OnButton1加入以下代碼:void CAdotestDlg:OnButton1() m_List.ResetContent();m_pConnection.CreateInstance(_uuidof(Connection); /初始化Connection指針m_pRecordset.CreateInstance(_uuidof(Recordset);/初始化Recordset指針 try m_pConnection-Open(DSN=ADOTest,0); /連接叫作ADOTest的ODBC數(shù)據(jù)源/注意:這是連接不需要
44、用戶ID或密碼的open 函數(shù)/ 否則形式為 -Open(DSN=test;uid=sa;pwd=123;,0); / 執(zhí)行SQL語句得到一個記錄集把其指針賦值給m_pRecordset CString strSql=select * from middle; BSTR bstrSQL = strSql.AllocSysString(); m_pRecordset-Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); /adOpenDynamic:動態(tài) adLockOptimistic
45、樂觀封鎖法 adCmdText:文本查詢語句 while(!m_pRecordset-adoEOF)/遍歷所有記錄 /取紀錄字段值方式之一_variant_t TheValue; /VARIANT數(shù)據(jù)類型 TheValue = m_pRecordset-GetCollect(BIG_NAME);/得到字段BIG_NAME的值 if(TheValue.vt!=VT_NULL) m_List.AddString(char*)_bstr_t(TheValue);/將該值加入到列表控件中/取紀錄字段值方式之二 / _bstr_t TheValue1=m_pRecordset-Fields-GetIte
46、m(BIG_NAME)-Value; / CString temp=TheValue1.copy(); / m_List.AddString(temp);/數(shù)據(jù)類型轉換 _variant_t vUsername,vBirthday,vID,vOld;TRACE(id:%d,姓名:%s,年齡:%d,生日:%srn, vID.lVal,(LPCTSTR)(_bstr_t)vUsername,vOld.lVal,(LPCTSTR)(_bstr_t)vBirthday); m_pRecordset-MoveNext();/轉到下一條紀錄 m_pRecordset-Close(); m_pConnect
47、ion-Close(); catch (_com_error e)/異常處理 AfxMessageBox(e.ErrorMessage(); m_pRecordset-Close(); /注意!不要多次關閉!否則會出錯 m_pConnection-Close(); m_pRecordset = NULL; m_pConnection = NULL; 程序中通過_variant_t和_bstr_t轉換COM對象和C類型的數(shù)據(jù),_variant_t類封裝了OLE自治VARIANT數(shù)據(jù)類型。在C+中使用_variant_t類要比直接使用VARIANT數(shù)據(jù)類型容易得多。好,編譯后該程序就能運行了,但記
48、住運行前要創(chuàng)建一個叫ADOTest的ODBC數(shù)據(jù)源。該程序將把表middle中的BIG_NAME字段值顯示在列表控件中。(4) 執(zhí)行SQL命令并取得結果記錄集為了取得結果記錄集,我們定義一個指向Recordset對象的指針:_RecordsetPtr m_pRecordset;并為其創(chuàng)建Recordset對象的實例:m_pRecordset.CreateInstance(ADODB.Recordset);SQL命令的執(zhí)行可以采用多種形式,下面我們一進行簡單介紹。1.利用Connection對象的Execute方法執(zhí)行SQL命令Execute方法的原型如下所示: _RecordsetPtr Co
49、nnection15:Execute ( _bstr_t CommandText, VARIANT * RecordsAffected,long Options ) 其中CommandText是命令字串,通常是SQL命令。參數(shù)RecordsAffected是操作完成后所影響的行數(shù),參數(shù)Options表示CommandText中內(nèi)容的類型,Options可以取如下值之一:adCmdText:表明CommandText是文本命令adCmdTable:表明CommandText是一個表名adCmdProc:表明CommandText是一個存儲過程adCmdUnknown:未知Execute執(zhí)行完后返
50、回一個指向記錄集的指針。2.利用Command對象來執(zhí)行SQL命令_CommandPtr m_pCommand;m_pCommand.CreateInstance(ADODB.Command);_variant_t vNULL;vNULL.vt = VT_ERROR;vNULL.scode = DISP_E_PARAMNOTFOUND;/定義為無參數(shù)m_pCommand-ActiveConnection = m_pConnection;/非常關鍵的一句,將建立的連接賦值給它m_pCommand-CommandText = SELECT * FROM users;/命令字串m_pRecordse
51、t = m_pCommand-Execute(&vNULL,&vNULL,adCmdText);/執(zhí)行命令,取得記錄集。在這段代碼中我們只是用Command對象來執(zhí)行了SELECT查詢語句,Command對象在進行存儲過程的調(diào)用中能真正體現(xiàn)它的作用。3.直接用Recordset對象進行查詢?nèi)〉糜涗浖?)記錄集的遍歷、更新 根據(jù)我們剛才通過執(zhí)行SQL命令建立好的users表,它包含四個字段:ID,username,old,birthday以下的代碼實現(xiàn):打開記錄集,遍歷所有記錄,刪除第一條記錄,添加三條記錄,移動光標到第二條記錄,更改其年齡,保存到數(shù)據(jù)庫。_variant_t vUsernam
52、e,vBirthday,vID,vOld;_RecordsetPtr m_pRecordset;m_pRecordset.CreateInstance(ADODB.Recordset);m_pRecordset-Open(SELECT * FROM users, _variant_t(IDispatch*)m_pConnection,true), adOpenStatic, adLockOptimistic, adCmdText);while(!m_pRecordset-adoEOF) vID = m_pRecordset-GetCollect(_variant_t(long)0);/取得第1
53、列的值,從0開始計數(shù),/你也可以直接給出列的名稱,如下一行 vUsername = m_pRecordset-GetCollect(username);/取得username字段的值 vOld = m_pRecordset-GetCollect(old); vBirthday = m_pRecordset-GetCollect(birthday);/在DEBUG方式下的OUTPUT窗口輸出記錄集中的記錄 if(vID.vt != VT_NULL & vUsername.vt != VT_NULL & vOld.vt != VT_NULL & vBirthday.vt != VT_NULL)TR
54、ACE(id:%d,姓名:%s,年齡:%d,生日:%srn, vID.lVal, (LPCTSTR)(_bstr_t)vUsername, vOld.lVal, (LPCTSTR)(_bstr_t)vBirthday); m_pRecordset-MoveNext();/移到下一條記錄m_pRecordset-MoveFirst();/移到首條記錄m_pRecordset-Delete(adAffectCurrent);/刪除當前記錄/添加三條新記錄并賦值for(int i=0;iAddNew();/添加新記錄 m_pRecordset-PutCollect(ID,_variant_t(lon
55、g)(i+10); m_pRecordset-PutCollect(username,_variant_t(葉利欽); m_pRecordset-PutCollect(old,_variant_t(long)71); m_pRecordset-PutCollect(birthday,_variant_t(1930-3-15);m_pRecordset-Move(1,_variant_t(long)adBookmarkFirst);/從第一條記錄往下移動一條記錄,即移動到第二條記錄處m_pRecordset-PutCollect(_variant_t(old),_variant_t(long)4
56、5);/修改其年齡m_pRecordset-Update();/保存到庫中備注:多次查詢可把查詢過程做成一個函數(shù)ExecuteSQL讓m_pRecordset獲得連接指針m_pConnection查詢結果void ExecuteSQL(_ConnectionPtr m_pConnection, _RecordsetPtr m_pRecordset,CString strSql)/執(zhí)行Select 語句 BSTR bstrSQL = strSql.AllocSysString(); try m_pRecordset-Open(bstrSQL,(IDispatch*)m_pConnection,a
57、dOpenDynamic,adLockOptimistic,adCmdText); /adOpenDynamic:動態(tài)adLockOptimistic樂觀封鎖法adCmdText:文本查詢語句 catch(_com_error error) CString errorMessage; errorMessage.Format(%s,(LPTSTR)error.Description(); AfxMessageBox(errorMessage); /出錯處理:3127沒有找到目標表3092目標表已經(jīng)存在例如:catch(const _com_error e) AfxMessageBox(e.Des
58、cription(); long errorCode=e.WCode();if(3127=errorCode) AfxMessageBox(表不存在);if(3092=errorCode) AfxMessageBox(表已經(jīng)存在); return FALSE; 4.功能模塊的創(chuàng)建在建立了數(shù)據(jù)庫操作類后,接下來我們就可以開始進行各功能模塊的創(chuàng)建。4.1 系統(tǒng)主體窗體的創(chuàng)建在我們按照VC+的AppWizard創(chuàng)建完工程后,為了使主窗口框架更適合整個系統(tǒng)的操作,我們有必要進行修改,重新創(chuàng)建。4.1.1主菜單的創(chuàng)建在WorkSpase中選擇ResourseView,然后雙擊Menu文件夾,再雙擊IDR
59、_MAINFRAME選項,單擊右邊窗口中“幫助”旁邊的虛線框,在雙擊或按回車鍵,就會出現(xiàn)“Menu Item Properties”對話框,在這個對話框中輸入菜單項的內(nèi)容,如圖8所示。圖8設置一級菜單二級菜單的設置基本上都和圖8相同,只是必須設置ID。按照這種方法,最終創(chuàng)建出如表2所示的菜單結構。菜單名稱ID文件.打印ID_FILE_PRINT.打印預覽ID_FILE_PRINT_PREVIEW.打印設置ID_FILE_PRINT_SETUP.最近文件ID_FILE_MRU_FILE1.退出ID_APP_EXIT查看.工具欄ID_VIEW_TOOLBAR.狀態(tài)欄ID_VIEW_STATUS_B
60、AR信息管理.查詢記錄ID_RECORD_SEARCH.添加記錄ID_RECORD_ADD.查看記錄ID_RECORD_VIEW.刪除記錄ID_RECORD_DEL.更改記錄ID_RECORD_EDIT權限管理.添加用戶ID_USER_ADD.更改密碼ID_PASSWARD_EDIT.刪除用戶ID_USER_DEL幫助表2 菜單結構4.1.2右鍵菜單的創(chuàng)建為了實現(xiàn)操作的方便、快捷,我們在程序中加入了右鍵菜單。在VC的主菜單中,按“Project”“Add to Project”“Components and Controls Gallery”即可進入“Components and Contro
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 少先隊知識之解
- 大班心理健康教育活動
- 2024-2025學年下學期高三英語外研社版同步經(jīng)典題精練之非謂語動詞
- 感染性胃腸炎護理
- 紅領巾心向黨主題班隊會
- 機械制造基礎課件-金屬切削加工
- 10kv高壓倒閘操作
- 小學語文《半截蠟燭》解析
- 2019-2025年教師招聘之中學教師招聘高分通關題型題庫附解析答案
- 統(tǒng)編版2024-2025學年語文三年級下冊第八單元達標測評卷(含答案)
- 《文化學概論》第三章-文化的起源及其發(fā)展-38
- 2024年四川省成都市中考地理+生物試卷真題(含答案解析)
- (必會)物業(yè)管理師(三級)考前沖刺知識點精練300題(含答案)
- JBT 14714-2024 鋰離子電池X射線檢測設備(正式版)
- 2022-2023學年浙江省寧波市九校聯(lián)考高一(下)期末數(shù)學試卷
- 民法典與醫(yī)療損害責任
- 《抽水蓄能電站檢修導則》
- 鍋爐本體安裝單位工程驗收表格樣本
- 王薔《英語教學法》總復習練習(附答案)
- 廣東省深圳市2024年七年級下冊地理期中試卷附答案
- 2022年4月自考03201護理學導論試題及答案含解析
評論
0/150
提交評論