民航订票管理系统Word文档下载推荐.doc
《民航订票管理系统Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《民航订票管理系统Word文档下载推荐.doc(7页珍藏版)》请在冰豆网上搜索。
(3)机场
机场的任务是根据航空公司提供的航线和飞机,安排航班,以及航班的机票。
如果出现晚点等情况,要记录并发送信息,对特殊客户记录其消费信息,并相应提供优惠。
(4)客户订票
客户订票涉及到多个因素:
由客户提出订票申请;
由机场管理航班机票;
对于特殊客户,除给予票价优惠以外,还要累计里程;
订票后需判断是否超员。
这些因素涉及到客户资料、航班资料以及由航空公司提供的航线(里程)和飞机(座位数)资料中所提供的相关数据。
客户订票的操作流程如图C.3所示。
2、概念模型设计
数据库需要表述的信息有以下几种:
(1)航空公司信息
(2)客户信息
(3)飞机信息
(4)航线信息
(5)航班信息
(6)订票信息
(7)特殊客户积分
可以用E/R模型表述该模型的设计,E/R图如图C.4所示。
3、逻辑设计
通过E/R模型到关系模型的转化,可以得到如下关系模式:
(1)Airline(AID,Name,Addr,Cont)
(2)Customer(CID,Name,Cont,IsSpec,Points)
(3)Plane(PID,Type,SeatsNum,AID)
(4)Line(LID,SPosition,EPosition,Distance,AID)
(5)Flight(FID,PID,LID,Ftime,Price)
(6)BookTicket(BID,FID,CID,Pay)
每个关系模式的键码都用下划线标出。
外键码用斜体标出。
4、物理设计
为了提高在表中搜索元组的速度,在实际实现的时候应该基于键码建立索引。
下面各表中建立索引的表项。
(1)Airline(AID)
(2)Customer(CID)
(3)Plane(PID)
(4)Line(LID)
(5)Flight(FID)
(6)BookTicket(BID)
5、用SQL实现设计
(1)建立航空公司表
CREATETABLEAirline(
AIDvarchar(20)PRIMARYKEY,
Namevarchar(100)NOTNULL,
Addrvarchar(100),
Contvarchar(200)
);
(2)建立客户表
CREATETABLECustomer(
CIDvarchar(20)PRIMARYKEY,
Namevarchar(50)NOTNULL,
Contvarchar(200),
IsSpecchar
(1)NOTNULLDEFAULT‘N’,
PointsintNOTNULLDEFAULT0
(3)建立飞机信息表
CREATETABLEPlane(
PIDvarchar(20)PRIMARYKEY,
Typevarchar(50)NOTNULL,
SeatsNumintNOTNULL,
AIDvarchar(20),CONSTRAINTFK_PLANE_AID
FOREIGNKEY(AID)REFERENCESAirline(AID)
(4)建立航线表
CREATETABLELine(
LIDvarchar(20)PRIMARYKEY,
SPositionvarchar(100)NOTNULL,
EPositionvarchar(100)NOTNULL,
DistancerealNOTNULL
AIDvarchar(20),CONSTRAINTFK_LINE_AID
(5)建立航班表
CREATETABLEFlight(
FIDvarchar(20)PRIMARYKEY,
FtimedatetimeNOTNULL,
PIDvarchar(20),CONSTRAINTFK_FLIGHT_PID
FOREIGNKEY(PID)REFERENCESPlane(PID)
LIDvarchar(20),CONSTRAINTFK_FLIGHT_LID
FOREIGNKEY(LID)REFERENCESLine(LID)
PricerealNOTNULL
(6)建立订票表
CREATETABLEBookTicket(
BIDintIDENTITY(1,1)PRIMARYKEY,
FIDvarchar(20),CONSTRAINTFK_BOOKTICKET_FID
FOREIGNKEY(FID)REFERENCESFlight(FID)
CIDvarchar(20),CONSTRAINTFK_BOOKTICKET_CID
FOREIGNKEY(CID)REFERENCESCustomerCID)
PayrealNOTNULL
(7)航空公司操作
1)注册
INSERTINTOAirline(AID,Name,Addr,Cont)
VALUES(#AID,#Name,#Addr,#Cont);
这里的#AID必须是惟一的,否则不可以插入到数据库中.
2)注销
DELETEFROMAirlineWHERE(AID=#AID);
3)修改公司信息
UPDATEAirline
SETName=#Name,Addr=#Addr,Cont=#ContWHERE(AID=#AID);
4)增加飞机
INSERTINTOPlane(PID,Type,SeatsNum,AID)
VALUES(#PID,#Type,#SeatsNum,#AID);
5)删除飞机
DELETEFROMPlaneWHERE(PID=#PID);
6)修改飞机
UPDATEPlane
SETType=#Type,SeatsNum=#SeatsNumWHERE(PID=#PID);
7)增加航线
INSERTINTOLine(LID,SPosition,EPosition,Distance,AID)
VALUES(#LID,#SPosition,#EPosition,#Distance,#AID);
8)删除航线
DELETEFROMLineWHERE(LID=#LID);
9)修改航线
UPDATELine
SETSPosition=#SPosition,EPosition=#EPosition,Distance=#DistanceWHERE(PID=#PID);
(8)客户
INSERTINTOCustomer(CID,Name,Cont)
VALUES(#CID,#Name,#Cont);
客户注册的时候,CID必须是惟一的,否则不可以插入数据库。
DELETEFROMCustomerWHERE(CID=#CID);
3)修改个人信息
SETName=#Name,Cont=#ContWHERE(CID=#CID);
4)订票
CREATEPROCBook_Ticket
@FIDvarchar(20),
@CIDvarchar(6)
AS
DECLARE@TransNameVARCHAR(20)
SELECT@TransName=’Book_Ticket’
BEGINTRANSACTION@TransName
DECLARE@bookedint,@seatint,@IsSpecchar
(1)
DECLARE@distancereal,@discountreal,@distreal,@pricereal
----查看客户是否为特殊客户,如果不是,票价不打折扣。
----否则如果客户累计航程超过10万公里,票价打九折;
超过20公里,打八折。
----下面的程序用来计算折扣
SELECT@IsSpec=IsSpec,@distance=Points
FROMCustomerWHERECID=@CID
SELECT@discount=1
IF@IsSpec=’Y’
BEGIN
IF@distance>
SELECT@distance=0.8
ELSEIF@distance>
SELECT@distance=0.9
END
----选择出票价
SELECT@price=PriceFROMFlightWHEREFID=@FID
----加入客户订票信息
INSERTINTOBookTicket(FID,CID,Pay)
VALUES(@FID,@CID,@price*@discount)
----将客户新订票里程的信息累计到用户信息里面
SELECT@dist=DistanceFROMLine
WHERELID=(SELECTLIDFROMFlightWHEREFID=@FID)
UPDATECustomer
SETPoints=Points+@distWHERE(CID=#CID);
----查看客户订票后,是否超过可容纳的座位数目,如果超过,取消所有操作。
SELECT@seats=SeatsNumFROMPlane
WHEREPID=(SELECTPIDFROMFlightWHEREFID=@FID)
SELECTbooked=count(*)FROMBookTicketWHEREFID=@FID
IF@booked>
@seats
ROLLBACKTRANSACTION@TransName
ELSE
COMMITTRANSACTION@TramsName
GO
订票过程一定要做成事务,因为