收藏 分销(赏)

毕业设计-课程设计飞机订票系统.doc

上传人:快乐****生活 文档编号:4729422 上传时间:2024-10-11 格式:DOC 页数:21 大小:356KB 下载积分:10 金币
下载 相关 举报
毕业设计-课程设计飞机订票系统.doc_第1页
第1页 / 共21页
毕业设计-课程设计飞机订票系统.doc_第2页
第2页 / 共21页


点击查看更多>>
资源描述
数据库课程设计 题 目 ____飞机订票系统__ _ 学 院 计算机学院 专 业 计算机科学与技术 年级班别 学 号 学生姓名 指导教师 左亚尧 2013 年 1 月 15 日 目 录 一、需求分析…………………………………………………………….1 二、系统设计…………………………………………………………….3 三、详细设计……………………………………………………………6 四、课程设计总结………………………………………………………16 五、参考文献……………………………………………………………16 六、附录…………………………………………………………………16 一、需求分析 (一)系统综合需求 航空订票管理系统主要是为机场、航空公司和客户三方服务。航空公司提供航线和飞机的资料,机场则对在本机场起飞和降落的航班和机票进行管理,而客户能得到的服务应该有查询航班路线和剩余票数,以及网上订票等功能。 客户可以分为两类:一类是普通客户,对于普通客户只有普通的查询功能和订票功能没有相应的票价优惠;另一类是经常旅客,需要办理注册手续,但增加了里程积分功能和积分优惠政策。机场还要有紧急应对措施,在航班出现延误时,要发送相应的信息。 (二)系统功能 航班查询:根据用户输入的“起飞机场” 和“降落机场”信息找到符合要求的航班号,并显示相应的起飞时间、飞行里程、各舱等的余票情况、各舱等的票价情况。供用户进行选择。 订票: 根据用户输入的“所订航班号”和“订票乘客信息”,为用户查看该航班是否有余票:有则生成一条新的票务信息,根据该用户的积分情况制定票价,修改其积分里程;若已无余票,则将该乘客登机在侯票名单之中。 退票:根据用户输入的“所退票流水号”信息,修改订票乘客的积分信息,将相关的票务记录删除;并在侯票记录中找到符合航班要求的第一名乘客,为其办理订票服务,相关的修改其积分。 售票情况统计:统计每个航班的各个舱位等级的已售票数目,侯票数目。 积分功能:为每一个已订购的乘客记录其飞行里程积分,当积分达到一定程度后,为其提供打折的票价。 航班延误:当要延误一个航班时,找到已订购该航班的乘客,发送提示信息。 2.数据字典 该软件的数据库由下述四张数据表组成: 1、航空公司: Company 字段 字段名 类型 宽度 说明 1 company_name varchar 20 航空公司 2 phone varchar 15 公司电话 2、飞机信息:Plane 字段 字段名 类型 宽度 说明 1 plane_number varchar 1.0 飞机编号 2 plane_type varchar 20 飞机类型 3 quota_f int 头等舱定额数, 4 quota_s int 普通舱定额数 5 company_name varchar 20 所属公司 3、航线信息 Line 字段 字段名 类型 宽度 说明 1 line_number varchar 10 航线号码 2 airport_s varchar 20 起飞地点 3 airport_e varchar 20 起飞终点 4 distance int 距离 5 company_name varchar 20 所属公司 4、航班信息: Flight 字段 字段名 类型 宽度 说明 1 flight_number varchar 10 航班信息 2 plane_number varchar 10 飞机号 3 line_number varchar 10 航线 4 price_f int 头等舱价格 5 price_s int 普通舱价格 6 flydate varchar 20 飞行日期 5、客户信息 : Passenger 字段 字段名 类型 宽度 说明 1 passenger_name varchar 10 客户名 2 distances int 积分 3 E_mail varchar 20 邮箱 6、订票信息 :Ticket 字段 字段名 类型 宽度 说明 1 ticket_number int 票号 (自动增一) 2 flight_number varchar 10 航班号 3 passenger_name varchar 10 乘客名 4 cabin varchar 头等舱还是普通舱 5 pay int 价格 6、候选票信息 : Wait 字段 字段名 类型 宽度 说明 1 passenger_name varchar 乘客名 2 flight_number varchar 10 航班号 3 cabin varchar 头等舱还是普通舱 4 E_mail varchar 10 邮箱 三、系统设计 (一)数据库概念设计 E-R图如下: (二)数据库逻辑设计 将数据库的概念模型转换为关系模型: 航空公司表:(公司名称,公司电话); 飞机表:(飞机号, 机型, 头等舱定额数, 普通舱定额数, 所属航空公司); 航线表:(航线号, 起飞机场, 降落机场, 飞行里程, 所属航空公司); 航班表:(航班号, 执行飞机号, 所飞航线号, 头等舱票价, 普通舱票价, 起飞时间); 乘客表:(乘客姓名, 里程积分, E_mail); 机票表:(机票流水号, 所乘航班号,订票乘客姓名, 所乘舱位等级, 票价); 侯票表:(所侯航班, 侯票乘客姓名, 所需舱位等级, 乘客E_mail); (三)数据库与数据表设计 ——物理结构设计 在SQL数据库中需要建立3个数据表:表、部门信息数据表和工资数据表。 1.数据库与数据表设计 ①company ②Flight ③ Line ④Passenger ⑤Plane ⑥Ticket ⑦Wait 2.数据完整性设计 1) 给每个表实施主键约束。 主键——图中PK 2)实施CHECK约束 全部not null 3)外键约束 外键——途中FK 4)惟一约束 每个表的主键需定义为惟一性: 5) 强制约束 6)规则 cabin 约束为 (cabin = '头等舱' or cabin = '普通舱')两种类型。 四、详细设计 (一)建数据库 CREATE DATABASE PLANE_DB ON PRIMARY( NAME=PLANE_DB , FILENAME='D:\PLANE_DB .mdf', SIZE=4MB, MAXSIZE=6MB, FILEGROWTH=2MB ) LOG ON (NAME ='PLANE_DB _log', FILENAME ='D:\PLANE_DB .ldf', SIZE=1MB,MAXSIZE=25MB,FILEGROWTH=10%) (二)建表 create table Company ( company_name varchar(20) primary key, phone varchar(15) not null) create table Plane ( plane_number varchar(10) primary key, plane_type varchar(20) not null, quota_f int not null, quota_s int not null, company_name varchar(20) foreign key references Company(company_name) ) create table Line ( line_number varchar(10) primary key, airport_s varchar(20) not null, airport_e varchar(20) not null, distance int not null, company_name varchar(20) foreign key references Company(company_name) ) create table Flight ( flight_number varchar(10) primary key, plane_number varchar(10) foreign key references Plane(plane_number) , line_number varchar(10) foreign key references Line(line_number) , price_f int not null, price_s int not null, flydate varchar(20) not null) create table Passenger ( passenger_name varchar(10) primary key, distances int not null, E_mail varchar(20) not null) create table Ticket ( ticket_number int identity(1, 1) primary key, flight_number varchar(10) foreign key references Flight(flight_number), passenger_name varchar(10) foreign key references Passenger(passenger_name), cabin varchar(10) check (cabin = '头等舱' or cabin = '普通舱') not null, pay int check (pay>0) not null) create table Wait ( passenger_name varchar(10) foreign key references Passenger(passenger_name) , flight_number varchar(10) foreign key references Flight(flight_number) , cabin_w varchar(10) not null, primary key (passenger_name, flight_number), E_mail varchar(20) not null) (三)视图 (1)查询头等舱订票量 create view flight_cf (flight_number, count_f) as select flight_number, count(ticket_number) from Ticket where cabin = '头等舱' group by flight_number (2)查询普通舱订票量 create view flight_cs (flight_number, count_s) as select flight_number, count(ticket_number) from Ticket where cabin = '普通舱' group by flight_number (3)查询某航班的普通舱和头等舱总量 create view flight_q (flight_number, quota_f, quota_s) as select Flight.flight_number, quota_f, quota_s from Flight left join Plane on Flight.plane_number = Plane.plane_number (四)存储过程 --订票 create proc book_ticket @flight_number varchar (10), @passenger_name varchar (10), @cabin varchar(10), @E_mail varchar(20) as begin begin tran declare @remain varchar(10), @pay float, @distance int if (@cabin = '头等舱') begin select @remain = remain_f from flight_choose where flight_number = @flight_number select @pay = price_f from flight_choose where flight_number = @flight_number end else begin select @remain = remain_s from flight_choose where flight_number = @flight_number select @pay = price_s from flight_choose where flight_number = @flight_number end select @distance = distance from flight_choose where flight_number = @flight_number if (@remain = '有') begin if (exists(select passenger_name from Passenger where passenger_name = @passenger_name)) begin declare @distances float select @distances = distances from Passenger where passenger_name = @passenger_name if (@distances >= 200000) select @distances = 0.8 else if (@distances >= 100000) select @distances = 0.9 insert into Ticket (flight_number, passenger_name, cabin, pay) values (@flight_number, @passenger_name, @cabin, (@pay * @distances)) update Passenger set distances = distances + @distance where passenger_name = @passenger_name update Passenger set E_mail = @E_mail where passenger_name = @passenger_name end else begin insert into Passenger (passenger_name, distances, E_mail) values (@passenger_name, @distance, @E_mail) insert into Ticket (flight_number, passenger_name, cabin, pay) values (@flight_number, @passenger_name, @cabin, @pay) end end else begin if (exists(select passenger_name from Passenger where passenger_name = @passenger_name)) update Passenger set E_mail = @E_mail where passenger_name = @passenger_name else insert into Passenger (passenger_name, distances, E_mail) values (@passenger_name, 0, @E_mail) insert into Wait (flight_number, passenger_name, cabin_w, E_mail) values (@flight_number, @passenger_name, @cabin, @E_mail) end commit tran end --退票 create proc cancel_ticket @ticket_number int as begin begin tran declare @passenger_name varchar(10), @flight_number varchar(10), @cabin varchar(10), @distance int, @pay int select @passenger_name = passenger_name from ticket_info where ticket_number = @ticket_number select @flight_number = flight_number from ticket_info where ticket_number = @ticket_number select @cabin = cabin from ticket_info where ticket_number = @ticket_number select @distance = distance from ticket_info where ticket_number = @ticket_number select @pay = pay from ticket_info where ticket_number = @ticket_number update Passenger set distances = distances - @distance where passenger_name = @passenger_name delete from Ticket where ticket_number = @ticket_number if (exists(select top 1 * from Wait where flight_number = @flight_number and cabin_w = @cabin)) begin select @passenger_name = passenger_name from Wait where flight_number = @flight_number and cabin_w = @cabin insert into Ticket (flight_number, passenger_name, cabin, pay) values (@flight_number, @passenger_name, @cabin, @pay) delete from Wait where passenger_name = @passenger_name and flight_number = @flight_number update Passenger set distances = distances + @distance where passenger_name = @passenger_name end commit tran end (五)触发器 --级联删除飞机所对应的航班 create trigger pln_del on Plane for delete as begin begin tran declare @plane_number varchar(10) select @plane_number = deleted.plane_number from deleted delete from Flight where Flight.plane_number = @plane_number commit tran end --级联删除航线所对应的航班 create trigger lne_del on Line for delete as begin begin tran declare @line_number varchar(10) select @line_number = deleted.line_number from deleted delete from Flight where Flight.line_number = @line_number commit tran end --级联删除航班所对应的票务 create trigger flt_del on Flight for delete as begin begin tran declare @flight_number varchar(10) select @flight_number = deleted.flight_number from deleted delete from Ticket where Ticket.flight_number = @flight_number delete from Wait where Wait.flight_number = @flight_number commit tran end --延误航班时,触发对订票车功乘客的提示 create trigger flt_upd on Flight instead of update as begin begin tran declare @flight_number varchar(10) select @flight_number = inserted.flight_number from inserted select Ticket.passenger_name, E_mail from Ticket, Passenger where Ticket.passenger_name = Passenger.passenger_name and Ticket.flight_number = @flight_number commit tran end (六)索引 (七)运行和维护 1. 关系图的建立 2.简单查询 1)航空公司基本信息情况 代码如下: select * from Company; 2) 航线的基本信息情况 代码如下: select * from Flight; 3)航班的订票信息。 代码如下:select * from Ticket; 4)航线信息 代码如下: select * from Line; 5)查询订票客户 代码如下:select * from Ticket; ; 3.复杂查询 1)查询航班F001所剩下的头等舱座位: 代码如下: select Flight.flight_number as '航班号',(Plane.quota_f-flight_cf.count_f) as '头等舱剩余票数' from Plane,Flight,flight_cf where Flight.Flight_number='F001' AND Flight.plane_number=Plane.plane_number AND flight_cf.flight_number='F001'; 2) 查询航班F001所剩下的普通舱座位: select Flight.flight_number as '航班号',(Plane.quota_s-flight_cs.count_s) as '普通舱剩余票数' from Plane,Flight,flight_cs where Flight.Flight_number='F001' AND Flight.plane_number=Plane.plane_number AND flight_cs.flight_number='F001'; 5.数据库的备份 6.数据的导入与导出 五、课程设计总结 经过一周的时间,同学,互联网的帮助下,基本完成本次课程设计,基本达到了飞机订票系统的要求。 这次数据库课程设计给我的最大的印象是:数据存储在数据库系统有很多种方法。本次实验,我熟悉利用范式来构建数据库的逻辑结构。有的人说:流程是一切的根本;架构是重要的;很多程序要在机子上跑一遍才知道自己理论的不娴熟。计算机就是一门以实验为主的科目。从做这个数据库开始无论遇到什么困难,要学会利用互联网这个资源才能很好地解决问题。正所谓磨刀不误砍柴功,在设计过程中,一开始我习惯凭空想象,不画流程图,但问题百出,后来,试着实验的方法,先,逐步按标准的方法去设计数据库,才是最有效率的。做实例过程中要注意与说明书中数据项数据类型,数据长度等的一致,命令中心输入任何命令都要谨记一条原则,那就是严格按照格式来,考虑各种约束才行。 在本系统的设计与实现的过程中,对于客户来说订票,买票,查询所买的票的飞机信息的主要设计。系统设计部分,包括功能模块设计、数据库结构设计等。系统设计为整个程序构建了骨架,各个功能模块实现各个细节部分。 六、参考文献 [1]  数据库系统概论:高等教育出版社; 七、附录 部分源代码 21
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服