目录1需求规格说明书1.1 系统的逻辑模型 (1)1.2 数据字典 (5)1.2.1 ER模型 (6)1.2.2 IPO图表 (6)2 设计规格说明书2.1 数据流图 (8)2.2 软件结构图 (8)2.3 详细设计2.3.1 PAD图 (9)2.3.2 Jackson图 (10)2.4 编码2.4.1 基本界面 (10)2.4.2准备工作 (11)2.4.3 程序源代码 (12)3测试 (17)4致谢 (17)5参考文献 (18)附表1 (18)附表2 (19)机票预订系统分析与设计在社会高速发展,信息高速流通的今天,如果说时间就是金钱的话,那信息就是无价之宝。
随着城市生活节奏的加快,飞机已经成为人们使用越来越频繁的交通工具,随之而来的问题是,如何能让旅客最快、最便捷的订到机票。
这就需要一个合适的订票系统来处理航班、机票、旅客等信息,方便售票人员查询,插入,删除各种信息。
本课程设计结合实际的订票、售票制度,经过实际的需求分析开发出来的机票预订系统。
阐述了机票预订系统的需求分析,描绘了本机票预订系统的基本模型图。
详细给出了从机票预订系统分析到总体设计详细设计与实现及测试的各个环节,最后对本系统做出了客观评价,指明了系统的现实意义、缺点以及系统的升级方向。
关键词:机票预订系统;数据库;SQL开发工具:VC ,SQL server需求规格说明书工作流程:为了方便旅客,拟开发一个机票预订系统。
旅行社工作人员把预订机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入系统,系统为旅客安排航班,印出取票通知和帐单,旅客在飞机起飞前一天凭票通知和帐单交款取票,系统校对无误即印机票给旅客。
1.1用数据流图来描绘系统的逻辑模型:旅行社工作人员是数据源点,旅客是数据终点。
图1-1 基本模型1、进一步细化基本系统模型,“信息处理”、“订票处理”、“取票处理”是系统必须完成的主要功能,将代替“订票系统”,可得D1 订票信息图1-2 细化模型图增加“订票信息”和“取票信息”两个数据存储。
2、再进一步细化可得订票清单 图1-3 最终模型图将1.1、1.2、2.2 和3.1放在同一个边界内,这个系统将联机地接收信息、信息处理订票处理、更新订票清单处理及取票处理;将2.3 、2 .4和3.2放在同一边界内,以批量方式产生信息给旅客。
1.2 数据字典图1-4 ER模型图2、IPO图能够方便地描绘输入数据。
对数据的处理和输出数据之间的关系。
下面用改进的IPO图表来描述图1-5 IPO图表可采用VB、VF、VC、PB等算法来完成上述模块设计规格说明书经过需求分析阶段的分析过程,已粗略的表现了整个设计过程。
总体设计阶段的基本目的是用比较抽象概括的方式确定系统如何完成预定的任务,也就是说,应该确定系统的物理配置方案,并且进而确定组成系统的每个程序的结构。
因此,总体设计阶段要完成两个小阶段,首先要进行系统设计,从需求分析阶段的数据流图设想完成系统功能的最佳物理方案,然后进行软件结构设计,确定软件有哪些模块组成以及这些模块之间的动态调用关系。
用结构图来描绘软件结构将需求分析阶段的数据流图进一步细化,经分析从而得到软件结构图,如下:无票取票信息机票出错图2-1 数据流图(二)由上面的数据流图可软件结构图图2-2软件结构图也就是要设计出程序的“蓝图”,除了应该保证程序的可靠行之外,使下一步即将要编的程序可读性好,容易理解,容易测试和容易修改,维护是详细设计阶段最重要的目标。
1)选择PAD 图作为完成详细设计的工具,根据总体设计中的数据流图可得PAD 图为:p1.1 p1 p2p1.2 cp3 p3.1p1:信息处理p2:订票处理 p2.3 p3.2p3:取票处理c :旅客信息 p2.4图3-1 PAD 图2)在总体设计中得出了软件结构设计之后,在详细设计阶段,可与使用面向数据结构地方法来设计每个模块的处理过程。
选用Jackson 方法来描绘数据结构。
首先、得到数据结构的Jackson 图:输入数据结构 输出数据结构由数据结构的Jackson图到处描绘程序结构的Jackson图编码人和计算机通信仍然必须使用人工设计的语言,也既是程序设计语言。
编码就是把软件设计的结果翻译成计算机可以“理解”的形式——用某种程序设计语言书写的程序。
机票预定系统采用PB(Power Builder)语言来编写程序。
基本界面:图4-1 基本界面工作前的准备工作首先在power builder中创建Adaptive server anywhere本地数据库其次将power builder与数据库连接即连库接着在power builder中操作Adaptive server anywhere数据库的表在使用数据库表之前首先要创建表。
使用power builder的数据库画板创建表进入columns试图工作区表4-1 passenger表在创建一个名为plane_ message的表如下表4-1 plane_mesage 表(一)、创建界面前的还要做的准备工作(1)首先建数据库,在连接数据库。
(2)建表(3)填入数据(4)建立数据窗(5)修改标题存盘d—plane(6)建立窗口(W—man)主窗口(W—man)代码: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”, “DataBase”, “”)SQLCA. Log ID=Profile String (“PB.INI”, “Database”, “LogID”,“”)SQLCA. Log Pass=Profile String (“PB.INI”, “Database”, “LogPass word”, “”)SQLCA. Server Name=Profile String (“PB.INI”, “Database”,“Server Name”, “” )SQLCA. User ID=Profile String (“PB.INI”, “Database”, “UserID ”, “”)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”, “DbPam”, “”)CONNECT;W_ message:信息输入窗口创建选项:Title= “ 信息录入”;Window Type= “response!”;dw _ message. Da ta 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_ rows<>O THENsle_ passenger_ name. Text =dw_ message. Object . Passenger _ name [1]em_ credit. Text =string (dw_ message. object. Credit [1])sle_ passenger_ number . Set Focus ()ELSEsle _ 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)IFsle_ passenger_ name. Text =“”OKsle_ passenger_ sex .Text = “”OKsle_ passenger_ number . Text =“”OKsle_ passenger_ company. Text =“”OKsle_ passenger_ time. Text =“”OKsle_ passenger_ address .text =“”O Ksle_ passenger_ plane Id. Text =“”OKmessage box (“提示”其输入姓名、性别、身份证号码、工作单位、旅行时间、旅行目的地和航班!”)RETURNEND IFsl_ 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_ retli_ ret = Message Box(“提示”, “确实要删除吗?”Exclamation! Yes/No!)IF li_ret=1 THENdw_ message. Delete Row (0)IF dw_ message . Update ()=1 THENCOMMIT;ELSEROLLBACK;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 code<>0 THENROLLBACK;Message Box(“错误”, “存盘失败”, St op 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. Tex t = “”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)>0THENdw_ message_ input. Set Filter (“passenger_ number =’”+ ls_ passenger _ number +’””)dw_ message_ input . Filter ()ll_ rows = dw_ message_ input. Retrieve ()IF ll_rows=0,THENMessage Box( “提示”,“无记录!”)RETURNEND IFsle_ passenger_ name. Text = dw_ message_ Input. Object_ name[1]RETURNEND 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=0THENMessage Box(“提示”, “无记录!”)END IFsle_passenger_number.text=dw_message_input_object_passenger_number[1] 右边数据窗口控件(dw_ message _input)的clicked事件代码为:String ls_ passenger_ numberLong ll_ rowsIF row = 0 THEN row = 1ls_ passenger_ number = this. Object. Passenger_ number [row]dw_ message_ input. Set Filter (“passenger_ number =’”+ ls_ passenger_ number +’”)dw_ message_ input . Filter ()ll_ rows = dw_ message_ input. Retrieve ()“退出”按钮(cd_ exit)的clicked事件代码为:Close (parent)测试软件测试在软件生命周期中横跨两个阶段。