机票预订系统 课程设计 数据库_第1页
机票预订系统 课程设计 数据库_第2页
机票预订系统 课程设计 数据库_第3页
机票预订系统 课程设计 数据库_第4页
机票预订系统 课程设计 数据库_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1概述应用对数据库技术及应用的理论学习,通过上机实践的方式将理论知识与实践更好的结合起来,巩固所学知识。实践和巩固在课堂教学中学习的关于数据库的有关知识,熟练掌握对于给定实训任务的数据库的创建、基本操作、程序系统的建立和调试以及系统评价。实践和巩固在课堂教学中学习的关于关系数据库原理的有关知识和数据库系统的建立方法,熟练掌握对于给定实际问题,为了建立一个关系数据库信息管理系统,必须得经过系统调研、需求分析、概念设计、逻辑设计、物理设计、系统调试、维护以及系统评价的一般过程,为将来在学习工作中的应用打下基础。1.1课程实训目的与要求课程实训的目的是:本次课程实训的主要任务是运用在数据库原理及应用

2、课程中学到的理论知识来指导实践,了解数据库设计过程及其实现方法,学会用数据库建模的方法解决实际问题。掌握数据库原理、范式理论、规范化等相关知识,掌握数据库分析设计的具体步骤与基本方法,掌握sql语言的基本语法和基本内容,并能运用sql server 2005实现设计数据库,掌握sql server 2005数据库、表、视图、约束、索引、存储过程、触发器的使用,利用一种前台开发工具实现数据库管理系统的开发,实现特定的业务功能。通过综合课程实训,提高实践动手技能,培养独立分析分析问题和解决问题的能力。课程实训的要求:本次课程实训的选题比较灵活,可以是自主选题,也可以自己选择比较感兴趣的题目,重点是

3、完成数据库的分析、设计与实现,题目要符合数据库原理及应用的要求,并且具备一定的难度和深度;除此以外,可以从备选题目之外选择一个题目完成。1.2机票预订系统在所给的实训题目中,我选择的是机票预订系统的设计。1.2.1系统功能的基本要求每个航班信息的输入;每个航班的坐位信息的输入;当旅客进行机票预定时,输入旅客基本信息,系统为旅客安排航班,打印取票通知和帐单;旅客在飞机起飞前一天凭取票通知交款取票;旅客能够退订机票;能够查询每个航班的预定情况、计算航班的满座率。1.2.2 数据库要求在数据库中至少应该包含下列数据表:航班信息表;航班坐位情况表;旅客订票信息表;取票通知表;帐单。2需求分析2.1背景

4、分析随着社会发展的不断进步,民航事业的壮大,人们消费水平的提高,乘坐民航的消费者也越来越多,旅游也逐渐成为普通老百姓的生活组成部分,飞机票预定查询系统在各机票预定网点中的作用也越显重要。目前,我国一些旅行社和酒店的机票预定还停留在人工处理阶段,这已经严重制约了工作效率,在计算机技术高速发展的今天,有必要引入高效的计算机系统,来协助处理机票预定工作。因此,开发一套具有完整的存储,查询,核对,打印机票功能的实时机票预定系统势在必行。机票预定系统是为机场工作人员和客户提供订票退票等与机票相关内容和管理的系统,它具有开放体系结构的、易扩充的、易维护的、具有良好人机界面的优点.它除克服了存储乘客信息少,

5、查询效率低下等问题外,更重要的是其安全性,可靠性,实现航空公司的机票销售的自动化。它为企业的决策层提供准确、精细、迅速的机票销售信息,为乘客出行提供方便,便于机场工作人员对机票信息进行管理,提高了机场工作人员对机票管理的工作效率。2.2功能分析经过综合分析,确定了机票预订系统主要包括以下功能:(1) 航班信息管理功能主要实现航班的一些基本信息,航班编号、票价、起飞地、目的地、起飞时间的添加、修改、删除和查询。(2) 航班座位信息管理功能主要实现航班座位,也就是机票的一些基本信息,航班编号、座位号、座位信息、机票类型的添加、修改、删除和查询。(3) 旅客信息管理功能此模块的主要实现旅客一些基本信

6、息,姓名、性别、联系方式、证件号码、的查询功能。(4) 取票信息管理功能此模块用于取票信息的管理,包括对航班基本信息,航班编号等,旅客基本信息,旅客姓名、座位号、取票时间的查询。(5) 退票信息管理功能此模块用于退票信息的管理,包括对订单号、旅客姓名、联系方式、证件号码的查询。2.3数据词典经分析之后,本系统要用到五个基本表:航班信息表,航班座位情况表,旅客订票信息表,取票和账单信息表,退票信息表。数据结构定义如表:数据结构名含义说明组成航班信息表定义了航班的有关信息航班号,起飞地,目的地,起飞时间,票价航班座位情况表定义了航班座位有关信息航班号,座位号,座位信息,机票类型旅客订票信息表定义了

7、旅客有关信息旅客姓名,身份证号,性别,电话号取票和账单信息表定义了取票通知相关有关信息旅客姓名,取票时间,航班号,座位号,机票类型退票信息表定义了退票旅客的有关信息旅客姓名,身份证号,订单号,电话号机票预订系统的主要数据字典如下:(1)航班信息 数据流来源:航班管理 数据流去向:航班安排 数据项组成:航班号,起飞地,目的地,起飞时间,票价(2)航班座位情况数据流来源:航班管理和订票情况数据流去向:旅客座位数据项组成:航班号,座位号,座位信息,机票类型(3)旅客信息 数据流来源:确定旅客信息后管理人员输入系统数据流去向:安排顾客的航班 数据项组成:旅客姓名,身份证号,性别,电话号(4)取票通知和

8、账单信息 数据流来源:打印取票通知和账单 数据流去向:核对订票信息 数据项组成:旅客姓名,取票时间,航班号,座位号,机票类型(5)退票信息数据流来源:旅客退票申请数据流去向:订票信息申请退票数据项组成:旅客姓名,身份证号,订单号,电话号3概念结构设计3.1 概念结构设计的方法与步骤1 概念结构设计的方法概念设计阶段我采用自底向上的方法,即自顶向下的进行需求分析,然后再自底向上的进行概念结构设计。对已经细化到无法再分的阶段逐步集成在一起,最终合成一个全局概念模式。2 概念结构设计的步骤第一步是进行局部视图的设计:由于高层的数据流图只能反映系统的概貌,而中层流图能较好的反映系统中各局部应用的子系统

9、组成。因此我们先逐一的设计分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所示。旅客身份证

10、号姓名电话号性别图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图。nnn11mn退票信息航班信息旅客购买包含退票取票通知和账单航班座位信息购买1姓名性别身份证号电话号起飞时间航班编号目的地起飞地票价航班编号座位号机票类型座位信息码航班编号旅客姓名座位号取票时间订单号旅客姓名身份证号码电话号机票

11、类型图3.6系统总体结构e-r图4逻辑结构设计4.1 逻辑结构设计(1) e-r图向关系模型的转换将图3.6总体概念结构e-r图转化成关系模型。 退票信息(订单号,旅客姓名,联系方式,证件号码)旅客(旅客姓名,证件号码,联系方式,性别) 航班信息表(航班号,票价,起飞地,目的地,起飞时间) 取票通知单(旅客姓名,取票时间,证件号码,航班号,座位号)机票信息表(座位号,航班号,座位信息,机票类型)(2)数据模型的优化将转化的关系模式进行优化,最终达到第三范式。 确定数据依赖退票信息(订单号,旅客姓名,联系方式,证件号码)根据这个关系写出数据依赖订单号旅客姓名,订单号联系方式,订单号证件号码旅客(

12、旅客姓名,证件号码,联系方式,性别)旅客姓名证件号码,旅客姓名联系方式,旅客姓名性别 航班信息表(航班号,票价,起飞地,目的地,起飞时间)航班号起飞地,航班号票价,航班号目的地,航班号起飞时间取票通知单(旅客姓名,取票时间,航班号,座位号)旅客姓名取票时间,旅客姓名航班号,旅客姓名座位号,机票信息表(座位号,航班号,座位信息,机票类型)(座位号,航班号)舱位类型,(座位号,航班号,座位信息)机票类型对各关系模式间数据依赖进行极小化处理,消除冗余订单号旅客姓名,订单号联系方式,订单号证件号码旅客姓名性别,旅客姓名取票时间,旅客姓名航班号,旅客姓名座位号,旅客姓名机票类型航班号起飞地,航班号目的地

13、,航班号起飞时间(座位号,航班号)座位信息看这些模式是否符合要求,确定是否要对某些模式进行合并或者分解 最终分解成第三范式: (订单号,联系方式,证件号码)(订单号,旅客姓名)(旅客姓名,取票时间,性别,机票类型)(旅客姓名,航班号)(旅客姓名,座位号)(航班号,座位号,票价)(航班号,起飞地,目的地,起飞时间)(3)数据库的结构根据总体结构图设计机票预定系统基本表结构,其相应标的定义如下:表4-1 航班信息系统的结构字段名数据类型长度约束描述flight numberdecimal主键航班号take off placevarchar50不为空起飞地destinationvarchar50不为

14、空目的地flight timetime不为空起飞时间priceint不为空票价表4-2 航班座位信息表字段名数据类型长度约束描述seat numberdecimal主键座位号flight numberdecimal不为空航班号seat messagevarchar50不为空座位信息flight ticket typevarchar50不为空机票类型表4-3旅客信息系统的结构字段名数据类型长度约束描述passager namevarchar50主键旅客姓名iddecimal不为空身份证号telephone numberdecimal不为空联系方式sexvarchar50不为空性别表4-4取票和账

15、单信息系统的结构字段名数据类型长度约束描述passager name varchar50主键旅客姓名get ticket timetime不为空取票时间flight numberdecimal不为空航班号seat numberdecimal不为空座位号flight ticket typevarchar50不为空机票类型表4-5 退票信息系统的结构字段名数据类型长度约束描述order form decimal主键订单号passager namevarchar50不为空旅客姓名telephone numberdecimal不为空联系方式idvarchar50不为空证件号码4.2数据库表的建立根据数

16、据库的基本表结构分别建立5个基本表: (1)创建航班信息表(2)创建航班座位信息表(3)创建旅客信息表(4)创建取票和账单信息表(5)创建退票信息表5物理结构设计数据库物理设计是指设计出数据库的物理数据模型,它是数据库在物理设备上的具体实现,即数据库服务器物理空间上的表空间、表、字段、索引、视图、存储过程、触发器以及相应的数字字典的设计。经过数据库的需求分析和概念模型设计,得到数据库的逻辑结构,现在可以设计好的逻辑结构在sql server中建立数据库及数据库的数据表。5.1表的建立与数据载入需要明确数据库需要建立几张表,以及每个表中所要包括的属性。在建立表的过程中。要对每个表进行字段属性的设

17、置。(至少包括5张表,每个表都有主键;根据实际情况,建立视图)在机票预订系统中,主要建立了5个表,分别是:航班信息表,航班座位情况表,旅客订票信息表,取票和账单信息表,退票信息表。5.2视图建立视图是查看数据库表中数据的一种方式。视视图提供了存储预定义的查询语句作为数据库中的对象以备以后使用的能力。视图是一种逻辑对象,是一种虚拟表。在机票预订系统中,我建立了两个视图。分别是航班和座位视图和旅客和取票信息视图。他们分别通过飞机编号也就是flight number项和旅客信息也就是passage number项联系起来。5.3索引建立索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的

18、集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引依赖于表建立,它提供了数据库中编排表中数据的内部方法。在机票预订系统中,我建立了三个索引,分别是在航班信息表中建立了flight number索引,在旅客信息表中建立passage name索引,在航班座位信息表中建立了seat number索引。索引类型为唯一性的非聚集索引。5.4存储过程我创建了三个存储过程,输出三个表的全部信息。分别是航班信息表、航班座位信息表、旅客信息表。命令为:create proc aaaasselect *from 航班信息create proc bbbasselect *from 航班座位信息crea

19、te proc cccasselect *from 旅客信息5.5触发器触发器是一种实施复杂的完整性约束的特殊存储过程,它在sql server进行某个特定的表修改时由sql server自动执行。触发器一般用于加强数据库的某些使用规则。在机票管理系统中,我建立了一个ddl触发器,用于保护当前sql server服务器里的所有数据库不被删除。具体代码为:create trigger notdeleteon all serverfor drop_databaseasprint不能删除数据库rollbackgo另外分别在航班信息表、航班座位信息表、旅客信息表、取票通知和账单这四个表中建立了四个触发

20、器,对于表中的添加和更改数据,提示错误信息。代码为:create trigger a on hangbanxinxifor insert,updateas raiserror(不能添加和更新数据,16,1)rollback transactiongocreate trigger b on hangbanzuoweixinxifor insert,updateas raiserror(不能添加和更新数据,16,1)rollback transactiongocreate trigger c on lvkexinxifor insert,updateas raiserror(不能添加和更新数据,1

21、6,1)rollback transactiongocreate trigger d on qupiaotongzhihezhangdanfor insert,updateas raiserror(不能添加和更新数据,16,1)rollback transactiongo5.6创建登陆账户和添加数据库用户在实训中,我利用sql创建了一个“login1”的登陆账号。密码为123456。在一个数据库中,用户账号唯一标识一个用户,用户对数据库的访问权限以及对数据库对象的所有关系都是通过用户账号来控制的。在机票预订系统中,我创建了一个用户名为user1的用户。6数据流图及程序结构框图6.1功能模块图根

22、据所需的功能,可以设计出系统的总体功能模块,如图6.1所示。机票预订系统航班信息管理模块机票信息管理模块退票信息管理模块取票信息管理模块旅客信息管理模块图6.1 机票预订系统功能模块示意图 取票信息管理模块的细化功能模块如图6.2所示。取票信息管理旅客基本信息查询机票基本信息查询图6.2 取票信息管理模块退票信息管理模块的细化功能模块如图6.3所示。取票信息管理旅客基本信息查询订单信息查询图6.3 退票信息管理模块6.2数据流图旅客旅客机票预订系统订票信息付费信息取票通知和账单机票图6.4 0层数据流图旅客旅客订票取票旅客信息通知、账单信息通知、账单信息图6.5 1层数据流图7界面设计与功能测

23、试7.1登录界面及代码代码如下:private declare function getusername lib advapi32.dll alias getusernamea (byval lpbuffer as string, nsize as long) as longpublic ok as booleanprivate sub form_load() dim sbuffer as string dim lsize as long sbuffer = space$(255) lsize = len(sbuffer) call getusername(sbuffer, lsize) if

24、 lsize 0 then txtusername.text = left$(sbuffer, lsize) else txtusername.text = vbnullstring end ifend subprivate sub cmdcancel_click() ok = false me.hideend subprivate sub cmdok_click() todo: create test for correct password check for correct password if txtpassword.text = then ok = true me.hide els

25、e msgbox invalid password, try again!, , login txtpassword.setfocus txtpassword.selstart = 0 txtpassword.sellength = len(txtpassword.text) end ifend sub7.2进入系统界面代码如下:private sub mdiform_load() me.left = getsetting(app.title, settings, mainleft, 1000) me.top = getsetting(app.title, settings, maintop,

26、 1000) me.width = getsetting(app.title, settings, mainwidth, 6500) me.height = getsetting(app.title, settings, mainheight, 6500) end subprivate sub mdiform_unload(cancel as integer) if me.windowstate vbminimized then savesetting app.title, settings, mainleft, me.left savesetting app.title, settings,

27、 maintop, me.top savesetting app.title, settings, mainwidth, me.width savesetting app.title, settings, mainheight, me.height end ifend subprivate sub menuairline_click() frmairline.txtsql = select * from airlineinfo frmairline.show 0end subprivate sub menubookticket_click() frmticket.txtsql = select

28、 * from ticketinfo frmticket.show 0end subprivate sub menucarbin_click() frmservice.txtsql = select * from serviceinfo frmservice.show 0end subprivate sub menuctype_click() frmctype.txtsql = select * from customertype frmctype.show 0end subprivate sub menucustomer_click() frmcustomer.txtsql = select

29、 * from customerinfo frmcustomer.show 0end subprivate sub menuplane_click() frmplane.txtsql = select * from planeinfo frmplane.show 0end subprivate sub searchcustom_click() frmcustomer.show 1end sub7.3订票过程代码如下:private sub form_load() showtitle showdata end subprivate sub form_resize() if me.windowst

30、ate vbminimized and fmainform.windowstate vbminimized then 边界处理 if me.scaleheight 10 * lbltitle.height then exit sub end if if me.scalewidth lbltitle.width + lbltitle.width / 2 then exit sub end if 控制控件的位置 lbltitle.top = lbltitle.height lbltitle.left = (me.width - lbltitle.width) / 2 msglist.top = l

31、bltitle.top + lbltitle.height + lbltitle.height / 2 msglist.width = me.scalewidth - 200 msglist.left = me.scaleleft + 100 msglist.height = me.scaleheight - msglist.top - 1500 frame2.top = msglist.top + msglist.height + 50 frame2.left = me.scalewidth / 2 - 3000 end ifend subpublic sub formclose() unl

32、oad meend subprivate sub showdata() dim j as integer dim i as integer dim msgtext as string set mrc = executesql(txtsql, msgtext) with msglist .rows = 1 do while not mrc.eof .rows = .rows + 1 for i = 1 to mrc.fields.count if not isnull(trim(mrc.fields(i - 1) then select case mrc.fields(i - 1).type c

33、ase addbdate .textmatrix(.rows - 1, i) = format(mrc.fields(i - 1) & , yyyy-mm-dd) case else .textmatrix(.rows - 1, i) = mrc.fields(i - 1) & end select end if next i mrc.movenext loop end with mrc.close end sub显示grid表头private sub showtitle() dim i as integer with msglist .cols = 7 .textmatrix(0, 0) =

34、 旅客姓名 .textmatrix(0, 1) = 旅客性别 .textmatrix(0, 2) = 身份证号码 .textmatrix(0, 3) = 联系电话 .textmatrix(0, 4) = 起飞时间 .textmatrix(0, 5) = 目的地 .textmatrix(0, 6) = 备注信息固定表头 .fixedrows = 1 设置各列的对齐方式 for i = 0 to 6 .colalignment(i) = 0 next i 表头项居中 .fillstyle = flexfillrepeat .col = 0 .row = 0 .rowsel = 1 .colsel

35、= .cols - 1 .cellalignment = 4 设置单元大小 .colwidth(0) = 1000 .colwidth(1) = 1000 .colwidth(2) = 1000 .colwidth(3) = 1000 .colwidth(4) = 2000 .colwidth(5) = 1000 .colwidth(6) = 3000 .row = 1 end withend subprivate sub msglist_mouseup(button as integer, shift as integer, x as single, y as single) 右键弹出 if

36、 button = 2 and shift = 0 then end if end sub添加用户信息:代码如下:option explicit是否改动过记录,ture为改过dim mblchange as booleandim mrc as adodb.recordsetpublic txtsql as stringprivate sub cmdexit_click() if mblchange and cmdsave.enabled then if msgbox(保存当前记录的变化吗?, vbokcancel + vbexclamation, 警告) = vbok then 保存 call

37、 cmdsave_click end if end if unload meend subprivate sub cmdsave_click() dim intcount as integer dim smeg as string dim msgtext as string for intcount = 0 to 2 if trim(txtitem(intcount) & ) = then select case intcount case 0 smeg = 旅客姓名 case 1 smeg = 身份证号码 case 2 smeg = 联系电话 end select smeg = smeg &

38、 不能为空! msgbox smeg, vbokonly + vbexclamation, 警告 txtitem(intcount).setfocus exit sub end if next intcount for intcount = 0 to 1 if trim(combo1(intcount) & ) = then select case intcount case 0 smeg = 起飞时间 case 1 smeg = 目的地 end select smeg = smeg & 不能为空! msgbox smeg, vbokonly + vbexclamation, 警告 combo

39、1(intcount).setfocus exit sub end if next intcount 判断是否有相同内容的记录 txtsql = select * from customerinfo where customerno & trim(txtno) & and customername= & trim(txtitem(0) & set mrc = executesql(txtsql, msgtext) if mrc.eof = false then msgbox 已经存在相同客户的记录!, vbokonly + vbexclamation, 警告 txtitem(0).setfoc

40、us exit sub end if 先删除已有记录 txtsql = delete from customerinfo where customerno= & trim(txtno) & set mrc = executesql(txtsql, msgtext) 再加入新记录 txtsql = select * from customerinfo set mrc = executesql(txtsql, msgtext) mrc.addnew mrc.fields(0) = trim(txtno) mrc.fields(1) = trim(txtitem(0) mrc.fields(2) =

41、 trim(combo1(0) for intcount = 1 to 2 mrc.fields(intcount + 2) = trim(txtitem(intcount) next intcount mrc.fields(5) = trim(combo1(1) mrc.fields(6) = trim(txtitem(3) mrc.update mrc.close if gintcmode = 1 then msgbox 添加记录成功!, vbokonly + vbexclamation, 添加记录 for intcount = 0 to 3 txtitem(intcount) = nex

42、t intcount mblchange = false unload frmcustomer frmcustomer.txtsql = select * from customerinfo frmcustomer.show elseif gintcmode = 2 then unload me unload frmcustomer frmcustomer.txtsql = select * from customerinfo frmcustomer.show end ifend subprivate sub form_load() dim intcount as integer dim msgtext as string dim i as integer dim m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论