数据库课程设计-飞机订票系统分析与设计.doc_第1页
数据库课程设计-飞机订票系统分析与设计.doc_第2页
数据库课程设计-飞机订票系统分析与设计.doc_第3页
数据库课程设计-飞机订票系统分析与设计.doc_第4页
数据库课程设计-飞机订票系统分析与设计.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

飞机订票系统分析与设计1需求分析为了方便旅客,拟开发一个机票预订系统。旅行社工作人员把预订机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入系统,系统为旅客安排航班,并打印出取票通知单和帐单,旅客在飞机起飞前一天凭票通知和帐单交款取票,系统校对无误即印机票给旅客。第一步:找出数据源点和数据终点,确定数据流画出顶层数据流程图数据源点和数据终点表示数据的外部来源和去处。它通常是系统之外的人员或组织,不受系统控制。从问题描述中我们可以知道系统的源点和终点。如“旅行社工作人员把预订机票的旅客信息输入系统”和“旅客凭票通知和帐单交款取票,系统校对无误后将打印机票给旅客”我们可已依据这两句话,初步了解到了系统的数据源点和数据终点。有些人会有疑问了,“旅客在飞机起飞前一天凭票通知和帐单交款取票”,那样顾客不是和系统交互了吗?那怎么没有顾客向系统传递信息的数据流呢?的确,顾客是和系统交互了,但不是直接交互,而是间接的通过旅行社工作人员来和系统交互的,所以我们把“旅客在飞机起飞前一天凭票通知和帐单交款取票”这个处理交给了旅行社工作人,因此,就有了上面的图型(工作人员根据旅客的要求和系统进行交互)。机票预订系统的基本系统模型如下:旅行社工作人员订票系统旅客旅客信息取票信息机票图1 系统模型第二步:自顶向下,逐层细化现在我们可以开始细化基本系统模型,从顶层数据流程图可以判断出 “信息处理”、“订票处理”、“取票处理”是订票系统必须完成的主要功能,细化后的第一层数据流程图如下: D1 订票信息 2 订票处理 无票或缺票 取票信息 1信息处理订票信息(取票通知单与帐单)旅行社工作人员旅客旅客信息 3取票处理 错误信息取票信息机票出错信息 D2 取票清单图2 细化后的数据流程图图在上图中我们增加了“订票信息”和“取票信息”两个数据存储。我们现在来看看功能1“信息处理”如何进一步细化,从图2可以知道功能1必定有一子功能是用于判断信息是取票还是订票的,我们命名为“信息类型判断”;根据我们的经验,对于旅行社工作人员输入的信息,系统应该提供一个功能来处理输入(把外部信息转化为内部信息),我们命名为“接收信息”;进一步,考虑下面问题:如果接收信息中的身份证号码不存在,怎么办?很明显,“信息处理”里面应该有一项功能来识别旅客的信息是否合法,验证信息的输入格式是否合法。因此可以分解出“验证信息”的子功能。功能1的流程图如下:D3旅客信息错误信息订票信息1 3信息类型判断12验证信息11接收信息旅客信息信息 信息取票信息图3 功能1“信息处理”数据流程图对功能2“订票处理”进行细化。问题中关于订票过程的描述有“旅行社工作人员把预订机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入系统,系统为旅客安排航班,并打印出取票通知单和帐单”,找功能的一般思路是从输入输出着手的,在这里我们可以看出输出的描述“打印出取票通知单和帐单”,因此我们可以认为有一个功能专门负责“打印出取票通知单和帐单”这项功能,命名为“生成取票信息”。功能2的输入应该是功能1“信息处理”流出的数据流“旅客信息”当“订票处理”接收到这个数据流的时候,还不是为其安排航班。因为还不知道有没有满足旅客的机票,因此必有一个功能判断旅客的需要机票是否存在,如果没有票或票数不足,返回信息。如果有满足旅客要求的机票,那么更新数据存储“机票信息”中的数据。我们把这项功能命名为“机票验证”。当确定有合适的机票且已经订购时,就要“为旅客安排航班”了!别急,我们想想在安排航班之前我们是否还有其他工作没有完成或有什么可以完善的呢?这样说吧,如果我要定2张A到B的机票和3张C到D的机票,“订票系统”如何处理呢?很明显,系统一次仅能接收2地点相同的订票,如果要预定“A到B的机票和C到D的机票”,那么就要分两次来处理了,打印的取票通知单和帐单分别有2份。我们当然希望对于一个旅客仅有一份取票通知单和帐单,这样不仅方便旅客也节约材料和系统处理时间。如何来解决上面提出的问题呢?我们可以给每一个旅客分配一张订票清单,旅客需要的机票,如果系统能满足的话,先把旅客所有的订票信息保存在订票清单中(我们可以命名为“更新订票清单”)。然后系统再根据订票清单的信息安排航班,这样就可以保证一个旅客仅有一份取票信息和帐单。 根据上面的分析我们可以得到功能2“定票处理”的流程图:D2取票清单取票信息2.3安排航班2.2更新订票清单2.1机票验证定票信息定票信息订票信息订票清单取票信息 2.4生成取票通知单和帐单 D11 机票信息D12订票清单取票通知单帐单图4 功能2“订票处理”数据流程图最后,我们对功能3进行细化。功能3“取票处理”,其输入是功能“信息类型判断”流出的“取票信息”,因此应该有一功能用于判断“取票信息”中的机票是否是合法的(要取的机票是否被订,且旅客信息是否正确和被订机票相符),如果不合法,产生出错信息;否则更新数据存储“取票信息”,因此得到2个功能“取票验证”和“更新取票清单”。功能3的输出是机票,应该有一项功能用于生成机票,命名为“生成机票”。下面是功能3的数据流程图:错误信息 3.2更新取票清单 3.1取票验证取票信息取票清单D2取票清单取票清单 3.3生成机票机票图5 功能3“取票处理”数据流程图 第三步:合并所有的数据流图。(不是必须的)2数据字典名字:旅客信息别名:描述:姓名、性别、工作单位、旅行时间、旅行目的地、身份证号码定义:旅客信息=姓名+性别+工作单位+身份证号码+旅行时间+旅行目的地位置:接收信息 信息处理 订票处理 更新订票清单处理名字:身份证号码别名:描述:在订票清单中唯一被标志的关键城定义:身份证号码=18个字符位置:订票信息 订票清单 取票信息 名字:取票通知别名:描述:取票证据之一定义:取票通知=姓名+身份证号码+取票时间+航班位置:取票信息取票处理打印机名字:姓名别名:描述:在订票清单中除身份证号码外另一个被标识的城定义:姓名=10个字符位置:订票清单 订票信息 取票信息名字:机票别名:描述:旅客凭此来坐飞机定义:机票=日期+源地点+目的地点+航班+坐次+起飞时间位置:输出到打印机 名字:帐单别名:描述:取票凭证之一定义:帐单=姓名+身份证号码+交款数额位置:取票信息 打印机名字:取票信息别名:取票证据描述:旅客凭此证据在飞机起飞前一天取票定义:取票信息=取票通知+账单位置:取票信息 打印机为把客户的数据要求清晰明确的表达出来,建立一个ER模型。工作单位旅行时间性别旅行社工作人员旅行目的地名字 旅客 信息处理 身份证号码订票/取票机票 起飞时间 坐次航班目的地点源地点日期 2总体设计 经过需求分析阶段的分析过程,已粗略的表现了整个设计过程。总体设计阶段的基本目的是用比较抽象概括的方式确定系统如何完成预定的任务,也就是说,应该确定系统的物理配置方案,并且进而确定组成系统的每个程序的结构。因此,总体设计阶段要完成两个小阶段,首先要进行系统设计,从需求分析阶段的数据流图设想完成系统功能的最佳物理方案,然后进行软件结构设计,确定软件有哪些模块组成以及这些模块之间的动态调用关系。用结构图来描绘软件结构将需求分析阶段的数据流图进一步细化,经分析从而得到软件结构图,如下: 无票 退票或换票 D1订票信息 D3 订票清单 D2取票信息 订票信息 订票清单 取票信息2.4打印机2.3产生订票信息处理2.2更新订票清单处理2.1订票处理 订票 旅客 订票 取票1.1接收信息旅行社工作人员1.2信息处理 信息 信息 清单 信息 信息 3.1取票处理 取票 取票信息3.2打印机 取票 信息 信息 机票旅客 取票信息 D2 取票信息 出错图2-1 数据流图(二)由上面的数据流图可软件结构图 机票预定系统 信息处理取票信息机票订票处理系统接收信息取票处理系统 订票信息旅客订票信息旅客取票信息取票信息旅行目的地身份证号码旅行时间性别姓名工作单位取票通知帐单图2-2 软件结构图3详细设计详细设计阶段的关键任务是确定怎样具体地实现所需要的目标系统,也就是要设计出程序的“蓝图”,除了应该保证程序的可靠行之外,使下一步即将要编的程序可读性好,容易理解,容易测试和容易修改,维护是详细设计阶段最重要的目标。1)选择PAD图作为完成详细设计的工具,根据总体设计中的数据流图可得PAD图为: p1.1P1 p1 p2 p1.2 cP3 p3p2.1 def p3.1 def p2.2P2p1:信息处理 p2:订票处理 p2.3 p3.2p3:取票处理c:旅客信息 p2.4图3-1 PAD图2)在总体设计中得出了软件结构设计之后,在详细设计阶段,可与使用面向数据结构地方法来设计每个模块的处理过程。选用Jackson方法来描绘数据结构。首先、得到数据结构的Jackson图: 输入数据结构 输出数据结构机票订票处理 取票处理信息处理取票信息接收信息旅客信息取票通知帐单取票信息 由数据结构的Jackson图到处描绘程序结构的Jackson图机票取票处理取票信息取票信息账单订票处理信息处理接收信息取票信息旅客信息4编码人和计算机通信仍然必须使用人工设计的语言,也既是程序设计语言。编码就是把软件设计的结果翻译成计算机可以“理解”的形式用某种程序设计语言书写的程序。机票预定系统采用PB(Power Builder)语言来编写程序。基本界面:W_ message 旅客信息 姓名性别身份证号码工作单位旅行时间旅行目的地航班 姓名性别身份证号码工作单位旅行时间旅行目的地航班查询条件姓名 身份证号码退出检索保存删除增加W_ plane_ message姓名性别身份证号码工作单位旅行时间航班起止时间机型源地点目的地坐次票价查询条件姓名 身份证号码退出删除查询图4-1 基本界面工作前的准备工作首先在power builder中创建Adaptive server anywhere本地数据库其次将power builder与数据库连接即连库接着在power builder中操作Adaptive server anywhere数据库的表在使用数据库表之前首先要创建表。使用power builder的数据库画板创建表进入columns试图工作区Column nameData TypeWidthNullDefaultPassenger-nameChar12No(None)Passenger-sexChar12Yes(None)Passenger-numberInteger18No(None)Passenger-companyChar20Yes(None)Passenger-timeTimestamp8No(None)Passenger-addressChar20No(None)Passenger-plane idChar12No(None)表4-1 passenger表在创建一个名为plane_ message的表如下Column nameData TypeWidthNullDefaultPassenger-nameChar12No(None)Passenger-sexChar12Yes(None)Passenger-numberInteger18No(None)Passenger-companyChar20Yes(None)Passenger-timeTimestamp8No(None)Passenger-plane idChar12No(None)Passenger-start and endTime16No(None)Passenger-typeChar8No(None)Passenger-startChar20No(None)Passenger-endChar20No(None)Passenger-idInteger10No(None)Passenger-priceDouble8No(None)表4-1 plane_mesage 表(一)、创建界面前的还要做的准备工作(1) 首先建数据库,在连接数据库。(2) 建表(3) 填入数据(4) 建立数据窗(5) 修改标题存盘dplane(6) 建立窗口(Wman)主窗口(Wman)代码: dw- 1. Settrans Object ( SQLCA ) dw- 1. Retrieve ()(7) 窗口open(打开)事件的代码:SQLCA.DBMS=Profile String (“PB.INI”, “Database”, “DBMS ” ,“”)SQLCA. Database=Profile String (“PB.INI”, “Database”, “Data Base”, “”)SQLCA. Log ID=Profile String (“PB.INI”, “Database”, “Log ID”,“”)SQLCA. Log Pass=Profile String (“PB.INI”, “Database”, “Log Pass word”, “”)SQLCA. Server Name=Profile String (“PB.INI”, “Database”, “Server Name”, “” )SQLCA. User ID=Profile String (“PB.INI”, “Database”, “User ID ”, “”)SQLCA. DB Pass=Profile String (“PB.INI”, “Database”, “Database Password”, “”)SQLCA. Lock=Profile String (“PB.INI”, “Database”, “Lock”, “”)SQLCA. Db Pam = Profile String (“PB.INI”, “Database”, “Db Pam”, “”)CONNECT;W_ message:信息输入窗口创建选项:Title= “ 信息录入”;Window Type= “response!”; dw _ message. Data Object = “d_ message_ Input”; gb _ message. Text =“旅客信息”;gb _ condition. Text = “查询条件”;me _ passenger_ name. Text = “姓名”;sle _ passenger_ name . Text = “”;me_ passenger _ number. Text = “身份证号码”;sle_ passenger_ number . Text = “”;me_ sex. Text = “性别”;sle_ sex. Text = “”;me_ company. Text = “工作单位”;sle_ company. Text = “”;me_ time. Text = “旅行时间”;em_ time. Mask Data Type = “date mask!”;em_ time. Mask = “yy/mm/dd”;me_ address. Text = “旅行目的地”;sle_ address. Text = “”;me_ plane id. Text = “航班”;sle_ plane id. Text = “”;cd_ save. Text = “ 保存”;cd_ exit. Text = “退出”;cd_ delete. Text = “删除”;cd_ add . Text = “增加”;cd_ retrieve. Text = “检索”;cd_ exit.Cancel =TRUE窗口的open事件代码为:dw_ message. Set Trans Object (SQLCA)dw_ message. Retrieve ()sle_ passenger. number . Set Focus ()Windows_ cen (this)“身份证号码”编辑框(sle_ passnger-number)的modified事件代码为:String ls_ passenger_ numberLong ll_ rowsls_ passenger_ number = Trim(sle _ passenger_ number. text)IF ls_ passenger_ number = “”THENdw_ message. Set Filter (“”)dw_ message. Filter ()sle_ passenger_ name. Text = “”em_ credit. Text = “0”ELSEKw_ message. Set Filter (“passenger _number =”+ ls _ passenger _number +”)dw_ massage. Filter ()ll_ rows = dw _ message. Retrieve ()IF ll_ rowsO THENsle_ passenger_ name. Text =dw_ message. Object . Passenger _ name 1em_ credit. Text =string (dw_ message. object. Credit 1)sle_ passenger_ number . Set Focus ()ELSE sle _ passenger_ name. Set Focus ()END IFEND IF “姓名”编辑框(sle_ passenger_ name)的modified事件代码为:sle_ passenger_ name . Set Focus ()“性别”编辑框(sle_ passenger_ sex)的modified事件代码为:sle_ passenger_ sex. Set Focus ()“工作单位”编辑框(sle_ passenger_ company)的modified事件代码为:sle_ passenger_ company . Set Focus ()“旅行时间”编辑框(sle_ passenger_ time)的modified事件代码为:sle_ passenger_ time . Set Focus ()“旅行目的地”编辑框(sle_ passenger_ address)的modified事件代码为:sle_ passenger_ address . Set Focus ()“航班”编辑框(sle_ passenger_ plane id)的modified事件代码为:sle_ passenger_ plane id. Set Focus ()“增加”编辑框(cd_ add)的clicked事件代码为:Open (w_ message_ add)IF sle_ passenger_ name. Text =“”OK sle_ passenger_ sex .Text = “”OK sle_ passenger_ number . Text =“”OK sle_ passenger_ company. Text =“”OKsle_ passenger_ time. Text =“”OK sle_ passenger_ address .text =“”OK sle_ passenger_ plane Id. Text =“”OK message box (“提示”其输入姓名、性别、身份证号码、工作单位、旅行时间、旅行目的地和航班!”) RETURN END IF sl_ row = dw_ message_ input. Inset Row (0) dw_ message .Input . Scroll To Row (sl_ row) dw_ message . Input. Set Row (sl_ row) dw_ message. Input. Set Focus ()“删除”按钮(cd_ delete)的clicked事件代码为: int li_ ret li_ ret = Message Box(“提示”, “确实要删除吗?”Exclamation! Yes/No!) IF li_ret=1 THEN dw_ message. Delete Row (0) IF dw_ message . Update ()=1 THEN COMMIT;ELSE ROLLBACK; END IFEND IF“保存”按钮(cd_ save)的clicked事件代码为:string ls_ passenger_ name, ls_ passenger_ number, ls_ passenger_ company, ls_ passenger_ time, ls_ passenger_ address, ls_ passenger_ plane Idint li_ creditdecimal ldec _ messagels_ passenger_ name =Trim (ls _ passenger_ name. text)ls_ passenger_ sex =Trim (ls_ passenger_ sex. text)ls_ passenger_ number =Trim (ls_ passenger_ number. text)ls_ passenger_ company =Trim (ls_ passenger_ company .text)ls_ passenger_ time =Trim (ls_ passenger_ time. text)ls_ passenger_ address =Trim (ls_ passenger_ address. text)ls_ passenger_ plane id =Trim (ls_ passenger_ plane id. text)li_ credit=Integer(em_ credit. text)ldec_ message=Dec(en_ message. text)INSERT INTO “message” (“Passenger_ name”, “Passenger_ sex”, “Passenger_ number”, “Passenger_ company”, “Passenger_ time”, “Passenger_ address”, “Passenger_ plane Id”, “Credit”, “Message”)VALVES (: ls_ passenger_ name ,: ls_ passenger_ sex,: ls_ passenger _ number ,: ls_ passenger_ company ,: ls_ passenger_ time, : ls_ passenger_ address ,: ls_ passenger_ plane Id ,:ls_ Credit,:ldec _ Message);IF SQLCA. SQL code0 THEN ROLLBACK; Message Box(“错误”, “存盘失败”, Stop sign!) RETURNEND IFCOMMIT; Message Box( “提示”, “存盘成功!”)sle_ passenger_ name. Text = “”sle_ passenger_ sex. Text = “”sle_ passenger_ number. Text = “”sle_ passenger_ company. Text = “”sle_ passenger_ time. Text = “”sle_ passenger_ address. Text = “”sle_ passenger_ plane Id . Text = “”sle_ passenger_ number. Set Focus ()dw_ message. Retrieve ()“检索”按钮(cd_ retrieve)的clicked事件代码为:Long ll_ rowsString ls_ passenger_ name , ls_ passenger_ numberIF Trim (sle_ passenger_ name. text)= “”and Trim (sle_ passenger_ number. text)= “”THENMessage Box( “提示”, “请输入姓名或身份证好嘛!”)sle_ passenger_ number. Set Focus()RETURNEND IFls_ passenger_ number = Trim(sle_ passenger_ number. text)IF Len (ls_ passenger_ number)0 THEN dw_ message_ input. Set Filter (“passenger_ number =”+ ls_ passenger _ number +”)dw_ message_ input . Filter ()ll_ rows = dw_ message_ input. Retrieve ()IF ll_rows=0,THEN Message Box( “提示”,“无记录!”) RETURNEND IF sle_ passenger_ name. Text = dw_ message_ Input. Object_ name1RETURNEND IFls_ passenger_ name = Trim (sle _ passenger_ name . text)dw_ message _ input. Set Filter (“passenger_ name =”+ ls_ passenger_ name +”) dw_ message_ input . Filter () ll_ rows = dw_ message_ input. Retrieve ()IF ll_rows=0 THEN Message Box(“提示”, “无记录!”)END IF sle_passenger_number.text=dw_message_input_object_passenger_number1右边数据窗口控件(dw_ message _input)的clicked事件代码为:String ls_ passenger_ numberLong ll_ rowsIF row = 0 THEN row = 1ls_ passenger_ number = this. Object. Passenger_ number rowdw

温馨提示

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

评论

0/150

提交评论