机票预订系统 课程设计 数据库文档格式.docx
《机票预订系统 课程设计 数据库文档格式.docx》由会员分享,可在线阅读,更多相关《机票预订系统 课程设计 数据库文档格式.docx(27页珍藏版)》请在冰点文库上搜索。
(1)航班信息管理功能
主要实现航班的一些基本信息,航班编号、票价、起飞地、目的地、起飞时间的添加、修改、删除和查询。
(2)航班座位信息管理功能
主要实现航班座位,也就是机票的一些基本信息,航班编号、座位号、座位信息、机票类型的添加、修改、删除和查询。
(3)旅客信息管理功能
此模块的主要实现旅客一些基本信息,姓名、性别、联系方式、证件号码、的查询功能。
(4)取票信息管理功能
此模块用于取票信息的管理,包括对航班基本信息,航班编号等,旅客基本信息,旅客姓名、座位号、取票时间的查询。
(5)退票信息管理功能
此模块用于退票信息的管理,包括对订单号、旅客姓名、联系方式、证件号码的查询。
2.3数据词典
经分析之后,本系统要用到五个基本表:
航班信息表,航班座位情况表,旅客订票信息表,取票和账单信息表,退票信息表。
数据结构定义如表:
数据结构名
含义说明
组成
航班信息表
定义了航班
的有关信息
航班号,起飞地,目的地,起飞时间,票价
航班座位情况表
定义了航班座位有关信息
航班号,座位号,座位信息,机票类型
旅客订票信息表
定义了旅客有关信息
旅客姓名,身份证号,性别,电话号
取票和账单信息表
定义了取票通知相关有关信息
旅客姓名,取票时间,航班号,座位号,机票类型
退票信息表
定义了退票旅客的有关信息
旅客姓名,身份证号,订单号,电话号
机票预订系统的主要数据字典如下:
(1)航班信息
数据流来源:
航班管理
数据流去向:
航班安排
数据项组成:
(2)航班座位情况
数据流来源:
航班管理和订票情况
数据流去向:
旅客座位
数据项组成:
(3)旅客信息
确定旅客信息后管理人员输入系统
安排顾客的航班
(4)取票通知和账单信息
打印取票通知和账单
核对订票信息
(5)退票信息
旅客退票申请
订票信息申请退票
3概念结构设计
3.1概念结构设计的方法与步骤
1.概念结构设计的方法
概念设计阶段我采用自底向上的方法,即自顶向下的进行需求分析,然后再自底向上的进行概念结构设计。
对已经细化到无法再分的阶段逐步集成在一起,最终合成一个全局概念模式。
2.概念结构设计的步骤
第一步是进行局部视图的设计:
由于高层的数据流图只能反映系统的概貌,而中层流图能较好的反映系统中各局部应用的子系统组成。
因此我们先逐一的设计分E-R图。
第二步是进行视图的集成:
各子系统的E-R图设计好之后,下一步就是要将所有的分E-R图合成一个系统的总E-R图,一般有两个方式,多个分E-R图一次集成,另一种是一次集成两个分E-R图。
我想采用一次集成两个分E-R图的方式。
3.2局部E-R图设计
根据需求分析抽象出信息结构,可得该系统的E-R图。
(1)航班信息E-R图,如图3.1所示。
图3.1航班信息E-R图
(2)航班座位信息E-R图,如图3.2所示。
图3.2机票信息E-R图
(3)旅客E-R图,如图3.3所示。
图3.3旅客E-R图
(4)取票通知E-R图,如图3.4所示。
图3.4取票通知E-R图
(5)退票信息E-R图,如图3.5所示。
图3.5退票信息E-R图
3.3总体概念E-R图结构
经过逐步细化再进行每两个一集成初步形成一个E-R图,最后得到图3.6总体概念结构E-R图。
图3.6系统总体结构E-R图
4逻辑结构设计
4.1逻辑结构设计
(1)E-R图向关系模型的转换
将图3.6总体概念结构E-R图转化成关系模型。
退票信息(订单号,旅客姓名,联系方式,证件号码)
旅客(旅客姓名,证件号码,联系方式,性别)
航班信息表(航班号,票价,起飞地,目的地,起飞时间)
取票通知单(旅客姓名,取票时间,证件号码,航班号,座位号)
机票信息表(座位号,航班号,座位信息,机票类型)
(2)数据模型的优化
将转化的关系模式进行优化,最终达到第三范式。
①确定数据依赖
退票信息(订单号,旅客姓名,联系方式,证件号码)根据这个关系写出数据依赖
订单号→旅客姓名,订单号→联系方式,订单号→证件号码
旅客姓名→证件号码,旅客姓名→联系方式,旅客姓名→性别
航班信息表(航班号,票价,起飞地,目的地,起飞时间)
航班号→起飞地,航班号→票价,航班号→目的地,航班号→起飞时间
取票通知单(旅客姓名,取票时间,航班号,座位号)
旅客姓名→取票时间,旅客姓名→航班号,旅客姓名→座位号,
(座位号,航班号)→舱位类型,(座位号,航班号,座位信息)→机票类型
②对各关系模式间数据依赖进行极小化处理,消除冗余
旅客姓名→性别,旅客姓名→取票时间,旅客姓名→航班号,旅客姓名→座位号,旅客姓名→机票类型
航班号→起飞地,航班号→目的地,航班号→起飞时间
(座位号,航班号)→座位信息
③看这些模式是否符合要求,确定是否要对某些模式进行合并或者分解
最终分解成第三范式:
(订单号,联系方式,证件号码)(订单号,旅客姓名)(旅客姓名,取票时间,性别,机票类型)(旅客姓名,航班号)(旅客姓名,座位号)(航班号,座位号,票价)(航班号,起飞地,目的地,起飞时间)
(3)数据库的结构
根据总体结构图设计机票预定系统基本表结构,其相应标的定义如下:
表4-1航班信息系统的结构
字段名
数据类型
长度
约束
描述
flightnumber
decimal
主键
航班号
takeoffplace
varchar
50
不为空
起飞地
destination
目的地
flighttime
time
起飞时间
price
int
票价
表4-2航班座位信息表
seatnumber
座位号
seatmessage
座位信息
flighttickettype
机票类型
表4-3旅客信息系统的结构
passagername
旅客姓名
id
身份证号
telephonenumber
联系方式
sex
性别
表4-4取票和账单信息系统的结构
passagername
gettickettime
取票时间
表4-5退票信息系统的结构
orderform
订单号
证件号码
4.2数据库表的建立
根据数据库的基本表结构分别建立5个基本表:
(1)创建航班信息表
(2)创建航班座位信息表
(3)创建旅客信息表
(4)创建取票和账单信息表
(5)创建退票信息表
5物理结构设计
数据库物理设计是指设计出数据库的物理数据模型,它是数据库在物理设备上的具体实现,即数据库服务器物理空间上的表空间、表、字段、索引、视图、存储过程、触发器以及相应的数字字典的设计。
经过数据库的需求分析和概念模型设计,得到数据库的逻辑结构,现在可以设计好的逻辑结构在SQLserver中建立数据库及数据库的数据表。
5.1表的建立与数据载入
需要明确数据库需要建立几张表,以及每个表中所要包括的属性。
在建立表的过程中。
要对每个表进行字段属性的设置。
(至少包括5张表,每个表都有主键;
根据实际情况,建立视图)
在机票预订系统中,主要建立了5个表,分别是:
5.2视图建立
视图是查看数据库表中数据的一种方式。
视视图提供了存储预定义的查询语句作为数据库中的对象以备以后使用的能力。
视图是一种逻辑对象,是一种虚拟表。
在机票预订系统中,我建立了两个视图。
分别是航班和座位视图和旅客和取票信息视图。
他们分别通过飞机编号也就是flightnumber项和旅客信息也就是passagenumber项联系起来。
5.3索引建立
索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
索引依赖于表建立,它提供了数据库中编排表中数据的内部方法。
在机票预订系统中,我建立了三个索引,分别是在航班信息表中建立了flightnumber索引,在旅客信息表中建立passagename索引,在航班座位信息表中建立了seatnumber索引。
索引类型为唯一性的非聚集索引。
5.4存储过程
我创建了三个存储过程,输出三个表的全部信息。
分别是航班信息表、航班座位信息表、旅客信息表。
命令为:
CREATEPROCaaa
AS
SELECT*
FROM航班信息
CREATEPROCbbb
FROM航班座位信息
CREATEPROCccc
FROM旅客信息
5.5触发器
触发器是一种实施复杂的完整性约束的特殊存储过程,它在SQLserver进行某个特定的表修改时由SQLServer自动执行。
触发器一般用于加强数据库的某些使用规则。
在机票管理系统中,我建立了一个DDL触发器,用于保护当前SQLServer服务器里的所有数据库不被删除。
具体代码为:
CREATETRIGGERnotdelete
ONallserver
FORDROP_DATABASE
PRINT’不能删除数据库’
ROLLBACK
GO
另外分别在航班信息表、航班座位信息表、旅客信息表、取票通知和账单这四个表中建立了四个触发器,对于表中的添加和更改数据,提示错误信息。
代码为:
CREATETRIGGERaONhangbanxinxi
FORINSERT,UPDATE
ASRAISERROR('
不能添加和更新数据'
16,1)
ROLLBACKTRANSACTION
CREATETRIGGERbONhangbanzuoweixinxi
CREATETRIGGERcONlvkexinxi
CREATETRIGGERdONqupiaotongzhihezhangdan
5.6创建登陆账户和添加数据库用户
在实训中,我利用SQL创建了一个“login1”的登陆账号。
密码为123456。
在一个数据库中,用户账号唯一标识一个用户,用户对数据库的访问权限以及对数据库对象的所有关系都是通过用户账号来控制的。
在机票预订系统中,我创建了一个用户名为user1的用户。
6数据流图及程序结构框图
6.1功能模块图
根据所需的功能,可以设计出系统的总体功能模块,如图6.1所示。
图6.1机票预订系统功能模块示意图
取票信息管理模块的细化功能模块如图6.2所示。
图6.2取票信息管理模块
退票信息管理模块的细化功能模块如图6.3所示。
图6.3退票信息管理模块
6.2数据流图
图6.40层数据流图
图6.51层数据流图
7界面设计与功能测试
7.1登录界面及代码
代码如下:
PrivateDeclareFunctionGetUserNameLib"
advapi32.dll"
Alias"
GetUserNameA"
(ByVallpbufferAsString,nSizeAsLong)AsLong
PublicOKAsBoolean
PrivateSubForm_Load()
DimsBufferAsString
DimlSizeAsLong
sBuffer=Space$(255)
lSize=Len(sBuffer)
CallGetUserName(sBuffer,lSize)
IflSize>
0Then
txtUserName.Text=Left$(sBuffer,lSize)
Else
txtUserName.Text=vbNullString
EndIf
EndSub
PrivateSubcmdCancel_Click()
OK=False
Me.Hide
PrivateSubcmdOK_Click()
'
'
ToDo:
createtestforcorrectpassword
checkforcorrectpassword
IftxtPassword.Text="
"
Then
OK=True
MsgBox"
InvalidPassword,tryagain!
,"
Login"
txtPassword.SetFocus
txtPassword.SelStart=0
txtPassword.SelLength=Len(txtPassword.Text)
7.2进入系统界面
PrivateSubMDIForm_Load()
Me.Left=GetSetting(App.Title,"
Settings"
"
MainLeft"
1000)
Me.Top=GetSetting(App.Title,"
MainTop"
Me.Width=GetSetting(App.Title,"
MainWidth"
6500)
Me.Height=GetSetting(App.Title,"
MainHeight"
EndSub
PrivateSubMDIForm_Unload(CancelAsInteger)
IfMe.WindowState<
>
vbMinimizedThen
SaveSettingApp.Title,"
Me.Left
Me.Top
Me.Width
Me.Height
PrivateSubmenuAirline_Click()
frmAirline.txtSQL="
select*fromairlineInfo"
frmAirline.Show0
PrivateSubmenuBookticket_Click()
frmTicket.txtSQL="
select*fromticketInfo"
frmTicket.Show0
PrivateSubmenuCarbin_Click()
frmService.txtSQL="
select*fromserviceInfo"
frmService.Show0
PrivateSubmenuCtype_Click()
frmcType.txtSQL="
select*fromcustomerType"
frmcType.Show0
PrivateSubmenuCustomer_Click()
frmCustomer.txtSQL="
select*fromcustomerInfo"
frmCustomer.Show0
PrivateSubmenuPlane_Click()
frmPlane.txtSQL="
select*fromplaneInfo"
frmPlane.Show0
PrivateSubsearchcustom_Click()
frmCustomer.Show1
7.3订票过程
ShowTitle
ShowData
PrivateSubForm_Resize()
IfMe.WindowState<
vbMinimizedAndfMainForm.WindowState<
边界处理
IfMe.ScaleHeight<
10*lblTitle.HeightThen
ExitSub
IfMe.ScaleWidth<
lblTitle.Width+lblTitle.Width/2Then
控制控件的位置
lblTitle.Top=lblTitle.Height
lblTitle.Left=(Me.Width-lblTitle.Width)/2
msgList.Top=lblTitle.Top+lblTitle.Height+lblTitle.Height/2
msgList.Width=Me.ScaleWidth-200
msgList.Left=Me.ScaleLeft+100
msgList.Height=Me.ScaleHei