1 相關(guān)技術(shù)2 需求分析3 工程結(jié)構(gòu)及其說(shuō)明4 系統(tǒng)總體設(shè)計(jì)5 系統(tǒng)詳細(xì)設(shè)計(jì)及實(shí)現(xiàn)6 源碼下載7 運(yùn)行教程8 相關(guān)說(shuō)明近年來(lái),我國(guó)發(fā)展迅速,對(duì)交通工具的需求量大幅度" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷(xiāo)資訊 > 網(wǎng)站運(yùn)營(yíng) > 基于Web的機(jī)票管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)(附源碼下載地址)

基于Web的機(jī)票管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)(附源碼下載地址)

時(shí)間:2023-08-16 16:36:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-08-16 16:36:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)

基于Web的機(jī)票管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)(附源碼下載地址):@文章目錄

近年來(lái),我國(guó)發(fā)展迅速,對(duì)交通工具的需求量大幅度增加。飛機(jī)作為出行工具之一,花費(fèi)時(shí)間短、用戶體驗(yàn)度好,價(jià)格實(shí)惠、安全性高等優(yōu)點(diǎn)自然成為人們的首選,這也導(dǎo)致等待時(shí)間長(zhǎng)、購(gòu)票效率低等一系列問(wèn)題的出現(xiàn),給用戶和航空公司造成嚴(yán)重困擾。面對(duì)這些問(wèn)題,在線機(jī)票預(yù)訂系統(tǒng)顯得格外重要。

本系統(tǒng)使用Eclipse開(kāi)發(fā)工具,使用Redis、MySQL數(shù)據(jù)庫(kù),采用MVC三層架構(gòu)的方式,結(jié)合當(dāng)前最流行的SSM框架以及支付寶沙箱支付環(huán)境來(lái)實(shí)現(xiàn)各個(gè)功能。系統(tǒng)分為用戶端和管理員端。用戶端實(shí)現(xiàn)了用戶注冊(cè)與登錄、用戶評(píng)論、機(jī)票查詢,機(jī)票預(yù)訂,訂單查詢、廣告展示等功能。管理員端包括航班信息管理模塊、訂單信息管理模塊、用戶信息管理模塊、留言評(píng)論管理模塊、廣告信息管理模塊、個(gè)人信息管理模塊等六大模塊,具有開(kāi)放體系結(jié)構(gòu)的、易擴(kuò)充的、易維護(hù)的、具有良好人機(jī)界面的優(yōu)點(diǎn)。

經(jīng)過(guò)充分的測(cè)試,測(cè)試數(shù)據(jù)均正確無(wú)誤,各個(gè)模塊運(yùn)行良好。機(jī)票預(yù)訂系統(tǒng)的推出,為乘客出行提供方便,便于機(jī)場(chǎng)工作人員對(duì)機(jī)票信息進(jìn)行管理,提高了機(jī)場(chǎng)工作人員對(duì)機(jī)票管理的工作效率。

關(guān)鍵詞:機(jī)票預(yù)訂系統(tǒng); 數(shù)據(jù)庫(kù); MVC; SSM; 面向?qū)ο?/b>




1 相關(guān)技術(shù)

1.1 Java web

Java Web,是用Java技術(shù)來(lái)解決相關(guān)web互聯(lián)網(wǎng)領(lǐng)域的技術(shù)總和。隨著Web互聯(lián)網(wǎng)技術(shù)的出現(xiàn)和推廣,基于Java技術(shù)的Java Web技術(shù)應(yīng)運(yùn)而生,并為解決互聯(lián)網(wǎng)相關(guān)問(wèn)題提出解決方案。我們知道,Web是由服務(wù)器和客戶端兩方面組成,基于Java語(yǔ)言的Web框架有很多種,用以適用不同的技術(shù)需求,但是都遵循最基本的原則和技術(shù)路線,即采用了MVC的架構(gòu)設(shè)計(jì)思想,并通過(guò)Servlet或者Filter進(jìn)行請(qǐng)求攔截,同時(shí)使用約定,XML或Annotation來(lái)實(shí)現(xiàn)必備的相關(guān)配置,充分利用其面向?qū)ο蟮奶刭|(zhì),實(shí)現(xiàn)前臺(tái)用戶請(qǐng)求和后臺(tái)程序響應(yīng)的工作流程。

1.2 三大框架SSM

SSM框架,是Spring + Spring MVC + MyBatis的縮寫(xiě),這個(gè)是繼SSH之后,目前比較主流的Java EE企業(yè)級(jí)框架,適用于搭建各種大型的企業(yè)級(jí)應(yīng)用系統(tǒng)。

Spring是一個(gè)開(kāi)源框架,Spring是于2003年興起的一個(gè)輕量級(jí)的Java開(kāi)發(fā)框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來(lái)。它是為了解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本的JavaBean來(lái)完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。 簡(jiǎn)單來(lái)說(shuō),Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。

Spring MVC屬于Spring Framework的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow里面,它原生支持的Spring特性,讓開(kāi)發(fā)變得非常簡(jiǎn)單規(guī)范。Spring MVC 分離了控制器、模型對(duì)象、分派器以及處理程序?qū)ο蟮慕巧?,這種分離讓它們更容易進(jìn)行定制。

MyBatis本是apache的一個(gè)開(kāi)源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了google code,并且改名為MyBatis 。MyBatis是一個(gè)基于Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。MyBatis使用簡(jiǎn)單的XML或注解用于配置和原始映射,將接口和Java的POJOs(Plain Old Java Objects,普通的 Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄。

1.3 前端框架AngularJS

AngularJS是一個(gè)開(kāi)發(fā)動(dòng)態(tài)Web應(yīng)用的框架。它讓你可以使用HTML作為模板語(yǔ)言并且可以通過(guò)擴(kuò)展的HTML語(yǔ)法來(lái)使應(yīng)用組件更加清晰和簡(jiǎn)潔。它的創(chuàng)新之處在于,通過(guò)數(shù)據(jù)綁定和依賴注入減少了大量代碼,而這些都在瀏覽器端通過(guò)JavaScript實(shí)現(xiàn)。

1.4 數(shù)據(jù)庫(kù)MySQL

MySQL是一種開(kāi)放源代碼的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),使用最常用的數(shù)據(jù)庫(kù)管理語(yǔ)言--結(jié)構(gòu)化查詢語(yǔ)言(SQL)進(jìn)行數(shù)據(jù)庫(kù)管理。MySQL是開(kāi)放源代碼的,因此任何人都可以在General Public License的許可下下載并根據(jù)個(gè)性化的需要對(duì)其進(jìn)行修改。MySQL因?yàn)槠渌俣?、可靠性和適應(yīng)性而備受關(guān)注。大多數(shù)人都認(rèn)為在不需要事務(wù)化處理的情況下,MySQL是管理內(nèi)容最好的選擇。

1.5 數(shù)據(jù)庫(kù)Redis

Redis(Remote Dictionary Server ),即遠(yuǎn)程字典服務(wù),是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言編寫(xiě)、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。

Redis是一個(gè)key-value存儲(chǔ)系統(tǒng)。和Memcached類(lèi)似,它支持存儲(chǔ)的value類(lèi)型相對(duì)更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類(lèi)型)。這些數(shù)據(jù)類(lèi)型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎(chǔ)上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會(huì)周期性的把更新的數(shù)據(jù)寫(xiě)入磁盤(pán)或者把修改操作寫(xiě)入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了master-slave(主從)同步。

1.6 開(kāi)發(fā)工具Eclipse

Eclipse 是一個(gè)開(kāi)放源代碼的、基于Java的可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境。幸運(yùn)的是,Eclipse附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括Java開(kāi)發(fā)工具(Java Development Kit,JDK)。

2 需求分析

2.1 系統(tǒng)實(shí)現(xiàn)目標(biāo)

如今,互聯(lián)網(wǎng)遍布于生活的每個(gè)角落,不斷改變著人們的生產(chǎn)生活,基于Web的機(jī)票預(yù)訂系統(tǒng)就是借助互聯(lián)網(wǎng)發(fā)展的熱潮,方便大眾,服務(wù)大眾。具體實(shí)現(xiàn)以下兩個(gè)目標(biāo):

(1)方便用戶購(gòu)票

用戶可以訪問(wèn)前臺(tái)系統(tǒng)瀏覽、查詢航班信息,足不出戶,預(yù)訂機(jī)票,免去了以往尋找購(gòu)票網(wǎng)點(diǎn),排隊(duì)購(gòu)票的麻煩。

(2)航空公司實(shí)現(xiàn)辦公自動(dòng)化

后臺(tái)系統(tǒng)能使航空公司辦事效率大幅度提高,它將所有的工作流程按照一系列流程進(jìn)行規(guī)范化,從而減少工作時(shí)間,提高了人員的辦事效率。

2.2 系統(tǒng)功能分析

  • 后臺(tái)航班信息管理:主要是指添加航班信息,刪除航班信息,查詢航班信息和航班信息詳細(xì)情況查看等。
  • 后臺(tái)訂單信息管理:后臺(tái)訂單信息管理主要包括訂單列表,查詢訂單信息,訂單信息的刪除等。
  • 后臺(tái)用戶信息管理:主要指注冊(cè)用戶的展示與按條件查詢注冊(cè)用戶。
  • 后臺(tái)留言評(píng)論管理:主要指展示用戶的留言信息和按留言日期、留言用戶查找留言信息等。
  • 后臺(tái)廣告信息管理:主要指添加廣告信息,刪除廣告信息,設(shè)置廣告的有效性等。
  • 后臺(tái)個(gè)人信息管理:主要指查看個(gè)人信息,修改個(gè)人信息。
  • 前臺(tái)登錄與注冊(cè)管理:包括前臺(tái)系統(tǒng)用戶的注冊(cè)與登錄。
  • 前臺(tái)首頁(yè)信息展示:主要是指航班信息展示、航班信息查詢、航班信息詳情、登錄用戶信息展示、留言板和個(gè)人信息詳情與修改等。
  • 前臺(tái)訂單頁(yè)面:主要是訂單內(nèi)容的填寫(xiě)和訂單詳情。
  • 前臺(tái)訂單支付:是指使用支付寶沙箱環(huán)境支付訂單。
  • 前臺(tái)訂單查詢頁(yè)面:查詢當(dāng)前登錄用戶所有歷史訂單信息。
  • 前臺(tái)用戶登錄、注冊(cè):用于用戶登錄、注冊(cè)。

2.3 系統(tǒng)用例圖

系統(tǒng)前臺(tái)功能用例圖

系統(tǒng)后臺(tái)功能用例圖

3 工程結(jié)構(gòu)及其說(shuō)明

下載本項(xiàng)目源碼并導(dǎo)入到Eclipse后,工程結(jié)構(gòu)目錄如下圖所示:

名稱(chēng)解釋
flyTicket-parent父工程,用于管理子項(xiàng)目(如:maven依賴版本)
flyTicket-dao子項(xiàng)目,用于存放所有對(duì)數(shù)據(jù)庫(kù)的操作文件
flyTicket-pojo子項(xiàng)目,用于存放所有Java實(shí)體類(lèi)文件
flyTicket-manage-web子項(xiàng)目,用于存放后臺(tái)系統(tǒng)頁(yè)面文件、controller文件
flyTicket-manage-service子項(xiàng)目,用于后臺(tái)系統(tǒng)業(yè)務(wù)邏輯實(shí)現(xiàn)
flyTicket-portal-web子項(xiàng)目,用于存放前臺(tái)系統(tǒng)頁(yè)面文件、controller文件
flyTicket-portal-service子項(xiàng)目,用于前臺(tái)系統(tǒng)業(yè)務(wù)邏輯實(shí)現(xiàn)

4 系統(tǒng)總體設(shè)計(jì)

4.1 軟件架構(gòu)設(shè)計(jì)

此項(xiàng)目使用經(jīng)典的三層架構(gòu)模式,分別是表現(xiàn)層,業(yè)務(wù)邏輯層和數(shù)據(jù)持久層,如下圖所示。

表現(xiàn)層:表現(xiàn)層也稱(chēng)為表示層,位于最外層(最上層),離用戶最近。用于顯示數(shù)據(jù)和接收用戶輸入的數(shù)據(jù),為用戶提供一種交互式操作的界面。

業(yè)務(wù)邏輯層:業(yè)務(wù)邏輯層(Business Logic Layer)無(wú)疑是系統(tǒng)架構(gòu)中體現(xiàn)核心價(jià)值的部分。它的關(guān)注點(diǎn)主要集中在業(yè)務(wù)規(guī)則的制定、業(yè)務(wù)流程的實(shí)現(xiàn)等與業(yè)務(wù)需求有關(guān)的系統(tǒng)設(shè)計(jì),也即是說(shuō)它是與系統(tǒng)所應(yīng)對(duì)的領(lǐng)域(Domain)邏輯有關(guān),很多時(shí)候,也將業(yè)務(wù)邏輯層稱(chēng)為領(lǐng)域?qū)印?br>
數(shù)據(jù)持久層:數(shù)據(jù)持久層也稱(chēng)為是數(shù)據(jù)訪問(wèn)層,其功能主要是負(fù)責(zé)數(shù)據(jù)庫(kù)的訪問(wèn),可以訪問(wèn)數(shù)據(jù)庫(kù)系統(tǒng)、二進(jìn)制文件、文本文檔或是XML文檔。簡(jiǎn)單的說(shuō)法就是實(shí)現(xiàn)對(duì)數(shù)據(jù)表的select、insert、update以及delete的操作。

4.2 總體功能模塊設(shè)計(jì)

本系統(tǒng)主要分為前臺(tái)子系統(tǒng)和后臺(tái)子系統(tǒng),兩個(gè)子系統(tǒng)包含的具體功能如下:

  1. 前臺(tái)子系統(tǒng)功能包括: A. 用戶登錄 B. 用戶注冊(cè) C. 航班查詢 D. 機(jī)票詳情 E. 機(jī)票預(yù)訂 F. 訂單支付 G. 訂單查看 H. 用戶留言 I. 個(gè)人信息查看與修改
  2. 后臺(tái)子系統(tǒng)功能包括: A. 航班信息管理 B. 訂單信息管理 C. 用戶信息管理 D. 留言評(píng)論管理 E. 廣告管理 F. 個(gè)人信息管理
前臺(tái)子系統(tǒng)和后臺(tái)子系統(tǒng)詳細(xì)功能如下圖所示:

(1)前臺(tái)子系統(tǒng)功能設(shè)計(jì)

A.用戶登錄功能,詳細(xì)功能說(shuō)明如表4.1所示

B.用戶注冊(cè)功能,詳細(xì)功能說(shuō)明如表4.2所示

C.航班查詢功能,詳細(xì)功能說(shuō)明如表4.3所示

D.機(jī)票詳情功能,詳細(xì)功能說(shuō)明如表4.4所示

E.機(jī)票預(yù)訂功能,詳細(xì)功能說(shuō)明如表4.5所示

F.訂單支付功能,詳細(xì)功能說(shuō)明如表4.6所示

G.訂單查看功能,詳細(xì)功能說(shuō)明如表4.7所示

H.用戶留言功能,詳細(xì)功能說(shuō)明如表4.8所示

I.個(gè)人信息查看與修改功能,詳細(xì)功能說(shuō)明如表4.9所示

(2)后臺(tái)子系統(tǒng)功能設(shè)計(jì)

A.航班信息管理模塊功能,詳細(xì)功能說(shuō)明如表4.10所示

B.訂單信息管理模塊功能,詳細(xì)功能說(shuō)明如表4.11所示

C.用戶信息管理模塊功能,詳細(xì)功能說(shuō)明如表4.12所示

D.留言評(píng)論管理模塊功能,詳細(xì)功能說(shuō)明如表4.13所示

E.廣告管理模塊功能,詳細(xì)功能說(shuō)明如表4.14所示

F.個(gè)人信息管理模塊功能,詳細(xì)功能說(shuō)明如表4.15所示

4.3 數(shù)據(jù)庫(kù)設(shè)計(jì)

4.3.1 數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)

通過(guò)建立該系統(tǒng)各個(gè)模塊的E-R圖,使整個(gè)模塊之間的功能變得更加清晰,模塊間所具有的耦合性變的越低。管理員實(shí)體(Admin),留言評(píng)論實(shí)體(Discuss),航班實(shí)體(Flight),訂單(Order)實(shí)體,普通用戶實(shí)體(User)和廣告信息實(shí)體(content)E-R圖分別如下圖所示。

管理員實(shí)體(Admin)E-R圖

留言評(píng)論實(shí)體(Discuss)E-R圖

航班實(shí)體(Flight)E-R圖

訂單實(shí)體(Order)E-R圖

普通用戶實(shí)體(User)E-R圖

廣告信息實(shí)體(Content)E-R圖

4.3.2 數(shù)據(jù)庫(kù)表設(shè)計(jì)

為實(shí)現(xiàn)數(shù)據(jù)庫(kù)的設(shè)計(jì),對(duì)數(shù)據(jù)進(jìn)行分表處理,每一個(gè)表格代表不同的信息和功能,分別如下圖所示。

  1. 管理員信息表(admin),用于存放管理員信息,表結(jié)構(gòu)如表4.16所示
  1. 留言評(píng)論信息表(discuss),用于存放留言評(píng)論信息,表結(jié)構(gòu)如表4.17所示
  1. 航班信息表(flight),用于存放航班信息,表結(jié)構(gòu)如表4.18所示
  1. 訂單信息表(order),用于存放訂單信息,表結(jié)構(gòu)如表4.19所示
  1. 普通用戶信息表(user),用于存放用戶信息,表結(jié)構(gòu)如表4.20所示

5 系統(tǒng)詳細(xì)設(shè)計(jì)及實(shí)現(xiàn)

5.1 添加航班信息

系統(tǒng)管理員登錄后臺(tái)系統(tǒng)后,點(diǎn)擊側(cè)邊欄的航班信息管理按鈕會(huì)出現(xiàn)下拉列表菜單,繼續(xù)點(diǎn)擊添加航班信息按鈕可以進(jìn)行添加航班信息操作。添加航班時(shí)輸入航班號(hào)、起點(diǎn)、終點(diǎn)、始發(fā)機(jī)場(chǎng)、到達(dá)機(jī)場(chǎng)等信息,如下圖所示。

添加航班信息的過(guò)程如下:后臺(tái)系統(tǒng)管理員進(jìn)入添加航班信息頁(yè)面后,填寫(xiě)航班號(hào)、起點(diǎn)、終點(diǎn)、始發(fā)機(jī)場(chǎng)、到達(dá)機(jī)場(chǎng)等相關(guān)信息后點(diǎn)擊保存按鈕,這時(shí)會(huì)隨機(jī)生成flightId并與數(shù)據(jù)庫(kù)中已經(jīng)存在的flightId進(jìn)行比較,保證航班Id唯一,之后繼續(xù)判斷輸入的機(jī)票價(jià)格,航班座位數(shù)等數(shù)據(jù)是否有效,核對(duì)信息的有效性和完整性,最后存入數(shù)據(jù)庫(kù)。具體流程如下圖所示。

主要代碼:

@RequestMapping("addFlight") public Result addFlight(@RequestBody Flight flight ) { //設(shè)置日期格式 SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); // new Date()為獲取當(dāng)前系統(tǒng)時(shí)間 flight.setFlightId("F"+df.format(new Date())); try { flightManageService.addFlight(flight); return new Result(true,"添加成功"); } catch (Exception e) { e.printStackTrace(); return new Result(false,"添加失敗"); }}

5.2 航班信息列表

系統(tǒng)管理員登錄系統(tǒng)后有查看航班列表的權(quán)限,航班列表界面有添加航班,刪除航班,搜索航班信息,航班信息詳情,航班信息修改等功能,具體見(jiàn)下圖,各個(gè)功能詳細(xì)說(shuō)明如表5.1所示。

主要代碼這里以航班查詢功能service層代碼為例:

public PageResult search(int pageNum, int pageSize, String searchEntity) { PageHelper.startPage(pageNum,pageSize); List<Flight> flightsList=flightManageMapper.select(searchEntity); Page<Flight> page=(Page<Flight>) flightsList; return new PageResult(page.getTotal(), page.getResult()); }

5.3 訂單信息列表

訂單信息列表是訂單信息管理模塊的一個(gè)子功能,展示的是前臺(tái)所有用戶的機(jī)票訂單信息,如下圖所示。系統(tǒng)管理員可以對(duì)訂單進(jìn)行查詢,刪除操作,各個(gè)功能詳細(xì)說(shuō)明如表5.2所示。

主要代碼這里以訂單刪除功能dao層的mapper代碼為例:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="com.cafuc.mapper.IOrderManageMapper"> <delete id="delete" parameterType="String"> delete from `order` where order_id in <foreach collection="selectIds" item="ids" open="(" close=")" separator=","> #{ids} </foreach> </delete></mapper>

5.4 用戶信息列表

用戶信息列表是用戶信息管理模塊的子功能,它是指把前臺(tái)系統(tǒng)所有注冊(cè)用戶信息以列表的形式展示給后臺(tái)系統(tǒng)管理員,方便系統(tǒng)管理員精確定位到每一個(gè)機(jī)票預(yù)訂系統(tǒng)的使用者,對(duì)其進(jìn)行管理,用戶信息列表的界面如下圖所示。系統(tǒng)管理員有查找系統(tǒng)使用用戶和刪除違反平臺(tái)規(guī)定用戶的權(quán)利,各個(gè)功能詳細(xì)說(shuō)明如表5.3所示。

主要代碼以用戶搜索功能dao層的mapper代碼為例:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="com.cafuc.mapper.IUserManageMapper"> <select id="select" resultType="com.cafuc.pojo.User"> select DISTINCT * from `user` as u where u.user_name like concat('%',#{searchEntity},'%') </select></mapper>

5.5 留言評(píng)論列表

留言評(píng)論是前臺(tái)系統(tǒng)使用者完成注冊(cè)后具有的功能,用戶可以通過(guò)留言評(píng)論功能對(duì)所購(gòu)班次機(jī)票進(jìn)行全方位的評(píng)價(jià),也可以對(duì)其在使用過(guò)程中遇到的問(wèn)題進(jìn)行反饋,等待工作員處理。后臺(tái)系統(tǒng)管理員對(duì)用戶留言具有管理的權(quán)限,見(jiàn)下圖。各功能詳情見(jiàn)表5.4。

主要代碼以后臺(tái)系統(tǒng)留言評(píng)論模塊controller層DiscussManageController.java類(lèi)為例:

package com.cafuc.controller;import javax.annotation.Resource;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import com.cafuc.pojo.PageResult;import com.cafuc.pojo.Result;import com.cafuc.service.IDiscussManageService;import com.cafuc.service.IOrderManageService;@RestController@RequestMapping("discussManage")public class DiscussManageController { @Resource private IDiscussManageService discussManageService; @RequestMapping("search") public PageResult search(int pageNum ,int pageSize,String searchEntity){ System.out.println(pageNum+" "+pageSize+" "+searchEntity); PageResult pageResult=discussManageService.search(pageNum, pageSize, searchEntity); return pageResult; } @RequestMapping("deleteBySelectIds") public Result deleteBySelectIds(String []selectIds) { try { discussManageService.deleteBySelectIds(selectIds); return new Result(true,"刪除成功"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); return new Result(false,"刪除失敗"); } }}

5.6 添加廣告信息

廣告作為網(wǎng)站的必要元素,在機(jī)票系統(tǒng)的前臺(tái)頁(yè)面也有廣告展示的功能,后臺(tái)增加了相應(yīng)的管理模塊,界面如下圖所示。

后臺(tái)系統(tǒng)添加廣告的步驟:管理員登錄后臺(tái)系統(tǒng)后點(diǎn)擊廣告管理按鈕,在出現(xiàn)的下拉列表選項(xiàng)中選擇添加廣告信息并點(diǎn)擊進(jìn)入廣告添加頁(yè)面,在頁(yè)面輸入廣告圖片、廣告鏈接,廣告說(shuō)明等信息,點(diǎn)擊保存按鈕,進(jìn)行數(shù)據(jù)校驗(yàn),檢查數(shù)據(jù)的有效性和完整性,保證數(shù)據(jù)無(wú)誤之后將數(shù)據(jù)信息持久化到mysql數(shù)據(jù)庫(kù)。流程圖如下圖所示。

主要代碼以后臺(tái)系統(tǒng)controller層ContentManageController.java類(lèi)為例:

@RequestMapping("addContent") public void addContent(@RequestParam("file") MultipartFile file,HttpServletRequest request,HttpServletResponse response) throws IOException { String describe=""; String url=""; String picture=""; if(request.getParameter("describe")!=null) { describe=request.getParameter("describe"); } if(request.getParameter("url")!=null) { url=request.getParameter("url"); } // 判斷文件是否為空,空則返回失敗頁(yè)面 if (!file.isEmpty()) { try { // 獲取文件存儲(chǔ)路徑(絕對(duì)路徑) String path = request.getServletContext().getRealPath("/WEB-INF/file"); // 獲取原文件名 String fileName = file.getOriginalFilename(); // 創(chuàng)建文件實(shí)例 File filePath = new File(path, fileName); // 如果文件目錄不存在,創(chuàng)建目錄 if (!filePath.getParentFile().exists()) { filePath.getParentFile().mkdirs(); System.out.println("創(chuàng)建目錄" + filePath); } picture=filePath+""; // 寫(xiě)入文件 file.transferTo(filePath); Content content=new Content(); //設(shè)置日期格式 SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); // new Date()為獲取當(dāng)前系統(tǒng)時(shí)間 content.setContentId("C"+df.format(new Date())); content.setDescribe(describe); content.setPicture(picture); content.setUrl(url); contentManageServiceImpl.addContent(content); response.sendRedirect(request.getContextPath()+"/admin/list_content.html"); } catch (Exception e) { e.printStackTrace(); response.sendRedirect(request.getContextPath()+"/admin/add_content.html"); } } else { response.sendRedirect(request.getContextPath()+"/admin/add_content.html"); } }

5.7 廣告信息列表

后臺(tái)系統(tǒng)管理員完成添加廣告以后跳轉(zhuǎn)到廣告信息列表頁(yè)面,本頁(yè)面展示的是添加到數(shù)據(jù)庫(kù)的所有廣告信息,如下圖所示,系統(tǒng)管理員可以通過(guò)查詢,刪除等操作來(lái)管理廣告信息,詳情見(jiàn)表5.5。

5.8 查看個(gè)人信息

后臺(tái)系統(tǒng)管理員可以查看個(gè)人的用戶名,密碼,郵箱,手機(jī)號(hào)等信息,由于時(shí)間有限,這里實(shí)現(xiàn)了查看用戶名,密碼等功能,見(jiàn)下圖所示。

由于系統(tǒng)管理員在登陸系統(tǒng)后把個(gè)人信息存到redis數(shù)據(jù)庫(kù)中,在頁(yè)面初始化時(shí)從redis數(shù)據(jù)庫(kù)中查找出個(gè)人信息存到cookie中,查看個(gè)人信息就是從cookie中提取數(shù)據(jù)并設(shè)置到頁(yè)面中,具體代碼如下:

//初始化$scope.adminEntity={};$scope.init=function () { console.log($.cookie('key')); adminManageService.init($.cookie('key')).success(function (res) { console.log(res) $scope.adminEntity=res; });}

5.9 修改個(gè)人信息

后臺(tái)系統(tǒng)管理員也對(duì)用戶名,密碼,郵箱,手機(jī)號(hào)等信息進(jìn)行修改,點(diǎn)擊個(gè)人信息修改按鈕進(jìn)入頁(yè)面修改個(gè)人信息,修改后點(diǎn)擊保存等檢查填寫(xiě)的信息無(wú)誤后提示完成修改,為了確保用戶名字段的唯一性,用戶名一項(xiàng)無(wú)法修改。主要代碼以controller層為例:

@RequestMapping("editAdmin") public Result editAdmin(@RequestBody AdminUser adminUser){ try { adminManageServiceImpl.editAdmin(adminUser); redisTemplate.boundValueOps(adminUser.getUser()).set(adminUser); return new Result(true, "修改成功"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); return new Result(false, "修改失敗"); } }

5.10 用戶登錄

用戶在進(jìn)行機(jī)票預(yù)定,留言評(píng)論等功能時(shí)需要登錄前臺(tái)系統(tǒng)后才能進(jìn)行,在瀏覽器地址欄輸入 http://localhost:8081/flyTicket-portal-web/default/login.html 回車(chē)進(jìn)入如下圖所示界面。

用戶進(jìn)行到登錄界面,輸入正確的用戶名和密碼就可以登錄到前臺(tái)系統(tǒng),登錄順序圖如下圖所示。

主要代碼以controller層代碼為例:

app.controller('portalLoginManageController',function($scope,$controller,portalLoginManageService){ $controller('baseController',{$scope:$scope}); //初始化 $scope.userEntity={userName:null,userPwd:null}; $scope.login=function(){ if($scope.userEntity.userName==null || $scope.userEntity.userName.trim()==""){ alert("用戶名為空"); } else{ if($scope.userEntity.userPwd==null || $scope.userEntity.userPwd.trim()==""){ alert("密碼為空"); } else{ portalLoginManageService.login($scope.userEntity).success(function(res){ if(res.result==false){ alert(res.message) } else{ window.location.href="index.html#?key="+$scope.userEntity.userName; } }); } }; }});

5.11 航班信息展示

在瀏覽器地址欄輸入 http://localhost:8081/flyTicket-portal-web/default/index.html 出現(xiàn)如下圖所示界面,首頁(yè)面展示所有航班信息。每一條信息包含出發(fā)城市、到達(dá)城市、出發(fā)機(jī)場(chǎng)、到達(dá)機(jī)場(chǎng),出發(fā)時(shí)間、到達(dá)時(shí)間、機(jī)票價(jià)格等信息。

5.12 航班信息查詢

用戶可以通過(guò)航班查詢功能精確查找到所需信息,節(jié)省時(shí)間簡(jiǎn)化操作。通過(guò)輸入航班類(lèi)型、出發(fā)時(shí)間、出發(fā)城市、到達(dá)城市等搜索條件實(shí)現(xiàn)航班查詢。以杭州為到達(dá)城市為例,搜索結(jié)果如下圖所示。

代碼以dao層PortalManageMapper.xml類(lèi)例:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="com.cafuc.mapper.IPortalManageMapper"> <select id="select" resultType="com.cafuc.pojo.Flight"> select * from flight as f <where> <if test="flightStartTime1 !=null and flightStartTime1 !=''"> and f.flight_start_time like concat('%',#{flightStartTime1},'%') </if> <if test="flightStartPlace !=null and flightStartPlace !=''"> and f.flight_start_place like concat('%',#{flightStartPlace},'%') </if> <if test="flightEndPlace !=null and flightEndPlace !=''"> and f.flight_end_place like concat('%',#{flightEndPlace},'%') </if> </where> </select></mapper>

5.13 航班信息詳情

航班信息詳情是對(duì)某一航班信息的詳細(xì)情況進(jìn)行展示,如下圖所示。用戶點(diǎn)擊選定航班,航班詳細(xì)信息以下拉列表的形式展現(xiàn)給用戶。

主要代碼如下:

//保留n位小數(shù) $scope.weishu=function(price,n){ return new Number(price).toFixed(n); } //下拉詳情 $scope.lists=function(flightNumber){ //收縮狀態(tài) if($("#F_"+flightNumber).is(":visible")){ $scope.reloadList(); } $("#F_"+flightNumber).animate({ height:'toggle' }); } //判斷最低價(jià) $scope.minPrice=function(flightHighPrice,flightMiddlePrice,flightBasePrice){ return (flightHighPrice<=flightMiddlePrice?flightHighPrice:flightMiddlePrice)<=flightBasePrice?(flightHighPrice<=flightMiddlePrice?flightHighPrice:flightMiddlePrice):flightBasePrice } //判斷是否有票 $scope.isKickets=function(kicketsNumber,flightNumber,temp){ /*console.log(flightNumber)*/ if(kicketsNumber>0){ $("#"+temp+"_"+flightNumber).css({ color:"green" }); return "有票"; } else{ $("#"+temp+"_"+flightNumber).css({ color:"red" }); return "無(wú)票"; } }

5.14 登錄用戶信息展示

游客訪問(wèn)前臺(tái)系統(tǒng)時(shí),在頁(yè)面頭部顯示“請(qǐng)登錄”字樣,如下圖所示信息,而網(wǎng)站用戶登錄后則顯示“您好,XXX”字樣,如下圖所示。

5.15 留言板

點(diǎn)擊前臺(tái)系統(tǒng)右上角“留言板”按鈕進(jìn)入到留言頁(yè)面如下圖所示。留言評(píng)論是前臺(tái)系統(tǒng)使用者完成注冊(cè)后具有的功能,用戶可以通過(guò)留言評(píng)論功能對(duì)所購(gòu)班次機(jī)票進(jìn)行全方位的評(píng)價(jià),也可以對(duì)其在使用過(guò)程中遇到的問(wèn)題進(jìn)行反饋。

主要代碼以前臺(tái)系統(tǒng)controller層DiscussManageController.java類(lèi)例:

package com.cafuc.controller;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.List;import javax.annotation.Resource;import org.apache.commons.collections.FastArrayList;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import com.cafuc.pojo.Discuss;import com.cafuc.pojo.Flight;import com.cafuc.pojo.PageResult;import com.cafuc.pojo.Result;import com.cafuc.service.IDiscussManageService;import com.cafuc.service.IPortalManageService;@RestController@RequestMapping("discussManage")public class DiscussManageController { @Resource private IDiscussManageService discussManageService; @RequestMapping("addDiscuss") public Result addDiscuss(@RequestBody Discuss discuss){ try { System.out.println(discuss); discussManageService.addDiscuss(discuss); return new Result(true, "評(píng)論成功"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); return new Result(false, "評(píng)論失敗"); } } @RequestMapping("init") public List<Discuss> init(){ return discussManageService.init(); }}

5.16 訂單填寫(xiě)

訂單填寫(xiě)是機(jī)票預(yù)定中不可缺少的步驟之一,用戶找到自己所需班次后點(diǎn)擊訂票按鈕進(jìn)入訂單信息填寫(xiě)頁(yè)面,用戶所填寫(xiě)的信息包括乘機(jī)人信息和聯(lián)系人信息量大模塊,如下圖所示。填寫(xiě)完信息后點(diǎn)擊提交訂單按鈕,等待驗(yàn)證數(shù)據(jù)的有效性,確定填寫(xiě)無(wú)誤后完成提交,填寫(xiě)訂單的前提是用戶已經(jīng)登錄系統(tǒng)。

5.17 訂單詳情

填寫(xiě)訂單信息完成訂單提交后彈出訂單詳情頁(yè)面提示用戶檢查航班信息和填寫(xiě)的用戶信息,如下圖所示。確保信息無(wú)誤后點(diǎn)擊確認(rèn)付款按鈕跳轉(zhuǎn)到訂單支付頁(yè)面。

訂單確認(rèn)功能主要代碼如下:

@RequestMapping("/ack") public void ack(Order order,HttpServletRequest request,HttpServletResponse response) throws IOException { try { if(order.getOrderDate() ==null) { order.setOrderDate(new Date()); } HttpSession httpSession=request.getSession(); httpSession.setAttribute("order", order); System.out.println(request.getSession().getAttribute("order")); response.sendRedirect(request.getContextPath()+"/pay/index.jsp"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } }

5.18 訂單支付

機(jī)票預(yù)訂系統(tǒng)的訂單支付功能使用的是支付寶沙箱環(huán)境支付,螞蟻沙箱環(huán)境 (Beta) 是協(xié)助開(kāi)發(fā)者進(jìn)行接口功能開(kāi)發(fā)及主要功能聯(lián)調(diào)的輔助環(huán)境。登錄支付寶沙箱平臺(tái)依次完成生成買(mǎi)家和賣(mài)家賬號(hào)信息、生成RSA秘鑰、設(shè)置公鑰信息、設(shè)置應(yīng)用網(wǎng)關(guān)等應(yīng)用環(huán)境配置。完成配置后下載官方測(cè)試代碼,本系統(tǒng)選擇的是電腦應(yīng)用java版本,然后將下載的項(xiàng)目導(dǎo)入到eclipse工作空間。最后設(shè)置核心配置文件信息,打開(kāi)flyTicket-portal-web項(xiàng)目下com.alipay.config包中的AlipayConfig.java文件配置如下信息:

//沙箱APPIDpublic static final String app_id = "**這里需要自己申請(qǐng)**";//沙箱私鑰public static final String merchant_private_key = "**這里需要自己申請(qǐng)**";//支付寶公鑰public static final String alipay_public_key = "**這里需要自己申請(qǐng)**";//沙箱網(wǎng)關(guān)地址public static final String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";//服務(wù)器異步通知頁(yè)面路徑 需http://格式的完整路徑,不能加?id=123這類(lèi)自定義參數(shù),必須外網(wǎng)可以正常訪問(wèn)public static String notify_url = "http://localhost:8081/flyTicket-portal-web/pay/notify_url.jsp";//頁(yè)面跳轉(zhuǎn)同步通知頁(yè)面路徑 需http://格式的完整路徑,不能加?id=123這類(lèi)自定義參數(shù),必須外網(wǎng)可以正常訪問(wèn)public static String return_url = "http://localhost:8081/flyTicket-portal-web/orderManage/complete";完成以上配置后就可以實(shí)現(xiàn)訂單支付功能了。點(diǎn)擊確認(rèn)付款后跳轉(zhuǎn)到如下圖所示界面。

點(diǎn)擊付款按鈕后如下圖所示,可以登錄賬戶付款,也可以使用手機(jī)端沙箱支付寶完成付款。

完成付款后如下圖所示

主要代碼如下:

//支付完成后@RequestMapping("complete")public void complete(HttpServletRequest request,HttpServletResponse response) throws IOException { System.out.println(request.getSession().getAttribute("order")); Order order=(Order)request.getSession().getAttribute("order"); try { //將數(shù)據(jù)插入到訂單表中 orderManageService.insertOrder(order); //更改庫(kù)存 Flight flight=orderManageService.findOneByFlightNumber(order.getFlightNumber()); if(order.getGrade().equals("f")) { flight.setFlightHighNumber(flight.getFlightHighNumber()-1); } else if(order.getGrade().equals("b")) { flight.setFlightMiddleNumber(flight.getFlightMiddleNumber()-1); } else { flight.setFlightBaseNumber(flight.getFlightBaseNumber()-1); } orderManageService.updatesNum(flight); } catch (Exception e) { e.printStackTrace(); } response.sendRedirect(request.getContextPath()+"/default/index.html"); }

6 源碼下載

7 運(yùn)行教程

8 相關(guān)說(shuō)明

  1. 制作不易,記得點(diǎn)贊+收藏+轉(zhuǎn)發(fā)
  2. 本人技術(shù)有限,若有錯(cuò)誤歡迎指正
  3. 本系統(tǒng)和文章均屬于【IT學(xué)長(zhǎng)】原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處

關(guān)鍵詞:實(shí)現(xiàn),地址,設(shè)計(jì),系統(tǒng),管理

74
73
25
news
  • 網(wǎng)站
  • 營(yíng)銷(xiāo)
  • 設(shè)計(jì)
  • 運(yùn)營(yíng)
  • 優(yōu)化
  • 效率
  • 專(zhuān)注
  • 電商
  • 方案
  • 推廣
為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉