- 相關推薦
機票預訂系統(一)
1.1項目背景
1.1.1項目名稱 機票預訂系統
1.1.2任務提出者
1.1.3開發者
1.1.4產品用戶.1.5機票預定系統的總目標
在計算機網絡,數據庫和先進的開發平臺上,利用現有的軟件,配置一定的硬件,開發一個具有開放體系結構的、易擴充的、易維護的、具有良好人機交互界面的機票預定系統,實現航空公司的機票銷售的自動化的計算機系統,為企業的決策層提供準確、精細、迅速的機票銷售信息。1.2編寫目的
一個正常營運的航空公司需要管理所擁有的飛機、航線的設置,客戶的信息等,更重要的還要提供票務管理。面對各種不同種類的信息,需要開發有效的程序結構來管理各種信息。
而在前一階段(概要設計說明書)中,已解決了實現該系統需求的程序模塊設計問題。包括如何把該系統劃分成若干個模塊、決定各個模塊之間的接口、模塊之間傳遞的信息,以及數據結構、模塊結構的設計等。在以下的詳細設計報告中將對在本階段中對系統所做的所有詳細設計進行說明。
在本階段中,確定應該如何具體地實現所要求的系統,從而在編碼階段可以把這個描述直接翻譯成用具體的程序語言書寫的程序。主要的工作有:根據在《需求分析說明書》中所描述的數據、功能、運行、性能需求,并依照《概要設計說明書》所確定的處理流程、總體結構和模塊外部設計,設計軟件系統的結構設計、逐個模塊的程序描述(包括各模塊的功能、性能、輸入、輸出、算法、程序邏輯、接口等等),解決如何
1. 接受:航班信息,旅客信息及取票通知和賬單;
2. 輸出:取票通知和賬單及機票;
3. 網絡輸出和加密,輸入和解密;
4. 分辨信息的種類并采取相應的處理步驟;
5. 判斷信息的正誤并采取相應的處理步驟;
6. 進行數據庫的查詢、修改工作;
7. 接受并判斷錯誤,輸出相應的出錯消息;
詳細設計文檔是進行系統編碼的依據,編寫本文檔的目的在于為程序員的編碼提供詳細的說明,使程序員能根據詳細設計的框圖進行正確的編碼。本文檔的讀者對象為程序員,系統設計人員,航空公司管理人員以及參加評審的專家們。
1.3 軟件定義
在數據庫建表中,其中:flightnumber為航班號,airlinecompany為航空公司,startstation為始發站,middlestation為中轉站,endstation為終點站,takeofftime為起飛時間,landingtime為到達時間,price1為普通機票單價,memo為備注,flag記為是否售出的標志符,no1為普通艙座位數量,rest為剩余座位數量,buyername為客戶姓名,buyertel為聯系電話,buyeridnum為身份證號碼,contractno為訂單號,bookdate為訂票日期,cancledate為退票日期,buyeremail為客戶郵箱。
1.4 開發環境
1.4.1 操作系統
Windows 98,Windows Me,Windows Me,Windows NT,Windows 2000 Professional,Windows 2000 Sever,Windows XP
1.4.2 硬件要求
PC機,小型機,工作站,服務器,內存512M以上,硬盤10G以上
1.4.3 軟件要求
應配置SQL Sever,Oracle或其他數據庫
1.4.5 開發工具
PowerBuilder 9.0
第二章 需求分析
2.1功能要求
班機基本信息的管理;
航班信息的管理;
旅客預定機票、取消預約、付款取票、退票的管理;
查詢航班信息、航班預定情況、旅客信息,計算航班滿座率。
統計營業收入。
2.2系統數據流圖
2.2.1總體數據流圖
第三章 數據庫邏輯設計
3.1 planeticket表設計說明及描述
3.1.1 定義表及關鍵字
表1 planeticket
字段名 數據類型 含義說明 空值情況
flightnumber Varchar 航班號 主關鍵字
airlinecompany Varchar 航空公司 不能為空
startstation Varchar 起飛城市 不能為空
middlestation Varchar 中轉城市 可以為空
endstation Varchar 到達城市 不能為空
takeofftime Time 起飛時間 不能為空
landingtime Time 到達時間 不能為空
no1 Int 普通艙座位數量 不能為空
price1 Long 普通機票單價 不能為空
rest int 剩余座位數 不能為空
memo Varchar 備 注 可以為空
3.1.2表的功能
本程序主要實現航班信息的輸入和查詢,包括航班號,航空公司,始發站,中轉站,終點站,起飛時間,到達時間,普通艙座位數量,普通機票單價,剩余座位數及備注信息等。
3.2 buyticket表設計說明及描述
3.2.1定義表及關鍵字
表2 buyticket
字段名 數據類型 含義說明 空值情況
flightnumber Varchar 航班號 主關鍵字
airlinecompany Varchar 航空公司 不能為空
startstation Varchar 起飛城市 不能為空
middlestation Varchar 中轉城市 可以為空
endstation Varchar 到達城市 不能為空
takeofftime Time 起飛時間 不能為空
landingtime Time 到達時間 不能為空
Number1 Int 普通艙座位數量 不能為空
Price1 Long 普通機票單價 不能為空
Rest Int 剩余座位數 不能為空
memo Varchar 備注 系統調入
buyername Varchar 客戶姓名 不能為空
buyertel Int 聯系電話 不能為空
buyeridnumber Int 身份證號碼 不能為空
buyeremail Varchar 郵箱 可以為空
contractno Varchar 訂單號 不能為空
bookdate Data 訂票日期 不能為空
cancledate data 退票日期 不能為空
3.2.2 表的功能
本程序主要實現旅客信息的輸入和查詢,包括航班號,航空公司,始發站,中轉站,終點站,起飛時間,到達時間,普通艙座位數量,普通機票單價,剩余座位數,備注信息,客戶姓名,聯系電話,身份證號碼,郵箱,訂單號,訂票日期,退票日期等
第四章 軟件功能設計
4.1 客戶機接受信息模塊結構圖
4.1.1系統管理員添加航班信息
圖9添加航班信息
4.1.2客戶訂票信息錄入
圖10 訂票信息錄入
4.1.3客戶退票信息錄入
圖11 退票信息錄入
4.2客戶機輸出信息模塊
4.2.1繳款取票
圖12 繳費取票
4.3系統自動更新航班信息模塊
圖13 更新航班信息
第五章 界面設計
5.1登錄界面
圖14 登錄界面
5.2主菜單界面
圖15 主菜單界面
5.3登記航班信息界面
圖16 登記航班信息界面
5.4訂購機票界面
圖17 訂票界面
5.5取消訂票界面
圖18 退票界面
5.6 航班信息維護界面
圖19 更新航班信息界面
5.7 計算航班滿座率界面
圖20 滿座率計算
5.8 統計營業收入界面
圖21 統計營業收入界面
第六章 課程設計心得體會
這次課程設計做的比較匆忙,也可以說是畢業設計的一個前瞻。
我用的是PowerBuilder 9.0來設計的,對該軟件還不是很熟悉,尤其是Powerscript語言以及它所自帶的函數,不得甚解,尤其是當某些功能,譬如說刪除,插入我們可以直接用deleterow(0),insertrow()來實現,還比較方便。
總的來說,數據庫設計與軟件設計有異曲同工之妙,唯一的不同之處就是軟件有一個生命周期。從另一方面講,數據庫設計是軟件設計的基礎,脫離了數據庫設計軟件設計是沒有意義的,而單純的數據庫設計并沒有什么實際意義。
該軟件需要改進的地方還有很多,譬如說界面不是很友好,數據庫表的設計有點不符合BCNF范式,每次只能實現一次操作訂購一張票等等。
附錄1:參考文獻
《PowerBuilder9.0課程設計案例精編》 魏海,黃浩等編著 中國水利水電出版社
《PowerBuilder9.0開發人員指南》 張長富,李勻等編著 北京希望電子出版社
《PowerBuilder9.0信息管理系統開發實例導航》何旭洪,傅立宏編著 人民郵電出版社
《oracle 9i數據庫應用標準教程》 李欣主編 上海科學普及出版社
附錄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..訂購機票界面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.訂購機票界面訂票成功按鈕 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("提示:","沒有此顧客訂購機票信息!")
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選擇機票界面查詢全部航班信息按鈕 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.選擇機票界面訂購按鈕 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.選擇機票界面按目的地查找按鈕 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("提示:","沒有到達此地的航班!")
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("口令錯誤,請重新輸入!",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.航班信息維護界面w_planeinfo open()
dw_4.settransobject (SQLCA)
dw_4.retrieve ()
15.航班信息維護界面添加按鈕 clicked()
long net
net=dw_4.insertrow(0)
dw_4.ScrollToRow(net)
16.航班信息維護界面刪除按鈕 clicked()
dw_4.deleterow(0)
dw_4.update()
dw_4.retrieve()
17機票信息登記界面確定插入按鈕 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+"終點站不能為空!~n"
end if
if takeofftime = "" then
err=err+"起飛時間不能為空!~n"
end if
if landingtime = "" then
err=err+"到達時間不能為空!~n"
end if
if price1<=0 then
err=err+"單價應該大于0!~n"
end if
if err<>"" then
messagebox("警告!",err)
return
end if
//查詢數據庫,是否有該航班號,如果有則不能重復添加
select count(flightnumber)
into :num
from planeticket
where flightnumber=:flightnumber
using sqlca;
if num>0 then
messagebox("警告","航班號不能重復")
return
end if
//執行添加記錄操作
/*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("已經成功添加航班信息!~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("提示:","沒有此顧客訂購機票信息!")
return 1
end if
【機票預訂系統(一)】相關文章:
ASP交友系統設計(一)03-07
delphi題庫系統(一)03-07
ASP人才招聘系統(一)03-07
ASP網絡購物系統(一)03-07
消防聯動控制系統(一)12-26
考務和成績管理系統(一)03-26
VB+教學輔助系統(一)11-22
談機電一體化系統中的軟件系統設計03-12
探究機電一體化系統中的軟件系統設計及討論03-14