课程设计飞机订票系统-毕业论文.doc
《课程设计飞机订票系统-毕业论文.doc》由会员分享,可在线阅读,更多相关《课程设计飞机订票系统-毕业论文.doc(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- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 飞机 订票 系统 毕业论文
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文