飛機(jī)售票 羅陽(yáng)_第1頁(yè)
飛機(jī)售票 羅陽(yáng)_第2頁(yè)
飛機(jī)售票 羅陽(yáng)_第3頁(yè)
飛機(jī)售票 羅陽(yáng)_第4頁(yè)
飛機(jī)售票 羅陽(yáng)_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、裝訂線長(zhǎng) 春 大 學(xué) 課程設(shè)計(jì)紙 目 錄1 設(shè)計(jì)目的12 需求分析22.1 總體分析22.2 性能需求分析23 設(shè)計(jì)目標(biāo)及流程33.1 設(shè)計(jì)目標(biāo)33.2設(shè)計(jì)流程34 功能介紹44.1 功能詳細(xì)介紹-用戶系統(tǒng)54.2功能詳細(xì)介紹-管理員系統(tǒng)55技術(shù)支持75.1 Java技術(shù)75.2開發(fā)工具95.3 數(shù)據(jù)庫(kù) MySQL 設(shè)計(jì)146 系統(tǒng)實(shí)現(xiàn)196.1 用戶系統(tǒng)代碼實(shí)現(xiàn)206.2 管理員系統(tǒng)實(shí)現(xiàn)代碼327 設(shè)計(jì)總結(jié)378 致謝38參 考 文 獻(xiàn)391 設(shè)計(jì)目的因特網(wǎng)技術(shù)的飛速發(fā)展正在迅速地改變著人們的生活方式,因特網(wǎng)正在由科學(xué)工作者的工具變?yōu)槠胀ò傩斋@取信息、進(jìn)行交流的場(chǎng)所,而因特網(wǎng)的商業(yè)應(yīng)用則尤為

2、引人注目。隨著國(guó)內(nèi)因特網(wǎng)的發(fā)展,國(guó)內(nèi)航空公司也開始醞釀網(wǎng)上訂票、售票業(yè)務(wù)。 網(wǎng)上訂票系統(tǒng)是一個(gè)取代過去由人工處理的訂票系統(tǒng),在一定成度上提高了購(gòu)票的透明度和自主性,但網(wǎng)站在方便消費(fèi)者的同時(shí),仍存在許多不足的地方。例如,航空公司網(wǎng)站只能提供公司自有航班的機(jī)票信息,客觀上限制了人們的選擇范圍;旅行社網(wǎng)站則多以旅游產(chǎn)品為主,很少單獨(dú)提供機(jī)票的預(yù)訂服務(wù),因此其在機(jī)票服務(wù)的專業(yè)性、豐富性上都會(huì)大打折扣。個(gè)別旅游、機(jī)票銷售的門戶網(wǎng)站雖然可以提供酒店、機(jī)票預(yù)訂等服務(wù),但因這類網(wǎng)站缺乏實(shí)時(shí)的機(jī)票數(shù)據(jù)信息,因而在其所提供的票務(wù)信息的權(quán)威性、服務(wù)內(nèi)容的專業(yè)性上仍然不盡人意。因此,消費(fèi)者仍然真正做到自主選購(gòu)機(jī)票,而

3、所獲得的購(gòu)票體驗(yàn)也仍存在著“費(fèi)時(shí)費(fèi)力,無法排除訂票的不確定性”,或者“價(jià)格折扣等關(guān)鍵信息可信度不高”等負(fù)面感覺。 客戶能隨時(shí)隨地通過因特網(wǎng)查詢航班的詳細(xì)信息,并預(yù)定最滿意的航班。客戶無須來往與機(jī)場(chǎng)和家、辦公室之間,不必在售票點(diǎn)排隊(duì)買票或訂票,只要有一根網(wǎng)線就能輕松搞定從查詢航班到訂票到取票等一系列列過程。改 “訂”票服務(wù)為的“定”票服務(wù),排除用戶“訂”票后可否獲得所需機(jī)票的不確定性;用戶可以自己選擇航班、時(shí)刻、艙位,就如同在超市貨架上自選貨物般簡(jiǎn)單,從而摒棄了傳統(tǒng)“問訊式”服務(wù)的弊端;使航班價(jià)格及信息透明化,最大限度地消除了目前機(jī)票銷售市場(chǎng)上存在的散、亂、黑等現(xiàn)象,從而使用戶明明白白“定”票,

4、機(jī)票代理人明明白白售票,使用戶及機(jī)票代理人的合法權(quán)益得到最大保障,這就是本系統(tǒng)的開發(fā)目的。2 需求分析2.1 總體分析機(jī)票管理系統(tǒng)是實(shí)現(xiàn)機(jī)場(chǎng)機(jī)票的預(yù)定、統(tǒng)計(jì)和分析,提高機(jī)票運(yùn)用的科學(xué)管理水平,充分發(fā)揮機(jī)票利用率,節(jié)省訂退票時(shí)間。機(jī)場(chǎng)管理系統(tǒng)的建立不僅會(huì)減少大量人力的繁瑣勞動(dòng),而且產(chǎn)生良好的社會(huì)效益和經(jīng)濟(jì)效益。機(jī)票管理系統(tǒng)的具體功能為:(1)錄入機(jī)場(chǎng)近期航班情況,并進(jìn)行嚴(yán)格校驗(yàn),保證原始數(shù)據(jù)的絕對(duì)準(zhǔn)確。(2)由錄入數(shù)據(jù)進(jìn)而建立訂票系統(tǒng)、退票系統(tǒng)、查詢系統(tǒng)、管理系統(tǒng)。(3)訂票系統(tǒng)中,具有嚴(yán)格的乘客身份錄入,并同時(shí)對(duì)當(dāng)次航班票數(shù)做出統(tǒng)計(jì)。機(jī)票分受完與未受完兩種,要根據(jù)不同情況采取不同措施。(4)退

5、票系統(tǒng)中,嚴(yán)格校驗(yàn)退票人身份,并明確相應(yīng)的返還金額。(5)查詢系統(tǒng)中,分為不同的查詢方式,有按航班號(hào)查找、按照乘客姓名查詢、按照日期查詢、按照起飛港到達(dá)港查詢。(6)管理系統(tǒng)中,細(xì)化模塊,整體把握機(jī)票售出情況和近期及某天飛機(jī)飛行情況,并具有新增航班和取消航班的功能。2.2 性能需求分析從實(shí)用、好用的角度出發(fā)開發(fā)航空訂票管理系統(tǒng),建立面向顧客管理全過程的管理與控制系統(tǒng),在設(shè)計(jì)過程中主要考慮以下原則:(1)可操作性原始信息皆由管理員錄入,系統(tǒng)應(yīng)盡量減少操作員的數(shù)據(jù)錄入量,錄入數(shù)據(jù)盡量通過設(shè)計(jì)下拉列表框來選擇錄入,這樣的處理同時(shí)也避免了許多錄入異常現(xiàn)象的發(fā)生。數(shù)據(jù)輸入的格式應(yīng)符合業(yè)務(wù)習(xí)慣,并且直觀、

6、方便。要求系統(tǒng)處理的數(shù)據(jù)能準(zhǔn)確無誤,同時(shí)輸出信息要求直觀、簡(jiǎn)潔。(2)可靠性系統(tǒng)運(yùn)行具有較高的可靠性,提供嚴(yán)格的并發(fā)控制,確保數(shù)據(jù)的一致性和正確性。(3)實(shí)用性從用戶的實(shí)際需要出發(fā)進(jìn)行系統(tǒng)開發(fā),不盲目追求高新技術(shù)的應(yīng)用。(4)安全性系統(tǒng)安全措施可靠、高效、可維護(hù)性措施好,有限權(quán)限控制不同人員的操作,保證其安全性。 (5)可維護(hù)性為了保證系統(tǒng)的可維護(hù)性,要求具有詳細(xì)的文檔資料,同時(shí),要求系統(tǒng)在功能設(shè)計(jì)上考慮可擴(kuò)展性,以滿足業(yè)務(wù)變動(dòng)的需求。(6)可移植性系統(tǒng)開發(fā)完成后,要能運(yùn)行于任何由Windows NT/Windows 9X操作系統(tǒng)所構(gòu)成的計(jì)算機(jī)網(wǎng)絡(luò)環(huán)境下。3 設(shè)計(jì)目標(biāo)及流程3.1 設(shè)計(jì)目標(biāo) 擴(kuò)

7、展功能 提 升 功 能 設(shè)計(jì)要求 基本功能1.用戶須知2.優(yōu)惠提醒3.流程介紹1往返航班查詢2. 機(jī)票預(yù)訂3. 票務(wù)打折1.票務(wù)信息查詢2.購(gòu)票3.退票4.查詢統(tǒng)計(jì) 圖 1 設(shè)計(jì)目標(biāo)3.2設(shè)計(jì)流程 設(shè) 計(jì) 分 析 及 構(gòu) 思 代 碼 編 程 實(shí) 現(xiàn)分析總結(jié) 測(cè) 試 校 驗(yàn)重中之重-好的分析與構(gòu)思,才能有好的設(shè)計(jì)。為設(shè)計(jì)的順利進(jìn)行打下基礎(chǔ)。 重點(diǎn)亦是難點(diǎn) 重點(diǎn):沒有代碼一切都是空想。 難點(diǎn):想起來容易做起來難。 細(xì)心,周祥考慮 每個(gè)環(huán)節(jié)都不能忽視,一個(gè)小的疏忽,導(dǎo)致程序無法運(yùn)行。所以要細(xì)心,周詳考慮。 分析不足,總結(jié)經(jīng)驗(yàn)。-寶貴財(cái)富 圖2 設(shè)計(jì)流程4 功能介紹購(gòu)票須知購(gòu)票流程售票系統(tǒng)購(gòu)票改簽預(yù)定

8、須知預(yù)訂系統(tǒng)用戶系統(tǒng)預(yù)定機(jī)票流程預(yù)定機(jī)票退票須知退票流程 XX航空公司國(guó)內(nèi)售票售票系統(tǒng)退票系統(tǒng)退票特價(jià)票須知特價(jià)票系統(tǒng)特價(jià)票航班查詢查詢系統(tǒng)票務(wù)查詢?nèi)战y(tǒng)計(jì)統(tǒng)計(jì)系統(tǒng)月統(tǒng)計(jì)年統(tǒng)計(jì)管理員系統(tǒng)機(jī)票打折登錄打折系統(tǒng)飛機(jī)系統(tǒng)更新更新系統(tǒng)航班信息更新 圖3 功能介紹4.1 功能詳細(xì)介紹-用戶系統(tǒng)(1)售票系統(tǒng) 購(gòu)票須知:提供用戶須知、購(gòu)票須知、購(gòu)票種類、中轉(zhuǎn)服務(wù)、常見問題、其它等相關(guān)提示及服務(wù),供購(gòu)票者查看咨詢,為顧客提供嘴特新的服務(wù)。 購(gòu)票流程:顧客在不了解購(gòu)票過程是可根據(jù)購(gòu)票流程進(jìn)行操作,給顧客購(gòu)票提供方便,使購(gòu)票過程更加快捷,提高實(shí)效性。購(gòu)票:該模塊是用戶進(jìn)行購(gòu)票的主要系統(tǒng),在這里你可以根據(jù)自己的需求

9、,查詢您需要的航班。并可查看該飛機(jī)的座次情況,以及售票情況。進(jìn)行選座購(gòu)票,及核實(shí)機(jī)票信息與個(gè)人信息,進(jìn)行購(gòu)票。改簽 :進(jìn)行改簽業(yè)務(wù),銷毀當(dāng)前機(jī)票信息,調(diào)到適合顧客的航班。 (2)退票系統(tǒng)退票須知:紹一些退票相關(guān)事宜,列如何時(shí)是退票正當(dāng)時(shí)間,在有效時(shí)間內(nèi)可以退票,超過這一期限不予退票,及不同時(shí)期退票有不同的手續(xù)費(fèi)。給用戶提示。退票流程:介紹退票操作的相關(guān)順序,給不了解退票流程的顧客以提示,方便用戶進(jìn)行退票。退票:顧客通過身份驗(yàn)證信息及機(jī)票信息查詢你的機(jī)票是否在退票有效時(shí)間范圍內(nèi),進(jìn)行退票事物。 (3)預(yù)訂票系統(tǒng)預(yù)訂票須知:介紹預(yù)訂機(jī)票的相關(guān)事宜,及可能遇到的問題。給顧客已提示,方法顧客訂購(gòu)機(jī)票,

10、有一個(gè)合適而愉快的的旅行。預(yù)訂流程:介紹預(yù)定票操作的相關(guān)順序,給不了解退票流程的顧客以提示,方便用戶進(jìn)行預(yù)定票。預(yù)訂票:實(shí)現(xiàn)預(yù)訂票操作,在這里你可以根據(jù)自己的需求,查詢您需要的航班。并可查看該飛機(jī)的座次情況,以及售票情況。進(jìn)行選座預(yù)定機(jī)票,及核實(shí)機(jī)票信息與個(gè)人信息,進(jìn)行預(yù)定票。(4)特價(jià)機(jī)票系統(tǒng)特價(jià)票須知:對(duì)特價(jià)票進(jìn)行介紹,及特價(jià)票的風(fēng)險(xiǎn)介紹。給顧客已提示,使顧客根據(jù)自身?xiàng)l件選擇最適合自己的機(jī)票。特價(jià)票:進(jìn)行特價(jià)機(jī)票購(gòu)買的操做。4.2功能詳細(xì)介紹-管理員系統(tǒng)(1) 查詢系統(tǒng)航班查詢:管理員可根據(jù)航班進(jìn)行查詢航班信息。票務(wù)查詢:對(duì)機(jī)票進(jìn)行查詢,可以獲取航班的上座率。(2)打折系統(tǒng) 機(jī)票打折:實(shí)現(xiàn)

11、機(jī)票打折業(yè)務(wù)。(3)統(tǒng)計(jì)系統(tǒng)日統(tǒng)計(jì):對(duì)售出的機(jī)票進(jìn)行日統(tǒng)計(jì),亦可根據(jù)航班進(jìn)行查詢。月統(tǒng)計(jì):對(duì)售出的機(jī)票進(jìn)行月統(tǒng)計(jì),亦可根據(jù)航班進(jìn)行查詢。年統(tǒng)計(jì):對(duì)售出的機(jī)票進(jìn)行年統(tǒng)計(jì),亦可根據(jù)航班進(jìn)行查詢。(4)更新系統(tǒng) 實(shí)現(xiàn)航班的增刪改功能。 5技術(shù)支持開發(fā)語(yǔ)言飛機(jī)售票系統(tǒng)數(shù)據(jù)庫(kù)開發(fā)工具 圖 5 系統(tǒng)三大技術(shù)支持5.1 Java技術(shù)    Java是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計(jì)語(yǔ)言(以下簡(jiǎn)稱Java語(yǔ)言)和Java平臺(tái)的總稱。用Java實(shí)現(xiàn)的HotJava瀏覽器(支持Java applet)顯示了Java的魅力:跨平臺(tái)、動(dòng)感的web,int

12、ernate計(jì)算。從此,Java被廣泛接受并推動(dòng)了Web的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持Java applet。另一方面,Java技術(shù)也不斷更新。Java平臺(tái)由Java虛擬機(jī)(Java Virtual Machine)和Java 應(yīng)用編程接口(Application Programming Interface、簡(jiǎn)稱API)構(gòu)成。Java 應(yīng)用編程接口為Java應(yīng)用提供了一個(gè)獨(dú)立于操作系統(tǒng)的標(biāo)準(zhǔn)接口,可分為基本部分和擴(kuò)展部分。在硬件或操作系統(tǒng)平臺(tái)上安裝一個(gè)Java平臺(tái)之后,Java應(yīng)用程序就可運(yùn)行?,F(xiàn)在Java平臺(tái)已經(jīng)嵌入了幾乎所有的操作系統(tǒng)。這樣Java程序可以只編譯一次,就可以在各種系統(tǒng)中

13、運(yùn)行。Java應(yīng)用編程接口已經(jīng)從1.1x版發(fā)展到1.2版。目前常用的Java平臺(tái)基于Java1.4,最近版本為Java1.6。  Java分為三個(gè)體系JavaSE,JavaEE,JavaME。Java語(yǔ)言是一個(gè)支持網(wǎng)絡(luò)計(jì)算的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。Java語(yǔ)言吸收了Smalltalk語(yǔ)言和C+語(yǔ)言的優(yōu)點(diǎn),并增加了其它特性,如支持并發(fā)程序設(shè)計(jì)、網(wǎng)絡(luò)通信、和多媒體數(shù)據(jù)控制等。主要特性如下:Java語(yǔ)言是簡(jiǎn)單的。Java語(yǔ)言的語(yǔ)法與C語(yǔ)言和C+語(yǔ)言很接近,使得大多數(shù)程序員很容易學(xué)習(xí)和使用Java。另一方面,Java丟棄了C+ 中很少使用的、很難理解的、令人迷惑的那些特性,如操作符重載、多繼承

14、、自動(dòng)的強(qiáng)制類型轉(zhuǎn)換。特別地,Java語(yǔ)言不使用指針,并提供了自動(dòng)的廢料收集,使得程序員不必為內(nèi)存管理而擔(dān)憂。Java語(yǔ)言是一個(gè)面向?qū)ο蟮?。Java語(yǔ)言提供類、接口和繼承等原語(yǔ),為了簡(jiǎn)單起見,只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實(shí)現(xiàn)機(jī)制(關(guān)鍵字為implements)。Java語(yǔ)言全面支持動(dòng)態(tài)綁定,而C+ 語(yǔ)言只對(duì)虛函數(shù)使用動(dòng)態(tài)綁定??傊?,Java語(yǔ)言是一個(gè)純的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。Java語(yǔ)言是分布式的。Java語(yǔ)言支持Internet應(yīng)用的開發(fā),在基本的Java應(yīng)用編程接口中有一個(gè)網(wǎng)絡(luò)應(yīng)用編程接口(),它提供了用于網(wǎng)絡(luò)應(yīng)用編程的類庫(kù),包括URL、URLConn

15、ection、Socket、 ServerSocket等。Java的RMI(遠(yuǎn)程方法激活)機(jī)制也是開發(fā)分布式應(yīng)用的重要手段。Java語(yǔ)言是健壯的。Java的強(qiáng)類型機(jī)制、異常處理、廢料的自動(dòng)收集等是Java程序健壯性的重要保證。對(duì)指針的丟棄是Java的明智選擇。Java的安全檢查機(jī)制使得Java更具健壯性。Java語(yǔ)言是安全的。Java通常被用在網(wǎng)絡(luò)環(huán)境中,為此,Java提供了一個(gè)安全機(jī)制以防惡意代碼的攻擊。除了Java語(yǔ)言具有的許多安全特性以外,Java對(duì)通過網(wǎng)絡(luò)下載的類具有一個(gè)安全防范機(jī)制(類ClassLoader),如分配不同的名字空間以防替代本地的同名類、字節(jié)代碼檢查,并提供安全管理機(jī)制

16、(類SecurityManager)讓Java應(yīng)用設(shè)置安全哨兵。 Java語(yǔ)言是體系結(jié)構(gòu)中立的。Java程序(后綴為java的文件)在Java平臺(tái)上被編譯為體系結(jié)構(gòu)中立的字節(jié)碼格式(后綴為class的文件), 然后可以在實(shí)現(xiàn)這個(gè)Java平臺(tái)的任何系統(tǒng)中運(yùn)行。這種途徑適合于異構(gòu)的網(wǎng)絡(luò)環(huán)境和軟件的分發(fā)。 Java語(yǔ)言是可移植的。這種可移植性來源于體系結(jié)構(gòu)中立性,另外,Java還嚴(yán)格規(guī)定了各個(gè)基本數(shù)據(jù)類型的長(zhǎng)度。Java系統(tǒng)本身也具有很強(qiáng)的可移植性,Java編譯器是用Java實(shí)現(xiàn)的,Java的運(yùn)行環(huán)境是用ANSI C實(shí)現(xiàn)的。Java語(yǔ)言是解釋型的。如前所述,Java程序在Java平臺(tái)上被編譯為字節(jié)碼

17、格式, 然后可以在實(shí)現(xiàn)這個(gè)Java平臺(tái)的任何系統(tǒng)中運(yùn)行。在運(yùn)行時(shí),Java平臺(tái)中的Java解釋器對(duì)這些字節(jié)碼進(jìn)行解釋執(zhí)行,執(zhí)行過程中需要的類在聯(lián)接階段被載入到運(yùn)行環(huán)境中。Java是高性能的。與那些解釋型的高級(jí)腳本語(yǔ)言相比,Java的確是高性能的。事實(shí)上,Java的運(yùn)行速度隨著JIT(Just-In-Time)編譯器技術(shù)的發(fā)展越來越接近于C+。 Java語(yǔ)言是多線程的。在Java語(yǔ)言中,線程是一種特殊的對(duì)象,它必須由Thread類或其子(孫)類來創(chuàng)建。通常有兩種方法來創(chuàng)建線程:其一,使用型構(gòu)為Thread(Runnable) 的構(gòu)造子將一個(gè)實(shí)現(xiàn)了Runnable接口的對(duì)象包裝成一個(gè)線程,其二,從

18、Thread類派生出子類并重寫run方法,使用該子類創(chuàng)建的對(duì)象即為線程。值得注意的是Thread類已經(jīng)實(shí)現(xiàn)了Runnable接口,因此,任何一個(gè)線程均有它的run方法,而run方法中包含了線程所要運(yùn)行的代碼。線程的活動(dòng)由一組方法來控制。 Java語(yǔ)言支持多個(gè)線程的同時(shí)執(zhí)行,并提供多線程之間的同步機(jī)制(關(guān)鍵字為synchronized)。Java語(yǔ)言是動(dòng)態(tài)的。Java語(yǔ)言的設(shè)計(jì)目標(biāo)之一是適應(yīng)于動(dòng)態(tài)變化的環(huán)境。Java程序需要的類能動(dòng)態(tài)地被載入到運(yùn)行環(huán)境,也可以通過網(wǎng)絡(luò)來載入所需要的類。這也有利于軟件的升級(jí)。另外,Java中的類有一個(gè)運(yùn)行時(shí)刻的表示,能進(jìn)行運(yùn)行時(shí)刻的類型檢查。Java語(yǔ)言的優(yōu)良特性

19、使得Java應(yīng)用具有無比的健壯性和可靠性,這也減少了應(yīng)用系統(tǒng)的維護(hù)費(fèi)用。Java對(duì)對(duì)象技術(shù)的全面支持和Java平臺(tái)內(nèi)嵌的API能縮短應(yīng)用系統(tǒng)的開發(fā)時(shí)間并降低成本。Java的編譯一次,到處可運(yùn)行的特性使得它能夠提供一個(gè)隨處可用的開放結(jié)構(gòu)和在多平臺(tái)之間傳遞信息的低成本方式。特別是Java企業(yè)應(yīng)用編程接口(Java Enterprise APIs)為企業(yè)計(jì)算及電子商務(wù)應(yīng)用系統(tǒng)提供了有關(guān)技術(shù)和豐富的類庫(kù)。5.2開發(fā)工具Eclipse 是一個(gè)開放源代碼的、基于 Java 的可擴(kuò)展開發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運(yùn)的是,Eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件

20、集,包括 Java 開發(fā)工具(Java Development Tools,JDT)。 Eclipse 還包括插件開發(fā)環(huán)境(Plug-in Development Environment,PDE),這個(gè)組件主要針對(duì)希望擴(kuò)展 Eclipse 的軟件開發(fā)人員,因?yàn)樗试S他們構(gòu)建與 Eclipse 環(huán)境無縫集成的工具。JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫(kù)連接)是一種用于執(zhí)行SQL語(yǔ)句的Java API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問,它由一組用Java語(yǔ)言編寫的類和接口組成。JDBC為工具/數(shù)據(jù)庫(kù)開發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的API,據(jù)此可以構(gòu)建更高級(jí)的工具和

21、接口,使數(shù)據(jù)庫(kù)開發(fā)人員能夠用純 Java API 編寫數(shù)據(jù)庫(kù)應(yīng)用程序,同時(shí),JDBC也是個(gè)商標(biāo)名。JDBC與數(shù)據(jù)庫(kù)連接代碼實(shí)現(xiàn)/* * 這是數(shù)據(jù)庫(kù)操作類 * * since 3.0 2013/12/9 * author KUANG * */public class DB static String driver = "com.mysql.jdbc.Driver"static String url = "jdbc:mysql:/localhost:3306/yiqisheji"/ 進(jìn)入指定數(shù)據(jù)庫(kù)static String username = "

22、root"static String password = "123"Connection conn = null;Statement stmt = null;ResultSet rs = null; /* * 這是數(shù)據(jù)庫(kù)-加載驅(qū)動(dòng)-獲得連接 構(gòu)造方法 * * */public DB() try Class.forName(driver);/ 加載驅(qū)動(dòng)conn = DriverManager.getConnection(url, username, password);/ 獲得連接/* 自動(dòng)提交設(shè)置 */ conn.setAutoCommit(false);stm

23、t = conn.createStatement();/ 語(yǔ)句對(duì)象 catch (ClassNotFoundException e2) e2.printStackTrace(); catch (SQLException e) e.printStackTrace();/* * 設(shè)置自動(dòng)/手動(dòng)提交 * param tag * 自動(dòng)/手動(dòng) * */public void setAutoCommit(boolean tag) try conn.setAutoCommit(tag); catch (SQLException e) e.printStackTrace();/* * 提交事務(wù) * conn.

24、rollback();-回滾操作-加入batch中-若失敗全失敗 * */public void commit() try mit(); catch (SQLException e) e.printStackTrace();/* * 這是數(shù)據(jù)庫(kù)增刪改操作方法 * param str * sql語(yǔ)句 * return 返回操作成功行數(shù) */public int update(String str) try int i = stmt.executeUpdate(str);return i;/ 返回操作成功行數(shù) catch (SQLException e) e.printStackTrace();r

25、eturn -1;/ 操作失敗返回-1/* * 這是數(shù)據(jù)庫(kù)批處理方法-用于增刪改 * param sql * SQL語(yǔ)句數(shù)組 * return 返回每行語(yǔ)句影響的行數(shù)所組成的數(shù)組 * */public int executeBatch(String sql) for (int i = 0; i < sql.length; i+) try stmt.addBatch(sqli); catch (SQLException e) e.printStackTrace();try return stmt.executeBatch(); catch (SQLException e) e.printS

26、tackTrace();return null;/* * 這是數(shù)據(jù)庫(kù)查詢操作方法-禁止外部調(diào)用 * param str * 語(yǔ)句 * return ResultSet 返回結(jié)果集 * */private ResultSet query(String str) try rs = stmt.executeQuery(str);return rs; catch (SQLException e) e.printStackTrace();return null;/* * 這是ResultSet(返回結(jié)果集)轉(zhuǎn)LinkedList(雙項(xiàng)鏈表)的方法-間接調(diào)用query * param sql * 執(zhí)行的語(yǔ)

27、句 * return 返回鏈表 * */public LinkedList<HashMap<String, String>> queryToList(String sql) LinkedList<HashMap<String, String>> list = new LinkedList<HashMap<String, String>>();rs = query(sql);try ResultSetMetaData mt = rs.getMetaData();/ 結(jié)果集的元數(shù)據(jù)-字段,字段類型,長(zhǎng)度while (rs.ne

28、xt() HashMap<String, String> map = new HashMap<String, String>();for (int i = 1; i <= mt.getColumnCount(); i+) / 條數(shù)String columnName = mt.getColumnName(i);/ 第i個(gè)字段String columnValue = rs.getString(columnName);/ 結(jié)果集中該字段信息map.put(columnName, columnValue);/ 加入hashmaplist.add(map);/ 加入list

29、return list; catch (SQLException e) e.printStackTrace();return null;/* * 這是關(guān)閉數(shù)據(jù)庫(kù)方法 * */public void close() try if (rs != null) rs.close();/ 關(guān)閉查詢操作結(jié)果集 catch (SQLException e) e.printStackTrace();try if (stmt != null) stmt.close();/ 關(guān)閉數(shù)據(jù)庫(kù)對(duì)象 catch (SQLException e) e.printStackTrace();try if (conn != nul

30、l) conn.close();/ 關(guān)閉數(shù)據(jù)庫(kù)連接 catch (SQLException e) e.printStackTrace();5.3 數(shù)據(jù)庫(kù) MySQL 設(shè)計(jì) (1)業(yè)務(wù)模型通過上面的分析,我建立了下列業(yè)務(wù)模型航班(Flight):用來描述在某個(gè)確定日期執(zhí)行某個(gè)定期航班計(jì)劃的一次航班。例如:2008年5月25日從北京飛上海的CA1202就是一個(gè)航班的實(shí)例。屬性:航班計(jì)劃,出發(fā)日期,各艙剩余座位數(shù),折扣。起始日期(Start Date):用來描述某個(gè)航班計(jì)劃開始的日期。結(jié)束日期(End Date):用來描述某個(gè)航班計(jì)劃結(jié)束的日期。航班號(hào)(planemodel):由航空公司給航班計(jì)劃定

31、義的唯一標(biāo)識(shí)號(hào)碼,該號(hào)碼由2位英文字符和4位數(shù)字組成,2位英文字符是航空公司編碼,4位數(shù)字是航班編碼。例如:CA1202就是一個(gè)航班計(jì)劃的航班號(hào),其中CA代表中國(guó)國(guó)際航空公司,1202代表航班的編號(hào)。出發(fā)地(From City):用來描述某個(gè)航班計(jì)劃的起飛城市和機(jī)場(chǎng),所有國(guó)內(nèi)機(jī)場(chǎng)均用三個(gè)英文字母的代碼表示,詳情請(qǐng)見附錄I(國(guó)內(nèi)機(jī)場(chǎng)代碼表)。目的地(To City):用來描述某個(gè)航班計(jì)劃的到達(dá)城市和機(jī)場(chǎng),所有國(guó)內(nèi)機(jī)場(chǎng)均用三個(gè)英文字母的代碼表示,詳情請(qǐng)見附錄I(國(guó)內(nèi)機(jī)場(chǎng)代碼表)。離港時(shí)間:(Departure):用來描述某個(gè)航班計(jì)劃的從出發(fā)地機(jī)場(chǎng)離開的時(shí)刻,離港時(shí)間一般代表飛機(jī)艙門關(guān)閉,不再接收乘

32、客的時(shí)刻。該時(shí)間精確到分鐘。到港時(shí)間:(Arrival):用來描述某個(gè)航班計(jì)劃到達(dá)目的地機(jī)場(chǎng)的時(shí)間,到港時(shí)間一般代表飛機(jī)艙門開啟,允許乘客下飛機(jī)的時(shí)刻,該時(shí)間精確到分鐘。出發(fā)日期(Date):用來描述某個(gè)航班的出發(fā)日期,該日期精確到某一天。艙位等級(jí):(Cabin Class):用來描述航班的不同艙位,一般分為三種:頭等艙(F),商務(wù)艙(C),經(jīng)濟(jì)艙(Y)。不同的艙位等級(jí)具有不同的機(jī)票折扣。*實(shí)際情況中航空公司定義的艙位等級(jí)可能更復(fù)雜,在本項(xiàng)目中為簡(jiǎn)化業(yè)務(wù)模型,只對(duì)艙位等級(jí)作上述三種劃分。乘客類型:(Passenger type):用來描述乘坐航班的乘客的類型,一般分為三種:成人(A)(age&

33、gt;12),兒童(C)(2<age<=12),軍人 須有軍人證件,殘疾人士 。不同的乘客類型具有不同的機(jī)票折扣,詳情請(qǐng)見乘客折扣。飛機(jī)機(jī)型:(Airplane Model):用來描述執(zhí)行某個(gè)航班計(jì)劃的飛機(jī)的型號(hào),一般來講,一個(gè)航班計(jì)劃的各次航班都應(yīng)該采用同種機(jī)型的飛機(jī)來執(zhí)行。不同的飛機(jī)型號(hào)有不同的航程及各艙座位數(shù)。*實(shí)際情況中,各種機(jī)型的座位數(shù)是不一樣的,同一機(jī)型還分好幾個(gè)系列,如B737(波音737)有B737-200、B737-300.B737-900等多個(gè)系列,每個(gè)系列座位數(shù)都不一樣。即使是同一型號(hào)、同一系列的機(jī)型,所屬的航空公司不同,座位數(shù)也會(huì)不同,因?yàn)楹娇展驹谫?gòu)買飛機(jī)

34、時(shí),會(huì)根據(jù)自己的需要要求廠家采用不同的布局,不同的布局會(huì)有不同的頭等艙、公務(wù)艙、經(jīng)濟(jì)艙座位數(shù)。在本項(xiàng)目中為簡(jiǎn)化業(yè)務(wù)模型,我們認(rèn)為同種型號(hào)的飛機(jī)各艙座位數(shù)是固定的?;鶞?zhǔn)票價(jià):(Full Price):是指某個(gè)航班在沒有季節(jié)折扣時(shí)的一張經(jīng)濟(jì)艙成人票的價(jià)格,該價(jià)格作為該航班計(jì)劃的基準(zhǔn)價(jià)格,最終機(jī)票價(jià)格應(yīng)該在此基礎(chǔ)上乘以艙位折扣和乘客類型折扣。艙位折扣:(Class Discount):不同艙位在基準(zhǔn)價(jià)格基礎(chǔ)上的價(jià)格系數(shù),頭等艙為1.5,公務(wù)艙為1.3,經(jīng)濟(jì)艙為1.0乘客類型折扣:(Passenger Discount):不同乘客類型在基準(zhǔn)票價(jià)基礎(chǔ)上的價(jià)格系數(shù),成人為1.0,兒童為0.5,軍人 0.6

35、,殘疾人0.5 。機(jī)票訂單(Ticket Order):一張成功出票的機(jī)票記錄,機(jī)票價(jià)格:(Ticket Price):一張機(jī)票的價(jià)格,機(jī)票價(jià)格由以下公式計(jì)算:基準(zhǔn)價(jià)格:=里程*每公里的金額*乘客類型折扣經(jīng)濟(jì)艙票價(jià):=基準(zhǔn)價(jià)格*機(jī)票打折率+機(jī)建燃油稅;商務(wù)艙票價(jià):=基準(zhǔn)價(jià)格*1.3機(jī)票打折率+機(jī)建燃油稅;頭等艙票價(jià):=基準(zhǔn)價(jià)格*1.5機(jī)票打折率+機(jī)建燃油稅;(2)數(shù)據(jù)庫(kù)設(shè)計(jì)根據(jù)數(shù)據(jù)模型,設(shè)計(jì)數(shù)據(jù)庫(kù)如下:其中航班計(jì)劃表有一個(gè)外間引用飛機(jī)機(jī)型表,飛機(jī)機(jī)型表(AIRPLANE_MODEL)表1 飛機(jī)機(jī)型表建表數(shù)據(jù)字段名描述類型約束airtypeid機(jī)型編號(hào)INTPRIMARY KEYairtypen

36、ame飛機(jī)名VARCHAR (20)NOT NULLt_zuo頭等艙座位數(shù)INTNOT NULLs_zuo商務(wù)艙座位數(shù)INTNOT NULLj_zuo經(jīng)濟(jì)艙座位數(shù)INTNOT NULL 表1 飛機(jī)機(jī)型表航班表(FLIGHT)表2 航班表見表數(shù)據(jù)字段名描述類型約束h_id航班編號(hào)INTPRIMARY KEYhangban航班號(hào)CHAR (20)NOT NULLairtypeid飛機(jī)類型編號(hào)INTNOT NULLaddress城市名VARCHAR(20)NOT NULLlicheng里程數(shù)INTNOT NULLtime出發(fā)時(shí)刻DATENOT NULL 表2 航班表 售票記錄表(TICKET_ORD

37、ER)表5 售票表建表數(shù)據(jù)字段名描述類型約束id機(jī)票編號(hào)INT(10)PRIMARY KEYhangban航班編號(hào)INT(8)NOT NULLREFERENCES FLIGHT.idsaddress出發(fā)城市VARCHAR(40)NOT NULLzhengjian證件號(hào)碼VARCHAR(20)NOT NULLtime出票日期DATENOT NULLt_h_l頭等艙座位號(hào)CHAR(6)NULL s_h_l商務(wù)艙座位號(hào)CHAR(6)NULL j_h_l經(jīng)濟(jì)艙座位號(hào)CHAR(6)NULL money實(shí)付金額DOUBLENOT NULL 表5 售票表6 系統(tǒng)實(shí)現(xiàn)進(jìn)入航空自動(dòng)售票系統(tǒng)的歡迎界面展示如圖6-

38、1所示。 圖6-1 系統(tǒng)界面6.1 用戶系統(tǒng)代碼實(shí)現(xiàn)(1)用戶系統(tǒng)的購(gòu)票界面如圖6-2所示 圖 6-2 購(gòu)票界面購(gòu)票界面使用editor面板,在服務(wù)類型和行程類型使用單選按鈕( Radio Button)將單選按鈕放入組控件(Composites)中,是兩種服務(wù)都可以滿足單選。出發(fā)城市和目的城市設(shè)置mouse Down 事件,mouse Down 事件設(shè)置彈出shell來選擇城市。出發(fā)時(shí)間使用DateTime控件,供用戶選擇日期。界面設(shè)置以供用戶選擇為主。使程序跟規(guī)范更有效,同時(shí)給檢驗(yàn)減輕負(fù)擔(dān)。所有界面都有這一優(yōu)點(diǎn)。搜索使用 Button 按鈕,在Button 中獲取用戶選擇的服務(wù)類型和行程類

39、型,根據(jù)其不同在做出不同的反應(yīng),根據(jù)buttonDancheng.getSelection()方法可知是否選擇單程按鈕,使用if語(yǔ)句判斷然后做出不同的反應(yīng)。如在服務(wù)類型選擇單程時(shí),當(dāng)點(diǎn)擊搜索(Button)按鈕時(shí),首先 獲得初始城市和目的地與出發(fā)時(shí)間。在獲取時(shí)間時(shí)要注意到很多細(xì)節(jié)如月份是從零開始獲取后要加一,另外月與日在小于十時(shí)要在前面補(bǔ)零。獲取日期的代碼如下int year = dateTime.getYear();int month = dateTime.getMonth();int day = dateTime.getDay();String year1 = "" +

40、 year;String month1;String day1;if (month + 1 < 10) month1 = "0" + (month + 1); else month1 = "" + (month + 1);if (day < 10) day1 = "0" + day; else day1 = "" + day;String time = year1 + "-" + month1 + "-" + day1;在獲取好所有信息后,便通過JDBC使用SQL

41、語(yǔ)句與數(shù)據(jù)庫(kù)建立連接,進(jìn)行查詢。SQL語(yǔ)句sql = "SELECT t.h_id as id,t.hangban as hb,t.airtypeid as type,t.address as sad,r.address as end,t.time as st,r.time as et,r.licheng-t.licheng as km FROM "+ " hangban AS t,hangban AS r WHERE t.hangban=r.hangban AND t.address !=r.address AND "+ "t.address

42、='"+ sad+ "'AND r.address='"+ end+ "'AND t.licheng < r.licheng "將查詢結(jié)果放在map中,再將map放入LinkedList中。根據(jù)其get()方法獲取存入的數(shù)據(jù)。根據(jù)size()方法可知其是否有數(shù)據(jù)。若沒有數(shù)據(jù)則顯示Label。提示沒有查詢到用戶需要的航班。反之,則將查詢到的結(jié)果顯示在表格中。其代碼實(shí)現(xiàn)如下if(list.size()=0)/查尋不到信息是提醒label_6.setVisible(true);label_6.setText(&q

43、uot;暫時(shí)沒有符合您要求的航班");else/查到了便顯示信息,查詢到的信息for (int i = 0; i < list.size(); i+) HashMap<String, String> m = list.get(i);String id = m.get("id");String type = m.get("type");String hb = m.get("hb");String st = m.get("st");String km = m.get("km&quo

44、t;);String sql1 = "SELECT discount FROM discount WHERE hangban='"+ hb + "'"System.out.println(sql1);LinkedList<HashMap<String, String>> list1 = d.queryToList(sql1); d.close();HashMap<String, String> m1 = list1.get(0);String discountrate =m1.get("dis

45、countrate");TableItem item = new TableItem(table, SWT.NONE);item.setText(new String id, hb, sad, st,end,discountrate, time,km ); 圖 6-3 選座購(gòu)票界面(2)選座購(gòu)票界面如圖6-3所示,飛機(jī)座位使用Label通過for循環(huán)實(shí)現(xiàn)并給每個(gè)Label設(shè)置初值0,根從數(shù)據(jù)庫(kù)中查詢的結(jié)果控制Label的顏色并改變初值,再點(diǎn)擊訂票時(shí)根據(jù)該值,判斷是否為他要定的票。根據(jù)點(diǎn)擊次數(shù)控制座位顏色的代碼如下int p = 1;public void mouseDown(Mous

46、eEvent e) if (p % 2 = 1) label.setBackground(SWTResourceManager.getColor(SWT.COLOR_GREEN);String q = (String) label.getData();int x = Integer.parseInt(q.split("-")0);int y = Integer.parseInt(q.split("-")1);tzuoweixy = "t2"/用戶選中欲購(gòu)買的 else label.setBackground(SWTResourceMa

47、nager.getColor(SWT.COLOR_LIST_SELECTION);p+; 圖 6-4 驗(yàn)證信息界面 (3)在確定購(gòu)票后將顯示機(jī)票信息,和用戶個(gè)人信息,如圖6-4所示。用戶仔細(xì)核對(duì)機(jī)票信息無誤后可以填寫自己身份信息。和是否購(gòu)買保險(xiǎn)。查看相關(guān)費(fèi)用。實(shí)現(xiàn)費(fèi)用查詢的代碼如下public void widgetSelected(SelectionEvent e) if (button.getSelection() money = money; else if (button_1.getSelection() money = money * 0.5; else if (button_2.g

48、etSelection() money = money * 0.8; else money = money * 0.6;if (button_6.getSelection() yanmoney = 50; else yanmoney = 0;if (button_4.getSelection() yimoney = 200; else yimoney = 0;double countmoney = money + yimoney + yanmoney + moneyshui;count = "" + countmoney;String yufukuan = countmon

49、ey * 0.1 + ""lblYuFuFei.setText(yufukuan);String shengyu = countmoney * 0.9 + ""labelShengYu.setText(shengyu);TableItem item = new TableItem(tableMoney, SWT.NONE);item.setText(new String "" + money, "" + moneyshui,"" + yimoney, "" + yanmone

50、y, count );在用戶填寫姓名和身份證件信息時(shí)要做校驗(yàn),保證輸入規(guī)范。姓名校驗(yàn)代碼如下/* * 姓名校驗(yàn) * param String str, Label label 校驗(yàn)字段,提示標(biāo)簽 */public static boolean nameCheck(String str, Label label) Pattern p3 = Ppile("u4e00-u9fa52,6");Matcher m3 = p3.matcher(str);if (!m3.matches() if (str = "" | str = null) / 無信息無錯(cuò)誤提示label.setText(""); else if (label != null)labe

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論