- 相关推荐
机票预订系统(一)
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