心隨行動旅游系統-3期(AL031) 詳細設計4-旅游詳頁信息 AL031030200004 詳細設計4-旅游詳頁信息
時間:2020-09-07 16:14:04 來源:勤學考試網 本文已影響 人
旅游產品模塊(旅游詳頁信息)
詳細設計說明書
模塊設計
(一) 旅游產品模塊(旅游詳頁信息)
模塊概述
旅游詳頁信息頁面中顯示旅游產品的詳細數據,包括:
基本數據:產品主圖、產品標題、產品價格、出發地、往返交通、產品編號、好評率等。
詳情數據還包括三個核心數據模塊:景點介紹、酒店介紹、美食介紹。
旅游詳頁信息主要實現以下功能
顯示旅游產品的基本數據信息:包括產品主圖、產品標題、產品價格、出發地、往返交通、產品編號、好評率。
顯示旅游產品的詳情數據信息
顯示旅游產品的主圖與細節圖。
通過本說明書,主要完成該頁面布局和樣式的設計,具體實際的功能查看后續的詳細說明書。
頁面布局
功能簡述
旅游詳頁信息功能實現心隨行動旅游系統的產品詳情頁獲取旅游產品的完整數據。
在產品詳情頁中顯示旅游產品的基本數據信息:包括產品主圖、產品標題、產品價格、出發地、往返交通、產品編號、好評率。
在產品詳情頁中顯示旅游產品的詳情數據。
在詳情頁的畫廊中顯示多張產品的細節圖。。
在功能設計要考慮將頁面整體布局和用戶使用方便、合理化安排。
相關數據表
旅游系統首頁顯示數據信息的相關數據表:
1.旅游產品數據來源:trip表
從數據庫中獲取旅游數據信息,為心隨行動旅游系統首頁數據顯示做好準備。在此不考慮數據庫鏈接代碼問題,獲取旅游數據,通過調用相關的DAO組件的方法獲取。
頁面流程圖
旅游系統頁面實現流程圖參照如下:
圖 4.1 旅游詳情頁流程圖
界面設計實現
按產品ID獲取旅游產品數據
實現心隨行動旅游系統的產品詳情頁獲取旅游產品的完整數據,為產品詳情頁顯示數據做好準備。
在產品詳情頁中的TripDetailAction中,獲取首頁傳遞的產品ID參數;根據跳轉到tripDetail.jhtml頁面中。
注意:如果出現非法的ID,如id=a,則要跳轉到首頁對應的IndexAction中相關頁面。
在產品ID查詢旅游產品時,調用了TripDaoImpl類中getTripById方法。產品ID的數據庫中有對應的產品記錄,則該函數返回Trip對象,如果產品記錄不存在,則該函數返回null。
為了確保在產品詳情頁上顯示數據,需要將查詢所有的Trip存入request中,然后跳轉并顯示產品詳情頁Ttrip_detail.jsp。
Action:負責訪問檢索旅游產品的DAO類(TripDaoImpl),獲取旅行產品數據信息的servle。
TripDaoImpl:旅游產品(Trip)表的數據訪問類;該類中的getPageTripsByType函數,負責訪問和讀取Trip表數據。
類:TripDaoImpl
屬性或方法名稱
類型
說明
getPageTripByCondition( )
List<Trip>
根據設置條件返回旅游產品數據信息列表
getAllTripByCondition( )
List<Trip>
返回所有旅游產品數據信息列表
getBaseHql( )
String
篩選表單內容來拼接hql查詢語句
代碼參考:
public List<Trip> getPageTripByCondition(SearchForm vo) {
Session s = HibernateBase.openSession();
String hql = getBaseHql(vo);
Query q = s.createQuery(hql);
q.setFirstResult(vo.getFistResult());
q.setMaxResults(vo.getMaxResult());
return q.list();
}
@SuppressWarnings("unchecked")
@Override
public List<Trip> getAllTripByCondition(SearchForm vo) {
Session s = HibernateBase.openSession();
String hql = getBaseHql(vo);
Query q = s.createQuery(hql);
return q.list();
}
/**
* 根據篩選表單內容來拼接hql查詢語句
* @param vo 篩選表單
* @return 拼接好的hql語句
*/
private String getBaseHql(SearchForm vo) {
String hql = "SELECT t FROM Trip t,Price p WHERE t=p.trip AND t.is_ok=1";
// 如果產品類型不為空,添加查詢條件
if (vo.getType_id() != null) {
hql += " AND t.type.id=" + vo.getType_id();
}
// 如果出發地不為空,添加查詢條件
List<Integer> startList = vo.getStart_place_id_list();
if (startList != null && !startList.isEmpty()) {
hql += " AND (t.start.id=" + startList.get(0);
for (int i = 1; i < startList.size(); i++) {
hql += " OR t.start.id=" + startList.get(i);
}
hql += ")";
}
// 如果交通工具不為空,添加查詢條件
if (vo.getTraffic() != null) {
hql += " AND t.traffic LIKE '%" + vo.getTraffic() + "%'";
}
// 如果出行天數不為空,添加查詢條件
if (vo.getTime() != null) {
hql += " AND t.time=" + vo.getTime();
}
// 如果景點地區不為空,添加查詢條件
List<Integer> placeList = vo.getPlace_id_list();
if (placeList != null && !placeList.isEmpty()) {
hql += " AND t IN (SELECT pt.trip FROM PlaceOnTrip pt WHERE (pt.place.id=" + placeList.get(0);
for (int i = 1; i < placeList.size(); i++) {
hql += " OR pt.place.id=" + placeList.get(i);
}
hql += "))";
}
// 如果主題不為空,添加查詢條件
List<Integer> themeList = vo.getTheme_id_list();
if (themeList != null && !themeList.isEmpty()) {
hql += " AND t IN (SELECT tt.trip FROM ThemeOnTrip tt WHERE (tt.theme.id=" + themeList.get(0);
for (int i = 1; i < themeList.size(); i++) {
hql += " OR tt.theme.id=" + themeList.get(i);
}
hql += "))";
}
// 如果最低價格不為空,添加查詢條件
if (vo.getMin_price() != null) {
hql += " AND t IN (SELECT p.trip FROM Price p where p.price>=" + vo.getMin_price() + ")";
}
// 如果最高價格不為空,添加查詢條件
if (vo.getMax_price() != null) {
hql += " AND t IN (SELECT p.trip FROM Price p where p.price<=" + vo.getMax_price() + ")";
}
// 如果搜索關鍵字不為空,添加查詢條件
if (vo.getSearch_key() != null) {
hql += " AND (t IN (" + "SELECT tot.trip FROM ThemeOnTrip tot WHERE tot.theme IN ("
+ "SELECT th FROM Theme th WHERE th.name LIKE '%" + vo.getSearch_key() + "%'))" + "OR t IN ("
+ "SELECT pot.trip FROM PlaceOnTrip pot WHERE pot.place IN ("
+ "SELECT p FROM Place p WHERE p.name LIKE '%" + vo.getSearch_key() + "%'))" + "OR t.title LIKE '%"
+ vo.getSearch_key() + "%' " + "OR t.s_title LIKE '%" + vo.getSearch_key() + "%')";
}
// 按行程進行分組,防止出現重復數據
hql += " GROUP BY t";
// 如果好評&價格排序都為空,采用默認排序規則
if (vo.getGood_rate_sort() == null && vo.getPrice_sort() == null)
hql += " ORDER BY t.good_rate desc,p.price asc";
// 當前以價格為主排序規則進行排序
if (vo.getCur_sort_str() != null && "price".equals(vo.getCur_sort_str())) {
if (vo.getGood_rate_sort() != null)
hql += " ORDER BY p.price " + vo.getPrice_sort() + ",t.good_rate " + vo.getGood_rate_sort();
else
hql += " ORDER BY p.price " + vo.getPrice_sort() + ",t.good_rate desc";
}
// 當前以好評率為朱排序規則進行排序
if (vo.getCur_sort_str() != null && "comment".equals(vo.getCur_sort_str())) {
if (vo.getPrice_sort() != null)
hql += " ORDER BY t.good_rate " + vo.getGood_rate_sort() + ",p.price " + vo.getPrice_sort();
else
hql += " ORDER BY t.good_rate " + vo.getGood_rate_sort() + ",p.price asc";
}
return hql;
}
顯示旅游產品的基本數據
在這里使用EL表達式實現頁面顯示旅游產品的基本數據,產品基本數據包括:產品主圖、畫廊、產品標題、出發地、往返交通、產品編號、好評率。需將獲取的Trip對象的基本數據在頁面中合理顯示。
Trip實體類和City實體類的內部結構關系如圖所示:
類:Trip
屬性名稱
類型
說明
id
int
主鍵
title
String
產品標題
traffic
String
交通工具
hotel
String
住宿酒店
time
Integer
旅游天數
good_rate
float
好評率
min_price
float
產品價格
main_picname
String
主圖
start
City
出發地點
類:City
屬性名稱
類型
說明
id
int
主鍵
name
String
城市名稱
TripDaoImpl:旅游產品(Trip)表的數據訪問類;該類中的getPageTripsByType函數,負責訪問和讀取Trip表數據。
代碼參考:
顯示旅游產品的詳情數據
在此實現旅游產品詳情中的景區介紹、美食推薦、酒店推薦。
詳情數據模塊,對應的Trip實體相關屬性如下:
景區介紹:Trip類中Detail類內的Place字符屬性。
美食推薦:Trip類中Detail類內的Food字符屬性。
酒店推薦:Trip類中Detail類內的Hotel字符屬性。
當某一旅游產品內不包括相關詳情數據模塊,則該模塊的標題和內容均不顯示。
實現條件限制:
1.判斷產品內是否包含詳情數據模塊,需要通過Core標簽庫的IF標簽實現。
2.在獲取的Trip對象總的詳情數據在頁面中顯示要合理。
Trip實體類和Detail實體類的內部結構關系如圖所示:
類:Trip
屬性名稱
類型
說明
id
int
主鍵
place
String
景區介紹
foodc
String
美食介紹
hotel
String
酒店介紹
類:Trip
屬性名稱
類型
說明
id
int
主鍵
detail
Detail
產品詳情
trip_detail.jsp:負責顯示旅游產品詳情信息頁面。
代碼參考:
TripDaoImpl:旅游產品(Trip)表的數據訪問類;該類中的getPageTripsByType函數,負責訪問和讀取Trip表數據。
類:TripDaoImpl
屬性或方法名稱
類型
說明
getPageTripByCondition( )
List<Trip>
根據設置條件返回旅游產品數據信息列表
getAllTripByCondition( )
List<Trip>
返回所有旅游產品數據信息列表
getBaseHql( )
String
篩選表單內容來拼接hql查詢語句
代碼參考:
旅游信息查詢條件限制
在產品ID查詢旅游產品時,調用了TripDaoImpl類中getTripById方法。產品ID的數據庫中有對應的產品記錄,則該函數返回Trip對象,如果產品記錄不存在,則該函數返回null。
判斷產品內是否包含詳情數據模塊,需要通過Core標簽庫的IF標簽實現。
在獲取的Trip對象總的詳情數據在頁面中顯示要合理。
功能邏輯:
在首頁或者檢索頁面中,點擊某旅游產品,根據產品的ID進行傳遞給TripDetailAction,在此調用TripDaoImpl與數據庫建立聯系,訪問Trip旅游產品數據,獲取Trip數據后進入詳情頁trip_detail.jsp,顯示旅游詳情和對應的信息介紹。若是ID非法則返回首頁。
設計頁面如圖3所示:
圖4.2 頁面參考圖