機(jī)票預(yù)訂系統(tǒng)(一)

    時(shí)間:2024-05-27 12:55:17 計(jì)算機(jī)畢業(yè)論文 我要投稿
    • 相關(guān)推薦

    機(jī)票預(yù)訂系統(tǒng)(一)

    1.1項(xiàng)目背景
    1.1.1項(xiàng)目名稱    機(jī)票預(yù)訂系統(tǒng)
    1.1.2任務(wù)提出者 
    1.1.3開發(fā)者     
    1.1.4產(chǎn)品用戶.1.5機(jī)票預(yù)定系統(tǒng)的總目標(biāo)
     在計(jì)算機(jī)網(wǎng)絡(luò),數(shù)據(jù)庫和先進(jìn)的開發(fā)平臺上,利用現(xiàn)有的軟件,配置一定的硬件,開發(fā)一個(gè)具有開放體系結(jié)構(gòu)的、易擴(kuò)充的、易維護(hù)的、具有良好人機(jī)交互界面的機(jī)票預(yù)定系統(tǒng),實(shí)現(xiàn)航空公司的機(jī)票銷售的自動化的計(jì)算機(jī)系統(tǒng),為企業(yè)的決策層提供準(zhǔn)確、精細(xì)、迅速的機(jī)票銷售信息。1.2編寫目的
     一個(gè)正常營運(yùn)的航空公司需要管理所擁有的飛機(jī)、航線的設(shè)置,客戶的信息等,更重要的還要提供票務(wù)管理。面對各種不同種類的信息,需要開發(fā)有效的程序結(jié)構(gòu)來管理各種信息。
     而在前一階段(概要設(shè)計(jì)說明書)中,已解決了實(shí)現(xiàn)該系統(tǒng)需求的程序模塊設(shè)計(jì)問題。包括如何把該系統(tǒng)劃分成若干個(gè)模塊、決定各個(gè)模塊之間的接口、模塊之間傳遞的信息,以及數(shù)據(jù)結(jié)構(gòu)、模塊結(jié)構(gòu)的設(shè)計(jì)等。在以下的詳細(xì)設(shè)計(jì)報(bào)告中將對在本階段中對系統(tǒng)所做的所有詳細(xì)設(shè)計(jì)進(jìn)行說明。
     在本階段中,確定應(yīng)該如何具體地實(shí)現(xiàn)所要求的系統(tǒng),從而在編碼階段可以把這個(gè)描述直接翻譯成用具體的程序語言書寫的程序。主要的工作有:根據(jù)在《需求分析說明書》中所描述的數(shù)據(jù)、功能、運(yùn)行、性能需求,并依照《概要設(shè)計(jì)說明書》所確定的處理流程、總體結(jié)構(gòu)和模塊外部設(shè)計(jì),設(shè)計(jì)軟件系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)、逐個(gè)模塊的程序描述(包括各模塊的功能、性能、輸入、輸出、算法、程序邏輯、接口等等),解決如何
     
     1. 接受:航班信息,旅客信息及取票通知和賬單;
     2. 輸出:取票通知和賬單及機(jī)票;
     3. 網(wǎng)絡(luò)輸出和加密,輸入和解密;
     4. 分辨信息的種類并采取相應(yīng)的處理步驟;
     5. 判斷信息的正誤并采取相應(yīng)的處理步驟;
     6. 進(jìn)行數(shù)據(jù)庫的查詢、修改工作;
     7. 接受并判斷錯(cuò)誤,輸出相應(yīng)的出錯(cuò)消息;
     
     詳細(xì)設(shè)計(jì)文檔是進(jìn)行系統(tǒng)編碼的依據(jù),編寫本文檔的目的在于為程序員的編碼提供詳細(xì)的說明,使程序員能根據(jù)詳細(xì)設(shè)計(jì)的框圖進(jìn)行正確的編碼。本文檔的讀者對象為程序員,系統(tǒng)設(shè)計(jì)人員,航空公司管理人員以及參加評審的專家們。
    1.3 軟件定義
     在數(shù)據(jù)庫建表中,其中:flightnumber為航班號,airlinecompany為航空公司,startstation為始發(fā)站,middlestation為中轉(zhuǎn)站,endstation為終點(diǎn)站,takeofftime為起飛時(shí)間,landingtime為到達(dá)時(shí)間,price1為普通機(jī)票單價(jià),memo為備注,flag記為是否售出的標(biāo)志符,no1為普通艙座位數(shù)量,rest為剩余座位數(shù)量,buyername為客戶姓名,buyertel為聯(lián)系電話,buyeridnum為身份證號碼,contractno為訂單號,bookdate為訂票日期,cancledate為退票日期,buyeremail為客戶郵箱。
    1.4 開發(fā)環(huán)境
    1.4.1 操作系統(tǒng)
     Windows 98,Windows Me,Windows Me,Windows NT,Windows 2000 Professional,Windows 2000 Sever,Windows XP
    1.4.2 硬件要求
     PC機(jī),小型機(jī),工作站,服務(wù)器,內(nèi)存512M以上,硬盤10G以上
    1.4.3 軟件要求
     應(yīng)配置SQL Sever,Oracle或其他數(shù)據(jù)庫
    1.4.5 開發(fā)工具
     PowerBuilder  9.0
      第二章  需求分析

    2.1功能要求
    班機(jī)基本信息的管理;
    航班信息的管理;
    旅客預(yù)定機(jī)票、取消預(yù)約、付款取票、退票的管理;
    查詢航班信息、航班預(yù)定情況、旅客信息,計(jì)算航班滿座率。
    統(tǒng)計(jì)營業(yè)收入。

    2.2系統(tǒng)數(shù)據(jù)流圖
    2.2.1總體數(shù)據(jù)流圖
             第三章 數(shù)據(jù)庫邏輯設(shè)計(jì)

    3.1 planeticket表設(shè)計(jì)說明及描述
    3.1.1 定義表及關(guān)鍵字
    表1 planeticket
    字段名 數(shù)據(jù)類型 含義說明 空值情況 
    flightnumber Varchar 航班號 主關(guān)鍵字 
     airlinecompany Varchar 航空公司 不能為空 
     startstation Varchar 起飛城市 不能為空 
     middlestation Varchar 中轉(zhuǎn)城市 可以為空 
     endstation Varchar 到達(dá)城市 不能為空 
    takeofftime Time 起飛時(shí)間 不能為空 
     landingtime Time 到達(dá)時(shí)間 不能為空 
     no1 Int 普通艙座位數(shù)量 不能為空 
    price1 Long 普通機(jī)票單價(jià) 不能為空 
    rest int 剩余座位數(shù) 不能為空 
    memo Varchar 備        注 可以為空 

    3.1.2表的功能
     本程序主要實(shí)現(xiàn)航班信息的輸入和查詢,包括航班號,航空公司,始發(fā)站,中轉(zhuǎn)站,終點(diǎn)站,起飛時(shí)間,到達(dá)時(shí)間,普通艙座位數(shù)量,普通機(jī)票單價(jià),剩余座位數(shù)及備注信息等。

    3.2 buyticket表設(shè)計(jì)說明及描述
    3.2.1定義表及關(guān)鍵字
    表2 buyticket
    字段名 數(shù)據(jù)類型 含義說明 空值情況 
    flightnumber Varchar 航班號 主關(guān)鍵字 
     airlinecompany Varchar 航空公司 不能為空 
     startstation Varchar 起飛城市 不能為空 
     middlestation Varchar 中轉(zhuǎn)城市 可以為空 
    endstation Varchar 到達(dá)城市 不能為空 
    takeofftime Time 起飛時(shí)間 不能為空 
     landingtime Time 到達(dá)時(shí)間 不能為空 
     Number1 Int 普通艙座位數(shù)量 不能為空 
     Price1 Long 普通機(jī)票單價(jià) 不能為空 
    Rest Int 剩余座位數(shù) 不能為空 
    memo Varchar 備注 系統(tǒng)調(diào)入 
    buyername Varchar 客戶姓名 不能為空 
    buyertel Int 聯(lián)系電話 不能為空 
     buyeridnumber Int 身份證號碼 不能為空 
     buyeremail Varchar 郵箱 可以為空 
     contractno Varchar 訂單號 不能為空 
    bookdate Data 訂票日期 不能為空 
    cancledate data 退票日期 不能為空 


    3.2.2 表的功能
      本程序主要實(shí)現(xiàn)旅客信息的輸入和查詢,包括航班號,航空公司,始發(fā)站,中轉(zhuǎn)站,終點(diǎn)站,起飛時(shí)間,到達(dá)時(shí)間,普通艙座位數(shù)量,普通機(jī)票單價(jià),剩余座位數(shù),備注信息,客戶姓名,聯(lián)系電話,身份證號碼,郵箱,訂單號,訂票日期,退票日期等

    第四章  軟件功能設(shè)計(jì)

    4.1  客戶機(jī)接受信息模塊結(jié)構(gòu)圖
    4.1.1系統(tǒng)管理員添加航班信息    
     
     圖9添加航班信息
    4.1.2客戶訂票信息錄入
     
     圖10 訂票信息錄入
    4.1.3客戶退票信息錄入
     
     圖11 退票信息錄入
    4.2客戶機(jī)輸出信息模塊
    4.2.1繳款取票
     
     圖12 繳費(fèi)取票
    4.3系統(tǒng)自動更新航班信息模塊
     
     圖13 更新航班信息
     
     第五章  界面設(shè)計(jì)

    5.1登錄界面
     
     圖14 登錄界面
    5.2主菜單界面
     
     圖15 主菜單界面
    5.3登記航班信息界面
     
     圖16 登記航班信息界面
    5.4訂購機(jī)票界面
     
     圖17 訂票界面
    5.5取消訂票界面
     
     圖18 退票界面
    5.6 航班信息維護(hù)界面
     
     圖19 更新航班信息界面
    5.7 計(jì)算航班滿座率界面
     
     圖20 滿座率計(jì)算
    5.8 統(tǒng)計(jì)營業(yè)收入界面
     
     圖21 統(tǒng)計(jì)營業(yè)收入界面
     
     
     

     第六章 課程設(shè)計(jì)心得體會
     這次課程設(shè)計(jì)做的比較匆忙,也可以說是畢業(yè)設(shè)計(jì)的一個(gè)前瞻。
     我用的是PowerBuilder 9.0來設(shè)計(jì)的,對該軟件還不是很熟悉,尤其是Powerscript語言以及它所自帶的函數(shù),不得甚解,尤其是當(dāng)某些功能,譬如說刪除,插入我們可以直接用deleterow(0),insertrow()來實(shí)現(xiàn),還比較方便。
     總的來說,數(shù)據(jù)庫設(shè)計(jì)與軟件設(shè)計(jì)有異曲同工之妙,唯一的不同之處就是軟件有一個(gè)生命周期。從另一方面講,數(shù)據(jù)庫設(shè)計(jì)是軟件設(shè)計(jì)的基礎(chǔ),脫離了數(shù)據(jù)庫設(shè)計(jì)軟件設(shè)計(jì)是沒有意義的,而單純的數(shù)據(jù)庫設(shè)計(jì)并沒有什么實(shí)際意義。
     該軟件需要改進(jìn)的地方還有很多,譬如說界面不是很友好,數(shù)據(jù)庫表的設(shè)計(jì)有點(diǎn)不符合BCNF范式,每次只能實(shí)現(xiàn)一次操作訂購一張票等等。

    附錄1:參考文獻(xiàn)

      《PowerBuilder9.0課程設(shè)計(jì)案例精編》 魏海,黃浩等編著 中國水利水電出版社
      《PowerBuilder9.0開發(fā)人員指南》     張長富,李勻等編著 北京希望電子出版社
      《PowerBuilder9.0信息管理系統(tǒng)開發(fā)實(shí)例導(dǎo)航》何旭洪,傅立宏編著 人民郵電出版社
      《oracle 9i數(shù)據(jù)庫應(yīng)用標(biāo)準(zhǔn)教程》 李欣主編 上海科學(xué)普及出版社
    附錄2:代碼
    1.planeticket  open()
    /*SQLCA.DBMS = "O90 Oracle9i (9.0.1)"
    SQLCA.LogPass ="manager"
    SQLCA.ServerName = "LAB_b14"
    SQLCA.LogId = "system"
    SQLCA.AutoCommit = false
    //SQLCA.DBParm = "PBCatalogOwner='scott'"*/


    // Profile fly
    SQLCA.DBMS = "ODBC"
    SQLCA.AutoCommit = False
    SQLCA.DBParm = "ConnectString='DSN=plane;UID=sa;PWD=sa'"

    connect Using SQLCA;
    //open (w_main1)
    //open(w_planeticket)
    //open(w_chooseplane)
    //open(w_buyticket)
    open(w_main)

    2..訂購機(jī)票界面W_buyticket  open()
    long rn
    string num
    dw_3.settransobject (sqlca)
    dw_3.retrieve()
    dw_3.insertrow(0)
    dw_3.ScrollToRow(rn)
    dw_3.object.bookdate[1]=today()

    String flightnumber,airlinecompany,startstation,middlestation,endstation
    int takeofftime,landingtime, price1,rest
    String memo
    num=message.stringparm
    select airlinecompany,startstation,middlestation,endstation,takeofftime,landingtime,memo,
     price1
    into :airlinecompany,:startstation,:middlestation,:endstation,:takeofftime,:landingtime,:memo,
    :price1
    from planeticket
    where flightnumber=:num
    Using sqlca;

    dw_3.object.flightnumber[1]=num
    dw_3.object.airlinecompany[1]=airlinecompany
    dw_3.object.startstation[1]=startstation
    dw_3.object.middlestation[1]=middlestation
    dw_3.object.endstation[1]=endstation
    dw_3.object.takeofftime[1]=takeofftime
    dw_3.object.landingtime[1]=landingtime
    dw_3.object.price1[1]=price1
    //dw_3.object.price2[1]=price2
    dw_3.object.memo[1]=memo

    3.訂購機(jī)票界面訂票成功按鈕 clicked()
    dw_3.update()

    string num
    num=dw_3.GetitemString(1,"flightnumber")
    Update buyticket
    set flag=1
    where flightnumber=:num
    using sqlca;

    update planeticket

    set rest=rest-1
    where flightnumber=:num

    using sqlca;
    close(parent)

    4.退票界面w_cancleticket  open()
    // Profile xuwei
    /*SQLCA.DBMS = "O90 Oracle9i (9.0.1)"
    SQLCA.LogPass = 'manager'
    SQLCA.ServerName = "lab_b14"
    SQLCA.LogId = "system"
    SQLCA.AutoCommit = true
    //SQLCA.DBParm = "PBCatalogOwner='scott'"*/

    // Profile fly
    SQLCA.DBMS = "ODBC"
    SQLCA.AutoCommit = False
    SQLCA.DBParm = "ConnectString='DSN=plane;UID=sa;PWD=sa'"

    connect using sqlca;

    5.退票界面查詢按鈕 clicked()
    string filterStr
    string name
    integer rc
    name=sle_buyername.text
    filterStr="buyername='"+name+"'"
    dw_4.SetTransobject(sqlca)

    dw_4.setFilter(filterStr)

    dw_4.Filter()
    dw_4.Retrieve()

    rc=dw_4.getrow()

     if rc<=0 then
     messagebox("提示:","沒有此顧客訂購機(jī)票信息!")
     return 1
    end if
     
    6.退票界面退票按鈕 clicked()
    string num
          num=dw_4.GetitemString(1,"flightnumber")
      update planeticket

          set rest=rest+1
          where flightnumber=:num

          using sqlca;
      
      dw_4.deleterow(0)
      dw_4.update()
          dw_4.retrieve()
      
    messagebox("提示:","退票成功!")

    7選擇機(jī)票界面查詢?nèi)亢桨嘈畔粹o clicked()
    disconnect using sqlca;
    // Profile xuwei
    /*SQLCA.DBMS = "O90 Oracle9i (9.0.1)"
    SQLCA.LogPass = 'manager'
    SQLCA.ServerName = "lab_b14"
    SQLCA.LogId = "system"
    SQLCA.AutoCommit = true*/

    // Profile fly
    SQLCA.DBMS = "ODBC"
    SQLCA.AutoCommit = False
    SQLCA.DBParm = "ConnectString='DSN=plane;UID=sa;PWD=sa'"


    connect using sqlca;

    string filterStr
    filterStr="flag=0"

    dw_1.settransobject(sqlca)
    dw_1.setfilter(filterStr)
    dw_1.filter()
    dw_1.retrieve ()

    8.選擇機(jī)票界面訂購按鈕 clicked()
    int i
    string selNum
    for i=1 to dw_1.getrow()
     if dw_1.GetItemNumber(i,"flag")=1 then
      selNum=dw_1.GetitemString(i,"flightnumber")
        openwithparm(w_buyticket,selNum)
    //  close(w_chooseplane)
      return
      end if
     next
     
    9.選擇機(jī)票界面按目的地查找按鈕 clicked()
    open(w_findplane)

    10.按目的地查找界面w_findplane open()
    // Profile xuwei
    SQLCA.DBMS = "O90 Oracle9i (9.0.1)"
    SQLCA.LogPass = 'manager'
    SQLCA.ServerName = "lab_b14"
    SQLCA.LogId = "system"
    SQLCA.AutoCommit = true
    //SQLCA.DBParm = "PBCatalogOwner='scott'"

    connect using sqlca;

    11.按目的地查找界面查找按鈕 clicked()
    string filterStr
    string name
    integer rc
    name=sle_station.text
    filterStr="endstation='"+name+"'"
    dw_5.SetTransobject(sqlca)

    dw_5.setFilter(filterStr)

    dw_5.Filter()
    dw_5.Retrieve()

    rc=dw_5.getrow()

     if rc<=0 then
     messagebox("提示:","沒有到達(dá)此地的航班!")
     return 1
    end if

    12.登錄界面登錄按鈕 clicked()
    string pwd,username

    username=sle_name1.text
    pwd=sle_pwd.text

    SQLCA.LogId = username
    SQLCA.LogPass =pwd

    connect using sqlca;
    if sqlca.sqlcode=-1 then
     messageBox("口令錯(cuò)誤,請重新輸入!",SQLCA.SQLErrText)
     close(parent)
    else
     open(w_main)
    end if

    13航班信息查詢界面w_plane1 open()
    disconnect using sqlca;
    // Profile xuwei
    /*SQLCA.DBMS = "O90 Oracle9i (9.0.1)"
    SQLCA.LogPass = 'manager'
    SQLCA.ServerName = "lab_b14"
    SQLCA.LogId = "system"
    SQLCA.AutoCommit = true*/

    // Profile fly
    SQLCA.DBMS = "ODBC"
    SQLCA.AutoCommit = False
    SQLCA.DBParm = "ConnectString='DSN=plane;UID=sa;PWD=sa'"


    connect using sqlca;
    dw_7.settransobject(sqlca)
    dw_7.retrieve ()

    14.航班信息維護(hù)界面w_planeinfo open()
    dw_4.settransobject (SQLCA)
    dw_4.retrieve ()

    15.航班信息維護(hù)界面添加按鈕 clicked()
    long net
    net=dw_4.insertrow(0)
    dw_4.ScrollToRow(net)

    16.航班信息維護(hù)界面刪除按鈕 clicked()
    dw_4.deleterow(0)
    dw_4.update()
    dw_4.retrieve()

    17機(jī)票信息登記界面確定插入按鈕 clicked()
    int num
    String flightnumber,airlinecompany,startstation,middlestation,endstation,memo,takeofftime,landingtime,no1
    String err

    double price1
    string mysql

    /*SQLCA.DBMS = "O90 Oracle9i (9.0.1)"
    SQLCA.LogPass ="manager"
    SQLCA.ServerName = "lab_b14"
    SQLCA.LogId = "system"
    SQLCA.AutoCommit = true
    //SQLCA.DBParm = "PBCatalogOwner='scott'"*/

    // Profile fly
    SQLCA.DBMS = "ODBC"
    SQLCA.AutoCommit = False
    SQLCA.DBParm = "ConnectString='DSN=plane;UID=sa;PWD=sa'"


    connect Using SQLCA;

     


    flightnumber = sle_number.text
    airlinecompany = sle_airlinecompany.text
    startstation = sle_startstation.text
    middlestation = sle_middlestation.text
    endstation = sle_endstation.text
    memo=mle_memo.text
    takeofftime = sle_takeofftime.text
    landingtime = sle_landingtime.text
    no1=sle_no1.text
    em_price1.getData(price1)


    err=""
    if flightnumber="" then
      err=err+"航班號不能為空!~n"
    end if
    if airlinecompany = "" then
     err=err+"航空公司不能為空!~n"
    end if
    if startstation = "" then
     err=err+"起始站不能為空!~n"
    end if
    if endstation = "" then
     err=err+"終點(diǎn)站不能為空!~n"
    end if
    if takeofftime = "" then
     err=err+"起飛時(shí)間不能為空!~n"
    end if
    if landingtime = "" then
     err=err+"到達(dá)時(shí)間不能為空!~n"
    end if
    if price1<=0 then
     err=err+"單價(jià)應(yīng)該大于0!~n"
    end if
    if err<>"" then
     messagebox("警告!",err)
     return
    end if

    //查詢數(shù)據(jù)庫,是否有該航班號,如果有則不能重復(fù)添加

    select count(flightnumber)
    into :num
    from planeticket
    where flightnumber=:flightnumber
    using sqlca;

    if num>0 then
     messagebox("警告","航班號不能重復(fù)")
     return
    end if

    //執(zhí)行添加記錄操作
    /*mysql = "INSERT INTO planeticket(flightnumber,airlinecompany,startstation,middlestation,endstation,takeofftime,landingtime,price1,price2,memo)  VALUES('"+flightnumber+"','"+airlinecompany+"','"+startstation+"','"+middlestation+"','"+endstation+"','"+takeofftime+"','"+landingtime+"','"+price1+"','"+price2+"','"+memo+"')"
    execute IMMEDIATE :mysql using sqlca;*/
    INSERT INTO planeticket
                (flightnumber,
         airlinecompany,
         startstation,
         middlestation,
         endstation,
         takeofftime,
         landingtime,
         price1,
         no1,
         memo
         )
    VALUES(      :flightnumber,
         :airlinecompany,
         :startstation,
         :middlestation,
         :endstation,
         :takeofftime,
         :landingtime,
         :price1,
         :no1,
         :memo 
        
         )
    USING SQLCA;
    if sqlca.sqlcode<>0 then
      messagebox("",sqlca.sqlerrtext)
    //else
    //    messagebox("已經(jīng)成功添加航班信息!~n")
    //  return
    end if

    //disconnect using SQLCA;

    18.旅客訂票信息界面查詢按鈕 clicked()
    string filterStr
    string name
    integer rc
    name=sle_buyername.text
    filterStr="buyername='"+name+"'"
    dw_6.SetTransobject(sqlca)

    dw_6.setFilter(filterStr)

    dw_6.Filter()
    dw_6.Retrieve()

    rc=dw_6.getrow()

     if rc<=0 then
     messagebox("提示:","沒有此顧客訂購機(jī)票信息!")
     return 1
    end if

    【機(jī)票預(yù)訂系統(tǒng)(一)】相關(guān)文章:

    ASP交友系統(tǒng)設(shè)計(jì)(一)03-07

    delphi題庫系統(tǒng)(一)03-07

    ASP人才招聘系統(tǒng)(一)03-07

    ASP網(wǎng)絡(luò)購物系統(tǒng)(一)03-07

    消防聯(lián)動控制系統(tǒng)(一)12-26

    考務(wù)和成績管理系統(tǒng)(一)03-26

    VB+教學(xué)輔助系統(tǒng)(一)11-22

    談機(jī)電一體化系統(tǒng)中的軟件系統(tǒng)設(shè)計(jì)03-12

    探究機(jī)電一體化系統(tǒng)中的軟件系統(tǒng)設(shè)計(jì)及討論03-14

    91久久大香伊蕉在人线_国产综合色产在线观看_欧美亚洲人成网站在线观看_亚洲第一无码精品立川理惠

      中文欧美亚洲欧日韩 | 亚洲日本欧美三级 | 亚洲成AV人片女在线观看 | 日韩国产精品视频一区二区三区 | 中文字幕在线精品乱码 | 亚洲综合中文字幕在线专区 |