版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 車輛信息管理的開發(fā)</b></p><p><b> 摘要:</b></p><p> 車輛信息管理是智能辦公系統(tǒng)的重要組成部分,因此,車輛信息管理也以方便、快捷的優(yōu)點正慢慢地進入人們的生活,將傳統(tǒng)的車輛管理方式徹底的解脫出來,提高效率,減輕工作人員以往繁忙的工作,減小出錯的概率。從而使人們有更多時間來獲取信息、
2、了解信息、掌握信息。隨著企業(yè)的不斷發(fā)展,大中型企業(yè)的車輛使用與管理工作一日復(fù)雜,司機的不固定,車輛的保修,報廢等等,一系列問題干擾者我們。由此車輛管理信息系統(tǒng)產(chǎn)生了。</p><p> 關(guān)鍵詞:車輛信息管理;系統(tǒng)設(shè)計;信息;數(shù)據(jù)庫;PowerBuilder</p><p><b> 1.引言4</b></p><p> 1.1數(shù)據(jù)庫應(yīng)用
3、技術(shù)現(xiàn)狀4</p><p> 1.2面對對象與可視化技術(shù)應(yīng)用前景4</p><p> 1.3課程設(shè)計的目的和任務(wù)5</p><p> 1.4車輛管理的現(xiàn)狀5</p><p> 1.5 車輛信息管理的可行性分析5</p><p> 2.相關(guān)方法與技術(shù)6</p><p> 2
4、.1 數(shù)據(jù)庫應(yīng)用系統(tǒng)體系結(jié)構(gòu)6</p><p> 2.2可視化面向?qū)ο蠹夹g(shù)7</p><p> 2.3事件驅(qū)動程序設(shè)計8</p><p> 2.4數(shù)據(jù)庫事務(wù)控制技術(shù)8</p><p> 2.5數(shù)據(jù)庫連接策略10</p><p><b> 3 課題分析10</b></p&
5、gt;<p> 3.1選題背景10</p><p> 3.2 數(shù)據(jù)需求10</p><p> 3.3 功能需求11</p><p><b> 4 課題設(shè)計13</b></p><p> 4.1 總體設(shè)計13</p><p> 4.1.1 應(yīng)用程序功能的幾個事件
6、14</p><p><b> 5 課題實現(xiàn)15</b></p><p> 5.1應(yīng)用程序包裝的設(shè)計與實現(xiàn)15</p><p> 5.2數(shù)據(jù)庫訪問策略的設(shè)計與實現(xiàn)16</p><p> 5.3創(chuàng)建父窗口19</p><p><b> 6系統(tǒng)測試39</b>
7、</p><p> 6.1對系統(tǒng)模塊的測試39</p><p> 6.2對車輛信息維護模塊的測試42</p><p> 6.3車輛使用信息的維護測試43</p><p> 6.4司機信息維護模塊測試43</p><p><b> 7總結(jié)44</b></p><
8、;p> 7.1 主要研究內(nèi)容及成果44</p><p> 7.2 今后進一步研究方向45</p><p><b> 1.引言</b></p><p> 隨著計算機及網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,Internet/Intranet應(yīng)用在全球范圍內(nèi)日益普及,當(dāng)今社會正快速向信息化社會前進,信息系統(tǒng)的作用也越來越大。企業(yè)在正常運營中總是面
9、對大量的車輛使用信息,隨著企業(yè)的不斷發(fā)展,大中型企業(yè)的車輛使用與管理工作一日復(fù)雜,司機的不固定,車輛的保修,報廢等等,一系列問題干擾者我們。車輛管理信息系統(tǒng)可以減輕工作,將工作科學(xué)化、規(guī)范化,提高了企業(yè)的工作質(zhì)量因此根據(jù)企業(yè)目前實際的管理情況開發(fā)一套車輛信息管理是十分必要的。</p><p> 1.1數(shù)據(jù)庫應(yīng)用技術(shù)現(xiàn)狀</p><p> 數(shù)據(jù)庫技術(shù)是現(xiàn)代信息科學(xué)與技術(shù)的重要組成部分,是
10、計算機數(shù)據(jù)處理與信息管理系統(tǒng)的核心。數(shù)據(jù)庫技術(shù)研究和解決了計算機信息處理過程中大量數(shù)據(jù)有效地組織和存儲的問題,在數(shù)據(jù)庫系統(tǒng)中減少數(shù)據(jù)存儲冗余、實現(xiàn)數(shù)據(jù)共享、保障數(shù)據(jù)安全以及高效地檢索數(shù)據(jù)和處理數(shù)據(jù)。</p><p> 隨著計算機技術(shù)與網(wǎng)絡(luò)通信技術(shù)的發(fā)展,數(shù)據(jù)庫技術(shù)已成為信息社會中對大量數(shù)據(jù)進行組織與管理的重要技術(shù)手段及軟件技術(shù),是網(wǎng)絡(luò)信息化管理系統(tǒng)的基礎(chǔ)。本章主要介紹數(shù)據(jù)庫技術(shù)的應(yīng)用與發(fā)展、關(guān)系模型的基本概念、
11、關(guān)系數(shù)據(jù)庫的設(shè)計理論及數(shù)據(jù)庫設(shè)計方法等內(nèi)容,是學(xué)習(xí)和掌握現(xiàn)代數(shù)據(jù)庫技術(shù)的基礎(chǔ)</p><p> 1.2面對對象與可視化技術(shù)應(yīng)用前景</p><p> 可視化技術(shù)使人能夠直接對具有形體的信息進行操作,和計算機直接交流。這種技術(shù)已經(jīng)把人和機器的力量以一種直覺而自然的方式加以統(tǒng)一,這種革命性的變化無疑將極大地提高人們的工作效率,用以前不可想象的手段來獲取信息或發(fā)揮自己創(chuàng)造性的思維。</
12、p><p> 隨著科技的蓬勃發(fā)展,可視化技術(shù)的應(yīng)用領(lǐng)域越來越廣闊。從CT技術(shù)到數(shù)字人體,可視化技術(shù)在醫(yī)療與生命科學(xué)得到廣泛應(yīng)用;空間信息的可視化,在地理、軍事等領(lǐng)域應(yīng)用日益普遍。</p><p> 總之,可視化技術(shù),應(yīng)用前景無限廣闊。 </p><p> 1.3課程設(shè)計的目的和任務(wù)</p><p> 目的:熟悉一種可視化開發(fā)平臺,掌握數(shù)據(jù)
13、庫應(yīng)用當(dāng)中的Java連接技術(shù)、嵌入式SQL語言使用技術(shù)、事務(wù)控制技術(shù)、事件程序設(shè)計技術(shù)、面向?qū)ο蟮目梢暬夹g(shù),掌握數(shù)據(jù)庫應(yīng)用的分析、設(shè)計實現(xiàn)的方法。</p><p> 任務(wù):安裝、設(shè)置PowerBuilder可視化開發(fā)環(huán)境并作出一系列技術(shù)實驗,包括應(yīng)用程序的創(chuàng)建,常用事件程序設(shè)計方法,一個表上提供的增、刪、改的實現(xiàn)并且搭建應(yīng)用原型,事務(wù)訪問應(yīng)用,事務(wù)控制技術(shù),數(shù)據(jù)庫連接策略。</p><p&
14、gt; 1.4車輛管理的現(xiàn)狀</p><p> 現(xiàn)在大多數(shù)的車輛管理方式為手工處理,重復(fù)勞動多,勞動強度大,而且容易出錯,隨著企業(yè)的不斷發(fā)展,大中型企業(yè)的車輛使用與管理工作一日復(fù)雜,司機的不固定,車輛的保修,報廢等等,一系列問題干擾者我們。</p><p> 1.5 車輛信息管理的可行性分析</p><p> 本次課程設(shè)計題目:“車輛信息管理的開發(fā)”主要目的
15、是利用數(shù)據(jù)庫軟件編制一個管理軟件,用以實現(xiàn)車輛信息查詢和車輛信息編輯與使用以及日常工作等多項管理。同時對整個系統(tǒng)的分析、設(shè)計過程給出一個完整論證。車輛信息管理是一種基于集中統(tǒng)一規(guī)劃的數(shù)據(jù)庫數(shù)據(jù)管理新模式。在對司機、車輛的管理,其實是對車輛、車輛使用數(shù)據(jù)的管理。本系統(tǒng)的建成無疑會為管理者對車輛信息管理提供極大的幫助。本系統(tǒng)的設(shè)計主要從以下幾方面做起:系統(tǒng)業(yè)務(wù)流程分析、系統(tǒng)的功能設(shè)計、系統(tǒng)的數(shù)據(jù)庫結(jié)構(gòu)設(shè)計等。作這些工作需對數(shù)據(jù)庫知識有足夠認
16、識,并深入的了解PowerBuilder的使用和管理系統(tǒng)的相關(guān)知識。在信息時代的今天,人類需要對在政治、經(jīng)濟、軍事、文化、科研、教育等領(lǐng)域產(chǎn)生的大量信息進行管理,并對數(shù)據(jù)進行加工處理,數(shù)據(jù)庫技術(shù)則是信息管理與數(shù)據(jù)處理的先進技術(shù)。隨著信息量的不斷增加,作為計算機的三大主要應(yīng)用(科學(xué)計算、過程控制和數(shù)據(jù)處理)之一的數(shù)據(jù)處理,已迅速上升為計算機應(yīng)用的主要方面,數(shù)據(jù)庫技術(shù)則成為人們?nèi)粘I钪刑幚頂?shù)據(jù)不可缺少的有力工具,并且現(xiàn)代的信息管理系統(tǒng)幾乎
17、都以數(shù)據(jù)庫技術(shù)作為核心。</p><p> 現(xiàn)在大多數(shù)的車輛管理方式為手工處理,重復(fù)勞動多,勞動強度大,而且容易出錯,新系統(tǒng)的使用能否可以很好的解決這些問題要看系統(tǒng)的可行性,可行性研究的目的是用最小的代價在盡可能短的時間內(nèi)確定問題是否能夠解決。系統(tǒng)的可行性分析有以下幾個方面:</p><p> (1)技術(shù)可行性:處理速度快、準確通過權(quán)限的設(shè)置,數(shù)據(jù)的安全性好、方便查詢、管理等。 &
18、lt;/p><p> (2)經(jīng)濟可行性:系統(tǒng)建設(shè)不需要很大的投入、可縮減人力投入。</p><p> (3)運行上可行性:本系統(tǒng)作為一個小型的圖書館信息管理系統(tǒng),所耗費的</p><p><b> 資源非常的小。 </b></p><p> (4)從各種社會因素可行性分析:可降低工作人員工作強度,提高效率,會<
19、/p><p> 得到學(xué)校工作人員的一致同意的。</p><p> 綜上所述通過可行性分析認為新系統(tǒng)的開發(fā)方案切實可行,可進行開發(fā)。</p><p><b> 2.相關(guān)方法與技術(shù)</b></p><p> 本章內(nèi)容主要以查閱文獻為途徑,總結(jié)概括出數(shù)據(jù)庫應(yīng)用相關(guān)的方法與技術(shù),內(nèi)容主要涉及到數(shù)據(jù)庫應(yīng)用系統(tǒng)體系結(jié)構(gòu)、可視化面
20、向?qū)ο蠹夹g(shù)、事件驅(qū)動程序設(shè)計、數(shù)據(jù)庫事務(wù)控制技術(shù)、數(shù)據(jù)庫連接策略。</p><p> 2.1 數(shù)據(jù)庫應(yīng)用系統(tǒng)體系結(jié)構(gòu)</p><p> 數(shù)據(jù)庫內(nèi)部結(jié)構(gòu) PowerBuilder 數(shù)據(jù)庫中的所有信息通常都存儲在單個數(shù)據(jù)庫 文件中,可以從一臺計算機復(fù)制到另一臺計算機。還可以為若干文件生 成數(shù)據(jù)庫,但通常只有非常大的數(shù)據(jù)庫才需要這樣做。 除了數(shù)據(jù)庫文件外, </p&
21、gt;<p> PowerBuilder 在運行數(shù)據(jù)庫時還使用 另外兩個文件。這兩個文件是事務(wù)日志和臨時文件。 數(shù)據(jù)庫文件 在內(nèi)部,數(shù)據(jù)庫文件是由頁 (磁盤的固定大小區(qū)域)組成的。數(shù)據(jù)訪問層一次讀取和寫入一頁上的數(shù)據(jù)。許多頁 保存數(shù)據(jù)庫表中的數(shù)據(jù),而其它一些頁則保存索引信息、與數(shù)據(jù) 庫內(nèi)數(shù)據(jù)的分發(fā)有關(guān)的信息等。 事務(wù)日志 事務(wù)日志是一個單獨的文件,記錄在數(shù)據(jù)庫上執(zhí)行的 所有操作。通常,它具有與數(shù)據(jù)庫文件相同的名稱,只是它
22、以后 綴 .log 結(jié)尾,而不是以 .db 結(jié)尾。事務(wù)日志具有三個重要功能。 </p><p> ?記錄對數(shù)據(jù)執(zhí)行的操作以支持恢復(fù) 如果數(shù)據(jù)庫文件損壞, 您可以根據(jù)備份以及事務(wù)日志重新創(chuàng)建數(shù)據(jù)庫。 </p><p> ?提高性能 通過將信息寫入事務(wù)日志,數(shù)據(jù)庫服務(wù)器可以安 全地處理您的語句,而不必頻繁寫入數(shù)據(jù)庫文件。 支持數(shù)據(jù)庫復(fù)制 SQL 和PowerBuilder客戶端實用程序 使
23、用此文件復(fù)制對有時候連接到網(wǎng)絡(luò)的便攜式計算機上的數(shù) 據(jù)庫的更改。 臨時文件 在數(shù)據(jù)庫服務(wù)器啟動時該臨時文件打開,在數(shù)據(jù)庫服 務(wù)器結(jié)束時該臨時文件關(guān)閉。顧名思義,臨時文件是在服務(wù)器運 行時用來保存臨時信息的。臨時文件不保存需要在兩個會話之間 保留的信息。 該臨時文件存儲在您的臨時目錄中。此目錄的位置通常由 TEMP 環(huán)境變量標(biāo)識。</p><p> 2.2可視化面向?qū)ο蠹夹g(shù)</p><p>
24、; 可視化(Visual)程序設(shè)計是一種全新的程序設(shè)計方法,它主要是讓程序設(shè)計人員利用軟件本身所提供的各種控件,像搭積木式地構(gòu)造應(yīng)用程序的各種界面??梢暬绦蛟O(shè)計最大的優(yōu)點是設(shè)計人員可以不用編寫或只需編寫很少的程序代碼,就能完成應(yīng)用程序的設(shè)計,這樣就能極大地提高設(shè)計人員的工作效率。能進行可視化程序設(shè)計的語言很多。</p><p> 在數(shù)據(jù)輸入模塊內(nèi)部設(shè)計中,采用面向?qū)ο蟮脑O(shè)計方法。[6]面向?qū)ο蟮幕靖拍钊缦?/p>
25、: 對象:對象是要研究的任何事物。從一本書到一家圖書館,單的整數(shù)到整數(shù)列龐大的數(shù)據(jù)庫、極其復(fù)雜的自動化工廠、航天飛機都可看作對象,它不僅能表示有形的實體,也能表示無形的(抽象的)規(guī)則、計劃或事件。對象由數(shù)據(jù)(描述事物的屬性)和作用于數(shù)據(jù)的操作(體現(xiàn)事物的行為)構(gòu)成一獨立整體。從程序設(shè)計者來看,對象是一個程序模塊,從用戶來看,對象為他們提供所希望的行為。在對內(nèi)的操作通常稱為方法。 類:類是對象的模板。即類是對一組有相同數(shù)據(jù)和相同操作的
26、對象的定義,一個類所包含的方法和數(shù)據(jù)描述一組對象的共同屬性和行為。類是在對象之上的抽象,對象則是類的具體化,是類的實例。類可有其子類,也可有其它類,形成類層次結(jié)構(gòu)。 消息:消息是對象之間進行通信的一種規(guī)格說明。一般它由三部分組成:接收消息的對象、消息名及實際變元。 面向?qū)ο笾饕卣鳎?封裝性:封裝是一種信息隱蔽技術(shù),它體現(xiàn)于類的說明,是對象的重要特性。封裝使數(shù)據(jù)和加工該數(shù)據(jù)的方法(函數(shù))封裝為一個整體,以實現(xiàn)獨立性很強的模塊,使得
27、用戶只能見到對象的外特性(對象能接受哪些消</p><p> 2.3事件驅(qū)動程序設(shè)計</p><p> 所謂事件驅(qū)動,簡單地說就是你點什么按鈕(即產(chǎn)生什么事件),電腦執(zhí)行什么操作(即調(diào)用什么函數(shù)).當(dāng)然事件不僅限于用戶的操作. weWidgets的中所有可以處理事件的類都繼承自wxEvtHandler,其中包含frames, buttons, menus, even docume
28、nts,所有的窗體類(即從wxWindow繼承的類)和程序類(application class). 這些類可以有一個事件表,用來綁定事件和被調(diào)用的函數(shù)(handler functions). 過程 3.2. 建立一個靜態(tài)事件表(即編譯時生成的事件表)的操作步驟 建立一個新類(直接或間接從wxEvtHandler繼承) 為每個要處理的事件聲明被調(diào)用的函數(shù) 在被處理的事件所在的類的聲明中加入宏DECLARE_EVE
29、NT_TABLE 在宏BEGIN_EVENT_TABLE... END_EVENT_TABLE(就是事件表)中將函數(shù)與枚舉的數(shù)字綁定(因為產(chǎn)生該類型的事件的按鈕不唯一,要用枚舉數(shù)來區(qū)分);有些事件不必與枚舉數(shù)綁定,因為產(chǎn)生該類型的事件的對象可以確定(比如就是this).</p><p> 2.4數(shù)據(jù)庫事務(wù)控制技術(shù)</p><p> 一 事務(wù)處理介紹 事務(wù)是這樣一種機制,它確保多個
30、SQL語句被當(dāng)作單個工作單 元來處理。事務(wù)具有以下的作用: * 一致性:同時進行的查詢和更新彼此不會發(fā)生沖突,其他 用戶不會看到發(fā)生了變化但尚未提交的數(shù)據(jù)。 * 可恢復(fù)性:一旦系統(tǒng)故障,數(shù)據(jù)庫會自動地完全恢復(fù)未完 成的事務(wù)。 二 事務(wù)與一致性 事務(wù)是完整性的單位,一個事務(wù)的執(zhí)行是把數(shù)據(jù)庫從一個一 致的狀態(tài)轉(zhuǎn)換成另一個一致的狀態(tài)。因此,如果事務(wù)孤立執(zhí)行時 是正確的,但如果多個事務(wù)并發(fā)交錯地執(zhí)行,就可能相互干擾, 造成
31、數(shù)據(jù)庫狀態(tài)的不一致。在多用戶環(huán)境中,數(shù)據(jù)庫必須避免同 時進行的查詢和更新發(fā)生沖突。這一點是很重要的,如果正在被 處理的數(shù)據(jù)能夠在該處理正在運行時被另一用戶的修改所改變, 那么該處理結(jié)果是不明確的。 不加控制的并發(fā)存取會產(chǎn)生以下幾種錯誤: 1 丟失修改(lost updates) 當(dāng)多個事務(wù)并發(fā)修改一個數(shù)據(jù)時,不加控制會得出錯誤的結(jié) 果,一個修改會覆蓋掉另一個修改。 2 讀的不可重復(fù)性 當(dāng)多個事務(wù)按某種時間順序存取若干數(shù)
32、據(jù)時,如果對并發(fā)存 取不加控制,也會產(chǎn)生錯誤。 3 臟讀(DIRD</p><p> 2.5數(shù)據(jù)庫連接策略</p><p> 1.首先SQL企業(yè)管理器中要有事先建好的數(shù)據(jù)庫,然后通過PB自帶的db 控制畫板鏈接sql數(shù)據(jù)庫.</p><p> 2.如圖設(shè)置新的文件.隨即彈出初始化文件對話框。在第一空格隨便填入一個PB數(shù)據(jù)庫名字.第二個空格是服務(wù)器
33、.填入(local) 在第三個空格出填寫 sa 默認超級用戶管理員.然后再Database 空格處填寫 在SQL企業(yè)管理器建好的數(shù)據(jù)庫名字.確認無誤后,點擊ok 然后雙擊你所起名字的數(shù)據(jù)庫小圖標(biāo)即鏈接成功!望采納</p><p><b> 3 課題分析<
34、/b></p><p><b> 3.1選題背景</b></p><p> 隨著企業(yè)的不斷發(fā)展,大中型企業(yè)的車輛使用與管理工作一日復(fù)雜,司機的不固定,車輛的保修,報廢等等,一系列問題干擾者我們。由此車輛管理信息系統(tǒng)產(chǎn)生了。</p><p><b> 3.2 數(shù)據(jù)需求</b></p><p&g
35、t; 車輛的基本信息:車輛牌照號,品牌,購買日期,購買金額等等;</p><p> 司機的基本信息:司機編號,司機姓名,駕駛歷史,駕駛等級,電話,家庭住址;</p><p> 車輛和司機的關(guān)系屬性:駕駛時間,距離等等。</p><p><b> 3.3 功能需求</b></p><p> 3.3.1系統(tǒng)主要實現(xiàn)
36、以下幾個方面的功能</p><p> 1.用戶登錄 </p><p><b> 2.修改密碼 </b></p><p> 3.車輛信息編輯(添加,刪除,修改)及查詢 </p><p> 4.司機信息編輯(添加,刪除,修改)及查詢</p><p> 5.車輛使用信息編輯(添加,刪
37、除,修改)及查詢</p><p> 6.系統(tǒng)維護(設(shè)置用戶權(quán)限)</p><p><b> 3.3.2功能描述</b></p><p> 車輛管理包括用戶登錄、車輛信息編輯、車輛信息查詢、車輛使用信息查詢、司機信息編輯、司機信息查詢、車輛使用信息編輯、車輛使用信息查詢、車輛使用信息編輯及系統(tǒng)維護等功能。 </p><
38、p> 用戶登錄,用戶必須使用正確的用戶名和密碼才能訪問系統(tǒng);車輛信息編輯,實現(xiàn)對車輛信息的添加、修改和刪除的功能;司機信息查詢,實現(xiàn)了詳細查詢司機的信息。同時對車輛和司機信息的進行管理,車輛使用信息查詢及編輯,是更好地給司機安排車輛。系統(tǒng)維護,系統(tǒng)管理員可以注冊用戶,還可以設(shè)置新用戶的可編輯及查詢的權(quán)限。</p><p> 3.3.3功能需求模型</p><p><b>
39、; 3.3.4安全需求</b></p><p> 數(shù)據(jù)庫級的安全性控制一般采用用戶標(biāo)識與口令鑒別、存取控制、視圖和數(shù)據(jù)加密等安全技術(shù)。</p><p> 本車輛管理系統(tǒng)采用用戶名標(biāo)示與密碼鑒別技術(shù)來實現(xiàn)安全控制??紤]到不同用戶的權(quán)限不同,第一次進入該系統(tǒng)時應(yīng)該向系統(tǒng)管理員申請注冊一個用戶名和密碼,并完整的填寫相關(guān)信息,同時存入數(shù)據(jù)庫用戶權(quán)限表中。這樣系統(tǒng)管理員就可賦予不同
40、用戶不同的權(quán)限。每位用戶根據(jù)自己的身份不同,擁有不同的權(quán)限,包括可編輯,可查詢,可維護系統(tǒng)等。系統(tǒng)管理員有權(quán)力行使所有的管理功能,普通用戶只能進行一般的編輯或查詢,而系統(tǒng)管理員還有維護系統(tǒng)的權(quán)限。</p><p> 3.3.5一致性需求</p><p> 在車輛管理系統(tǒng)相關(guān)的表之間,有較強的關(guān)聯(lián)性,為了實現(xiàn)一致性的需求,我們在各個表之間建立起了一致性約束。例如在車輛信息編輯中,想刪除車
41、輛,系統(tǒng)會提示:該車輛有使用信息記錄,禁止刪除。</p><p> 3.3.6完整性需求</p><p> 根據(jù)車輛管理系統(tǒng)的要求,為保持數(shù)據(jù)的完整性,采用了數(shù)據(jù)庫的事務(wù)機制,防止出現(xiàn)操作故障。</p><p><b> 4 課題設(shè)計</b></p><p><b> 4.1 總體設(shè)計</b>
42、;</p><p> 本次車輛信息管理系統(tǒng)采用PowerBuilder8.0的可視化開發(fā)技術(shù),按照軟件開發(fā)的流程完成。系統(tǒng)分三個大的模塊,一個是系統(tǒng)維護模塊,主要要以下倆個子模塊組成,用戶口令更改模塊和用戶增刪改模塊,第二個功能模塊是車輛信息維護模塊,由四個子模塊構(gòu)成,分別是車輛使用信息子模塊,司機信息維護子模塊,車隊信息維護子模塊和司機信息維護子模塊。這四個模塊分別對應(yīng)數(shù)據(jù)庫里四張表的增刪改操作。第三個模塊是
43、查詢模塊,此模塊實現(xiàn)了對車輛,司機,車隊,車輛使用信息的查詢功能。</p><p> 4.1.1 應(yīng)用程序功能的幾個事件</p><p><b> Open事件</b></p><p><b> Click事件</b></p><p><b> Start事件</b>&
44、lt;/p><p><b> Stop事件</b></p><p><b> 刪除事件</b></p><p><b> 添加事件</b></p><p><b> 修改事件</b></p><p><b> 構(gòu)造函
45、數(shù)</b></p><p><b> 對窗口的繼承</b></p><p> 4.1.2 主控功能的實現(xiàn)</p><p> 4.1.2 ①號例子的實現(xiàn)</p><p> 4.1.3 ②號例子的實現(xiàn)</p><p> 4.1.4 ③號例子的實現(xiàn)</p><
46、p> 4.1.5 數(shù)據(jù)庫設(shè)計</p><p><b> 5 課題實現(xiàn)</b></p><p> 5.1應(yīng)用程序包裝的設(shè)計與實現(xiàn)</p><p> 5.1.1創(chuàng)建workspace</p><p> 進入PowerBuilder8.0開發(fā)環(huán)境,單擊工具欄上的“New”圖標(biāo),打開“New”對話框;選擇“Wor
47、kspace”選項卡并選擇“Workspace”圖標(biāo),單擊OK按鈕打開“New Workspace”對話框;設(shè)置好工作區(qū)保存的路徑和文件名后,單擊保存按鈕創(chuàng)建一個新的工作區(qū)。</p><p> 5.1.2創(chuàng)建target</p><p> 首先鼠標(biāo)在新建的workspace上右擊,選擇New,然后再給target取個名字,最后點擊OK后就生成了target。</p>&l
48、t;p> 5.1.3創(chuàng)建專用庫和共享庫</p><p> 在車輛信息管理系統(tǒng)中,只創(chuàng)建一個共享庫,在共享庫中定義共享的函數(shù),主窗口以及主菜單。根據(jù)具體的業(yè)務(wù)需求,在車輛信息管理系統(tǒng)中創(chuàng)建專用庫,分別實現(xiàn)5大功能。在共享庫中,首先創(chuàng)建一個主窗口,然后創(chuàng)建菜單,接著創(chuàng)建登錄窗口和修改密碼窗口,最后創(chuàng)建系統(tǒng)信息窗口。另外在共享庫中創(chuàng)建連接數(shù)據(jù)庫函數(shù)和斷開連接數(shù)據(jù)庫函數(shù),以及定義登錄系統(tǒng)所需的函數(shù)。在專用庫中創(chuàng)
49、建與每個模塊相關(guān)的窗口和數(shù)據(jù)窗口。</p><p> 5.1.4應(yīng)用程序的包裝實現(xiàn) </p><p> 5.2數(shù)據(jù)庫訪問策略的設(shè)計與實現(xiàn)</p><p> PowerBuilder8.0與數(shù)據(jù)庫連接可以通過通用接口與專用數(shù)據(jù)庫接口兩種方式來實現(xiàn),在圖書信息系統(tǒng)開發(fā)的過程中,是通過ODBC與數(shù)據(jù)庫連接的。通過ODBC連接數(shù)據(jù)庫需要經(jīng)過兩個步驟:一是配
50、置ODBC數(shù)據(jù)源,二是連接到數(shù)據(jù)庫。</p><p><b> 1.配置數(shù)據(jù)源</b></p><p> ?。?)啟動PowerBuilder后,單擊工具欄上的“DB Profiles”圖標(biāo),如下圖所示。</p><p> ?。?)用鼠標(biāo)雙擊“ODB ODBC 下“Utilities 內(nèi)的”“Create ODBC Data Source””
51、選項,打開如下圖所示“創(chuàng)建新數(shù)據(jù)源”對話框。</p><p> ?。?)選擇“用戶數(shù)據(jù)源”選項,再一直按“下一步”,打開如下圖所示的“ODBC Configuration”對話框。</p><p> ?。?)在“ODBC”標(biāo)簽頁輸入數(shù)據(jù)源的名稱,在“Login”標(biāo)簽頁輸入連接數(shù)據(jù)庫的賬號和密碼,在“Database”標(biāo)簽頁輸入數(shù)據(jù)庫的名稱和導(dǎo)入已經(jīng)建好的數(shù)據(jù)庫“mydb.db”后,測試成功
52、后,單擊“確定”按鈕后,即可完成新數(shù)據(jù)源的創(chuàng)建。</p><p> 2.連接到ODBC數(shù)據(jù)庫</p><p> ?。?)單擊工具欄上的“Database”圖標(biāo),打開“Database Connection”圖標(biāo)。</p><p> ?。?)在“ODB ODBC”選項上,右擊鼠標(biāo),選擇“New profile”,打開“ODBC Profile Setup”。填寫文件
53、名稱和找到數(shù)據(jù)源名稱,測試成功后,即可完成數(shù)據(jù)庫文件的創(chuàng)建,如下圖所示。</p><p> ?。?)單擊工具欄上的“ODBC Profile”圖標(biāo),打開“Database Profiles”對話框,如圖所示。</p><p> ?。?)選中已配置好的數(shù)據(jù)源“hospital”,單擊“Connect”按鈕,就可以連接到該數(shù)據(jù)源所定義的數(shù)據(jù)庫上。</p><p><
54、;b> 5.3創(chuàng)建父窗口</b></p><p> 5.3.1父窗口resize事件:</p><p> Integer li_count,li_tpcount</p><p> Integer li_i,li_tpi</p><p> This.Setredraw(False)</p><p&
55、gt;<b> //控件數(shù)</b></p><p> li_count = upperbound(This.Control[])</p><p> li_allcount = li_count</p><p> // 重新按照窗口大小來設(shè)定各控件的位置及大小</p><p> FOR li_i = 1 TO l
56、i_count</p><p> Choose Case This.Control[li_i].TypeOf()</p><p> Case checkbox!</p><p> icbx_obj = This.control[li_i]</p><p> icbx_obj.x = newwidth * ir_x[li_i]</
57、p><p> icbx_obj.y = newheight * ir_y[li_i]</p><p> Case radiobutton!</p><p> irb_obj = This.control[li_i]</p><p> irb_obj.x = newwidth * ir_x[li_i]</p><p>
58、; irb_obj.y = newheight * ir_y[li_i]</p><p> Case commandbutton!</p><p> icb_obj = This.control[li_i]</p><p> icb_obj.x = newwidth * ir_x[li_i]</p><p> icb_obj.y =
59、 newheight * ir_y[li_i]</p><p> icb_obj.width = newwidth * ir_width[li_i]</p><p> icb_obj.height = newheight * ir_height[li_i]</p><p> Case picture!</p><p> ip_obj
60、= This.control[li_i]</p><p> ip_obj.x = newwidth * ir_x[li_i]</p><p> ip_obj.y = newheight * ir_y[li_i]</p><p> ip_obj.width = newwidth * ir_width[li_i]</p><p> ip_
61、obj.height = newheight * ir_height[li_i]</p><p> Case datawindow!</p><p> idw_obj = This.control[li_i]</p><p> idw_obj.x = newwidth * ir_x[li_i]</p><p> idw_obj.y =
62、 newheight * ir_y[li_i]</p><p> idw_obj.width = newwidth * ir_width[li_i]</p><p> idw_obj.height = newheight * ir_height[li_i]</p><p> Case dropdownlistbox!</p><p>
63、 iddlb_obj = This.control[li_i]</p><p> iddlb_obj.x = newwidth * ir_x[li_i]</p><p> iddlb_obj.y = newheight * ir_y[li_i]</p><p> iddlb_obj.width = newwidth * ir_width[li_i]</p
64、><p> Case dropdownpicturelistbox!</p><p> iddplb_obj = This.control[li_i]</p><p> iddplb_obj.x = newwidth * ir_x[li_i]</p><p> iddplb_obj.y = newheight * ir_y[li_i]&l
65、t;/p><p> iddplb_obj.width = newwidth * ir_width[li_i]</p><p> Case listbox!</p><p> ilb_obj = This.control[li_i]</p><p> ilb_obj.x = newwidth * ir_x[li_i]</p>
66、<p> ilb_obj.y = newheight * ir_y[li_i]</p><p> ilb_obj.width = newwidth * ir_width[li_i]</p><p> ilb_obj.height = newheight * ir_height[li_i]</p><p> Case multilineedit!
67、</p><p> imle_obj = This.control[li_i]</p><p> imle_obj.x = newwidth * ir_x[li_i]</p><p> imle_obj.y = newheight * ir_y[li_i]</p><p> imle_obj.width = newwidth * ir
68、_width[li_i]</p><p> imle_obj.height = newheight * ir_height[li_i]</p><p> Case editmask!</p><p> iem_obj = This.control[li_i]</p><p> iem_obj.x = newwidth * ir_x
69、[li_i]</p><p> iem_obj.y = newheight * ir_y[li_i]</p><p> iem_obj.width = newwidth * ir_width[li_i]</p><p> iem_obj.height = newheight * ir_height[li_i]</p><p><
70、;b> Case tab!</b></p><p> it_obj = This.control[li_i]</p><p> it_obj.x = newwidth * ir_x[li_i]</p><p> it_obj.y = newheight * ir_y[li_i]</p><p> it_obj.wi
71、dth = newwidth * ir_width[li_i]</p><p> it_obj.height = newheight * ir_height[li_i]</p><p> li_tpcount = upperbound(it_obj.control[])</p><p> for li_tpi = 1 to li_tpcount</p&g
72、t;<p> tabresize(it_obj,li_tpi,li_allcount)</p><p><b> next</b></p><p> Case groupbox!</p><p> igb_obj = This.control[li_i]</p><p> igb_obj.x =
73、newwidth * ir_x[li_i]</p><p> igb_obj.y = newheight * ir_y[li_i]</p><p> igb_obj.width = newwidth * ir_width[li_i]</p><p> igb_obj.height = newheight * ir_height[li_i]</p>
74、;<p> Case hscrollbar!</p><p> ihsb_obj = This.control[li_i]</p><p> ihsb_obj.x = newwidth * ir_x[li_i]</p><p> ihsb_obj.y = newheight * ir_y[li_i]</p><p>
75、ihsb_obj.width = newwidth * ir_width[li_i]</p><p> ihsb_obj.height = newheight * ir_height[li_i]</p><p> Case picturebutton!</p><p> ipb_obj = This.control[li_i]</p><
76、p> ipb_obj.x = newwidth * ir_x[li_i]</p><p> ipb_obj.y = newheight * ir_y[li_i]</p><p> ipb_obj.width = newwidth * ir_width[li_i]</p><p> ipb_obj.height = newheight * ir_heig
77、ht[li_i]</p><p> Case listview!</p><p> ilv_obj = This.control[li_i]</p><p> ilv_obj.x = newwidth * ir_x[li_i]</p><p> ilv_obj.y = newheight * ir_y[li_i]</p>
78、;<p> ilv_obj.width = newwidth * ir_width[li_i]</p><p> ilv_obj.height = newheight * ir_height[li_i]</p><p> Case picturelistbox!</p><p> iplb_obj = This.control[li_i]
79、</p><p> iplb_obj.x = newwidth * ir_x[li_i]</p><p> iplb_obj.y = newheight * ir_y[li_i]</p><p> iplb_obj.width = newwidth * ir_width[li_i]</p><p> iplb_obj.height =
80、 newheight * ir_height[li_i]</p><p> Case singlelineedit!</p><p> isle_obj = This.control[li_i]</p><p> isle_obj.x = newwidth * ir_x[li_i]</p><p> isle_obj.y = ne
81、wheight * ir_y[li_i]</p><p> isle_obj.width = newwidth * ir_width[li_i]</p><p> isle_obj.height = newheight * ir_height[li_i]</p><p> Case treeview!</p><p> itv_ob
82、j = This.control[li_i]</p><p> itv_obj.x = newwidth * ir_x[li_i]</p><p> itv_obj.y = newheight * ir_y[li_i]</p><p> itv_obj.width = newwidth * ir_width[li_i]</p><p>
83、 itv_obj.height = newheight * ir_height[li_i]</p><p> Case userobject!</p><p> iuo_obj = This.control[li_i]</p><p> iuo_obj.x = newwidth * ir_x[li_i]</p><p> iuo
84、_obj.y = newheight * ir_y[li_i]</p><p> iuo_obj.width = newwidth * ir_width[li_i]</p><p> iuo_obj.height = newheight * ir_height[li_i]</p><p> Case vscrollbar!</p><p
85、> ivsb_obj = This.control[li_i]</p><p> ivsb_obj.x = newwidth * ir_x[li_i]</p><p> ivsb_obj.y = newheight * ir_y[li_i]</p><p> ivsb_obj.width = newwidth * ir_width[li_i]</
86、p><p> ivsb_obj.height = newheight * ir_height[li_i]</p><p> Case graph!</p><p> igr_obj = This.control[li_i]</p><p> igr_obj.x = newwidth * ir_x[li_i]</p><
87、;p> igr_obj.y = newheight * ir_y[li_i]</p><p> igr_obj.width = newwidth * ir_width[li_i]</p><p> igr_obj.height = newheight * ir_height[li_i]</p><p> Case olecontrol!</p
88、><p> iole_obj = This.control[li_i]</p><p> iole_obj.x = newwidth * ir_x[li_i]</p><p> iole_obj.y = newheight * ir_y[li_i]</p><p> iole_obj.width = newwidth * ir_width
89、[li_i]</p><p> iole_obj.height = newheight * ir_height[li_i]</p><p> Case richtextedit!</p><p> irte_obj = This.control[li_i]</p><p> irte_obj.x = newwidth * ir_x[
90、li_i]</p><p> irte_obj.y = newheight * ir_y[li_i]</p><p> irte_obj.width = newwidth * ir_width[li_i]</p><p> irte_obj.height = newheight * ir_height[li_i]</p><p>
91、 Case statictext!</p><p> ist_obj = This.control[li_i]</p><p> ist_obj.x = newwidth * ir_x[li_i]</p><p> ist_obj.y = newheight * ir_y[li_i]</p><p> ist_obj.width =
92、 newwidth * ir_width[li_i]</p><p> Case line!</p><p> iln_obj = This.control[li_i]</p><p> iln_obj.beginx = newwidth * ir_x[li_i]</p><p> iln_obj.beginy = newheight
93、 * ir_y[li_i]</p><p> iln_obj.endx = newwidth * ir_width[li_i]</p><p> iln_obj.endy = newheight * ir_height[li_i]</p><p> case HProgressBar!</p><p> ihpb_obj = Th
94、is.control[li_i]</p><p> ihpb_obj.x = newwidth * ir_x[li_i]</p><p> ihpb_obj.y = newheight * ir_y[li_i]</p><p> ihpb_obj.width = newwidth * ir_width[li_i]</p><p> i
95、hpb_obj.height = newheight * ir_height[li_i]</p><p> case HTrackBar!</p><p> ihtb_obj = This.control[li_i]</p><p> ihtb_obj.x = newwidth * ir_x[li_i]</p><p>
96、 ihtb_obj.y = newheight * ir_y[li_i]</p><p> ihtb_obj.width = newwidth * ir_width[li_i]</p><p> ihtb_obj.height = newheight * ir_height[li_i]</p><p> case Oval!</p>
97、<p> iov_obj = This.control[li_i]</p><p> iov_obj.x = newwidth * ir_x[li_i]</p><p> iov_obj.y = newheight * ir_y[li_i]</p><p> iov_obj.width = newwidth * ir_width[li_i]<
98、/p><p> iov_obj.height = newheight * ir_height[li_i]</p><p> case PictureHyperLink!</p><p> iphl_obj = This.control[li_i]</p><p> iphl_obj.x = newwidth * ir_x[
99、li_i]</p><p> iphl_obj.y = newheight * ir_y[li_i]</p><p> iphl_obj.width = newwidth * ir_width[li_i]</p><p> iphl_obj.height = newheight * ir_height[li_i]</p><p>
100、; case Rectangle!</p><p> ir_obj = This.control[li_i]</p><p> ir_obj.x = newwidth * ir_x[li_i]</p><p> ir_obj.y = newheight * ir_y[li_i]</p><p> ir_obj.width = new
101、width * ir_width[li_i]</p><p> ir_obj.height = newheight * ir_height[li_i]</p><p> case RoundRectangle!</p><p> irr_obj = This.control[li_i]</p><p> irr_obj
102、.x = newwidth * ir_x[li_i]</p><p> irr_obj.y = newheight * ir_y[li_i]</p><p> irr_obj.width = newwidth * ir_width[li_i]</p><p> irr_obj.height = newheight * ir_height[li_i]<
103、/p><p> case vscrollbar!</p><p> ivsb_obj = This.control[li_i]</p><p> ivsb_obj.x = newwidth * ir_x[li_i]</p><p> ivsb_obj.y = newheight * ir_y[li_i]</p><
104、;p> ivsb_obj.width = newwidth * ir_width[li_i]</p><p> ivsb_obj.height = newheight * ir_height[li_i]</p><p> case StaticHyperLink!</p><p> ishl_obj = This.control[li_i]&l
105、t;/p><p> ishl_obj.x = newwidth * ir_x[li_i]</p><p> ishl_obj.y = newheight * ir_y[li_i]</p><p> ishl_obj.width = newwidth * ir_width[li_i]</p><p> ishl_obj.height = n
106、ewheight * ir_height[li_i]</p><p> case VProgressBar!</p><p> ivpb_obj = This.control[li_i]</p><p> ivpb_obj.x = newwidth * ir_x[li_i]</p><p> ivpb_obj.y = newh
107、eight * ir_y[li_i]</p><p> ivpb_obj.width = newwidth * ir_width[li_i]</p><p> ivpb_obj.height = newheight * ir_height[li_i]</p><p> case VTrackBar!</p><p> ivtb
108、_obj = This.control[li_i]</p><p> ivtb_obj.x = newwidth * ir_x[li_i]</p><p> ivtb_obj.y = newheight * ir_y[li_i]</p><p> ivtb_obj.width = newwidth * ir_width[li_i]</p><
109、;p> ivtb_obj.height = newheight * ir_height[li_i]</p><p> End Choose</p><p><b> Next</b></p><p> This.Setredraw(true)</p><p> 5.3.2父窗口的open事件:<
110、/p><p> Integer li_count</p><p> Integer li_i</p><p> Long ll_width</p><p> LOng ll_height</p><p> integer li_tpcount,li_tpi</p><p>
111、ll_width = this.workspacewidth()</p><p> ll_height = this.workspaceheight()</p><p><b> // 窗口內(nèi)控件數(shù)</b></p><p> li_count = upperbound(this.control[])</p><p>
112、; li_allcount = li_count</p><p> // 循環(huán)記錄各控件大小與窗口大小的比例</p><p> FOR li_i = 1 TO li_count</p><p> CHOOSE CASE this.control[li_i].typeof()</p><p> CASE checkbox!</p
113、><p> icbx_obj = this.control[li_i]</p><p> ir_x[li_i] = round(icbx_obj.x / ll_width, 3)</p><p> ir_y[li_i] = round(icbx_obj.y / ll_height, 3)</p><p> ir_width[li_i] =
114、 round(icbx_obj.width / ll_width, 3)</p><p> ir_height[li_i] = round(icbx_obj.height / ll_height, 3)</p><p> CASE radiobutton!</p><p> irb_obj = this.control[li_i]</p><
115、;p> ir_x[li_i] = round(irb_obj.x / ll_width, 3)</p><p> ir_y[li_i] = round(irb_obj.y / ll_height, 3)</p><p> ir_width[li_i] = round(irb_obj.width / ll_width, 3)</p><p> ir_he
116、ight[li_i] = round(irb_obj.height / ll_height, 3)</p><p> CASE commandbutton!</p><p> icb_obj = this.control[li_i]</p><p> ir_x[li_i] = round(icb_obj.x / ll_width, 3)</p>
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)庫課程設(shè)計---運輸企業(yè)車輛信息管理系統(tǒng)
- 數(shù)據(jù)庫課程設(shè)計課程設(shè)計論文-醫(yī)院信息管理數(shù)據(jù)庫設(shè)計
- 數(shù)據(jù)庫課程設(shè)計報告--學(xué)生信息管理系統(tǒng)
- 學(xué)生信息管理系統(tǒng)數(shù)據(jù)庫課程設(shè)計報告
- 數(shù)據(jù)庫課程設(shè)計報告-宿舍信息管理系統(tǒng)
- 學(xué)生信息管理數(shù)據(jù)庫課程設(shè)計
- 數(shù)據(jù)庫課程設(shè)計報告----賓館信息管理系統(tǒng)
- 數(shù)據(jù)庫課程設(shè)計報告--教室信息管理系統(tǒng)
- 航空售票信息管理系統(tǒng)數(shù)據(jù)庫課程設(shè)計報告
- 圖書信息管理系統(tǒng)數(shù)據(jù)庫課程設(shè)計報告
- 數(shù)據(jù)庫課程設(shè)計---宿舍信息管理系統(tǒng)
- 數(shù)據(jù)庫課程設(shè)計--教室信息管理系統(tǒng).
- 數(shù)據(jù)庫課程設(shè)計--學(xué)生信息管理系統(tǒng)
- 數(shù)據(jù)庫課程設(shè)計---學(xué)生信息管理系統(tǒng)
- 數(shù)據(jù)庫課程設(shè)計-員工信息管理系統(tǒng)
- 數(shù)據(jù)庫課程設(shè)計--顧客信息管理系統(tǒng)
- sql數(shù)據(jù)庫(學(xué)生信息管理系統(tǒng))課程設(shè)計報告
- 數(shù)據(jù)庫原理b課程設(shè)計--數(shù)據(jù)庫學(xué)生信息管理系統(tǒng)
- 數(shù)據(jù)庫課程設(shè)計-客房信息管理系統(tǒng)
- 數(shù)據(jù)庫課程設(shè)計學(xué)生信息管理系統(tǒng)
評論
0/150
提交評論