航空訂票系統(tǒng)詳細設計_第1頁
航空訂票系統(tǒng)詳細設計_第2頁
航空訂票系統(tǒng)詳細設計_第3頁
航空訂票系統(tǒng)詳細設計_第4頁
航空訂票系統(tǒng)詳細設計_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、詳細設計報告一、引言 1.1 編寫目的: 本階段在系統(tǒng)的需求分析的基礎上,對航空訂票系統(tǒng)做詳細設計。主要解決了實現(xiàn)該系統(tǒng)程序模塊具體設計問題。包括確定算法,數(shù)據(jù)結(jié)構(gòu),模塊接口的使用,數(shù)據(jù)庫的動態(tài)操作以及界面設計等。在以下的概要設計報告中將對在本階段中對系統(tǒng)所做的所有詳細設計進行詳細的說明。在下一階段的編碼過程中,程序設計員可參考此詳細設計報告,在詳細設計對機票預定系統(tǒng)所做的算法設計,數(shù)據(jù)結(jié)構(gòu)以及數(shù)據(jù)庫動態(tài)操作的基礎上,對系統(tǒng)進行編碼。1.2 項目背景: 開發(fā)軟件名稱:航空訂票系統(tǒng)。用戶:航空公司運行環(huán)境:宿舍電腦。 開發(fā)平臺:MyEclipse 7.0 PostgreSql數(shù)據(jù)庫。系統(tǒng)架構(gòu):該

2、系統(tǒng)采用java+jsp框架1.3 定義: 查詢:對數(shù)據(jù)庫的操作的一種,用于搜索數(shù)據(jù)信息。 插入:對數(shù)據(jù)庫的操作的一種,用于將數(shù)據(jù)存入數(shù)據(jù)庫中。 更新:對數(shù)據(jù)庫的操作的一種,用于更改數(shù)據(jù)庫中的數(shù)據(jù)信息。 PostgreSql: 系統(tǒng)服務器所使用的數(shù)據(jù)庫管理系統(tǒng)(DBMS)。 SQL: 一種用于訪問查詢數(shù)據(jù)庫的語言 事務流:數(shù)據(jù)進入模塊后可能有多種路徑進行處理。 主鍵:數(shù)據(jù)庫表中的關(guān)鍵域。值互不相同。 外部主鍵:數(shù)據(jù)庫表中與其他表主鍵關(guān)聯(lián)的域。1.4 參考資料: 需求分析說明書 軟件開發(fā)小組 軟件工程 齊治昌 譚慶平 寧洪等高等教育出版社 實用軟件工程 鄭人杰等,清華大學出版社。二、總體設計 2

3、.1 需求概述 航空訂票系統(tǒng)的總目標是:在計算機網(wǎng)絡,數(shù)據(jù)庫和先進的開發(fā)平臺上,利用現(xiàn)有的軟件,配置一定的硬件,開發(fā)一個具有開放體系結(jié)構(gòu)的、易擴充的、易維護的、具有良好人機交互界面的機票預定系統(tǒng),實現(xiàn)航空公司的機票銷售的自動化的計算機系統(tǒng),為企業(yè)的決策層提供準確、精細、迅速的機票銷售信息。具體功能為用戶把預定機票的旅客信息(姓名、性別、身份證號碼(護照號碼)、乘坐時間、出行始發(fā)地和目的地等)輸入到系統(tǒng)中,系統(tǒng)為旅客安排航班。當旅客交付了預訂金后,系統(tǒng)打印出取票通知和帳單給旅客,旅客在飛機起飛前一天憑取票通知和帳單交款取票,系統(tǒng)核對無誤即打印出機票給旅客。此外航空公司為隨時掌握各個航班飛機的乘載

4、情況,需要定期進行查詢統(tǒng)計,以便適當調(diào)整。同時還需完成旅客延誤了取票時間的處理,航班取消后的處理,旅客臨時更改航班的處理等。根據(jù)可行性研究的結(jié)果和客戶的要求,分析現(xiàn)有情況及問題,采用B/S結(jié)構(gòu),將機票預定系統(tǒng)劃主要就是服務器端子系統(tǒng)。2.2 軟件結(jié)構(gòu): 航空訂票系統(tǒng)數(shù)據(jù)輸入數(shù)據(jù)輸出數(shù)據(jù)輸入頁面信息錄入用戶登陸或注冊數(shù)據(jù)處理、查詢數(shù)據(jù)判斷PostgreSql判斷查詢數(shù)據(jù)庫操作返回賬單等確定錯誤原因返回機票信息打印賬單等顯示錯誤原因打印機票圖1軟件結(jié)構(gòu)圖三、程序描述 3.1 各功能詳細描述:本系統(tǒng)主要用于機票預訂,所以提供了以下幾個子功能:機票預訂,取票通知,查詢航班,查詢機票,退票,打印機票,各

5、航班的營運統(tǒng)計,以及后臺方面的航班的添加,取消航班,機票的生成,以及航班的查詢等后臺功能。1、機票預訂功能:用戶和機場管理員有權(quán)力進行該項功能。首先通過查詢得到旅客所需的航班,確定該航班還有沒有被預訂的座位,然后選擇座位的等級,填寫旅客的詳細信息之后就可進行網(wǎng)上預訂機票。2、取票通知:該項功能只有用戶和機場管理員有權(quán)力進行操作,在機票預訂功能成功完成之后,系統(tǒng)會自動給瀏覽器端發(fā)送一條取票信息以及所需繳納的費用。旅行社可以利用特定設備將該取票信息打印出來,這就是取票通知。3、查詢航班:可以通過輸入出發(fā)地,目的地,日期和時間選定自己航班。4、查詢機票:該項功能用戶、游客、管理員都可以操作,可以通過

6、自己的身份證號以及取票通知上的機票號查詢自己的機票信息。5、退訂機票:該功能只有用戶和機場管理員有權(quán)力操作,利用身份證號和對應的機票號就可以查詢到機票信息,然后就可以退訂機票。6、打印機票:該功能只有機場管理員有權(quán)力操作,只有當管理員確認旅客已經(jīng)付款后才予以打印機票,可以通過身份證號和對應的取票信息上的機票號查詢機票信息,然后服務器返回機票信息,管理員就可以打印該機票信息,交給旅客。7、各航班的營運統(tǒng)計:該項功能只有機場管理員才能操作,他可以通過輸入年份和月份查詢當月個航班的營運情況,以便機場能夠及時掌握航班動態(tài)。8、后臺的航班添加:該項功能只有機場管理員才能操作,他通過提供航班的具體信息添加

7、航班信息。9、后臺的取消航班:該項功能只有機場管理員才能操作,先通過航班號和航班日期查詢到航班信息后,取消航班就可以將該航班從數(shù)據(jù)庫中刪除。10、后臺的航班查詢:該項功能只有機場管理員才能操作,通過航班號和航班日期查詢到航班信息。11、后臺的機票生成:該項功能只有機場管理員才能操作,可以通過該項功能給剛添加的航班生成對應的飛機票號紀錄。3.2 主要的系統(tǒng)功能模塊如下:1、用戶模塊:用戶用例圖如圖2所示(1)用戶登陸模塊ConsumerDAO.getConsumer()(2)用戶注冊模塊ConsumerDAO.register()(3)查詢航班模塊ConsumerDAO.getFlightByI

8、nformation()(4)訂票模塊ConsumerDAO.orderTicket()(5)修改密碼模塊ConsumerDAO.modifyPassword() (6)付款模塊ConsumerDAO.paying() (7)退票模塊ConsumerDAO.returnTicket()用戶注冊或登錄 搜索飛機票普通用戶刪除已定機票生成交易信息并請用戶確認預訂飛機票付款 圖22、管理員模塊:管理員用例圖如圖3所示(1)管理員登陸模塊ManagerDAO.getManager()(2)管理員修改密碼模塊ManagerDAO.modifyPassword()(3)刪除用戶ManagerDAO.del

9、eteConsumer()(4)添加新管理員ManagerDAO.addManager()(5)刪除管理員模塊ManagerDAO.deleteManager()(6)發(fā)布新航班模塊ManagerDAO.addNewFlight()(7)刪除航班模塊ManagerDAO.deleteFlight()(8)根據(jù)信息查看航班信息模塊ConsumerDAO.getFlightByInformation()管理員修改密碼管理員登錄刪除管理員增加新管理員查看航班信息 刪除用戶管理員 刪除航班發(fā)布新航班圖3 3、創(chuàng)新點通過關(guān)鍵字從其他網(wǎng)站找到一些信息推薦給用戶模塊:用例如圖4所示。 推薦信息模塊Infor

10、mationDAO.getInformationByKeyWord() 交通狀況附近餐館信息附近旅館信息 信息采集器3.3數(shù)據(jù)庫設計:普通用戶(Consumer)字段名字段類型是否為空默認值字段含義注釋consumerIdVARCHAR2(10)N用戶編號用以標示不同用戶。consumerNameVARCHAR2(20)N用戶名稱用戶自己取的名字有利于用戶記憶,可以用來登錄等。consumerPasswordVARCHAR2(20)N用戶密碼用于確定用戶身份。consumerGenderVARCHAR2(1)N用戶性別consumerBookingFligtVARCHAR2(20)Y用戶已訂票

11、航班用于儲存用戶已訂票的航班。consumerBookingSeatVARCHAR2(20)Y用戶已定機票的座位號用于儲存用戶已訂票航班的座位號。consumerIDCardOrPassportNoVARCHAR2(20)N用戶的身份證號或護照號用戶取票的憑證(身份證號或護照號)consumerTelephoneVARCHAR2(11)N聯(lián)系電話用已與用戶取得聯(lián)系consumerMailBoxVARCHAR2(20)N電子郵箱用已與用戶取得聯(lián)系管理員(Manager)字段名字段類型是否為空默認值字段含義注釋managerIdVARCHAR2(10)N管理員編號用以標示不同管理員。manager

12、NameVARCHAR2(20)N管理員名稱管理員自己取的名字有利于其記憶,可以用來登錄等。managerPasswordVARCHAR2(20)N管理員密碼用于確定管理員身份。航班表(FLIGHT)字段名字段類型是否為空默認值字段含義注釋flightIdCHAR(6)N飛機編號PRIMARY KEYstartDateDATEN出發(fā)日期飛機起飛的日期endDateDATEN到達日期飛機到達的日期fromAddressVARCHAR2(20)N出發(fā)地點飛機起飛地點toAddressVARCHAR2(20)N到達地點飛機目的地startTimeDATEN出發(fā)時間起飛時間endTimeDATEN到達

13、時間到達目的地時間schedulerCHAR(7)N班期sailLengthNUMBER(5)N航程 座位表(FLIGHT)字段名字段類型是否為空默認值字段含義注釋flightIdCHAR(6)N飛機編號flight_numberCHAR(6)N航班號PRIMARY KEYfirst_class_remain_seatsNUMBER(3)N頭等艙剩余座位數(shù)飛機到達的日期business_class_remain _seatsNUMBER(3)N公務艙剩余座位數(shù)economy_class_remain _seatsNUMBER(3)N經(jīng)濟艙剩余座位數(shù)priceoffNUMBER(4,2)N季節(jié)折

14、扣calendarDATEN出發(fā)日期3.4、流程圖:客戶端啟動登錄有效數(shù)據(jù)?出票航班查詢修改密碼Noyes輸入查詢條件驗證有效?Noyes已查航班?No輸入乘客信息驗證有效?Noyes輸入新密碼驗證有效?Noyes封裝request對象將request對象寫向服務器分揀請求調(diào)用FligthDao調(diào)用TicketOrderDAO調(diào)用BranchDao調(diào)用BranchDao出票請求查詢航班請求修改密碼請求登陸請求封裝response對象將response對象寫往客戶端解析request對象將結(jié)果顯示在客戶端圖5流程圖3.5 DAO 接口設計設計了通用的DAO接口,而不是直接寫訪問數(shù)據(jù)庫的實現(xiàn)類,這

15、樣可以創(chuàng)建不同的實現(xiàn)類來實現(xiàn)接口,使標準制定和標準實現(xiàn)分離。當換了數(shù)據(jù)庫,或者換了數(shù)據(jù)庫訪問技術(shù),就可以寫新的實現(xiàn)類,不用改變原來的代碼。如定義FlightDAO接口,若從文件中讀取數(shù)據(jù)可以定義FlightDaoFromFile實現(xiàn)類,若利用JDBC訪問數(shù)據(jù)可以定義FlightDaoFromJDBC實現(xiàn)類,若利用hibernate訪問數(shù)據(jù)可以定義FlightDaoFromHibernate實現(xiàn)類等。3.5.1 FlightDAOflightDAO用來航班計劃,航班的數(shù)據(jù)訪問。package com.tarena.abs.dao;import com.tarena.abs.model.*;imp

16、ort java.util.*;/對航班和航班計劃數(shù)據(jù)訪問的接口。public interface FlightDAO / 根據(jù)指定出發(fā)地,目的地和出發(fā)日期在底層數(shù)據(jù)源中查找 /得到所有的航班對象的集合。public Set getAllFlights(String fromAddr,String toAddr,Calendar date); /執(zhí)行出票的操作。public boolean order(Order ord);/添加指定的航班計劃對象。public boolean addFlightSchedular(FlightSchedular fs); /根據(jù)給定的航班編號在底層數(shù)據(jù)源中刪

17、除該航班計劃,/以及該計劃下的所有航班。public boolean removeFlightSchedular(String flightNumber);/ 得到所有航班計劃對象public Set getAllFlightSchedulars();/添加航班public boolean addFlight(Flight fl);3.5.2 TicketOrderDAOTicketOrderDAO用來訪問票單數(shù)據(jù)。package com.tarena.abs.dao;import java.util.Set;import java.util.Calendar;import com.taren

18、a.abs.model.*;/ 機票出票記錄訪問接口public interface TicketOrderDAO / 執(zhí)行出票的操作。public boolean order(Order ord);/ 執(zhí)行退票操作。public boolean cancelOrder(int TicketNumber);/ 查詢指定營業(yè)網(wǎng)點在指定時間段內(nèi)的出票記錄public Set<TicketOrder> getAllTicketOrder(Branch branch,Calendar startDate,Calendar endDate);/ 得到指定營業(yè)網(wǎng)點指定日期內(nèi)的營業(yè)額。publi

19、c double getAllTicketMoney(Branch branch,Calendar startDate,Calendar endDate);/得到所有營業(yè)網(wǎng)點指定日期內(nèi)的營業(yè)額public double getAllTicketMoney(Calendar startDate,Calendar endDate);/查詢所有出票信息public Set<TicketOrder> getAllTicketOrder();4 關(guān)健代碼分析4.1流程代碼分析服務器啟動時讀取配置文件,讀取數(shù)據(jù),并且服務器端ServerSocket 等待客戶端線程訪問,當收到客戶端相應后,則創(chuàng)

20、建一個新的服務線程 執(zhí)行服務。ServerSocket ss=null;Socket s=null;try /創(chuàng)建服務器socketss=new ServerSocket(Integer.parseInt(pro.getProperty("ServerPort");while(true)s=ss.accept();/轉(zhuǎn)發(fā)給serverThread處理(傳遞socket參數(shù))new ServerThread(s).start() catch (IOException e) e.printStackTrace();服務線程ServerThread通過構(gòu)造函數(shù)接受socket,然

21、后轉(zhuǎn)發(fā)給Controllerpublic class ServerThread extends ThreadSocket s;protected ServerThread(Socket s) /用傳入的socket初始化this.s=s;public void run()try new Controller(s).handle(); /交給控制器處理 catch (Exception e) e.printStackTrace(); finally trys.close();catch(IOException e) 由controller調(diào)用handle方法,分析請求對象。 if(type.eq

22、uals("login") / 登陸處理 loginHandle(req);else if(type.equals("flightSearch") /航班計劃查詢處理flightSearchHandle(req);else if(type.equals("order") /訂單處理orderHandle();else if(type.equals("quit") /退出處理/quitHandle();break;else if(type.equals("modifyPasswd")modifyP

23、asswd(req);有不同的處理程序,調(diào)用相應的dao將查詢信息封裝到response中。hs=(HashSet)(flightDao.getAllFlights(fromAddr,toAddr,cal);Response res=new Response("flightSearch");res.setData(hs);4.2用表格顯示表單 當客戶端查詢到航班計劃時,把flightlist航班集合傳給FlightTableModel,再把FLightTableModel傳給JTable,然后把JTable加入JScorllPane,就會自動顯示數(shù)據(jù)。FlightTable

24、Model ftm = new FlightTableModel(flightlist);JTable jt = new JTable(ftm);ClientMainClass.clientFrame.setTable(jt);FlightTableModel實現(xiàn)了AbstractTableModel接口,實現(xiàn)了如下四個方法。package com.tarena.abs.client;import javax.swing.table.*;import java.util.*;import com.tarena.abs.model.*;public class FlightTableModel

25、extends AbstractTableModelArrayList s;public FlightTableModel(ArrayList s)this.s=s;/獲得列名public String getColumnName(int arg0) switch(arg0)case 0: return "航班號"case 1: return "出發(fā)地"case 2: return "目的地"case 3: return "起飛時間"case 4: return "到達時間"case 5: re

26、turn "機型"case 6: return "票價"case 7: return "頭等艙"case 8: return "公務艙"case 9: return "經(jīng)濟艙"default: return null;/獲得行數(shù)public int getColumnCount() return 10;/獲得列數(shù)public int getRowCount() return s.size();/獲得指定位置的值public Object getValueAt(int row, int col)

27、Flight f=(Flight)s.get(row);if(row<0 | row>s.size()return null;switch(col)case 0: return f.getSch().getFlightNumber();case 1: return f.getSch().getFromAddress();case 2: return f.getSch().getToAddress();case 3: return f.getSch().getFromTime();case 4: return f.getSch().getToTime();case 5: return

28、 f.getSch().getPlane();case 6: return (int)(f.getSch().getPrice()*f.getPriceOff();case 7: return f.getFCSRemain();case 8: return f.getBCSRemain();case 9: return f.getECSRemain();default: return null; 4.3 Hibernate映射關(guān)系1、構(gòu)建pojo(Plain Old Java Objects)對象用JDBC儲存數(shù)據(jù)時,涉及多個表格的修改,查找。工作難度較大。所以考慮用hibernate實現(xiàn)數(shù)據(jù)

29、儲存。首先把模型改寫為標準pojo。(1) 添加Long 類型的oid屬性。(2) 為保存每個屬性添加getter,setter方法。(3) 添加無參構(gòu)造函數(shù)。(4) 寫hibernate映射文件。2、Hibernate儲存原理當儲存數(shù)據(jù)時,hibernate自動調(diào)用getter方法,把屬性存入相應字段。當讀取數(shù)據(jù)時,hibernate自動調(diào)用無參構(gòu)造方法創(chuàng)建對象,然后調(diào)用setter方法給對象賦值,從而產(chǎn)生和原來對象相等(equals)的對象。當增、刪、改操作時,hibernate會自動把與原數(shù)據(jù)相關(guān)聯(lián)的表的字段修改(必須設置級聯(lián))。3、映射關(guān)系分析(1) 航班計劃和飛機型號是多對一關(guān)系:每

30、個航班計劃都包含飛機型號屬性,各飛機型號會被多個航班計劃引用。(2) 航班和航班計劃是多對一的關(guān)系:每個航班都屬于某個航班計劃,因此每個航班都包含一個航班計劃屬性,而每個航班表都有一個外間指向航班計劃的id子段。(3) 定單與航班是多對一關(guān)系:一個定單包含的航班信息有它包含的航班屬性得到,通過航班屬性還可以得到航班計劃和飛機型號的信息。每個定單只能有一個航班,每個航班可以包含在多個定單中,因此定單與航班是多對一關(guān)系。(4) 定單和網(wǎng)點是多對一的關(guān)系:原理同定單和航班的關(guān)系。5 總結(jié) 航空訂票系統(tǒng)使用軟件分層結(jié)構(gòu),利用面向?qū)ο蟮脑O計方法,并把學到的知識應用于實踐。實現(xiàn)了穩(wěn)定、可維護、可擴展性的軟

31、件,并且完成業(yè)務需求。如做以下改進會使系統(tǒng)更加完善:1、初始化配置參數(shù):程序是直接讀配置文件來讀取初始化參數(shù)的,如下所示:ServerIP=127.0.0.1ServerPort=8888可以將此參數(shù)放入程序中,由用戶或管理員輸入,來選側(cè)不同的服務器??蛻舳说膮?shù)設置及重新連接功能有待實現(xiàn)。2、服務器掉線:默認是實現(xiàn)是客戶端先退出,通知服務器,服務器從內(nèi)存中刪掉此客戶端,然后客戶端關(guān)閉連接。 private void quitHandle(Request req)String currentUserName=(String)req.getData("currentUser"

32、);for(Object o:onlineAgent)Branch a = (Branch)o;if(a.getName().equals(currentUserName)onlineAgent.remove(a);try s.close(); catch (IOException e) e.printStackTrace(); 但是,當服務器由于網(wǎng)絡故障,或者系統(tǒng)維修時,臨時斷開,沒有通知客戶端,當客戶端此時向服務器發(fā)請求時,便會出現(xiàn)想不到的錯誤。 一個有效的解決方法是:利用觀察者模式。在服務器推出方法中遍歷在線客戶端socket,發(fā)送等待信息。Private void quit() For

33、(Socket s:Currentsockets) ······ /封裝等待信號給客戶端 客戶端受到等待信號后,執(zhí)行waitServer()方法,并禁止操作。3、請求響應對象:現(xiàn)在的request對象封裝了String類型的Type變量代表請求類型。Response對象包裝了Object類型的Date變量作為相應??梢园颜埱髮ο笞鳛槊杜e類型,更安全,不易出錯。4、數(shù)據(jù)顯示的輪動更新:服務器端顯示航班信息,網(wǎng)點信息,出現(xiàn)一張表,該表不能滾動和更新??梢岳每蓾L動、可更新的結(jié)果集以及Swing的某些特性實現(xiàn)excel中的實時修改數(shù)據(jù)功能。

34、實現(xiàn)此功能較為復雜。3.3數(shù)據(jù)庫連接的的主要代碼塊 import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class DBUtils statictry Class.forName("org.postgresql.Driver"); catch (ClassNotFoundException e) / TODO Auto-generated catch blocke.printStackTrace();public static Connect

35、ion getConnection() throws SQLException Connection conn = DriverManager.getConnection("jdbc:postgresql:/localhost/postgres", "postgres", "123");return conn;3.3 頁面設計 主要的幾個系統(tǒng)頁面有登陸頁面,主頁面,已經(jīng)其他子系統(tǒng)頁面。頁面代碼如下:主要代碼:<body><%session.setAttribute("use","trav

36、eller");String UserName=(String)request.getParameter("username");String Password=(String)request.getParameter("password");String Select=(String)request.getParameter("load");if(UserName.equals("") | Password.equals("") out.print(show.errorBox(&qu

37、ot;請?zhí)顚懲暾?quot;,"驗證錯誤");elseint intT=0;if(Select!=null&&Select.equals("user") intT=data.getRowCount("userload WHERE userid='"+UserName+"' AND password='"+Password+"'");if(intT>0) session.setAttribute("name",UserNa

38、me); session.setAttribute("use","user"); response.sendRedirect("index_user.jsp"); else out.print(show.errorBox("檢查你的用戶名或密碼!","驗證錯誤"); return; else if(Select!=null&&Select.equals("admin") intT=data.getRowCount("adminload WHERE u

39、serid='"+UserName+"' AND password='"+Password+"'"); if(intT>0) session.setAttribute("name",UserName); session.setAttribute("use","admin"); response.sendRedirect("index_user.jsp"); else out.print(show.errorBox("檢

40、查你的用戶名或密碼!","驗證錯誤"); return; else out.print(show.errorBox("檢查你的用戶名或密碼!","驗證錯誤"); return;%></body>主要代碼:<body><%String use=(String)session.getAttribute("use");%><table width="999" height="580" border="2"

41、 cellPadding=0 cellSpacing=0> <tr> <td width="191" height="60"><img src="image/logo.jpg" width="200" height="82"></td> <td width="800" height="60"><img src="image/logo.gif" width="

42、;798" height="83"></td> </tr> <tr> <td height="491"> <table width="200" height="443" cellpadding=0 cellspacing=0 border="0"> <tr> <td width="200" height="36"><img src="imag

43、e/guoji.JPG" width="200" height="36"></td> </tr> <tr> <td height="133"><p> <marquee scrollamount='1' scrolldelay='90' direction= 'UP' width='200' id=movewdg height='120' onMouseOver=movewdg

44、.stop() onMouseOut=movewdg.start()> <span class="style2">北京 漢城 價格:¥2200 </span> <p class="style2">北京 東京 價格:¥3000</p> <p class="style2">北京 紐約 價格:¥4000</p> <p class="style2">北京 溫哥華 價格:¥4500</p> </marquee>

45、</td> </tr> <tr> <td height="34"><img src="image/tejia.JPG" width="200" height="34"></td> </tr> <tr> <td height="109"><marquee scrollamount='1' scrolldelay='90' direction= '

46、UP' width='200' id=movewdg height='157' onMouseOver=movewdg.stop() onMouseOut=movewdg.start()> <p class="style2">北京 上海 價格:¥450</p> <p class="style2">北京 哈爾濱 價格:¥500</p> <p class="style2">北京 西安 價格:¥700</p> <p c

47、lass="style2">北京 濟南 價格:¥300</p> </marquee></td> </tr> <tr> <td height="34"><img src="image/notice.gif" width="200" height="34"></td> </tr> <tr> <td height="97"><marquee

48、 scrollamount='1' scrolldelay='90' direction= 'UP' width='200' id=movewdg height='78' onMouseOver=movewdg.stop() onMouseOut=movewdg.start()> <p class="style2">本月12日發(fā)往東京的k8888航班取消,請旅行社盡快與相關(guān)旅客取得聯(lián)系,更改航班。</p> <p class="style2"

49、>本月20日發(fā)往濟南的k7777航班取消,請旅行社盡快與相關(guān)旅客取得聯(lián)系,更改航班。</p> </marquee></td> </tr> </table></td> <td width="800" height="491"><%if (use.equals("user")%><img src="image/main1.jpg" width="800" height="489&qu

50、ot; border="0" usemap="#Map1"><%else if(use.equals("admin")%> <img src="image/main2.jpg" width="800" height="489" border="0" usemap="#Map2"> <%else%><img src="image/main3.jpg" width=&quo

51、t;800" height="489" border="0" usemap="#Map3"><%></td> </tr></table></body>主要代碼:<body><p> <% Show show=new Show(); Str str=new Str();Conn con=new Conn();String planeno=(String)request.getParameter("planeno")

52、;String planedate=(String)request.getParameter("planedate");String fromplace=(String)request.getParameter("fromplace");String toplace=(String)request.getParameter("toplace");String planetime=(String)request.getParameter("planetime");String economyseat=(String)

53、request.getParameter("economyseat");String businessseat=(String)request.getParameter("businessseat");String economyprice=(String)request.getParameter("economyprice");String businessprice=(String)request.getParameter("businessprice");if(planeno.equals("&qu

54、ot;)|planedate.equals("")|fromplace.equals("")|toplace.equals("")|planetime.equals("")|economyseat.equals("")|businessseat.equals("")|economyprice.equals("")|businessseat.equals("")out.print("對不起,你需要將信息填寫完整!");

55、else int flag=0;int length;String fdate1,fdate2,fdate3;length=planedate.length();if(length>=8)fdate1=planedate.substring(4,5);fdate2=planedate.substring(6,7);fdate3=planedate.substring(7,8);if(fdate1.equals("-")&&(fdate2.equals("-")|fdate3.equals("-") flag=1;

56、 if(flag=0) out.print("對不起,你輸入的日期格式不正確!"); else int intT1=0; intT1=data.insert("INSERT INTO plane(planeno,toplace,fromplace,planedate,planetime,economyseat,businessseat,economyprice,businessprice) VALUES('"+planeno+"','"+toplace+"','"+fromplace+"','"+planedate+"','"+planetime+"','"+economyseat+"','"+businessseat+"','"+ec

溫馨提示

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

評論

0/150

提交評論