《1498.飞机订票系统分析与设计.doc》由会员分享,可在线阅读,更多相关《1498.飞机订票系统分析与设计.doc(17页珍藏版)》请在三一办公上搜索。
1、 程序设计实践课程设计报告学 院 计通学院 专 业 计算机科学与技术 班 级 计算机 学 号 学生姓名 指导教师 课程成绩 完成日期 2006年9月20号飞机订票系统分析与设计摘要: 随着城市生活节奏的加快,飞机已经成为人们使用越来越频繁的交通工具,随之而来的问题是,如何能让旅客最快、最便捷的订到机票。这就需要一个合适的订票系统来处理航班、机票、旅客等信息,方便售票人员查询,插入,删除各种信息。本课程设计结合实际的订票、售票制度,经过实际的需求分析,采用功能强大的VC作为开发工具、SQL作为数据库开发出来的飞机订票管理系统。本文首先阐述了飞机订票管理系统的需求分析,描绘了本飞机订票管理系统的基
2、本模型图。通过对数据库技术的现状与发展、数据库系统的选择原则、系统开发工具的选择一系列问题的分析,确定了系统的开发平台。详细给出了从飞机订票管理系统分析到总体设计详细设计与实现及测试的各个环节,最后对本系统做出了客观评价,指明了系统的现实意义、缺点以及系统的升级方向。关键词:飞机订票系统;数据库;SQL1需求分析为了方便旅客,拟开发一个机票预订系统。旅行社工作人员把预订机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入系统,系统为旅客安排航班,印出取票通知和帐单,旅客在飞机起飞前一天凭票通知和帐单交款取票,系统校对无误即印机票给旅客。1.1用数据流图来描绘系统的逻辑
3、模型:票预订系统的基本系统模型如下:订票系统旅行社工作人员旅客信息取票信息机票旅行社工作人员是数据源点,旅客是数据终点。图1-1 基本模型1、 进一步细化基本系统模型,“信息处理”、“订票处理”、“取票处理”是系统必须完成的主要功能,将代替“订票系统”,可得 D1 订票信息 2订票处理 取票信息 1信息处理旅客旅客信息旅行社工作人员信息 3取票处理取票信息 机票 D2 取票信息图1-2 细化模型图增加“订票信息”和“取票信息”两个数据存储。2、 再进一步细化可得 D1 订票信息 D3 订票清单 D2 取票信息 取票信息2.3产生订票信息处理 订票信息 订票 清单 2.2更新订票清单处理2.1订
4、票处理 订票 清单2.4打印机旅客信息订票信息 1.2信息处理1.1接收信息 旅行社工作人员信息信息3.1取票信息3.2打印机取票信息 取票信息旅客 取票信息 取票信息 机票 D2 取票信息图1-3 最终模型图将1.1、1.2、2.2 和3.1放在同一个边界内,这个系统将联机地接收信息、信息处理订票处理、更新订票清单处理及取票处理;将2.3 、2 .4和3.2放在同一边界内,以批量方式产生信息给旅客。1.2 数据字典 名字:旅客信息别名:描述:姓名、性别、工作单位、旅行时间、旅行目的地、身份证号码定义:旅客信息=姓名+性别+工作单位+身份证号码+旅行时间+旅行目的地位置:接收信息 信息处理 订
5、票处理 更新订票清单处理名字:身份证号码别名:描述:在订票清单中唯一被标志的关键城定义:身份证号码=18个字符位置:订票信息 订票清单 取票信息 名字:取票通知别名:描述:取票证据之一定义:取票通知=姓名+身份证号码+取票时间+航班位置:取票信息取票处理打印机名字:姓名别名:描述:在订票清单中除身份证号码外另一个被标识的城定义:姓名=10个字符位置:订票清单 订票信息 取票信息名字:机票别名:描述:旅客凭此来坐飞机定义:机票=日期+源地点+目的地点+航班+坐次+起飞时间位置:输出到打印机 名字:帐单别名:描述:取票凭证之一定义:帐单=姓名+身份证号码+交款数额位置:取票信息 打印机名字:取票信
6、息别名:取票证据描述:旅客凭此证据在飞机起飞前一天取票定义:取票信息=取票通知+账单位置:取票信息 打印机表1-1数据字典1 为把客户的数据要求清晰明确的表达出来,建立一个ER模型。工作单位旅行时间性别旅行社工作人员旅行目的地名字 旅客 信息处理 身份证号码订票/取票机票 起飞时间 坐次航班目的地点源地点日期 图1-4 ER模型图 IPO表系统:机票预订系统 作者: 模块:订票模块 日期:编号:2 注释:2、 IPO图能够方便地描绘输入数据。对数据的处理和输出数据之间的关系。下面用改进的IPO图表来描述 IPO表系统:机票预订系统 作者: 模块:信息处理 日期:编号:1 注释: 注释: 调用:
7、被调用:信息处理被调用:调用:订票模块和取票模块输出:取票信息输入:姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地输出:订票信息取票信息输入:订票信息取票信息处理:盘但是订票还是取票,并调用相应的功能模块。处理:将旅客信息输给本模块,根据旅客要求安排航班,并给旅客在飞机起飞前一天取票的证据即取票通知和账单局部数据元素;局部数据元素:系统:机票预订系统 作者: 模块:取票模块 日期:编号:3 注释: 被调用:信息处理调用:输入:姓名、身份证号码、航班、日期输入:机票处理:将输入的信息传给本模块,校对无误后打印机票局部数据元素: 图1-5 IPO图表可采用VB、VF、VC、PB等算法来完成
8、上述模块2总体设计 经过需求分析阶段的分析过程,已粗略的表现了整个设计过程。总体设计阶段的基本目的是用比较抽象概括的方式确定系统如何完成预定的任务,也就是说,应该确定系统的物理配置方案,并且进而确定组成系统的每个程序的结构。因此,总体设计阶段要完成两个小阶段,首先要进行系统设计,从需求分析阶段的数据流图设想完成系统功能的最佳物理方案,然后进行软件结构设计,确定软件有哪些模块组成以及这些模块之间的动态调用关系。用结构图来描绘软件结构将需求分析阶段的数据流图进一步细化,经分析从而得到软件结构图,如下: 无票 退票或换票 D1订票信息 D3 订票清单 D2取票信息 订票信息 订票清单 取票信息2.4
9、打印机2.3产生订票信息处理2.2更新订票清单处理2.1订票处理 订票 旅客 订票 取票1.1接收信息旅行社工作人员1.2信息处理 信息 信息 清单 信息 信息 3.1取票处理 取票 取票信息3.2打印机 取票 信息 信息 机票旅客 取票信息 机票 取票信息 D2 取票信息 出错图2-1 数据流图(二)由上面的数据流图可软件结构图 机票预定系统 信息处理取票信息机票订票处理系统接收信息取票处理系统 订票信息旅客订票信息旅客取票信息取票信息旅行目的地身份证号码旅行时间性别姓名工作单位取票通知帐单图2-2 软件结构图3详细设计详细设计阶段的关键任务是确定怎样具体地实现所需要的目标系统,也就是要设计
10、出程序的“蓝图”,除了应该保证程序的可靠行之外,使下一步即将要编的程序可读性好,容易理解,容易测试和容易修改,维护是详细设计阶段最重要的目标。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方法来描绘数据结构。首先、得到数据结构的Jacks
11、on图: 输入数据结构 输出数据结构机票订票处理 取票处理信息处理取票信息接收信息旅客信息取票通知帐单取票信息 由数据结构的Jackson图到处描绘程序结构的Jackson图机票取票处理取票信息取票信息账单订票处理信息处理接收信息取票信息旅客信息4编码人和计算机通信仍然必须使用人工设计的语言,也既是程序设计语言。编码就是把软件设计的结果翻译成计算机可以“理解”的形式用某种程序设计语言书写的程序。机票预定系统采用PB(Power Builder)语言来编写程序。基本界面:W_ message 旅客信息 姓名性别身份证号码工作单位旅行时间旅行目的地航班 姓名性别身份证号码工作单位旅行时间旅行目的地
12、航班查询条件姓名 身份证号码退出检索保存删除增加W_ plane_ message姓名性别身份证号码工作单位旅行时间航班起止时间机型源地点目的地坐次票价查询条件姓名 身份证号码退出删除查询图4-1 基本界面工作前的准备工作首先在power builder中创建Adaptive server anywhere本地数据库其次将power builder与数据库连接即连库接着在power builder中操作Adaptive server anywhere数据库的表在使用数据库表之前首先要创建表。使用power builder的数据库画板创建表进入columns试图工作区Column nameDat
13、a 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 TypeWi
14、dthNullDefaultPassenger-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)Passenge
15、r-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
16、.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”, “Ser
17、ver 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_ m
18、essage:信息输入窗口创建选项: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 . Tex
19、t = “”;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_ sa
20、ve. 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)的modif
21、ied事件代码为: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
22、_ 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 ()E
23、ND 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事件代码为:
24、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
25、_ 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_ in
26、put. 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 .
27、 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 _ passeng
28、er_ 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_ pa
29、ssenger_ 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”, “Credi
30、t”, “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!) RETU
31、RNEND 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_