版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
合肥師范學(xué)院2015屆本科生畢業(yè)論文(設(shè)計(jì))合肥師范學(xué)院2015屆本科生畢業(yè)論文(設(shè)計(jì))本科生畢業(yè)論文(設(shè)計(jì))題目:基于JAVA的航空票務(wù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)學(xué)院計(jì)算機(jī)學(xué)院學(xué)科門(mén)類(lèi)工科專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)號(hào)姓名指導(dǎo)教師2015年5月22日PAGEIPAGE摘要現(xiàn)如今的航空售票業(yè)務(wù)是一個(gè)高度依賴信息的行業(yè)?;ヂ?lián)網(wǎng)信息技術(shù)的飛速發(fā)展不僅使航空售票工作者逐漸擺脫了繁重的手工勞動(dòng)、提高了工作效率,而且推著航空事業(yè)向現(xiàn)代化管理邁進(jìn)。所以航空票務(wù)系統(tǒng)的實(shí)現(xiàn)在現(xiàn)實(shí)生活中尤為重要?;贘AVA的航空票務(wù)系統(tǒng)就是使用JAVA實(shí)現(xiàn)在網(wǎng)頁(yè)上進(jìn)行航空機(jī)票的交易和管理。通過(guò)本系統(tǒng)不僅可以進(jìn)行售票工作,用戶還可進(jìn)行改簽和退票等功能,系統(tǒng)的后臺(tái)管理還可以對(duì)旅客情況和航班和機(jī)票的信息進(jìn)行查詢,并可根據(jù)不同的情況隨時(shí)進(jìn)行進(jìn)行增加,修改,刪除等工作,使售票人員能夠有效的對(duì)機(jī)票進(jìn)行控制和管理。極大程度的節(jié)約了成本,并為用戶提供更加快捷、簡(jiǎn)便的服務(wù)。關(guān)鍵詞:航空票務(wù);管理系統(tǒng);JAVAIIAbstractThe
airline
ticketing
is
nowadays
a
career
highly
relied
on
information.
The
rapid
development
of
internet
information
technology
gradually
getting
the
heavy
missions
off,
improving
the
work
efficiency
and
making
steps
towards
modern
management.
Soitisveryimportantrealizeairlineticketingsysteminourlife.The
Java-based
airline
ticketing
system
realized
the
airline
tickets
trade
and
management
online
in
Web.
Not
only
the
ticket
selling
service
can
be
achieved
by
the
system,
but
the
tickets
rescheduling
and
canceling
service.
The
back-stage
management
realized
the
inquire
function
for
passenger,
flight
and
ticket
information.
Add,
delete
and
change
function
can
also
be
realized
in
necessary,
which
makes
tickets
seller
have
a
efficient
control
and
management
to
air
ticket.
Saved
cost
in
a
big
extent
and
proved
users
with
better
service.KeyWords:AirTicketing;ManagementSystem;JAVA目錄TOC\o"1-3"\h\u28798摘要 I18659Abstract II145001.引言 1233621.1開(kāi)發(fā)背景及意義 1183551.2開(kāi)發(fā)工具和環(huán)境配置 1183531.2.1開(kāi)發(fā)工具 1289841.2.2環(huán)境配置 2194081.3可行性研究 4316002.需求分析 580652.1功能需求 517742.2性能需求 5206023.系統(tǒng)設(shè)計(jì) 6174843.1數(shù)據(jù)庫(kù)設(shè)計(jì) 6183403.1.1數(shù)據(jù)庫(kù)表 6288373.1.2數(shù)據(jù)庫(kù)的概念結(jié)構(gòu)設(shè)計(jì) 658043.1.3數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)設(shè)計(jì) 8227753.2功能模塊概要設(shè)計(jì) 10167883.2.1模塊設(shè)計(jì) 10209773.2.2系統(tǒng)流程圖 10307634.詳細(xì)設(shè)計(jì) 1176074.1登錄模塊 11189004.2航班管理模塊 13324944.3機(jī)票預(yù)訂模塊 17174724.4我的訂單模塊 18213994.5修改密碼模塊 1882224.6用戶注冊(cè)模塊 19167834.7用戶管理模塊 2092435.系統(tǒng)測(cè)試 21215205.1系統(tǒng)測(cè)試的概念 21309355.2測(cè)試策略及結(jié)果 21312935.2.1功能的測(cè)試 21158235.2.2其他測(cè)試 2358816.結(jié)語(yǔ) 2428233參考文獻(xiàn) 255279附錄 2624246致謝 38PAGEPAGE21.引言1.1開(kāi)發(fā)背景及意義隨著科技的發(fā)展,人們生活水平的提高,飛機(jī)這種交通工具逐漸的得到人們的青睞,它方便了人們的出行。民航服務(wù)業(yè)的發(fā)展,也推動(dòng)著各種機(jī)票經(jīng)營(yíng)企業(yè)的快速發(fā)展,用戶需要實(shí)時(shí)的管理航班信息,能夠?qū)蛻舳ㄆ?、退票、產(chǎn)生定單進(jìn)行管理。面對(duì)各種不同種類(lèi)的信息,需要合理的數(shù)據(jù)庫(kù)結(jié)構(gòu)來(lái)保存數(shù)據(jù)信息以及有效的程序結(jié)構(gòu)支持各種數(shù)據(jù)操作的執(zhí)行。因此,航空票務(wù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)是必須的。它不但能滿足各種機(jī)票經(jīng)營(yíng)企業(yè)的需求,也大大方便了乘客的查詢航班、購(gòu)買(mǎi)機(jī)票、退票等活動(dòng)。管理信息系統(tǒng)的開(kāi)發(fā)需要語(yǔ)言的支持,現(xiàn)在主流的語(yǔ)言有JAVA、C、IOS、Android等。這里比較適合的是JAVA語(yǔ)言,它是面向?qū)ο蟮?、B/S(瀏覽器/服務(wù)器)結(jié)構(gòu)。面向?qū)ο蟮拈_(kāi)發(fā)是將所需開(kāi)發(fā)的管理信息系統(tǒng)要解決的問(wèn)題抽象成若干對(duì)象,再研究這些對(duì)象之間的關(guān)系,構(gòu)建這些對(duì)象之間的聯(lián)系,最終反映在開(kāi)發(fā)的管理信息系統(tǒng)中。B/S結(jié)構(gòu)是瀏覽器、服務(wù)器的結(jié)構(gòu),客戶之間通過(guò)瀏覽器就可以訪問(wèn)票務(wù)系統(tǒng),不需要下載客戶端。更加方便的為用戶通過(guò)服務(wù)[1]。本系統(tǒng)的開(kāi)發(fā)使用的JAVA中的SERVLET和JSP技術(shù)。前臺(tái)頁(yè)面時(shí)動(dòng)態(tài)的JSP頁(yè)面,在通過(guò)SERVLET交互式地瀏覽和修改數(shù)據(jù),生成動(dòng)態(tài)Web內(nèi)容。整個(gè)項(xiàng)目使用MVC設(shè)計(jì)模式,層次結(jié)構(gòu)分明便于開(kāi)發(fā)和維護(hù)。1.2開(kāi)發(fā)工具和環(huán)境配置1.2.1開(kāi)發(fā)工具本系統(tǒng)開(kāi)發(fā)主要使用的開(kāi)發(fā)工具是MyEclipse9.0和MySQL數(shù)據(jù)庫(kù),同時(shí)還在MyEclipse中配置了Tomcat服務(wù)器以及使用火狐瀏覽器進(jìn)行運(yùn)行測(cè)試。1、MyEclipse:是在Eclipse基礎(chǔ)上加上自己的插件開(kāi)發(fā)而成的功能強(qiáng)大的企業(yè)級(jí)集成開(kāi)發(fā)環(huán)境,主要用于JAVA、JAVAEE以及移動(dòng)應(yīng)用的開(kāi)發(fā)。MyEclipse的功能非常強(qiáng)大,支持也十分廣泛,尤其是對(duì)各種開(kāi)源產(chǎn)品的支持相當(dāng)不錯(cuò)[2]。2、MySQL:是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),其所使用的SQL語(yǔ)言是用于訪問(wèn)數(shù)據(jù)庫(kù)的最常用標(biāo)準(zhǔn)化語(yǔ)言。MySQL由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),一般中小型網(wǎng)站的開(kāi)發(fā)都選擇MySQL作為網(wǎng)站數(shù)據(jù)庫(kù)[3]。3、Tomcat服務(wù)器是一個(gè)免費(fèi)的開(kāi)放源代碼的Web應(yīng)用服務(wù)器,屬于輕量級(jí)應(yīng)用服務(wù)PAGEPAGE39器,在中小型系統(tǒng)和并發(fā)訪問(wèn)用戶不是很多的場(chǎng)合下被普遍使用,是開(kāi)發(fā)和調(diào)試JSP程序的首選。4、火狐瀏覽器:可以用來(lái)運(yùn)行顯示系統(tǒng)開(kāi)發(fā)編寫(xiě)的JSP頁(yè)面,尤其是火狐下的一款插件Firebug更是方便進(jìn)行查錯(cuò)。它集HTML查看和編輯、JavaScript控制臺(tái)、網(wǎng)絡(luò)狀況監(jiān)視器于一體,是開(kāi)發(fā)JavaScript、CSS、HTML和Ajax的得力助手[4]。Firebug能從各個(gè)不同的角度剖析Web頁(yè)面內(nèi)部的細(xì)節(jié)層面,給Web開(kāi)發(fā)者帶來(lái)很大的便利。1.2.2環(huán)境配置1、配置JDK:首先下載安裝JDK軟件,安裝好后配置系統(tǒng)環(huán)境變量,右擊計(jì)算機(jī)-屬性-高級(jí)系統(tǒng)設(shè)置-環(huán)境變量-,然后就可以對(duì)環(huán)境變量進(jìn)行設(shè)置。找到系統(tǒng)變量中的path值。如下圖所示:圖1-1環(huán)境變量配置選中“path”-點(diǎn)擊編輯-把安裝JDK的路徑粘貼到變量值的后面。注意,復(fù)制進(jìn)去的路徑一定要與前面的數(shù)據(jù)用分號(hào)隔開(kāi)。圖1-2系統(tǒng)變量編輯2、配置Tomcat:首先下載Tomcat文件,我是把文件放在E盤(pán)下。然后啟動(dòng)MyEclipse,點(diǎn)擊Windows-preferences-搜索tomcat。如下圖操作:圖1-3Tomcat配置3、使用第三方工具連接數(shù)據(jù)庫(kù):下載、安裝MySQL客戶端軟件NavicatforMysql,雙擊打開(kāi)工具-點(diǎn)擊“Connection”彈出如圖示窗口,填寫(xiě)服務(wù)器的IP以及端口號(hào)、數(shù)據(jù)庫(kù)的用戶名和密碼連接數(shù)據(jù)庫(kù)。圖1-4連接數(shù)據(jù)庫(kù)1.3可行性研究航空票務(wù)系統(tǒng)是使用JAVA語(yǔ)言開(kāi)發(fā),使用SERVLET和JSP技術(shù)進(jìn)行實(shí)現(xiàn)。為了更加方便用戶進(jìn)行訂票、退票、查詢等功能,系統(tǒng)使用JAVAWEB技術(shù),直接將系統(tǒng)發(fā)布到萬(wàn)維網(wǎng)上,用戶直接通過(guò)瀏覽器訪問(wèn)該系統(tǒng),不需要下載客戶端。在技術(shù)上使用MVC設(shè)計(jì)模式,將顯示層、業(yè)務(wù)邏輯層以及控制層分開(kāi),結(jié)構(gòu)清晰便于開(kāi)發(fā)、易維護(hù)[5]。2.需求分析2.1功能需求本航空票務(wù)系統(tǒng)主要實(shí)現(xiàn)的功能有:(1)實(shí)現(xiàn)不同權(quán)限的登錄。主要有三種用戶權(quán)限:管理員權(quán)限、登錄用戶、未登錄用戶。管理員可進(jìn)行用戶管理、航班管理、機(jī)票管理以及系統(tǒng)維護(hù)。登錄用戶可進(jìn)行航班查詢,機(jī)票查詢、預(yù)定、退票改簽以及個(gè)人信息管理。未登錄用戶能對(duì)航班和機(jī)票進(jìn)行查詢以及注冊(cè)、登錄等[6]。(2)訂票功能,能夠按照顧客提供的信息提供訂票服務(wù),例如按給定的起飛城市、到達(dá)城市、起飛日期、艙位類(lèi)型等訂票。
(3)航班管理,管理員能夠?qū)桨嘈畔⑦M(jìn)行增、刪、改、查。保持航班信息的更新及維護(hù)。(4)機(jī)票管理,管理員客戶操作反饋的信息,對(duì)機(jī)票信息進(jìn)行增、刪、改、查等操作。(5)提供各種查詢功能。例如航班時(shí)刻查詢,包括起飛時(shí)間,到達(dá)時(shí)間;航班的其他基本信息查詢,以及對(duì)機(jī)票的查詢。
(6)我的訂單。用戶登錄后通過(guò)我的訂單可以查看個(gè)人的訂單詳情,還可進(jìn)行退票功能以及機(jī)票改簽,并且打印改簽前后機(jī)票的價(jià)格信息。
(7)公司簡(jiǎn)介,通過(guò)公司簡(jiǎn)介可以查看公司的介紹。用戶登錄進(jìn)入航空票務(wù)系統(tǒng)的主界面,在上方有六個(gè)菜單按鈕:系統(tǒng)主頁(yè)、公司簡(jiǎn)介、航班查詢、機(jī)票預(yù)訂、我的訂單及修改密碼。各個(gè)界面簡(jiǎn)潔,操作方便,容易上手,用戶可以對(duì)航班進(jìn)行詳細(xì)的信息查詢,在機(jī)票查詢中進(jìn)行機(jī)票的查詢和預(yù)定,在我的訂單中進(jìn)行機(jī)票退訂和改簽。2.2性能需求為了保證系統(tǒng)能夠長(zhǎng)期、安全、穩(wěn)定、可靠、高效的運(yùn)行,系統(tǒng)應(yīng)該滿足以下的性能需求:系統(tǒng)處理的準(zhǔn)確性和及時(shí)性是系統(tǒng)的必要性能,系統(tǒng)在后期的維護(hù)下以及可擴(kuò)展性,要求系統(tǒng)提供足夠的手段進(jìn)行功能的調(diào)整和擴(kuò)充。3.系統(tǒng)設(shè)計(jì)3.1數(shù)據(jù)庫(kù)設(shè)計(jì)對(duì)于航空票務(wù)系統(tǒng),它的數(shù)據(jù)庫(kù)設(shè)計(jì)是通過(guò)對(duì)航空公司管理業(yè)務(wù)過(guò)程的數(shù)據(jù)流程分析和用戶的基本信息以及用戶的處理業(yè)務(wù)的數(shù)據(jù)分析后進(jìn)行設(shè)計(jì)。可以確定岀系統(tǒng)中一些實(shí)體對(duì)象及以及它們之間的關(guān)系,這些實(shí)體包含各種具體信息,通過(guò)相互之間的作用形成數(shù)據(jù)的流動(dòng)[7]。3.1.1數(shù)據(jù)庫(kù)表航空票務(wù)系統(tǒng)中的實(shí)體對(duì)象包括航班信息表(flightinfo),用戶和管理員信息表(userinfo),機(jī)票信息表(ticketinfo),訂單信息表(user_ticketinfo)這些實(shí)體模型的含義如下所述。(1)flightinfo:代表一個(gè)航班信息實(shí)體:包括航班號(hào)(id)、航空公司(airfirm)、起飛地(start)、到達(dá)地(end)、起飛時(shí)間(leaveTime)、到達(dá)時(shí)間(arriveTime)。(2)userinfo:代表一個(gè)用戶或管理員的信息實(shí)體:包括用戶編號(hào)(id)、用戶名(name),密碼(password),性別(sex),手機(jī)號(hào)碼(tel),身份證號(hào)(idcard),用戶權(quán)限(level)。(3)ticketinfo:代表每一張機(jī)票的信息實(shí)體:機(jī)票編號(hào)(id)、起飛地(start)、到達(dá)地(end)、起飛時(shí)間(leaveTime)、到達(dá)時(shí)間(arriveTime),日期(time),座位等級(jí)(seatLeval),票價(jià)(fare),discount(折扣),航班號(hào)(flight_id)、機(jī)票剩余數(shù)量(ticketNum)。(4)user_ticketinfo:代表一個(gè)用戶購(gòu)買(mǎi)機(jī)票的信息實(shí)體:機(jī)票編號(hào)(id)、起飛地(start)、到達(dá)地(end)、起飛時(shí)間(leaveTime)、到達(dá)時(shí)間(arriveTime),日期(time),座位等級(jí)(seatLeval),票價(jià)(fare),用戶名(name)、身份證號(hào)(idcard)。3.1.2數(shù)據(jù)庫(kù)的概念結(jié)構(gòu)設(shè)計(jì)概念結(jié)構(gòu)設(shè)計(jì)將反映現(xiàn)實(shí)世界中的實(shí)體、屬性和它們之間的關(guān)系,建立原始數(shù)據(jù)形式。概念結(jié)構(gòu)設(shè)計(jì)的目標(biāo)是產(chǎn)生反映系統(tǒng)信息需求的整體數(shù)據(jù)庫(kù)概念結(jié)構(gòu)[8],描述工具主要有實(shí)體圖: 圖3-1航班信息實(shí)體圖3-2用戶信息實(shí)體圖3-3機(jī)票信息實(shí)體圖3-4訂單信息實(shí)體圖3-5ER圖3.1.3數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)設(shè)計(jì)是描述數(shù)據(jù)庫(kù)的組織結(jié)構(gòu)、生成數(shù)據(jù)庫(kù)模式。數(shù)據(jù)庫(kù)模式定義以下內(nèi)容:存儲(chǔ)什么信息、數(shù)據(jù)的組織、需要的表、列的定義[9]。本課題使用的是MySQL數(shù)據(jù)庫(kù),根據(jù)上述建立的E-R圖,經(jīng)設(shè)計(jì)得到如下的數(shù)據(jù)表:flightinfo(航班信息表)航班信息表用來(lái)保存航班的信息,如圖3-5所示。userinfo(用戶信息表)用戶信息表用于記錄用戶的信息情況,如圖3-6所示。ticketinfo(機(jī)票信息表)機(jī)票信息表用來(lái)保存機(jī)票的信息,如圖3-7所示。user_ticketinfo(訂單信息表)訂單信息表用于記錄每個(gè)用戶訂購(gòu)機(jī)票的信息,如圖3-8所示。圖3-6flightinfo(航班信息表)圖3-7userinfo(用戶信息表)圖3-8ticketinfo(機(jī)票信息表)圖3-9user_ticketinfo(訂單信息表)3.2功能模塊概要設(shè)計(jì)3.2.1模塊設(shè)計(jì)[用戶登錄模塊]實(shí)現(xiàn)了對(duì)用戶使用系統(tǒng)的檢驗(yàn)工作。用戶又分為不同的權(quán)限,管理員登陸,用戶登錄和不進(jìn)行登錄直接進(jìn)入。對(duì)不同用戶進(jìn)入系統(tǒng)所賦予的權(quán)限也不同,增加了系統(tǒng)的安全性。[用戶管理模塊]管理員登陸的權(quán)限,對(duì)系統(tǒng)登錄用戶的查看和刪除操作。[航班管理模塊]包含對(duì)航班信息的查詢,所有用戶都擁有的權(quán)限。對(duì)航班信息的添加、修改和刪除這是系統(tǒng)管理員的操作權(quán)限。[機(jī)票管理模塊]包含對(duì)機(jī)票信息的查詢,所有用戶都擁有的權(quán)限。對(duì)機(jī)票信息的添加、修改和刪除這是系統(tǒng)管理員的操作權(quán)限。對(duì)機(jī)票的預(yù)定這是登錄用戶的權(quán)限。[我的訂單模塊]包含對(duì)用戶訂單信息的查詢,并且包含對(duì)機(jī)票的退訂以及改簽權(quán)限,改簽后會(huì)提示改簽前后機(jī)票價(jià)格信息。[修改密碼模塊]對(duì)于已登錄用戶可進(jìn)行密碼修改。[登錄和注冊(cè)模塊]這是對(duì)進(jìn)入系統(tǒng)沒(méi)有登錄的用戶的權(quán)限。用戶點(diǎn)擊登錄按鈕跳轉(zhuǎn)到登陸界面。點(diǎn)擊注冊(cè)進(jìn)行注冊(cè),用戶注冊(cè)包含對(duì)用戶信息的驗(yàn)證。3.2.2系統(tǒng)流程圖圖3-10系統(tǒng)走向圖4.詳細(xì)設(shè)計(jì)本系統(tǒng)使用的是JAVA的SERVLET和JSP技術(shù),所以系統(tǒng)的設(shè)計(jì)又分為前端JSP頁(yè)面設(shè)計(jì)和后端業(yè)務(wù)邏輯處理。下面的模塊設(shè)計(jì)主要從前端JSP頁(yè)面和后端中的SERVLET控制層兩部部分進(jìn)行講解。4.1登錄模塊登錄模塊進(jìn)行登錄用戶的用戶名和密碼進(jìn)行驗(yàn)證,點(diǎn)擊“快速注冊(cè)”還能跳轉(zhuǎn)到注冊(cè)界面進(jìn)行用戶注冊(cè)。登錄用戶登錄后,傳遞用戶填寫(xiě)的用戶名和密碼進(jìn)入到UserServlet中的loginStu方法進(jìn)行用戶身份驗(yàn)證,如果用戶名和密碼輸入錯(cuò)誤則跳轉(zhuǎn)到登錄頁(yè)面。用戶登錄正確則跳轉(zhuǎn)到系統(tǒng)主界面。實(shí)現(xiàn)代碼如下: /** *用戶登錄 */ publicvoidloginStu(HttpServletRequestrequest,HttpServletResponseresponsethrowsSQLException,ServletException,IOException{ Stringusername=request.getParameter("username"); Stringpassword=request.getParameter("password"); Stringsql="select*fromuserinfowherename=?andpassword=?"; Objectparames[]=newObject[]{username,password}; System.out.println(username+""+password); //一般用戶登錄(不需要用戶名、密碼) if((username==null||username=="")&&(password==""||password==null)){ response.sendRedirect("main1.jsp"); }else{ //管理員或用戶登錄 List<Map<String,String>>list=fun.login(sql,parames); if(list!=null){ Map<String,String>map=list.get(0); if(username.equals(map.get("name"))&&password.equals(map.get("password"))){ System.out.println("登錄成功~~~"); //判斷是管理員還是用戶登錄 if(map.get("level").equals("1")){ System.out.println("管理員登錄成功?。?!~~~"); HttpSessionsession=request.getSession(); session.setAttribute("username",username); request.getRequestDispatcher("main2.jsp").forward(request,response); }else{ System.out.println("用戶登錄成功?。。~~"); HttpSessionsession=request.getSession(); session.setAttribute("username",username); session.setAttribute("psw",password); request.getRequestDispatcher("main3.jsp").forward(request,response); } }else{ System.out.println("登錄失敗~~~~~"); response.sendRedirect("/login.html"); } } else{ System.out.println("list為空,用戶名或密碼錯(cuò)誤!"); response.sendRedirect("login.html"); } } }登錄成功跳轉(zhuǎn)到系統(tǒng)主界面:圖4-1主界面登錄失敗跳轉(zhuǎn)到登錄界面:圖4-2登錄界面4.2航班管理模塊航班管理包含對(duì)航班信息系的查詢、添加、修改和刪除。在航班信息查詢中又分為按航班號(hào)和起飛地進(jìn)行查詢。航班按航班號(hào)條件查詢通過(guò)調(diào)用selectByhangbanhao方法,把按查詢的條件選擇航班號(hào)和查詢的條件值航班值作為參數(shù)傳遞給selectByhangbanhao方法進(jìn)行查詢。圖4-3按航班號(hào)查詢 /** *根據(jù)航班號(hào)查詢 */ publicvoidselectByhangbanhao(HttpServletRequestrequest, HttpServletResponseresponse)throwsSQLException,ServletException,IOException{ Stringchaxun=request.getParameter("chaxun"); Stringsql="select*fromflightinfowhereid=?"; if(chaxun==null||chaxun==""){ Objectparames[]=newObject[]{chaxun}; List<Map<String,String>>list=fun.selectFlight(sql,parames); if(list!=null){ System.out.println("根據(jù)航班號(hào)查詢成功~~~"); request.setAttribute("flightList",list); request.getRequestDispatcher("user_adminlogin/selectFlight.jsp").forward(request,response); } } }航班按起飛地條件查詢通過(guò)調(diào)用selectByqifeidi方法,把按查詢的條件選擇起飛地和查詢的條件值起飛地值作為參數(shù)傳遞給selectByqifeidi方法進(jìn)行查詢。圖4-4按航班號(hào)查詢 /** *根據(jù)起飛地查詢 */ publicvoidselectByqifeidi(HttpServletRequestrequest, HttpServletResponseresponse)throwsServletException,IOException,SQLException{ request.setCharacterEncoding("utf-8"); response.setContentType("txt/html;charset=utf-8"); //轉(zhuǎn)換編碼格式,將前臺(tái)輸入數(shù)據(jù)的編碼改為UTF-8; Stringchaxun=request.getParameter("chaxun"); System.out.println("按照起飛地【"+chaxun+"】查詢"); Stringsql="select*fromflightinfowherestart=?"; if(chaxun==null||chaxun==""){ //查詢?nèi)坑涗?request.getRequestDispatcher("adminServlet?caozuo=flightSelect").forward(request,response); }else{ Objectparames[]=newObject[]{chaxun}; List<Map<String,String>>list=fun.selectFlight(sql,parames); if(list!=null){ System.out.println("根據(jù)起飛地查詢成功~~~"); request.setAttribute("flightList",list); request.getRequestDispatcher("user_adminlogin/selectFlight.jsp").forward(request,response); } } }把添加航班的信息通過(guò)放在要跳轉(zhuǎn)的URL之后傳遞到Servlet中,在Servlet中進(jìn)行判斷選擇調(diào)用flightInsert方法,通過(guò)INSERT語(yǔ)句向數(shù)據(jù)庫(kù)中插入數(shù)據(jù),實(shí)現(xiàn)添加航班。圖4-5添加航班 /** *航班添加 */ publicvoidflightInsert(HttpServletRequestrequest, HttpServletResponseresponse)throwsSQLException,ServletException,IOException{ Stringid=request.getParameter("id"); Stringstart=request.getParameter("start"); Stringend=request.getParameter("end"); StringleaveTime=request.getParameter("leaveTime"); Stringsql="insertintoflightinfovalue(?,?,?,?,?,?)"; Objectparames[]=newObject[]{id,airfirm,start,end,leaveTime,arriveTime}; inti=fun.insert(sql,parames); response.sendRedirect("user_adminlogin/newWin.jsp?winValue="+winValue); }}圖4-6刪除航班刪除航班是通過(guò)傳遞航班的id號(hào),來(lái)確定這條航班記錄。在調(diào)用flightDelete方法通過(guò)DELETE語(yǔ)句刪除記錄,實(shí)現(xiàn)航班刪除。/** *航班刪除 */ publicvoidflightDelete(HttpServletRequestrequest, HttpServletResponseresponse)throwsSQLException,IOException{ Stringid=request.getParameter("id"); Stringsql="deletefromflightinfowhereid=?"; inti=fun.delete(sql,parames); if(i!=-1){ System.out.println("刪除航班成功~~~"); response.sendRedirect("adminServlet?caozuo=flightSelect"); } }圖4-7修改航班 /** *航班修改 */ privatevoidflightUpdate(HttpServletRequestrequest, HttpServletResponseresponse)throwsSQLException,IOException{ Stringid1=request.getParameter("id1"); Stringid=request.getParameter("id"); Stringairfirm=request.getParameter("airfirm"); Stringstart=request.getParameter("start"); Stringend=request.getParameter("end"); StringleaveTime=request.getParameter("leaveTime"); StringarriveTime=request.getParameter("arriveTime"); Stringsql="updateflightinfosetid=?,airfirm=?,start=?,end=?,leaveTime=?,arriveTime=?whereid=?"; Objectparames[]=newObject[]{id,airfirm,start,end,leaveTime,arriveTime,id1}; inti=fun.update(sql,parames); response.sendRedirect("user_adminlogin/newWin.jsp?winValue="+winValue); } }4.3機(jī)票預(yù)訂模塊用戶點(diǎn)擊“機(jī)票預(yù)訂”菜單,會(huì)進(jìn)入到機(jī)票預(yù)訂界面。頁(yè)面中會(huì)顯示所以機(jī)票的信息,用戶可以根據(jù)起飛地、到達(dá)地和日期,進(jìn)行查詢篩選出所需機(jī)票。用戶點(diǎn)擊“訂票”按鈕完成交易。完成訂票后會(huì)把機(jī)票的票數(shù)修改為原來(lái)的值減一,然后在用戶訂單表中插入一條記錄。圖4-8機(jī)票預(yù)訂圖4-9機(jī)票售完提示4.4我的訂單模塊我的訂單是根據(jù)用戶預(yù)訂機(jī)票產(chǎn)生的訂單信息,用戶可以對(duì)訂單進(jìn)行“改簽”和“退票”操作。改簽完成后會(huì)彈出改簽前后票價(jià)信息的提示。改簽調(diào)用gaiQian方法,在這個(gè)方法中把原記錄刪除再添加一條新紀(jì)錄。圖4-10我的訂單圖4-11改簽后價(jià)格提示4.5修改密碼模塊點(diǎn)擊“修改密碼”菜單,會(huì)彈出窗口修改密碼。用戶需要輸入原密碼和兩次新密碼。通過(guò)調(diào)用updatePsw方法,在這個(gè)方法中用UPDATE語(yǔ)句對(duì)密碼信息進(jìn)行修改。圖4-12修改用戶密碼 /** *修改密碼 */ publicvoidupdatePsw(HttpServletRequestrequest, HttpServletResponseresponse)throwsSQLException,ServletException,IOException{ StringoldPsw=request.getParameter("oldPsw");//獲得原密碼 StringnewPsw=request.getParameter("newPsw"); //獲得新密碼 HttpSessionsession=request.getSession(); Stringname=(String)session.getAttribute("username"); Stringsql="updateuserinfosetpassword=?wherepassword=?andname=?"; Objectparames[]=newObject[]{newPsw,oldPsw,name}; inti=fun.update(sql,parames); response.sendRedirect("user_userlogin/newWin.jsp?"); }4.6用戶注冊(cè)模塊用戶注冊(cè)可以在登錄界面點(diǎn)擊“快速注冊(cè)”進(jìn)行注冊(cè)或者在直接進(jìn)入系統(tǒng)化點(diǎn)擊菜單里的“注冊(cè)”按鈕注冊(cè)用戶。實(shí)現(xiàn)原理就是調(diào)用zhuCe方法,把注冊(cè)的信息傳遞到zhuCe方法,然后INSERT到數(shù)據(jù)庫(kù)中。圖4-13修改用戶密碼 /** *用戶注冊(cè) */ publicvoidzhuCe(HttpServletRequestrequest,HttpServletResponseresponse)throwsSQLException,ServletException,IOException{ Stringid=request.getParameter("id"); Stringname=request.getParameter("name"); Stringpassword=request.getParameter("password"); Stringtel=request.getParameter("tel"); Stringidcard=request.getParameter("idcard"); Stringsql="insertintouserinfo(id,name,password,sex,tel,idcard)value(?,?,?,?,?,?)"; Objectparames[]=newObject[]{id,name,password,sex,tel,idcard}; inti=fun.insert(sql,parames); request.getRequestDispatcher("login.html").forward(request,response); } }4.7用戶管理模塊用戶管理員登錄后,可進(jìn)行用戶信息查詢以及用戶信息的刪除。圖4-14用戶信息管理 /** *用戶刪除 */ publicvoiduserDelete(HttpServletRequestrequest,HttpServletResponseresponse)throwsSQLException,ServletException,IOException{ Stringid=request.getParameter("id"); Stringsql="deletefromuserinfowhereid=?"; Objectparames[]=newObject[]{id}; inti=fun.delete(sql,parames); if(i!=-1){request.getRequestDispatcher("adminServlet?caozuo=userSelect").forward(request,response); } }5.系統(tǒng)測(cè)試5.1系統(tǒng)測(cè)試的概念軟件測(cè)試不僅僅包括程序測(cè)試,而是貫穿于整個(gè)軟件開(kāi)發(fā)的全過(guò)程,也就是說(shuō)其對(duì)象除了包括需求分析所獲得的開(kāi)發(fā)成果、還包括概要設(shè)計(jì)所獲得的開(kāi)發(fā)成果、以及包括詳細(xì)設(shè)計(jì)所獲得的開(kāi)發(fā)成果、和包括編碼實(shí)現(xiàn)所獲得的開(kāi)發(fā)成果[10]。系統(tǒng)測(cè)試是針對(duì)整個(gè)產(chǎn)品系統(tǒng)進(jìn)行的測(cè)試,目的是驗(yàn)證系統(tǒng)是否滿足了需求規(guī)格的定義,找出與需求規(guī)格不符或與之矛盾的地方,從而提出更加完善的方案。系統(tǒng)測(cè)試發(fā)現(xiàn)問(wèn)題之后要經(jīng)過(guò)調(diào)試找出錯(cuò)誤原因和位置,然后進(jìn)行改正。是基于系統(tǒng)整體需求說(shuō)明書(shū)的黑盒類(lèi)測(cè)試,應(yīng)覆蓋系統(tǒng)所有聯(lián)合的部件。對(duì)象不僅僅包括需測(cè)試的軟件,還要包含軟件所依賴的硬件、外設(shè)甚至包括某些數(shù)據(jù)、某些支持軟件及其接口等比較常見(jiàn)的、典型的系統(tǒng)測(cè)試包括恢復(fù)測(cè)試、安全測(cè)試、壓力測(cè)試[11]。下面對(duì)這幾種測(cè)試進(jìn)行一一介紹:1)恢復(fù)測(cè)試恢復(fù)測(cè)試作為一種系統(tǒng)測(cè)試,主要關(guān)注導(dǎo)致軟件運(yùn)行失敗的各種條件,并驗(yàn)證其恢復(fù)過(guò)程能否正確執(zhí)行。在特定情況下,系統(tǒng)需具備容錯(cuò)能力。另外,系統(tǒng)失效必須在規(guī)定時(shí)間段內(nèi)被更正,否則將會(huì)導(dǎo)致嚴(yán)重的經(jīng)濟(jì)損失。2)安全測(cè)試安全測(cè)試用來(lái)驗(yàn)證系統(tǒng)內(nèi)部的保護(hù)機(jī)制,以防止非法侵入。在安全測(cè)試中,測(cè)試人員扮演試圖侵入系統(tǒng)的角色,采用各種辦法試圖突破防線。因此系統(tǒng)安全設(shè)計(jì)的準(zhǔn)則是要想方設(shè)法使侵入系統(tǒng)所需的代價(jià)更加昂貴。3)壓力測(cè)試壓力測(cè)試是指在正常資源下使用異常的訪問(wèn)量、頻率或數(shù)據(jù)量來(lái)執(zhí)行系統(tǒng)。139845.2測(cè)試策略及結(jié)果5.2.1功能的測(cè)試概述:功能測(cè)試也稱為黑盒測(cè)試,就是運(yùn)行整個(gè)系統(tǒng)測(cè)試各模塊功能與預(yù)期的功能效果對(duì)比是否相同,在測(cè)試過(guò)程中把整個(gè)程序看成一個(gè)打不開(kāi)的黑盒,在完全不考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部特性的情況下,在程序接口進(jìn)行測(cè)試。就是按照開(kāi)發(fā)的功能分析和各個(gè)模塊的功能設(shè)計(jì)進(jìn)行測(cè)試,主要針對(duì)軟件界面和軟件功能進(jìn)行測(cè)試。功能測(cè)試既是測(cè)試的重點(diǎn),也是測(cè)試的難點(diǎn)[12]。目標(biāo):功能測(cè)試的目標(biāo)或者說(shuō)過(guò)程就是分別使用有效的和無(wú)效的數(shù)據(jù)測(cè)試各個(gè)功能模塊,測(cè)試輸入為有效數(shù)據(jù)時(shí),能否得到與預(yù)期結(jié)果相符的結(jié)果,測(cè)試輸入為無(wú)效數(shù)據(jù)時(shí),能否得到與預(yù)期相符的提示信息或者警告信息。結(jié)果:測(cè)試各模塊,結(jié)果達(dá)到目標(biāo)。下面以機(jī)票預(yù)訂和我的訂單功能模塊的測(cè)試為例,該模塊測(cè)試用例、測(cè)試結(jié)果如下:表4-1機(jī)票預(yù)訂和我的訂單功能測(cè)試用例用例機(jī)票預(yù)訂,我的訂單測(cè)試類(lèi)名稱dingPiao、ticketSelecttuiPiao、gaiQian測(cè)試目的驗(yàn)證該模塊的功能測(cè)試環(huán)境Windows7、火狐瀏覽器、IE瀏覽器、360瀏覽器測(cè)試環(huán)境MyEclipse9.0、MySQL數(shù)據(jù)庫(kù)、測(cè)試用例標(biāo)號(hào)測(cè)試項(xiàng)目輸入描述預(yù)期結(jié)果實(shí)際結(jié)果1查詢機(jī)票輸入正確的機(jī)票信息查詢出對(duì)應(yīng)條件的機(jī)票信息一致2查詢機(jī)票點(diǎn)擊“機(jī)票預(yù)訂”菜單按鈕查詢出所有機(jī)票信息的記錄一致3查詢機(jī)票起飛地錯(cuò)誤結(jié)果為空一致4查詢機(jī)票目的地錯(cuò)誤結(jié)果為空一致5查詢機(jī)票日期錯(cuò)誤結(jié)果為空一致6查詢機(jī)票所有條件為空結(jié)果為空一致7機(jī)票預(yù)訂票數(shù)為0提示機(jī)票已賣(mài)完一致8機(jī)票預(yù)訂機(jī)票有剩余訂票成功,票數(shù)減1一致9機(jī)票預(yù)訂重復(fù)購(gòu)買(mǎi)提示機(jī)票不能重復(fù)購(gòu)買(mǎi)一致10退票點(diǎn)擊退票退票成功一致11退票飛機(jī)起飛前三十分點(diǎn)擊退票退票失敗一致12改簽點(diǎn)擊改簽后選擇預(yù)定的機(jī)票改簽成功一致13改簽完成改簽顯示改簽前后機(jī)票價(jià)格一致14改簽點(diǎn)擊改簽后不選擇預(yù)定的機(jī)票改簽失敗一致15改簽點(diǎn)擊改簽后進(jìn)行其他操作改簽失敗一致16改簽點(diǎn)擊改簽后點(diǎn)擊退出系統(tǒng)按鈕退出當(dāng)前系統(tǒng)成功,改簽失敗一致5.2.2其他測(cè)試1、性能的測(cè)試概述:性能的測(cè)試是為了獲得系統(tǒng)的最大負(fù)載和最大處理能力等等數(shù)據(jù),其主要是通過(guò)評(píng)測(cè)和評(píng)估非功能性需求來(lái)獲得的,包括評(píng)測(cè)和評(píng)估系統(tǒng)處理速度、系統(tǒng)響應(yīng)時(shí)間以及其他與時(shí)間相關(guān)的數(shù)據(jù)[13]。目標(biāo):性能的測(cè)試的目標(biāo)是測(cè)試在正常負(fù)荷下運(yùn)行的系統(tǒng)的預(yù)期工作量。結(jié)果:經(jīng)過(guò)測(cè)試,得出系統(tǒng)平均響應(yīng)時(shí)間、處理速度、最大負(fù)載等性能達(dá)到目標(biāo)。2、壓力的測(cè)試概述:壓力的測(cè)試也就是系統(tǒng)承受壓力的測(cè)試,既有高壓測(cè)試又有負(fù)載測(cè)試。目標(biāo):壓力的測(cè)試主要就是要掌握系統(tǒng)的安全運(yùn)行性能,這就需要了解系統(tǒng)在長(zhǎng)時(shí)間處理多個(gè)用戶相同的且性能最壞的業(yè)務(wù)的情況下的安全運(yùn)行邊界條件,這就需要測(cè)試系統(tǒng)在給定時(shí)間內(nèi)能夠持續(xù)處理的最大工作量或最大負(fù)載。結(jié)果:經(jīng)過(guò)測(cè)試,系統(tǒng)在所需最大負(fù)荷兩倍的條件下,仍能夠正常運(yùn)轉(zhuǎn)。5、配置的測(cè)試概述:配置的測(cè)試主要是確認(rèn)系統(tǒng)的使用范圍,這需要測(cè)試系統(tǒng)在不同的軟件配置中的運(yùn)行情況以及在不同的硬件配置中的運(yùn)行情況[14];目標(biāo):配置的測(cè)試的目標(biāo)就是測(cè)試系統(tǒng)在不同條件下是否能夠正常運(yùn)行,這就包括測(cè)試系統(tǒng)在所需的軟件配置以及所需的硬件配置中,也就是說(shuō)在正常配置下,運(yùn)行是否正常。測(cè)試系統(tǒng)的兼容性,也就是測(cè)試在其他版本的瀏覽器操作或者在其他系統(tǒng)平臺(tái)的異常情況下,系統(tǒng)是否兼容,也就是說(shuō)系統(tǒng)是否能夠正常運(yùn)行[15]。結(jié)果:系統(tǒng)在主流操作系統(tǒng)WindowsXP、Windows7,火狐瀏覽器,IE瀏覽器,360瀏覽器以及其他操作系統(tǒng)和瀏覽器上都可以正常運(yùn)行。6.結(jié)語(yǔ)經(jīng)過(guò)兩個(gè)月的忙碌整個(gè)畢業(yè)設(shè)計(jì)和論文已全部完成,總結(jié)這兩個(gè)月的經(jīng)歷感覺(jué)真的學(xué)到了很多。從最開(kāi)始的不知從何下手到最后的全部完成,這中間我付出了很多努力同時(shí)也收獲了很多。這次的畢業(yè)設(shè)計(jì)不僅僅是對(duì)我大學(xué)四年所學(xué)的總結(jié),還是對(duì)我能力的一個(gè)考驗(yàn)。因?yàn)橄胍瓿梢粋€(gè)優(yōu)秀的畢業(yè)設(shè)計(jì)僅依靠大學(xué)中所學(xué)習(xí)到知識(shí)是完全不夠的,但我經(jīng)過(guò)四年的學(xué)習(xí)也具備了自學(xué)的能力,我通過(guò)查找相關(guān)的資料書(shū)籍以及用過(guò)網(wǎng)絡(luò)資源獲取來(lái)幫助我完成畢業(yè)設(shè)計(jì)。拿到這個(gè)畢業(yè)設(shè)計(jì)題目,首先我們從系統(tǒng)的需求分析入手,我們將系統(tǒng)要實(shí)現(xiàn)的功能和估計(jì)要用到的相關(guān)技術(shù)及相關(guān)技術(shù)難點(diǎn)進(jìn)行分析。接下來(lái)就是進(jìn)行系統(tǒng)的總體設(shè)計(jì),首先將系統(tǒng)的結(jié)構(gòu)進(jìn)行分析,分析這個(gè)系統(tǒng)需要完成哪些功能,將這些功能劃分為多個(gè)模塊,這樣在設(shè)計(jì)上我們就將軟件分成一個(gè)立體的,低偶合的一個(gè)一個(gè)的小模塊。我先從簡(jiǎn)單的模塊開(kāi)始著手編寫(xiě)代碼,然后一點(diǎn)點(diǎn)的完成整個(gè)項(xiàng)目的開(kāi)發(fā)。
本次系統(tǒng)設(shè)計(jì)中我也遇到了很到問(wèn)題,主要是缺少項(xiàng)目經(jīng)驗(yàn)。有些只是可能會(huì)但是在實(shí)際項(xiàng)目開(kāi)發(fā)中一不小心就會(huì)出錯(cuò)。還有在做系統(tǒng)時(shí)不能把以前學(xué)過(guò)的知識(shí)都綜合到一起。每當(dāng)遇到這樣或那樣的問(wèn)題時(shí),我都通過(guò)網(wǎng)上查閱相關(guān)資料,一些沒(méi)有接觸過(guò)的知識(shí)也是從頭開(kāi)始學(xué)起,在這個(gè)過(guò)程中讓我的進(jìn)步非常大通過(guò)解決這一個(gè)個(gè)難點(diǎn)不僅是對(duì)我知識(shí)的積累也是對(duì)我學(xué)習(xí)能力的提高,這一點(diǎn)對(duì)我今后的工作有很大的幫助。另外在這次做系統(tǒng)的過(guò)程中,我認(rèn)為軟件最難的是設(shè)計(jì),設(shè)計(jì)有了,實(shí)現(xiàn)是很簡(jiǎn)單的,所以也為我指明了以后學(xué)習(xí)的方向。
系統(tǒng)中難免有不盡人意之處,如系統(tǒng)的安全性能有待提高,系統(tǒng)的通用性也需要完善。由于本人的知識(shí)水平和能力有限,本文的疏漏和不當(dāng)之處在所難免,敬請(qǐng)指正。我也會(huì)努力盡量完善所有編寫(xiě)的功能模塊,完美的完成這個(gè)畢業(yè)設(shè)計(jì),為我的大學(xué)劃上一個(gè)圓滿的句號(hào)。參考文獻(xiàn)[1]良葛格.Java學(xué)習(xí)筆記(第一版)[M].北京:清華大學(xué)出版社,2006.[2]孫衛(wèi)琴.精通Hibernate:Java面向持久化技術(shù)詳解[M].北京:電子工業(yè)出版社,2007.[3]盧曉慶.基于Web的交通旅游訂票系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].大連:大連理工大學(xué),2004.[4]薩師煊,王珊.數(shù)據(jù)庫(kù)系統(tǒng)概論[M].北京:高等教育出版社,2003.[5]張水平.數(shù)據(jù)庫(kù)應(yīng)用技術(shù)[M].西安:西北工業(yè)大學(xué)出版社,2005.[6]楊小平.VisualC++項(xiàng)目案例導(dǎo)航[M].北京:科學(xué)出版社,2005.[7]李閩溟,吳繼剛.數(shù)據(jù)庫(kù)系統(tǒng)開(kāi)發(fā)實(shí)例[M].北京:人民郵電出版社,2002.[8]鄭阿奇,丁有和.VisualC++教程[M].北京:機(jī)械工業(yè)出版社,2004.[9]蔡學(xué)鏞.Java程序員的心聲第2版[M].北京:電子工業(yè)出版社,2004.[10]姜志強(qiáng).Java語(yǔ)言程序設(shè)計(jì)[M].北京:電子工業(yè)出版社,2007.[11]田苗苗.基于面向?qū)ο蠹夹g(shù)開(kāi)發(fā)[J].面向?qū)ο笱芯?2004,(02):134-139.[12]BruceEckel.《ThinkinginJava4》[M].American:PrenticeHallPTR,2007.[13]A.Parasan.《marketingresearch》[M].American:HoughtonCompany,2007.[14]MichaclHammer.《ReengineeringtheCorporation》[M].American:HarperBusiness,1993.附錄ADO層JDBC建立數(shù)據(jù)庫(kù)的連接:packagecom.nite.dao;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importorg.junit.Test;/***@author:劉賢龍*@功能:JDBC*@時(shí)間:2015.3*/publicclassDao{ Connectioncon=null; PreparedStatementps=null; ResultSetrs=null;publicDao(){} static{ try{ Class.forName("com.mysql.jdbc.Driver"); }catch(ClassNotFoundExceptione){ e.printStackTrace(); } } /** *數(shù)據(jù)庫(kù)連接 *@throwsSQLException */ @Test publicvoidgetConnect()throwsSQLException{ Stringurl="jdbc:mysql://localhost:3306/ticketsystem"; Stringuser="root"; Stringpassword="liu"; con=DriverManager.getConnection(url,user,password); if(con!=null){ System.out.println("連接數(shù)據(jù)庫(kù)成功"); }else{ System.out.println("連接數(shù)據(jù)庫(kù)失敗"); } } /** *執(zhí)行sql *return:影響行數(shù) *@throwsSQLException */ publicintdoSql(Stringsql,Objectparames[])throwsSQLException{ getConnect(); ps=con.prepareStatement(sql); for(inti=0;i<parames.length;i++){ ps.setObject(i+1,parames[i]); } ps.execute(); inti=ps.getUpdateCount(); returni; } /** *獲得結(jié)果集 *@throwsSQLException *return:結(jié)果集 */ publicResultSetgetRs()throwsSQLException{ rs=ps.getResultSet(); returnrs; } /** *關(guān)閉資源 *@throwsSQLException */ publicvoidgetClose()throwsSQLException{ if(rs!=null) rs.close(); if(ps!=null) ps.close(); if(con!=null) con.close(); }}2、SERVICE(業(yè)務(wù)邏輯層)層處理業(yè)務(wù)邏輯:packagecom.nite.service;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.nite.dao.Dao;publicclassFunction{ privateDaodao=newDao(); /** *查詢航班 *@paramsql *@paramparames *@return *@throwsSQLException */ publicList<Map<String,String>>selectFlight(Stringsql,Object[]parames)throwsSQLException{ List<Map<String,String>>list=newArrayList<Map<String,String>>(); dao.doSql(sql,parames); ResultSetrs=dao.getRs(); rs.last(); inti=rs.getRow(); System.out.println("結(jié)果集中有"+i+"條記錄"); if(i>0){ rs.beforeFirst(); while(rs.next()){ Stringid=rs.getString("id"); Stringairfirm=rs.getString(2); Stringstart=rs.getString(3); Stringend=rs.getString(4); StringleaveTime=rs.getString(5); StringarriveTime=rs.getString(6); Map<String,String>map=newHashMap<String,String>(); map.put("id",id); map.put("airfirm",airfirm); map.put("start",start); map.put("end",end); map.put("leaveTime",leaveTime); map.put("arriveTime",arriveTime); list.add(map); } }else{ list=null; } dao.getClose(); returnlist; } /** *查詢機(jī)票 *@throwsSQLException */ publicList<Map<String,String>>selectTicket(Stringsql,Object[]parames)throwsSQLException{ List<Map<String,String>>list=newArrayList<Map<String,String>>(); dao.doSql(sql,parames); ResultSetrs=dao.getRs(); rs.last(); inti=rs.getRow(); System.out.println("結(jié)果集中有"+i+"條記錄"); if(i>0){ rs.beforeFirst(); while(rs.next()){ Stringid=rs.getString("id"); Stringstart=rs.getString(2); Stringend=rs.getString(3); StringleaveTime=rs.getString(4); StringarriveTime=rs.getString(5); Stringtime=rs.getString(6); StringseatLevel=rs.getString(7); Stringfare=rs.getString(8); Stringdiscount=rs.getString(9); Stringflight_id=rs.getString(10); StringticketNum=rs.getString(11); Map<String,String>map=newHashMap<String,String>(); map.put("id",id); map.put("start",start); map.put("end",end); map.put("leaveTime",leaveTime); map.put("arriveTime",arriveTime); map.put("time",time); map.put("seatLevel",seatLevel); map.put("fare",fare); map.put("discount",discount); map.put("flight_id",flight_id); map.put("ticketNum",ticketNum); list.add(map); } }else{ list=null; } dao.getClose(); returnlist; } /** *添加 *@paramsql *@paramparames *@return *@throwsSQLException */ publicintinsert(Stringsql,Object[]parames)throwsSQLException{ inti=dao.doSql(sql,parames); System.out.println("影響行數(shù)"+i); dao.getClose(); returni; } /** *刪除 *@paramsql *@paramparames *@throwsSQLException */ publicintdelete(Stringsql,Object[]parames)throwsSQLException{ inti=dao.doSql(sql,parames); System.out.println("影響行數(shù):"+i); dao.getClose(); returni; } /** *修改 *@paramsql *@paramparames *@throwsSQLException */ publicintupdate(Stringsql,Object[]parames)throwsSQLException{ inti=dao.doSql(sql,parames); System.out.println("影響行數(shù):"+i); dao.getClose(); returni; } /** *登錄 *@throwsSQLException */ publicList<Map<String,String>>login(Stringsql,Objectparames[])throwsSQLException{ dao.doSql(sql,parames); ResultSetrs=dao.getRs(); List<Map<String,String>>list=newArrayList<Map<String,String>>(); rs.last(); inti=rs.getRow(); if(i>0){ rs.beforeFirst(); while(rs.next()){ Stringname=rs.getString("name"); Stringpassword=rs.getString("password"); Stringlevel=rs.getString("level"); Map<String,String>map=newHashMap<String,String>(); map.put("name",name); map.put("password",password); map.put("level",level); list.add(map); } }else{ list=null; } returnlist; } /** *用戶查詢 *@paramsql *@paramparames *@throwsSQLException */ publicList<Map<String,String>>selectUser(Stringsql,Object[]parames)throwsSQLException{ List<Map<String,String>>list=newArrayList<Map<String,String>>(); dao.doSql(sql,parames); ResultSetrs=dao.getRs(); rs.last(); inti=rs.getRow(); if(i>0){ rs.beforeFirst(); while(rs.next()){ Stringid=rs.getString("id"); Stringname=rs.getString(2); Stringpassword=rs.getString("password"); Stringsex=rs.getString(4); Stringtel=rs.getString(5); Stringidcard=rs.getString(6); Stringlevel=rs.getString("level"); Map<String,String>map=newHashMap<String,String>(); map.put("id",id); map.put("name",name); map.put("password",password); map.put("sex",sex); map.put("tel",tel); map.put("idcard",idcard); map.put("level",level); list.add(map); } }else{ list=null; } returnlist; } /** *查詢訂單 *@throwsSQLException */ publicList<Map<String,String>>selectMyTicket(Stringsql,Object[]parames)throwsSQLException{ List<Map<String,String>>list=newArrayList<Map<String,String>>(); dao.doSql(sql,parames); ResultSetrs=dao.getRs(); rs.last(); inti=rs.getRow(); System.out.println("結(jié)果集中有"+i+"條記錄"); if(i>0){ rs.beforeFirst(); while(rs.next()){ Stringid=rs.getString("id"); Stringstart=rs.getString(2); Stringend=rs.getString(3); StringleaveTime=rs.getString(4); StringarriveTime=rs.getString(5); Stringtime=rs.getString(6); StringseatLevel=rs.getString(7); Stringfare=rs.getString(8); Stringname=rs.getString(9); Stringidcard=rs.getString(10); Stringflight_id=rs.getString(11); Map<String,String>map=newHashMap<String,String>(); map.put("id",id); map.put("start",start); map.put("end",end); map.put("leaveTime",leaveTime); map.put("arriveTime",arriveTime); map.put("time",time); map.put("seatLevel",seatLevel); map.put("fare",fare); map.put("name",name); map
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 箱子材料成型課程設(shè)計(jì)
- 生物數(shù)字化課程設(shè)計(jì)
- 公司薪酬福利管理制度
- 發(fā)展集團(tuán)財(cái)務(wù)管理管控規(guī)章制度匯編
- 研究生幼兒游戲課程設(shè)計(jì)
- 繼電器電路控制課程設(shè)計(jì)
- 住院部護(hù)理工作總結(jié)
- 泰拳系統(tǒng)課程設(shè)計(jì)案例
- 2025年高考?xì)v史一輪復(fù)習(xí)之經(jīng)濟(jì)發(fā)展與社會(huì)進(jìn)步
- 律師調(diào)解案件心得分享
- 2022版義務(wù)教育物理課程標(biāo)準(zhǔn)
- 數(shù)字資產(chǎn)管理與優(yōu)化考核試卷
- 期末測(cè)試-2024-2025學(xué)年語(yǔ)文四年級(jí)上冊(cè)統(tǒng)編版
- 教案-“枚舉法”信息技術(shù)(信息科技)
- 2024年內(nèi)部審計(jì)年度工作計(jì)劃范文(六篇)
- 四川省成都市2021-2022學(xué)年物理高一下期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)模擬試題含解析
- 光伏發(fā)電系統(tǒng)租賃合同范本
- 新教科版六年級(jí)上冊(cè)科學(xué)全冊(cè)知識(shí)點(diǎn)(期末總復(fù)習(xí)資料)
- 綠色建筑工程監(jiān)理實(shí)施細(xì)則
- 2024年安全員b證繼續(xù)教育考試
- 科研倫理與學(xué)術(shù)規(guī)范期末考試試題
評(píng)論
0/150
提交評(píng)論