数据库课程设计航空订票管理系统1.docx

上传人:b****7 文档编号:11204052 上传时间:2023-02-25 格式:DOCX 页数:23 大小:250.07KB
下载 相关 举报
数据库课程设计航空订票管理系统1.docx_第1页
第1页 / 共23页
数据库课程设计航空订票管理系统1.docx_第2页
第2页 / 共23页
数据库课程设计航空订票管理系统1.docx_第3页
第3页 / 共23页
数据库课程设计航空订票管理系统1.docx_第4页
第4页 / 共23页
数据库课程设计航空订票管理系统1.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

数据库课程设计航空订票管理系统1.docx

《数据库课程设计航空订票管理系统1.docx》由会员分享,可在线阅读,更多相关《数据库课程设计航空订票管理系统1.docx(23页珍藏版)》请在冰豆网上搜索。

数据库课程设计航空订票管理系统1.docx

数据库课程设计航空订票管理系统1

 

数据库课程设计

 

学院计算机

专业计算机科学与技术

班级

学号

姓名

指导教师左亚饶

(2013年1月)

目录

一、需求分析3

二、概念结构设计4

三、逻辑结构设计4

四、数据库设计实现及运行5

五、系统实现主要模块描述以及关键代码18

七、心得与体会23

一、需求分析

1)、问题描述:

航空订票管理系统主要是为机场、航空公司和客户三方服务。

航空公司提供航线和飞机的资料,机场则对在本机场起飞和降落的航班和机票进行管理,而客户能得到的服务应该有查询航班路线和剩余票数,以及网上订票等功能。

客户可以分为两类:

一类是普通客户,对于普通客户只有普通的查询功能和订票功能没有相应的票价优惠;另一类是经常旅客,需要办理注册手续,但增加了里程积分功能和积分优惠政策。

机场还要有紧急应对措施,在航班出现延误时,要发送相应的信息。

2)、系统功能描述:

航班查询:

根据用户输入的“起飞机场”和“降落机场”信息找到符合要求的航班号,并显示相应的起飞时间、飞行里程、各舱等的余票情况、各舱等的票价情况。

供用户进行选择。

订票:

根据用户输入的“所订航班号”和“订票乘客信息”,为用户查看该航班是否有余票:

有则生成一条新的票务信息,根据该用户的积分情况制定票价,修改其积分里程;若已无余票,则将该乘客登机在侯票名单之中。

退票:

根据用户输入的“所退票流水号”信息,修改订票乘客的积分信息,将相关的票务记录删除;并在侯票记录中找到符合航班要求的第一名乘客,为其办理订票服务,相关的修改其积分。

售票情况统计:

统计每个航班的各个舱位等级的已售票数目,侯票数目。

积分功能:

为每一个已订购的乘客记录其飞行里程积分,当积分达到一定程度后,为其提供打折的票价。

航班延误:

当要延误一个航班时,找到已订购该航班的乘客,发送提示信息。

3)、有何安全性与完整性方面的要求:

订票事务的原子性:

每个乘客的订票过程是互斥执行的,防止有一张票卖给两个人的情况发生。

通过订票存储过程实现。

飞机、航班、票务的级联:

当删除一个飞机,级联的删除该飞机所飞行的航班,以及订购了该航班的乘客订票。

通过触发器实现。

二、概念结构设计

画出系统整体的E-R模型;并对模型中所出现的实体及属性等信息加以说明。

三、逻辑结构设计

1)、模式设计:

按系统整体E-R模型,写出关系模式;并利用数据字典加以描述。

航空公司表:

(公司名称,公司网址);

飞机表:

(飞机号,机型,头等舱定额数,普通舱定额数,所属航空公司);

航线表:

(航线号,起飞机场,降落机场,飞行里程,所属航空公司);

航班表:

(航班号,执行飞机号,所飞航线号,头等舱票价,普通舱票价,起飞时间);

乘客表:

(乘客姓名,里程积分,E_mail);

机票表:

(机票流水号,所乘航班号,订票乘客姓名,所乘舱位等级,票价);

侯票表:

(所侯航班,侯票乘客姓名,所需舱位等级,乘客E_mail);

除各主键外,其余各非主属性也为非空。

“头等舱定额数,普通舱定额数,飞行里程,机票流水号,票价,里程积分”为数值型,约束不能小于0,其余为字符型,舱位等级只能选“头等舱或普通舱”。

2)、子模式设计:

即针对自己的设计模块的应用需定义什么样的视图表结构;并利用数据字典加以描述。

售票情况视图:

(航班号,头等舱数目,头等舱已售出数目,头等舱侯票数目,普通舱数目,普通舱已售出数目,普通舱侯票数目)

用于方便机场管理票务,统计各舱等的售票、须票情况。

航班选择视图:

(航班号,起飞机场,降落机场,飞行里程,头等舱票价,头等舱是否有票,普通舱票价,普通舱是否有票)

提供航班飞行的基本情况,包括判断是否有票,以便选择订票。

票务信息视图:

(机票流水号,订票乘客姓名,所订航班,所订舱等,票价,飞行里程)

提供机票的相关信息,以便退票时事物处理。

 

四、数据库设计实现及运行

1)、数据库的创建

T-SQL语句:

createdatabaseBookTicket_6222on(

name=N'BookTicket_6222_Data',filename=N'C:

\ProgramFiles\MicrosoftSQLServer\MSSQL\data\BookTicket_6222_Data.MDF',

size=1,filegrowth=10%)

logon(

name=N'BookTicket_6222_Log',filename=N'C:

\ProgramFiles\MicrosoftSQLServer\MSSQL\data\BookTicket_6222_Log.LDF',

size=1,filegrowth=10%)

2)、数据表的创建(可同时在创建时定义相关的约束)

T-SQL语句:

createtableCompany(

company_namevarchar(20)constraintpk_cpyprimarykey,

phonevarchar(15)notnull)

createtablePlane(

plane_numbervarchar(10)constraintpk_plnprimarykey,

plane_typevarchar(20)notnull,

quota_fintnotnull,

quota_sintnotnull,

company_namevarchar(20)constraintfk_cp

foreignkeyreferencesCompany(company_name)ondeletecascade)

createtableLine(

line_numbervarchar(10)constraintpk_lneprimarykey,

airport_svarchar(20)notnull,

airport_evarchar(20)notnull,

distanceintnotnull,

company_namevarchar(20)constraintfk_cl

foreignkeyreferencesCompany(company_name)ondeletecascade)

createtableFlight(

flight_numbervarchar(10)constraintpk_fltprimarykey,

plane_numbervarchar(10)constraintfk_pf

foreignkeyreferencesPlane(plane_number)ondeletecascade,

line_numbervarchar(10)constraintfk_lf

foreignkeyreferencesLine(line_number)ondeletecascade,

price_fintnotnull,

price_sintnotnull,

flydatevarchar(20)notnull)

createtablePassenger(

passenger_namevarchar(10)constraintpk_psgprimarykey,

distancesintnotnull,

E_mailvarchar(20)notnull)

createtableTicket(

ticket_numberintidentity(1,1)constraintpk_tktprimarykey,

flight_numbervarchar(10)constraintfk_ft

foreignkeyreferencesFlight(flight_number)ondeletecascade,

passenger_namevarchar(10)constraintfk_pt

foreignkeyreferencesPassenger(passenger_name)ondeletecascade,

cabinvarchar(10)constraintch_cbncheck

(cabin='头等舱'orcabin='普通舱')notnull,

payintconstraintch_paycheck

(pay>0)notnull)

createtableWait(

passenger_namevarchar(10)constraintfk_pw

foreignkeyreferencesPassenger(passenger_name)ondeletecascade,

flight_numbervarchar(10)constraintfk_fw

foreignkeyreferencesFlight(flight_number)ondeletecascade,

cabin_wvarchar(10)notnull,

primarykey(passenger_name,flight_number),

E_mailvarchar(20)notnull)

3)、视图的创建(仅需给出自己设计模块中所用的视图)

T-SQL语句:

--方便乘客进行航班查询的视图

createviewflight_cf(flight_number,count_f)

as

selectflight_number,count(ticket_number)

fromTicketwherecabin='头等舱'groupbyflight_number

 

createviewflight_cs(flight_number,count_s)

as

selectflight_number,count(ticket_number)

fromTicketwherecabin='普通舱'groupbyflight_number

createviewflight_wf(flight_number,wait_f)

as

selectflight_number,count(passenger_name)

fromWaitwherecabin_w='头等舱'groupbyflight_number

createviewflight_ws(flight_number,wait_s)

as

selectflight_number,count(passenger_name)

fromWaitwherecabin_w='普通舱'groupbyflight_number

createviewflight_q(flight_number,quota_f,quota_s)

as

selectFlight.flight_number,quota_f,quota_s

fromFlightleftjoinPlaneonFlight.plane_number=Plane.plane_number

createviewbook_info(flight_number,quota_f,count_f,wait_f,quota_s,count_s,wait_s)

as

selectflight_q.flight_number,quota_f,count_f,wait_f,quota_s,count_s,wait_s

fromflight_qleftjoinflight_cfonflight_q.flight_number=flight_cf.flight_number

leftjoinflight_csonflight_q.flight_number=flight_cs.flight_number

leftjoinflight_wfonflight_q.flight_number=flight_wf.flight_number

leftjoinflight_wsonflight_q.flight_number=flight_ws.flight_number

createviewflight_choose(flight_number,airport_s,airport_e,distance,flydate,price_f,remain_f,price_s,remain_s)

as

selectFlight.flight_number,airport_s,airport_e,distance,flydate,price_f,

remain_f=case

when(quota_f-count_f)<=0then'无'

else'有'

end,price_s,

remain_s=case

when(quota_s-count_s)<=0then'无'

else'有'

end

fromLine,Flight,book_info

whereLine.line_number=Flight.line_numberandFlight.flight_number=book_info.flight_number

createviewticket_info(ticket_number,passenger_name,flight_number,cabin,pay,distance)

as

selectticket_number,passenger_name,Ticket.flight_number,cabin,pay,flight_choose.distance

fromTicketleftjoinflight_chooseonTicket.flight_number=flight_choose.flight_number

4)、存储过程的定义实现(仅需给出自己设计模块中所用的)

T-SQL语句:

--订票

createprocbook_ticket

@flight_numbervarchar(10),@passenger_namevarchar(10),@cabinvarchar(10),@E_mailvarchar(20)

as

begin

begintran

declare@remainvarchar(10),@payfloat,@distanceint

if(@cabin='头等舱')

begin

select@remain=remain_ffromflight_choosewhereflight_number=@flight_number

select@pay=price_ffromflight_choosewhereflight_number=@flight_number

end

else

begin

select@remain=remain_sfromflight_choosewhereflight_number=@flight_number

select@pay=price_sfromflight_choosewhereflight_number=@flight_number

end

select@distance=distancefromflight_choosewhereflight_number=@flight_number

if(@remain='有')

begin

if(exists(selectpassenger_namefromPassengerwherepassenger_name=@passenger_name))

begin

declare@distancesfloat

select@distances=distancesfromPassengerwherepassenger_name=@passenger_name

if(@distances>=200000)

select@distances=0.8

elseif(@distances>=100000)

select@distances=0.9

insertintoTicket(flight_number,passenger_name,cabin,pay)

values(@flight_number,@passenger_name,@cabin,(@pay*@distances))

updatePassengersetdistances=distances+@distancewherepassenger_name=@passenger_name

updatePassengersetE_mail=@E_mailwherepassenger_name=@passenger_name

end

else

begin

insertintoPassenger(passenger_name,distances,E_mail)

values(@passenger_name,@distance,@E_mail)

insertintoTicket(flight_number,passenger_name,cabin,pay)

values(@flight_number,@passenger_name,@cabin,@pay)

end

end

else

begin

if(exists(selectpassenger_namefromPassengerwherepassenger_name=@passenger_name))

updatePassengersetE_mail=@E_mailwherepassenger_name=@passenger_name

else

insertintoPassenger(passenger_name,distances,E_mail)

values(@passenger_name,0,@E_mail)

insertintoWait(flight_number,passenger_name,cabin_w,E_mail)

values(@flight_number,@passenger_name,@cabin,@E_mail)

end

committran

end

--退票

createproccancel_ticket

@ticket_numberint

as

begin

begintran

declare@passenger_namevarchar(10),@flight_numbervarchar(10),@cabinvarchar(10),@distanceint,@payint

select@passenger_name=passenger_namefromticket_infowhereticket_number=@ticket_number

select@flight_number=flight_numberfromticket_infowhereticket_number=@ticket_number

select@cabin=cabinfromticket_infowhereticket_number=@ticket_number

select@distance=distancefromticket_infowhereticket_number=@ticket_number

select@pay=payfromticket_infowhereticket_number=@ticket_number

updatePassengersetdistances=distances-@distancewherepassenger_name=@passenger_name

deletefromTicketwhereticket_number=@ticket_number

if(exists(selecttop1*fromWaitwhereflight_number=@flight_numberandcabin_w=@cabin))

begin

select@passenger_name=passenger_namefromWaitwhereflight_number=@flight_numberandcabin_w=@cabin

insertintoTicket(flight_number,passenger_name,cabin,pay)values(@flight_number,@passenger_name,@cabin,@pay)

deletefromWaitwherepassenger_name=@passenger_nameandflight_number=@flight_number

updatePassengersetdistances=distances+@distancewherepassenger_name=@passenger_name

end

committran

end

在宿主语言中调用存储过程代码段(粘贴):

publicvoidexecuteProc(intticket_number){

try{

con=DriverManager.getConnection(url);

PreparedStatementcmd=con.prepareStatement("{callcancel_ticket(?

)}");

cmd.setInt(1,ticket_number);

cmd.executeUpdate();

}catch(Exceptionex){

ex.printStackTrace();

}

}

publicvoidexecuteProc(Stringfn,Stringpn,Stringcb,Stringem){

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1