版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 鐵路客運安全服務系統(tǒng)</p><p> ——基于VC++的上位機控制系統(tǒng)</p><p><b> 摘 要</b></p><p> 本文介紹了本人應用VC++6.0和Access2000工具開發(fā)《鐵路客運安全服務系統(tǒng)》的過程,對開發(fā)軟件進行了簡單介紹,遵從軟件開發(fā)的一般步驟,涉及到軟件開發(fā)前期的系統(tǒng)的需求分析,詳
2、細設計過程中數(shù)據(jù)庫的設計,包括表的設計等,著重講述了我在開發(fā)過程中所承擔的工作,包括上位機整體的構(gòu)思、設計及實現(xiàn),串口控件、類的使用,以及在VC++中主框架、彈出項和數(shù)據(jù)庫的設計,程序模塊的編程思想、代碼實現(xiàn)等,并總結(jié)了在開發(fā)過程中所遇到的問題及其解決方法。</p><p> 關鍵詞:串口通訊 Access數(shù)據(jù)庫 ODBC CserialPortEx</p><p><b>
3、; ABSTRACT</b></p><p> 目 錄</p><p> 第一章 系統(tǒng)的整體研究</p><p> 1.1 本次畢業(yè)設計的意義</p><p> 1.2 設計內(nèi)容概述</p><p> 第二章 技術的考慮和選擇</p><p> 2.1
4、 開發(fā)的軟件環(huán)境</p><p> 2.1.1 Visual C++ 6.0</p><p> 2.1.2 Access 2000</p><p> 2.2 開發(fā)的硬件環(huán)境</p><p> 2.2.1 RS-232異步串行通訊總線</p><p> 2.2.2 RS-485接口轉(zhuǎn)換器ADS-106<
5、;/p><p> 2.3 通訊方案的確定</p><p> 2.3.1目前流行的開發(fā)技術的比較</p><p> 2.3.2 Mscomm控件的研究</p><p> 2.3.3 CserialPortEx類的分析</p><p> 2.3.4 為什么要選擇CserialPortEx類技術</p>
6、<p> 第三章 系統(tǒng)分析與設計</p><p><b> 3.1問題的提出</b></p><p><b> 3.2可行性研究</b></p><p><b> 3.3需求分析</b></p><p> 3.4系統(tǒng)各模塊間的關系圖</p>
7、<p> 第四章 數(shù)據(jù)庫的設計與實現(xiàn)</p><p> 4.1 開放式數(shù)據(jù)庫連接(ODBC)技術</p><p> 4.1.1 開放式數(shù)據(jù)庫連接簡介</p><p> 4.1.2 MFC對ODBC的支持</p><p> 4.1.3 在MFC中應用ODBC編程</p><p> 4.2 數(shù)據(jù)
8、庫中表的設計</p><p> 4.3 創(chuàng)建并配置數(shù)據(jù)源</p><p> 第五章 程序設計與實現(xiàn)</p><p> 5.1 程序創(chuàng)建與數(shù)據(jù)庫連接</p><p> 5.2 主窗體的設計</p><p> 5.3 數(shù)據(jù)庫顯示模塊</p><p> 5.4
9、 串口通訊模塊</p><p> 5.4.1 通訊協(xié)議的確定</p><p> 5.4.2 數(shù)據(jù)的接收與入庫</p><p> 5.4.3 串口設置</p><p> 5.4.4 點名功能的實現(xiàn)</p><p> 5.5 信息查詢模塊</p><p> 5
10、.5.1 普通查詢</p><p> 5.5.2 問題查詢</p><p> 第六章 遇到的問題及解決</p><p><b> 結(jié)論</b></p><p><b> 謝辭</b></p><p><b> 參考文獻</b></
11、p><p><b> 技術文章翻譯</b></p><p><b> 附錄</b></p><p><b> 前 言</b></p><p> 在通訊技術飛速發(fā)展的今天,隨著鐵路部門的列車提速,車站人員流動量的增大,鐵路客運的安全已經(jīng)越來越受到人們的關注和重視。針對這一問
12、題,我們設計開發(fā)了基于VC++環(huán)境下的鐵路客運安全服務系統(tǒng)。</p><p> 目前,在這方面航空部門已經(jīng)將互聯(lián)網(wǎng)技術應用到比較高的水平,實現(xiàn)了在各大機場間的互動聯(lián)系通訊,在乘客登機前進行刷卡登機,將基本資料進行記錄,然后通過乘客登機前的登機記錄,實現(xiàn)對每一次航班的所有登機乘客的基本資料的統(tǒng)計,并在各大機場間進行相應的通訊聯(lián)系,存儲每位乘客登機和離機的時間、地點,從而為出事后的調(diào)查工作提供可靠的依據(jù)、線索。&l
13、t;/p><p> 由于鐵路部門是一個每日客流量都很大的大型運輸部門,在這方面的管理工作尚不完善,這種比較先進的系統(tǒng)在鐵路方面尚未得到廣泛的應用,所以這次我們所做的“鐵路客運安全服務系統(tǒng)”就是本著在鐵路客運站點上實現(xiàn)這種機制的原則,來進行開發(fā)設計的,用以解決鐵路站點出入人員流動量大、人員情況復雜、難于管理的問題,完善了鐵路安全保障系統(tǒng),保證鐵路旅客乘車的安全。所以,要在鐵路實現(xiàn)這樣一個安全機制,不僅有很強的實用價值
14、,而且有廣闊的應用前景,其意義也是非常之深遠的。</p><p> 本系統(tǒng)預定由一臺上位機和若干臺下位機組成,各下位機用來模仿全國鐵路的各個站點,上位機運用點名式方法接收、管理、存儲各下位機所記錄的信息,將之匯總存入后臺數(shù)據(jù)庫,并可以針對庫中的記錄進行各種查詢操作。我們小組由6人組成,其中5人各負責一臺下位機的實現(xiàn),我則在課題中主要負責上位機的開發(fā)任務,并參與了系統(tǒng)最后的調(diào)試工作。對于上位機的開發(fā),主要包括三個
15、方面的內(nèi)容:串口通訊,前臺界面和后臺數(shù)據(jù)庫。</p><p> 現(xiàn)在,鐵路客運安全服務系統(tǒng)作為較新的管理方法,已經(jīng)逐漸被社會大眾所認同,并開始應用于相關的領域中,它有著很大的發(fā)展前景。</p><p> 首先,從社會角度講,實現(xiàn)這樣一個安全機制對整個社會的安全穩(wěn)定是有很大幫助的,一旦列車出現(xiàn)故障、事故,鐵路部門可以及時通過該機制輔助對事故發(fā)生的原因進行調(diào)查,以盡快找出原因,做好防范措施
16、。</p><p> 其次,從經(jīng)濟角度講,建立這樣一套安全機制對鐵路企業(yè)自身的長遠發(fā)展也會有不小的益處。它能夠使鐵路部門在事故發(fā)生后的調(diào)查工作中,節(jié)省人、財、物力,從而節(jié)省開支。</p><p> 當然我們也應看到,現(xiàn)在的鐵路客運安全服務系統(tǒng)仍面臨著幾個重大課題:首先,安全性問題?,F(xiàn)在的安全系統(tǒng)的安全性并不是很完善。一些高級黑客可以很輕松地進入系統(tǒng),破壞系統(tǒng)數(shù)據(jù)。對于這類問題,目前的系
17、統(tǒng)很少有完善的安全性保證。其次,我們所做的系統(tǒng)只是應用于局域網(wǎng),通過計算機的串口進行通訊傳輸?shù)?,未來是網(wǎng)絡的時代,將來的發(fā)展趨勢是:在任何可以連接到Internet的地方,都可以運行該系統(tǒng),如何將安全系統(tǒng)搬到Internet上,這也將是一個重要問題。總之,鐵路客運安全服務系統(tǒng)在將來將會越來越快地發(fā)展和普及,其前景將會是一片光明。</p><p> 通過本次畢業(yè)設計,在導師王老師的耐心指導和同學們的熱心幫助下,使
18、我對VC++及數(shù)據(jù)庫技術有了更加深入的理解和認識,同時也為團隊合作開發(fā)規(guī)模稍大項目和綜合應用本專業(yè)所學課程知識創(chuàng)造了實踐機會,使我們通過參加小組團隊的開發(fā)實踐,理解真正的開發(fā)團隊的工作程序,為今后走向社會打下堅實的基礎。下面,讓我們來具體介紹和分析這種服務系統(tǒng)。</p><p> 第一章 系統(tǒng)的整體研究</p><p> 1.1本次畢業(yè)設計的研究意義</p><p&
19、gt; 隨著時代的飛速發(fā)展, 社會的不斷進步,先進的科學技術不斷應用于各大行業(yè)中。在鐵路部門,現(xiàn)行的乘客安全管理制度已逐漸不能適應當前的時代變化,需要更新和完善。對于這方面的應用,航空部門已經(jīng)做到了比較高的水平,實現(xiàn)了乘客登機前刷卡,將每一班飛機上乘客的基本資料進行存儲,記錄每位乘客登機和離機的時間、地點等資料,并通過互聯(lián)網(wǎng)進行記錄的傳輸,從而為出事后的調(diào)查工作提供可靠的依據(jù)、線索。</p><p> 鐵路,
20、是當今全國重要的交通工具之一。它自出現(xiàn)以來就一直占據(jù)交通領域的重要地位,是全國經(jīng)濟運行的命脈;雖然現(xiàn)在航空、海運、河運、公路等其他交通工具蓬勃發(fā)展起來,但鐵路的重要地位依然沒有被動搖。像這樣一個重要的部門,它的健康成長是極其重要的。所以,針對鐵路現(xiàn)行的安全管理制度的改進是事在必行的。</p><p> 由于鐵路部門是一個每日客流量都很大的大型運輸部門,在這方面的管理工作尚不完善,類似航空部門那種比較先進的系統(tǒng)在
21、鐵路方面尚未得到廣泛的應用,所以這次我們所做的“鐵路客運安全服務系統(tǒng)”就是本著在鐵路客運站點上實現(xiàn)這種機制的原則,來進行開發(fā)設計的,用以解決鐵路站點出入人員流動量大、人員情況復雜、難于管理等問題,從而完善鐵路安全保障系統(tǒng),保證鐵路旅客乘車的安全。要在鐵路實現(xiàn)這樣一個安全機制,不僅有很強的實用價值,而且有廣闊的應用前景,其意義也是非常之深遠的。</p><p> 1.2 設計內(nèi)容概述</p><
22、;p> 在本次設計中,我主要負責整個系統(tǒng)上位機的整體設計工作,主要是3個方面內(nèi)容:串口通訊,主界面設計和后臺數(shù)據(jù)庫建立。系統(tǒng)的功能模塊主要包括:串口通信模塊、數(shù)據(jù)庫處理模塊、控制模塊、顯示模塊和查詢模塊共5個。其中串口通信模塊包含:串口數(shù)據(jù)的接收入庫與顯示、串口設置、循環(huán)點名、單一點名;查詢模塊包括:普通查詢、問題查詢。</p><p> 第二章 技術的考慮和選擇</p><p&g
23、t; 2.1 開發(fā)的軟件環(huán)境</p><p> 在本次設計中我們使用了Windows ME的操作系統(tǒng),應用Visual C++ 6.0和Access 2000,下面將對這兩種軟件進行簡單的介紹,并對本人在開發(fā)過程中所用到的功能進行簡單分析。</p><p> 2.1.1 Visual C++ 6.0</p><p> Visual C++ 6.0是一種高級編
24、程工具軟件,它有功能強大的集成開發(fā)環(huán)境,并提供功能強大的向?qū)Чぞ撸∕FC AppWizard、ClassWizard、MFC ActiveX ControlWizard等)來簡化Win32應用程序的開發(fā),用它可以方便地進行項目的管理、編寫C++源程序、編譯、改錯。更重要的是,Visual C++提供了一套Microsoft Foundation Classes(簡稱為MFC)的程序類庫(classes library),現(xiàn)在這套由微軟開
25、發(fā)的程序類庫已經(jīng)成為設計窗口應用程序的準工業(yè)標準。</p><p> 其向?qū)в糜趲椭筛鞣N不同類型應用程序的基本框架,并可以使用Class Wizard 來創(chuàng)建新類(class),定義消息處理函數(shù)(message handler),覆蓋虛擬函數(shù)(virtual function)、從對話框(dialog box)、表單視圖(form view)、或者記錄視圖(record view)的控件中獲取數(shù)據(jù)并驗證數(shù)據(jù)
26、的合法性,添加屬性(property)、事件(event)和方法(method)到自動化對象(Automation object)中。此外還可以使用WizardBar來定義消息處理函數(shù)、覆蓋虛擬函數(shù)并瀏覽實現(xiàn)文件(.cpp)。</p><p> 此外,Visual C++ 6.0提供最快的集成數(shù)據(jù)庫訪問,向?qū)Чぞ咧С諨AO和ODBC類,允許用戶建立強有力的數(shù)據(jù)庫應用程序??梢允褂肙DBC類和高性能的32位ODB
27、C驅(qū)動程序來訪問各種數(shù)據(jù)庫管理系統(tǒng);可以使用DAO(數(shù)據(jù)訪問對象)類通過編程語言來訪問和操縱數(shù)據(jù)庫中的數(shù)據(jù)并管理數(shù)據(jù)庫、數(shù)據(jù)庫對象與結(jié)構(gòu)。</p><p> 2.1.2 Access 2000</p><p> Access是Office辦公系列軟件中自帶的一個數(shù)據(jù)庫管理軟件,它提供了一個功能強大、使用方便靈活的信息管理環(huán)境,是一個受到一致推崇的桌面數(shù)據(jù)庫系統(tǒng)。它在用戶和數(shù)據(jù)庫之間架起
28、了一座橋梁,使得用戶對數(shù)據(jù)的存取、分類和查看更為容易。</p><p> 我用Access 2000建立的數(shù)據(jù)庫,建立了表、并定義了主鍵。使用ODBC動態(tài)連接Access數(shù)據(jù)庫,并運用VC++代碼來實現(xiàn)對庫內(nèi)記錄的查詢功能。</p><p> 2.2 開發(fā)的硬件環(huán)境</p><p> 在本次設計中,我們的項目涉及到串口通訊的問題,軟件方面應用VC++來實現(xiàn),而
29、硬件方面則應用到RS-485接口轉(zhuǎn)換器ADS-106來實現(xiàn)通訊目標。</p><p> 2.2.1 RS-232-C異步串行通訊總線</p><p> RS-232-C是使用得最早、最多的一種異步串行通信總線。它由美國電子工業(yè)協(xié)會于1962年公布,它主要用來定義計算機系統(tǒng)的一些數(shù)據(jù)終端設備(DTE)和數(shù)據(jù)通信設備(DCE)之間接口的電氣特性。RS-232-C標準總線有25條信號線,對其
30、機械特性并未做嚴格規(guī)定。在RS-232-C中包括兩個信道:主信道和次信道,它的信號分為兩類:一類是DTE與DCE交換的信息:TxD和RxD;另一類是為了正確無誤地傳輸上述信息而設計的聯(lián)絡信號。</p><p> 2.2.2 RS-485接口轉(zhuǎn)換器ADS-106</p><p> RS-485接口轉(zhuǎn)換器ADS-106可將RS-232-C串行口的數(shù)據(jù)發(fā)送(TD)和數(shù)據(jù)接收(RD)信號轉(zhuǎn)換成
31、兩線平衡的半雙工RS-485信號,它是遠距離控制設備或點到多點總線通信的最佳選擇,該接口轉(zhuǎn)換裝置,不需要外接交流直流電源,可直接從RS-485 端口內(nèi)的數(shù)據(jù)發(fā)送(TD)信號、請求發(fā)送(RTS)或數(shù)據(jù)終端準備好(DTR)獲取電源,而且還加上了發(fā)送數(shù)據(jù)自動控制的功能,在發(fā)送接收數(shù)據(jù)時不需要RTS使能控制。如下圖所示:</p><p> 這是一般應用RS-485接口轉(zhuǎn)換器的示意圖,轉(zhuǎn)換器RS-232口端接上位機中心主
32、站,RS-485口端串行連接各RS-485設備。但在本設計中,接口轉(zhuǎn)換器RS-232口端接上位機中心主站,而RS-485口端則與其他接口轉(zhuǎn)換器的RS-485口端相連,形成一個星型連接。</p><p> 2.3 通訊方案的確定</p><p> 在實驗室和工業(yè)應用中,串口是常用的計算機與外部串行設備之間的數(shù)據(jù)傳輸通道,由于串行通信方便易行,所以應用廣泛。目前,用VC++來實現(xiàn)串口的
33、通訊方法有很多種,下面逐個進行簡單的介紹,重點分析MSComm控件和CserialPortEx類,最后說明選擇CserialPortEx類的原因。</p><p> 2.3.1目前流行的幾種開發(fā)技術的比較</p><p> 在Microsoft Windows下開發(fā)串口通信程序通常有如下幾種方法:</p><p> 1)利用Windows API通信函數(shù)。&l
34、t;/p><p> 2)利用Windows的讀寫端口函數(shù)_inp、_inpw、_inpd、_outp、_outpw、_outpw(Windows95系列下)或開發(fā)驅(qū)動程序(Windows NT系列下)直接對串口進行操作。</p><p> 3)利用第三方提供或自己編寫的通信類。</p><p> 4)使用串口通信組件,如:ActiveX控件MSComm。</
35、p><p> 在以上幾種方法中第一種(即API函數(shù)法)使用面較廣,但由于比較復雜,使用比較困難。第二種需要了解硬件電路結(jié)構(gòu)原理,深入驅(qū)動層次,專業(yè)化程度較高。第三種方法使用面向?qū)ο蠹夹g封裝Win32 API函數(shù),提供一個用于串行通信的類,只要理解這種類的幾個成員函數(shù),就能方便地使用。第四種方法較簡單,只需要對串口進行簡單的配置,唯一比較困難的地方在于令人費解的VARIANT類。</p><p&g
36、t; 2.3.2 Mscomm控件的研究</p><p> Microsoft Communication Control(簡稱MSComm)是微軟公司提供的簡化Windows下串行通信編程的ActiveX控件,它為應用程序提供了通過串行接口收發(fā)數(shù)據(jù)的簡便方法,在Visual C++、Visual Basic、Delphi等語言中均可以使用。MSComm控件提供兩種處理通信的方式:事件驅(qū)動方式和查詢方式。&l
37、t;/p><p> (1)事件驅(qū)動方式:事件驅(qū)動通訊是處理串行端口交互作用的一種非常有效的方法。在許多情況下,在事件發(fā)生時需要得到通知,例如,在串口接收緩沖區(qū)中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 線上一個字符到達或一個變化發(fā)生時。在這些情況下,可以利用 MSComm 控件的 OnComm 事件捕獲并處理這些通訊事件。OnComm 事件還可以檢查和處理
38、通訊錯誤。所有通訊事件和通訊錯誤的列表,參閱 CommEvent 屬性。在編程過程中,就可以在OnComm事件處理函數(shù)中加入自己的處理代碼。這種方法的優(yōu)點是程序響應及時,可靠性高。每個MSComm 控件對應著一個串行端口。如果應用程序需要訪問多個串行端口,必須使用多個 MSComm 控件</p><p> (2)查詢方式:查詢方式實質(zhì)上還是事件驅(qū)動,但在有些情況下,這種方式顯得更為便捷。在程序的每個關鍵功能之后
39、,可以通過檢查 CommEvent 屬性的值來查詢事件和錯誤。如果應用程序較小,并且是自保持的,這種方法可能是更可取的。例如,如果寫一個簡單的電話撥號程序,則沒有必要對每接收一個字符都產(chǎn)生事件,因為唯一等待接收的字符是調(diào)制解調(diào)器的“確定”響應。</p><p> MSComm 控件有很多重要的屬性,但首先必須熟悉幾個屬性:</p><p> 1)CommPort 設置并返回通訊端口號。
40、</p><p> 2)Settings 以字符串的形式設置并返回波特率、奇偶校驗、數(shù)據(jù)位、停止位。</p><p> 3)PortOpen 設置并返回通訊端口的狀態(tài)。也可以打開和關閉端口。</p><p> 4)Input 從接收緩沖區(qū)返回和刪除字符。</p><p> 5)Output 向傳輸緩沖區(qū)寫一個字符串。</p>
41、;<p> 下面分別描述: CommPort屬性 設置并返回通訊端口號,類型為short。語法:object.CommPort[value ] (value 一整型值,說明端口號。) 說明: 在設計時,value 可以設置成從 1 到 16 的任何數(shù)(缺省值為 1)。但是如果用 PortOpen 屬性打開一個并不存在的端口時,MSComm 控件會產(chǎn)生錯誤 68(設備無效)。注意:必須在打開端口
42、之前設置 CommPort 屬性。</p><p> Settings 屬性 設置并返回數(shù)據(jù)波特率、奇偶校驗、數(shù)據(jù)位、停止位參數(shù),類型為Cstring。語法:object.Settings[ = value]說明:當端口打開時,如果 value 非法,則 MSComm 控件產(chǎn)生錯誤 380(非法屬性值)。Value 由四個設置值組成,有如下的格式:"BBBB,P,D,S"BBBB
43、為波特率,P 為奇偶校驗,D 為數(shù)據(jù)位數(shù),S 為停止位數(shù)。value 的缺省值是:"9600,N,8,1" </p><p> PortOpen 屬性 設置或返回串口狀態(tài),BOOL類型:值為TURE時打開,值為FALSE時關閉。</p><p> Input屬性 從接收緩沖區(qū)讀取數(shù)據(jù),類型為VARIANT。</p><p> Output屬
44、性 向發(fā)送緩沖區(qū)寫入數(shù)據(jù),類型為VARIANT。</p><p> 2.3.3 CserialPortEx類的分析</p><p> 串口通信類CserialPortEx是在Remon Spekreijse設計的CserialPort類基礎上設計的,并增加了對二進制數(shù)據(jù)傳輸和塊讀寫方式的支持和其他功能函數(shù)。CserialPortEx類主要使用異步方式操作串口,但為了能適用于不同的需求,
45、也提供了使用其他方式操作串口的公共成員函數(shù)。</p><p> CserialPortEx類的設計目標是提供封裝串口通信細節(jié)、健壯高效的串口通信類,能支持多串口、多線程,并能在所有主流Windows系統(tǒng)下使用。CserialPortEx類的用戶只需熟悉少數(shù)幾個公共成員函數(shù),就能輕易在自己的程序中加入串口支持。但值得注意的是,CserialPortEx類并不支持串口通信協(xié)議,因為不同應用場合下可能需要使用不同的協(xié)
46、議,而使用串口所需的基本功能在各種應用場合都是將近相同。</p><p> 下面簡單分析CserialPortEx類的基本功能:</p><p> (1)建立Event:</p><p> 本步驟在串口初始化函數(shù)CserialPortEx::InitPort內(nèi)實現(xiàn),用異步方式操作串口必須要定義OVERLAPPER結(jié)構(gòu)m_ov,其中的hEvent成員必須自己創(chuàng)建
47、,它通常必須負責EV_RXCHAR(有字符到達串口)和EV_BREAK、EV_CTS、EV_DSR、EV_ERR、EV_RING、EV_RLSD、EV_RXFLAG、EV_TXEMPTY等串口通信狀態(tài)事件;此外CserialPortEx建立了m_hShutdownEvent(關閉串口,最高優(yōu)先級)和m_hWriteEvent(寫串口)事件。關鍵代碼如下所示:</p><p> if (m_ov.hEvent !
48、= NULL)</p><p> ResetEvent(m_ov.hEvent);</p><p> m_ov.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);</p><p> if (m_hWriteEvent != NULL)</p><p> ResetEvent(m_hWriteE
49、vent);</p><p> m_hWriteEvent = CreateEvent(NULL, TRUE, FALSE, NULL);</p><p> if (m_hShutdownEvent != NULL)</p><p> ResetEvent(m_hShutdownEvent);</p><p> m_hShutdow
50、nEvent = CreateEvent(NULL, TRUE, FALSE, NULL);</p><p> // initialize the event objects</p><p> m_hEventArray[0] = m_hShutdownEvent;// highest priority</p><p> m_hEventArray[1] =
51、 m_ov.hEvent;</p><p> m_hEventArray[2] = m_hWriteEvent;</p><p><b> (2)打開串口:</b></p><p> 本步驟在串口初始化函數(shù)CserialPortEx::InitPort函數(shù)內(nèi)實現(xiàn)。應用異步方式必須指定FILE_FLAG_OVERLAPPED,而文件方式必須
52、OPEN_EXISTING,同時讀寫必須是GENERIC_READ||GENERIC_WRITE。關鍵代碼如下:</p><p> m_hComm = CreateFile(szPort,//串口名稱字符串,如:COM1</p><p> GENERIC_READ | GENERIC_WRITE,//讀寫</p><p> 0,
53、 //以獨占方式打開</p><p> NULL, //未設置安全屬性</p><p> OPEN_EXISTING, //串口設備必須設置此值</p><p> FILE_FLAG_OVERLAPPED,//使用異步I/O</p><p> 0);
54、 //串口設備該參數(shù)必須設為0</p><p> (3)設置串口參數(shù):</p><p> 本步驟仍在CserialPortEx::InitPort函數(shù)內(nèi)實現(xiàn)。主要對串口的DCB 結(jié)構(gòu)、超時時間和串口狀態(tài)事件進行配置。</p><p> (4)創(chuàng)建串口主線程:</p><p> 本步驟中線程創(chuàng)建在CserialPortEX::Start
55、Monitoring內(nèi)實現(xiàn),線程實現(xiàn)函數(shù)為:CserialPortEX::CommThread。</p><p> 串口主線程監(jiān)視寫(m_hWriteEvent)、關閉(m_hShutdownEvent)和串口通信狀態(tài)事件(m_ov.hEvent,包括數(shù)據(jù)到達串口事件),并調(diào)用相應函數(shù)處理這些事件。在串口主線程內(nèi)將使用WaitCommEvent檢測線路狀態(tài),使用WaitForMultipleObjects監(jiān)視上
56、述3類事件。</p><p><b> (5)讀寫數(shù)據(jù):</b></p><p> CserialPortEX提供了兩種讀數(shù)據(jù)的方式,隱式調(diào)用的ReceiveChar(默認方式)和顯式調(diào)用的ReadBlock。</p><p> ReceiveChar不需用戶調(diào)用,串口主線程在有數(shù)據(jù)到達串口時自動調(diào)用該函數(shù),它將讀取到的數(shù)據(jù)通過自定義消息
57、WM_COMM_RXCHAR發(fā)送給窗口m_pOwner,調(diào)用者只需在該窗口內(nèi)處理WM_COMM_RXCHAR消息即可。ReadBlock由用戶顯式調(diào)用,調(diào)用形式如下:</p><p> BYTE* CserialPortEX::ReadBlock(CserialPortEX*Port,int&readLen)</p><p> 當調(diào)用ReadBlock時,將屏蔽CommThre
58、ad對ReceiveChar的調(diào)用。在串口主線程中CserialPortEX使用WriteChar(CserialPortEX*port)成員函數(shù)寫串口,此外CserialPortEX提供了兩個公共函數(shù)作為接口以供調(diào)用寫串口,如下所示:</p><p> void CserialPortEX::WriteToPort(BYTE*string,int nLength);</p><p>
59、 void CserialPortEX::WriteToPort(Cstring str);</p><p><b> (6)關閉串口:</b></p><p> 本步驟在CserialPortEX::StopMonitoring中實現(xiàn)。</p><p> 2.3.4為什么要選擇CserialPortEx類技術</p>&l
60、t;p> 在本次畢業(yè)設計中,我最終選擇了CserialPortEX類來進行串口通信的設計工作,放棄了在開始時決定使用的MSComm 控件。其原因主要是從以下幾個方面來考慮的:</p><p> 首先, 從功能方面考慮,MSComm 控件對付簡單的任務完全可以,但當我們需要在程序中用多個串口,而且還要做很多復雜處理的時候, MSComm通訊控件就不是那么好用了。 它畢竟是一個VC++中自帶的控件,在功能方
61、面還是有限的,不如CserialPortEX類的功能強大。</p><p> 其次,從程序健壯性方面考慮,我們設計中的通信傳輸屬性默認設置是“9600,8,1,N”,若應用MSComm 控件的話,如果需要對這一數(shù)據(jù)進行變動,只能到源程序中手動修改Settings的參數(shù)值,而CserialPortEX類則提供了BOOL CserialPortEx::InitPort函數(shù)支持動態(tài)設定串口參數(shù),可以隨時在生成的系統(tǒng)上
62、進行更改,這就大大的擴展了所開發(fā)程序的應用范圍。</p><p> 再次,我設計的上位機是基于VC++中的單文檔應用程序,而MSComm 控件在基于對話框的程序中十分好用,但要讓它基于單文檔就不是那么簡單了,按常規(guī)在對話框中的方法添加根本行不通,如要應用還需做相應的更改工作,且與最終實現(xiàn)的某些功能有沖突。</p><p> 最后,在今后這方面的實際應用中,隨著程序開發(fā)的具體要求不同,對
63、通信要求的功能也就不同。從長遠來看,使用CserialPortEX類比用MSComm 控件更有發(fā)展前途。</p><p> 第三章 系統(tǒng)分析與設計</p><p><b> 3.1問題的提出</b></p><p> 在科技飛速發(fā)展的今天,鐵路部門現(xiàn)有的乘車管理機制已不能完全適應時代的發(fā)展,存在著出入人員流動量大、人員情況復雜、難于管理等
64、問題,所以急需開發(fā)一個新的系統(tǒng),實現(xiàn)有效的管理。</p><p><b> 3.2可行性研究</b></p><p> 可行性研究是指在當前組織內(nèi)外的具體條件下,系統(tǒng)開發(fā)工作必須具備資源和條件,看是否滿足系統(tǒng)目標的要求。在系統(tǒng)開發(fā)過程中進行可行性研究,對于保證資源的合理使用,避免浪費和一些不必要的失敗,都是十分重要的。</p><p>
65、1.目標方案的可行性</p><p> 目標和方案的可行性是指目標是否明確,方案是否切實可行,是否滿足組織進一步發(fā)展的要求。</p><p> 2.技術方面的可行性</p><p> 技術方面的可行性就是根據(jù)現(xiàn)有的技術條件,考慮所提出的要求是否能達到。關系到下面幾個方面:</p><p> 人員和技術力量的可行性</p>
66、<p><b> 基礎管理的可行性</b></p><p> 組織系統(tǒng)開發(fā)方案的可行性</p><p><b> 計算機硬件的可行性</b></p><p><b> 計算機軟件的可行性</b></p><p> 環(huán)境條件以及運行方面的可行性</p&
67、gt;<p> 3.經(jīng)濟方面的可行性</p><p> 經(jīng)濟方面的可行性主要是從組織的人力、財力、物力三方面來考察系統(tǒng)開發(fā)的可行性。</p><p> 我們經(jīng)過了解和分析,確定本次設計的目標十分明確,方案切實可行,且能夠較好的適應鐵路現(xiàn)行的情況;目前我們掌握的技術(VC++6.0高級編程語言和Access數(shù)據(jù)庫)已經(jīng)能夠?qū)崿F(xiàn)所提出的要求,計算機系統(tǒng)的軟、硬件開發(fā)環(huán)境也是
68、允許的;從經(jīng)濟方面看,我們6人小組足以勝任這項開發(fā)工作,在財力、物力方面也沒有什么問題。因此我們開發(fā)的這個“鐵路客運安全服務系統(tǒng)”項目是可行的。</p><p><b> 3.3需求分析</b></p><p> 本次設計的具體計劃為:模擬當前鐵路部門的幾個站點,在每個站點建立一個出入站旅客信息登記制度,將每個站的出入旅客基本資料進行存儲入庫,另建立一臺上位機對這
69、些下位機的記錄進行匯集存儲,并通過串口相互連接的方式來實現(xiàn)通信傳輸。針對上位機,要求應用點名式的方法,正確接收各臺下位機所發(fā)送的數(shù)據(jù),正確記錄后存入后臺數(shù)據(jù)庫,能夠?qū)熘械挠涗涍M行不同條件的查詢,并能夠查找出提前或置后下車的旅客信息。</p><p> 對于整個系統(tǒng),我主要負責其中上位機的整體設計及實現(xiàn)工作。對于上位機的設計,主要是3個方面內(nèi)容:串口通訊,主界面設計和后臺數(shù)據(jù)庫建立。系統(tǒng)的功能模塊主要包括:串口
70、通信模塊、數(shù)據(jù)庫處理模塊、控制模塊、顯示模塊和查詢模塊共5個。其中串口通信模塊包含:串口數(shù)據(jù)的接收入庫、串口設置、循環(huán)點名、單一點名;信息查詢模塊包括:普通查詢、問題查詢。</p><p> 串口數(shù)據(jù)的接收入庫與顯示主要是將從串口緩沖區(qū)讀取的數(shù)據(jù)正確的存入數(shù)據(jù)庫中相應的位置并將當前信息顯示在主界面上;串口設置是可以根據(jù)提供的相關選項來進行對串口的波特率、數(shù)據(jù)位、停止位、校驗位的設定;循環(huán)點名和單一點名則是根據(jù)具
71、體的要求對各下位機輪流或單一發(fā)送消息,與之建立通訊連接;查詢功能可以分為兩種方法:普通查詢能依據(jù)旅客號查找出想了解的旅客的基本信息,而問題查詢則可通過該旅客的上下車地點來判定他是否是按目的地正常下車的。</p><p> 3.4系統(tǒng)各模塊間的關系圖</p><p> 我們設計的安全系統(tǒng)在串口通信方面采用前面提到過的CserialPortEx類來進行實現(xiàn),接收串口數(shù)據(jù)時使用隱式調(diào)用,Cs
72、erialPortEx在串口數(shù)據(jù)到達時將數(shù)據(jù)發(fā)送到程序主窗口??刂颇K每隔一段時間察看一次主窗口串口數(shù)據(jù)接收緩沖區(qū),并對符合要求的數(shù)據(jù)進行處理后通過數(shù)據(jù)庫處理模塊存儲到數(shù)據(jù)庫中,同時請求顯示模塊更新記錄。</p><p> 在需求分析的基礎上,考慮Visual C++程序編制特點,得到如下所示的系統(tǒng)各模塊間關系圖:(其中寬箭頭表示數(shù)據(jù)流向)</p><p> 第四章 數(shù)據(jù)庫的設計與實現(xiàn)
73、</p><p> 4.1 開放式數(shù)據(jù)庫連接(ODBC)技術</p><p> 開放式數(shù)據(jù)庫連接ODBC為各種類型的數(shù)據(jù)庫管理系統(tǒng)提供了統(tǒng)一的使用 SQL語言的程序設計接口,本次設計的系統(tǒng)就是使用ODBC接口將數(shù)據(jù)保存到數(shù)據(jù)庫中的。</p><p> 4.1.1 開放式數(shù)據(jù)庫連接簡介</p><p> ODBC(Open Data
74、Base Connectivity),即開放式數(shù)據(jù)庫連接,是基于SQL(結(jié)構(gòu)化查詢語言)而設計的,它提供了一組對數(shù)據(jù)庫訪問的標準API(應用程序編程接口)。一個基于ODBC的應用程序?qū)?shù)據(jù)庫的操作不依賴任何DBMS,所有數(shù)據(jù)庫的操作由對應的DBMS的ODBC驅(qū)動程序完成。在默認情況下,VC6.0只會安裝SQL Server、Access、FoxPro和dBase的驅(qū)動程序。</p><p> 由于ODBC通過使
75、用驅(qū)動程序來提供數(shù)據(jù)庫的獨立性,因此,對于不同的數(shù)據(jù)庫就要求使用不同的數(shù)據(jù)庫驅(qū)動程序,驅(qū)動程序?qū)嶋H上是一個支持ODBC函數(shù)調(diào)用的模塊,通常就是一個動態(tài)鏈接庫DLL,應用程序就是通過調(diào)用動態(tài)鏈接庫上的驅(qū)動程序所支持的函數(shù)來操作數(shù)據(jù)庫的,它讓應用程序的編寫者避免了與數(shù)據(jù)源相連的復雜性。</p><p> 4.1.2 MFC對ODBC的支持</p><p> MFC的ODBC數(shù)據(jù)庫類對較復
76、雜的ODBC API進行了封裝,提供了簡化的調(diào)用接口,從而大大的方便了數(shù)據(jù)庫應用程序的開發(fā)。MFC的數(shù)據(jù)庫類包括CDatabase類、CRecordset類、CRecordView類和CFieldExchange類。CDatabase類針對某個數(shù)據(jù)庫,負責連接數(shù)據(jù)源;CRecordset類針對數(shù)據(jù)源中的記錄集,負責對記錄的操作;CRecordView類負責記錄集的用戶界面;而CFieldExchange類負責CRecordset與數(shù)據(jù)源
77、的數(shù)據(jù)交換。</p><p> 1.CDatabase類: </p><p> CDatabase類主要功能是建立與ODBC數(shù)據(jù)源的連接,連接的句柄存放在其數(shù)據(jù)成員m_hdbc中,并提供一個獲取連接字符串的成員函數(shù)GetConnect。可以創(chuàng)建一個CDatabase類的對象,然后調(diào)用OpenEx成員函數(shù)來建立與數(shù)據(jù)源的連接(通過ODBC驅(qū)動程序),函數(shù)原型為:</p>&
78、lt;p> Virtual BOOL OpenEx(LPCTSTR,DWORD dwOptions=0);</p><p> 其中,參數(shù)lpszConnectString用于指定一個ODBC連接字符串,該字符串包含數(shù)據(jù)源名稱和其他選項信息。若該值為NULL,則將彈出一個數(shù)據(jù)源對話框提示用戶選擇數(shù)據(jù)源,參數(shù)dwOptions用于指定打開的數(shù)據(jù)庫是否為獨占方式和只讀方式等選項。</p><
79、;p> 2.CRecordset類: </p><p> CRecordset類代表從數(shù)據(jù)源選擇的一組記錄(記錄集),程序可以選擇數(shù)據(jù)源中的某個表作為一個記錄集,也可以通過對表的查詢得到記錄集,還可以合并同一數(shù)據(jù)源中多個表的列到一個記錄集中。通過該類可以構(gòu)造一個記錄集,可以打開一個記錄集,可以對記錄集中的記錄進行滾動、修改、增加和刪除等操作。CRecordset類與數(shù)據(jù)源記錄的交換是利用記錄字段交換RF
80、X機制。</p><p> 從數(shù)據(jù)庫中導出的記錄集有兩種類型:快照(Snapshot)和動態(tài)集(Dynaset)。快照是一次性地從數(shù)據(jù)庫中下載整個記錄集內(nèi)容,由固定成員組成一個靜態(tài)集合。動態(tài)集是創(chuàng)建指向所請求的每個記錄的實際指針,當連接的數(shù)據(jù)庫是共享方式時,動態(tài)集的記錄內(nèi)容將動態(tài)顯示你和其他應用程序所做的修改,因此其記錄集內(nèi)容不是一次性給定的,而是動態(tài)變化的。默認的記錄集類型是快照。</p>&l
81、t;p> CRecordset類主要的成員函數(shù):</p><p> (1)記錄瀏覽操作函數(shù):包括Move、MoveFirst、MoveLast、MoveNext、MovePrev和SetAbsolutePosition六個函數(shù)。Move函數(shù)將光標從當前位置往前或往后相對移動若干個記錄,移動的記錄數(shù)由參數(shù)指定,正值往前移(尾部方向),負值往后移(頭部方向)。SetAbsolutePosition函數(shù)將當前
82、記錄移到由參數(shù)指定的記錄號上。其他四個函數(shù)分別將光標移到記錄集中的第一個記錄、最后一個記錄、下一個記錄和前一個記錄。</p><p> (2)記錄更新操作函數(shù):包括AddNew、Delete、Edit、Update、CancelUpate和Requery六個成員函數(shù)。AddNew函數(shù)用于添加新記錄,Delete函數(shù)用于刪除當前記錄,Edit函數(shù)用于修改當前記錄各字段數(shù)據(jù)的值。Update函數(shù)用于完成前三個函數(shù)所
83、做的修改在數(shù)據(jù)源上的最后保存,CancelUpdate函數(shù)取消任何由Edit和AddNew操作導致的待處理的更新。Requery函數(shù)用于重新執(zhí)行對記錄集的查詢,更新所選記錄。通過給成員數(shù)據(jù)m_strFilter和m_strSort賦新值,然后調(diào)用Requery函數(shù),可實現(xiàn)對記錄的篩選和排序。</p><p> (3)構(gòu)造函數(shù):構(gòu)造函數(shù)CRecordset用于創(chuàng)建一個記錄集對象,并把一個CDatabase對象的指
84、針作為參數(shù)傳遞給CRecordset函數(shù),以便獲得已由CDatabase對象建立起來的與數(shù)據(jù)源的連接。如果傳給它一個NULl值,則CDatabase對象被自動創(chuàng)建,并自動連接到數(shù)據(jù)源。CRecordset或其派生類對象通過一個虛函數(shù)GetDefaultConnect獲得默認的連接字符串。必須在CRecordset派生類中定義該構(gòu)造函數(shù)的內(nèi)容。</p><p> (4)記錄字段數(shù)據(jù)交換函數(shù):包括DoFieldEx
85、change和DoBulkFieldExchange兩個函數(shù),前者用于一般情況(少量記錄行)的字段數(shù)據(jù)交換,后者用于大量記錄行時的字段數(shù)據(jù)交換。記錄字段數(shù)據(jù)交換是指在記錄集上字段數(shù)據(jù)成員與數(shù)據(jù)源上當前記錄對應列之間自動交換數(shù)據(jù)。</p><p> (5)其他重要的成員函數(shù):GetDefaultSQL函數(shù)用于獲得默認的SQL語句。CanUpdate函數(shù)用于確認記錄集是否可以更新。GetRecordCount函數(shù)用
86、于獲取記錄集中的記錄個數(shù)。IsDeleted函數(shù)用于確認當前記錄是否被打上刪除標記。IsBOF和IsEOF函數(shù)分別用于確認記錄指針是否位于第一個記錄之前或最后一個記錄之后。GetFieldValue函數(shù)用于獲取當前記錄中指定字段的值。</p><p> 3.CRecordView類: </p><p> CRecordView類稱之為記錄視圖,是在控件中顯示數(shù)據(jù)庫記錄的視圖。該視圖是直
87、接與一個記錄集對象相連接的對話視圖,從一個對話模板資源創(chuàng)建,在對話模板控件中顯示記錄集對象的字段數(shù)據(jù)。記錄視圖對象利用對話數(shù)據(jù)交換DDX機制和記錄字段交換RFX機制自動實現(xiàn)窗體的控件與記錄集的字段之間的數(shù)據(jù)移動。CRecordset也提供了移動記錄(移動到第一個、下一個、前一個和最后一個)的默認實現(xiàn),以及在視圖中根據(jù)當前記錄更新用戶界面的默認實現(xiàn)。用AppWizard生成數(shù)據(jù)庫應用程序框架時,AppWizard自動生成一個“記錄”菜單,
88、下面帶有上述的移動記錄的四個菜單項,并在工具欄上生成相應的四個工具按鈕。CRecordsetView跟蹤用戶在記錄集中的定位情況,以便記錄視圖能更新用戶界面。</p><p> CRecordView類是從CFormView類派生而來的,CFormView與一般CView派生類的區(qū)別是在應用程序中會有一個對話框資源與該視圖對應,在程序運行時,該對話框顯示在當前視圖中。CRecordView類從基類繼承的成員函數(shù)
89、中最重要的是對話數(shù)據(jù)交換函數(shù)DoDataExchange和數(shù)據(jù)更新函數(shù)UpdateData,前者用于實現(xiàn)記錄集的字段與對話框的控件之間進行數(shù)據(jù)交換,后者用于更新對話框中控件的數(shù)據(jù)。</p><p> CRecordView類的特有成員函數(shù)為:</p><p> (1)OnGetRecordset函數(shù):</p><p> 調(diào)用OnGetRecordset函數(shù)以獲
90、得指向CRecordset派生類對象的指針。ClassWizard已為你重載了該函數(shù),如果必要的話,ClassWizard將創(chuàng)建記錄對象。</p><p> (2)OnMove函數(shù):</p><p> 如果當前記錄已改變,OnMove函數(shù)更新對當前記錄所做的修改,移動當前記錄到指定的記錄上(下一個、前一個、第一個或最后一個),顯示新記錄的字段內(nèi)容。</p><p&g
91、t; (3)IsOnFirstRecord和IsOnLastRecord函數(shù):</p><p> 這兩個函數(shù)分別用于確定當前記錄是否位于第一個記錄和最后一個記錄,這在進行用戶界面更新時很有用。</p><p> 4.CFieldExchange類: </p><p> 支持記錄字段數(shù)據(jù)交換(RFX),即記錄集字段數(shù)據(jù)成員與相應的數(shù)據(jù)庫表的字段之間的數(shù)據(jù)交換。
92、該類的功能與CdataExchange類的對話框數(shù)據(jù)交換功能類似。</p><p> 4.1.3 在MFC中應用ODBC編程</p><p> 在VC++中編寫一個簡單地利用ODBC管理數(shù)據(jù)庫的應用程序,通常需要完成如下一些步驟(后臺數(shù)據(jù)庫使用 Access):</p><p> 1.用Access創(chuàng)建數(shù)據(jù)庫(并在數(shù)據(jù)庫內(nèi)至少創(chuàng)建一個表),作為數(shù)據(jù)源。<
93、;/p><p> 2.在Windows中配置ODBC數(shù)據(jù)源。</p><p> 3.用VC++中的向?qū)ppWizard創(chuàng)建基本的數(shù)據(jù)庫應用程序。</p><p> 4.向基本數(shù)據(jù)庫添加一些代碼來實現(xiàn)一些AppWizard不能支持的功能,如刪除、添加等功能,并創(chuàng)建數(shù)據(jù)庫顯示。</p><p> 下面依據(jù)上面的步驟來逐步實現(xiàn)數(shù)據(jù)庫的設計與實
94、現(xiàn)。</p><p> 4.2 數(shù)據(jù)庫中表的設計</p><p> 要建立數(shù)據(jù)庫應用程序,必須先創(chuàng)建數(shù)據(jù)庫并配置數(shù)據(jù)源。在本次設計中,我們運用Access來建立數(shù)據(jù)庫,庫名為:train_station,并在庫中使用設計器創(chuàng)建表建立了一個名為“旅客信息”的表,如下圖所示:</p><p> 圖4.1 train_station數(shù)據(jù)庫</p>&
95、lt;p> 圖4.2 旅客信息表設計視圖</p><p> 上表的概念結(jié)構(gòu)設計是在需求分析的基礎上進行的,將“旅客”定為實體,它的實體E-R圖為:</p><p> 圖4.3 旅客實體E-R圖</p><p> 在“旅客信息”表中, 共設置了十個字段的信息,分別是:</p><p> ID字段數(shù)據(jù)類型為自動編號,設為主鍵;&l
96、t;/p><p> 旅客號字段數(shù)據(jù)類型為文本,并限定字段大小為16位,用于標識旅客在數(shù)據(jù)庫中的唯一性,便于查找。該數(shù)據(jù)的前四位表示該名旅客上車站的編號,第5-8位表示年份,最后的8位表示從該站上車旅客的編號。例如:若標識北京站的編號為0001,則“0001200400000001”就表示2004年從北京站上車的第一名旅客;</p><p> 姓名字段數(shù)據(jù)類型為文本,并限定字段大小為8位,用
97、于標識旅客的姓名信息;</p><p> 身份證號字段數(shù)據(jù)類型為文本,并限定字段大小為18位,用于標識旅客的身份證信息;</p><p> 車次字段數(shù)據(jù)類型為文本,并限定字段大小為4位,用于標識旅客乘座列車的編號信息;</p><p> 檢票時間字段數(shù)據(jù)類型為日期/時間,并設置數(shù)據(jù)格式為常規(guī)日期,用于保存旅客進站時的時間;</p><p&g
98、t; 上車站字段數(shù)據(jù)類型為文本,并限定字段大小為8位,用于標記旅客入站的站名; </p><p> 目的站字段數(shù)據(jù)類型為文本,并限定字段大小為8位,用于標記旅客出站的站名;</p><p> 出站時間字段數(shù)據(jù)類型為日期/時間,并設置數(shù)據(jù)格式為常規(guī)日期,用于保存旅客出站時的時間;</p><p> 下車站字段數(shù)據(jù)類型為文本,并限定字段大小為8位,用于標記旅客
99、實際出站的站名。</p><p> 另外,該表規(guī)定旅客號和身份證號的索引是“有(無重復)”,即在庫中最多出現(xiàn)一次,保證唯一性。具體情況見下表:</p><p> 4.3 創(chuàng)建并配置數(shù)據(jù)源 </p><p> 首先,打開控制面板,雙擊圖標,在用戶DSN選項卡下單擊“添加”按鈕,在“創(chuàng)建新數(shù)據(jù)源”對話框中從驅(qū)動程序列表中選擇“Driver do Microsof
100、t Access(*.mdb)”選項,如下圖所示;然后單擊“完成”按鈕。</p><p> 圖4.4 打開數(shù)據(jù)源</p><p> 圖4.5 創(chuàng)建新數(shù)據(jù)源</p><p> 然后,在“ODBC Microsoft Access 安裝”對話框中填入數(shù)據(jù)源名“train_station”和說明信息,并單擊“選擇”按鈕,在“選擇數(shù)據(jù)庫”對話框中選中“train_st
101、ation.mdb”數(shù)據(jù)庫,最后連續(xù)單擊“確定”完成數(shù)據(jù)源配置。</p><p> 圖4.6 ODBC Microsoft Access安裝</p><p> 圖4.7 選擇數(shù)據(jù)源</p><p> 第五章 程序設計與實現(xiàn)</p><p> 5.1 程序的創(chuàng)建與數(shù)據(jù)庫連接</p><p> 在本設計中,我們使
102、用VC++ 6.0來進行程序的實現(xiàn)。首先打開“File/New”菜單,選中“Project”選項卡,選擇“MFC AppWizard(exe)”選項,填入工程名“鐵路客運安全服務系統(tǒng)”。</p><p> 在AppWizard第一步中應用程序類型指定為單文檔,單擊“Next”按鈕進入下一步;在AppWizard第二步中選擇Database View Without File Support,單擊“Data so
103、urce”按鈕,在Database Options對話框中選擇train_station數(shù)據(jù)源,并選中Dynast選項。在選擇了數(shù)據(jù)源之后,AppWizard將提示選擇一個表,即選擇本數(shù)據(jù)庫中“ 旅客信息”表,如下圖所示。</p><p> 圖5.1 數(shù)據(jù)源的選擇</p><p> 5.2 主窗體的設計</p><p> 本次設計的主窗體設計圖如下所示,它除
104、了提供各種功能和快捷按鈕供管理員選擇外,還是系統(tǒng)數(shù)據(jù)庫顯示模塊和查詢模塊的主界面。主窗體菜單欄上的功能主要包括:</p><p> 圖5.2 主窗體設計圖</p><p> (1)命令:執(zhí)行打開和關閉串口監(jiān)聽功能的操作,并可以對串口通訊的數(shù)據(jù)位、停止位、校驗位、傳輸波特率和使用的端口號進行設置;</p><p> (2)循環(huán)點名:包括上車循環(huán)點名和下車循環(huán)點名
105、,執(zhí)行對各下位機的循環(huán)操作;</p><p> (3)進站點名:包含模擬的5個站點,可以對其中任意站點進行上車信息的點名;</p><p> (4)出站點名:包含模擬的5個站點,可以對其中任意站點進行下車信息的點名;</p><p> (5)記錄:針對“當前旅客信息”欄的操作,通過看上一記錄和看下一記錄等可以查看庫中所有記錄,并可以清空數(shù)據(jù)庫中全部的記錄;&l
106、t;/p><p> (6)滾動字幕:使主界面上的“歡迎進入鐵路客運安全服務系統(tǒng)!”字幕進行不停的滾動;</p><p> (7)查看:可以顯示和隱藏工具欄和狀態(tài)欄; </p><p> (8)關于:介紹此軟件的相關信息等;</p><p> (9)退出:退出該系統(tǒng)。</p><p> 在主界面的左部提供了系統(tǒng)的查
107、詢功能,可以通過選擇不同的條件來對庫中記錄進行不同的查詢;右部則提供了對當前旅客信息的顯示功能,它在默認狀態(tài)下顯示數(shù)據(jù)庫中第一條記錄信息。在主界面的下半部分是對數(shù)據(jù)庫中旅客信息記錄的顯示,與當前旅客信息欄不同的是它能夠顯示庫中的全部記錄,并可通過其下方設置的控件來實現(xiàn)對其中記錄的上下瀏覽。</p><p> 5.3 數(shù)據(jù)庫顯示模塊</p><p> 本設計的數(shù)據(jù)庫顯示模塊,主要包括當前
108、信息的顯示和歷史數(shù)據(jù)的顯示,下面將一一介紹其實現(xiàn)過程。</p><p> 首先添加顯示當前旅客信息的一般控件,如下表所示:</p><p> 表5.1 一般顯示控件</p><p> 因為通過“當前旅客信息”組框查看以往的記錄必須一頁一頁的翻動,比較麻煩。所以本程序提供了“數(shù)據(jù)庫信息記錄”的顯示功能,即添加歷史數(shù)據(jù)顯示控件,它將數(shù)據(jù)庫中的記錄數(shù)據(jù)通過網(wǎng)格的形式
109、顯示給用戶,類似于Access或 Excel顯示模塊。該功能的實現(xiàn)依賴于DBGrid Control(網(wǎng)格控件)和Microsoft Remote Control控件的協(xié)同工作。</p><p> 在VC++ 6.0工作環(huán)境下,選擇菜單Project->Add to Project->Components and Controls Gallery,在組件與控件選擇對話框中雙擊Registered A
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設計(論文)--基于vc++簡易心電圖分析系統(tǒng)的開發(fā)
- 基于vc++的點歌管理系統(tǒng)的設計和實現(xiàn)畢業(yè)設計(論文)
- 畢業(yè)設計---基于vc++的視頻采集系統(tǒng)的開發(fā)
- 基于VC++的圖像火焰檢測系統(tǒng)上位機軟件設計與實現(xiàn).pdf
- 畢業(yè)設計(論文)基于plc控制系統(tǒng)的注塑機控制系統(tǒng)設計
- 畢業(yè)設計論文-基于vc++的工資管理系統(tǒng)的設計與實現(xiàn)
- 畢業(yè)設計---基于vc++的公路收費站管理系統(tǒng)
- [vc++畢設]vc++醫(yī)藥管理系統(tǒng)+論文
- [vc++畢設]vc++航空檢票系統(tǒng)+論文
- 畢業(yè)設計(論文)-vc++超市進銷存管理系統(tǒng)
- 基于VC++金屬切削機床主傳動系統(tǒng)優(yōu)化設計(有VC++工程)--畢業(yè)設計.doc
- 基于vc++的平面曲線繪制畢業(yè)設計論文
- 基于VC++金屬切削機床主傳動系統(tǒng)優(yōu)化設計(有VC++工程)--畢業(yè)設計.doc
- 基于VC++金屬切削機床主傳動系統(tǒng)優(yōu)化設計(有VC++工程)--畢業(yè)設計.doc
- 基于vc++的班級信息管理系統(tǒng)畢業(yè)論文
- 基于單片機的溫度控制系統(tǒng)畢業(yè)設計論文
- vc++賓館管理管理系統(tǒng)畢業(yè)論文
- 自動加料機控制系統(tǒng)-畢業(yè)設計論文
- 畢業(yè)設計(論文)-基于單片機的電梯控制系統(tǒng)
- 基于VC++鹽穴三維地貌探測器上位機監(jiān)控系統(tǒng)設計.pdf
評論
0/150
提交評論