中央民族大学软件工程课程
机票预订系统
提 要
机票预定系统首先通过对该系统进行可行性分析,然后再根据客户需求分析进行总体、详细设计,在设计完成之后编码实现,同时进行测试和维护。
使该系统达到运行正确、稳定、响应及时、用户界面友好美观的目的,同时使该系统易维护。
在整个过程中按软件工程方法对每一阶段尽可能留用详细的文档资料
目 录
1第一章 问
定义
11.1.项目描述
11.2.问题定义
3第二章 可行性研究
32.1.技术可行性
32.2.经济可行性
52.3.社会可行性
62.4.操作可行性
62.5.可行性
62.6.开发风险
62.7.高层逻辑模型
8第三章
需求分析
83.1.功能识别和描述
83.2.数据流图
93.3.数据字典
103.4.简要算法
13第四章 系统设计
134.1.层次结构
154.2.接口设计(人机界面设计)
154.3.数据库设计
174.4.模块设计
22第五章 编码和
225.1.编码
245.2.单元测试
245.3.测试用例
34第六章 综合测试
346.1.自顶向下测试方式
346.2.自底向上测试方式
35第七章 软件维护
357.1.改正性维护
357.2.适应性维护
357.3.完善性维护
36附录1:软件工程课程设计指导教师评审表
1.1.项目描述
航空公司需要开发一个机票预定系统,用于简化处理预定机票的过程。由各个旅行社直接将定票信息通过网络提交到航空公司,系统安排航班及打印各类单据。
1.2.问题定义
随着社会的发展,人民生活水平的不断提高,出行旅游成为了人们放松心情、接触自然的最好方式。优质的服务,快速的运输,廉价的机票,空运成为了人们出行的第一选择。然而传统的购票方式,仍然是人工机械的处理。大多数乘客通过电话方式了解信息和预订机票。这样给服务台增加了很大的压力,并且大多数时间不能及时响应乘客的要求。这种传统的购票方式,不仅效率低下,而且给人们的出行带来了很多不便。同时,人工处理的成本再加上巨额的通信费用造成了传统购票方式的巨大开销。当面对机票订购高峰时刻的大量数据处理的时候,仅靠手工操作以现有的工作人员根本无法应付。同时还会出现由此带来的大量记录存放和管理所带来的问题。从而给旅客和管理人员带来了许多的不便。
目标:在计算机网络,数据库和先进的开发平台上,利用现有的软件,配置一定的硬件,开发一个具有开放体系结构的、易扩充的、易维护的、具有良好人机交互界面的机票预定系统,实现航空公司的机票销售的自动化的计算机系统,为企业的决策层提供准确、精细、迅速的机票销售信息,为旅客提供快捷、方便的服务。
系统规模与功能:
1. 旅行社记录旅客的基本信息以及航班需求,并且加工这些信息,最后存储这些信息。
2.旅行社提供旅客订票信息:各个旅行社把预定机票的旅客信息输入到系统中;
3.系统处理订票信息:系统根据旅行社提供的旅客订票信息,为旅客安排航班;
4.系统打印取票通知单和帐单:当旅客交付了预订金后,系统打印出取票通知和帐单给旅客;
5.系统出票:旅客在飞机起飞前一天凭取票通知和帐单交款取票,系统核对无误即打印出机票给旅客;
6.航班信息中心:包括各航班飞机的乘载情况等信息;
7.对于本系统还应补充一下功能:
(1).旅客延误了取票时间的处理
(2).航班取消后的处理
(3).旅客临时更改航班的处理
8.系统的外部输入:旅客、旅行社和航空公司。
9.注意事项:在分析系统功能时要考虑有关证件的合法性验证(如身份证、取票通知和交款发票)等。
第二章 可行性研究
2.1.技术可行性
在计算机网络、数据库和先进的开发平台的基础上,使用JSP技术,在加上好的硬件支持,和高速的校园网络,开发一个具有开放体系结构的、易扩充的、易维护的、具有良好人机交互界面的机票预定系统,实现航空公司的机票销售的自动化的计算机系统是可行的。在加上扎实的理论知识和一些开发经验。在现有的技术条件和硬件条件的支持下开发机票预定系统被证实为可行的。
本系统使用的操作系统和数据库是目前最为普及和成熟的一种系统开发软件。从这种软件过去使用、升级情况和软件商所承诺的今后软件发展情况分析,系统软件应支持原系统版本上的各种应用正常使用。因而,该机票预定系统不存在技术问题。
服务器采用Windows最新系统,利用 MySQL 最新数据库系统。
2.2.经济可行性
2.2.1
成本估计
1.系统开发成本:
人员:
1名系统分析员(96小时/名,100元/小时) 9,600
2名系统开发人员(75小时/名,80元/小时) 6,000
1名数据库管理员(10小时/名,90元小时) 900
1名软件测试员(120小时/名,40元/小时) 4,800
1数据输入人员 500
硬件成本:
PC机25台:25万
大型服务器:20万
软件成本:
服务器操作系统:2万元
PC机操作系统:2000*25=5万元
数据库系统 10.0。20万元。
2.人员培训费用:
用户培训费用1万元
3.维护费用(五年):
(25*1000+50000)*5=37.5万元
4.通讯费:
20万
5.成本总计:131.68万元
2.2.2
效益估计
本系统开发完成后可以减少工作人员25名。按银行利率:12% 计算可以在五年内获得收益(员工1000元/人),见表2.1:
表 2.1
收益(1)
年
将来值(万元)
利率累计
现在值(万元)
累计值(万元)
1
24
1.12
21.4286
21.4286
2
24
1.25
19.2000
40.6286
3
24
1.40
17.1429
57.7714
4
24
1.57
15.2866
73.0581
5
24
1.76
13.6364
86.6944
本系统可以提高工作效率30%,见表2.2:
表 2.2
收益(2)
年
将来值(万元)
利率累计
现在值(万元)
累计值(万元)
1
7.2
1.12
6.4286
6.4286
2
7.2
1.25
5.7600
12.1886
3
7.2
1.40
5.1429
17.3314
4
7.2
1.57
4.5860
21.9174
5
7.2
1.76
4.0909
26.0083
由于订票方便快速,增加业务量25%,可假设原来公司业务量为2400/年,总收益为120万。 收益为见表2.3:
表 2.3
收益(3)
年
将来值(万元)
利率累计
现在值(万元)
累计值(万元)
1
30
1.12
26.7857
26.7857
2
30
1.25
24.0000
50.7857
3
30
1.40
21.4286
72.2143
4
30
1.57
19.1083
91.3226
5
30
1.76
17.0455
108.3680
总收益为:221.0707万元
收益/投资比
221.0707万/131.68万=1.67907
2.2.3
投资回收期
2+(131.68-103.6029)÷43.7144=2.64年
2.2.4
纯收入
221.0707万-131.68万=89.3907万
2.2.5
投资回收率
假设系统的寿命为五年估计最长可达10年,投资回收率为 39%-40%
2.3.社会可行性
1、法律因素
2、所有软件都选用正版.
3、所有技术资料都由提出方保管。
4、
制定确定违约责任
2.4.操作可行性
所有员工都要接受培训,包括前台工作人员和系统管理人员。要求所有员工都具有一定的计算机操作能力。
客户端与服务器端联系在一起,在旅游局中只设立终端,在机场设立服务器,数据输入由终端输入,所有数据都由服务器处理,只在终端上显示数据结果。
此设计简化了数据处理,但加重了服务器的数据处理。而使用客户端/服务器机理,简化数据流量,加快数据处理。
2.5.可行性方案
我们在服务器上采用了windows 2008的操作系统,在运用MySQL先进的数据库系统。 利用JSP技术,采用B/S架构,最后实现具有开放体系结构的、易扩充的、易维护的、具有良好人机交互界面的机票预定系统,实现航空公司的机票销售的自动化。虽然本系统在硬件、操作系统、数据库软件等方面投资很大,但是考虑到系统的使用规模、巨大的经济效益、高工作效率和低廉的维护成本,所以对本系统而言庞大的开发成本是值得的。
2.6.开发风险
从公司提出的需求,以及目前公司规模情况和各种资源情况(机器、操作系统、软件工具、网络、技术人员素质等)看,该系统开发在技术上是完全可以实现的。而且能保证系统最终的使用效果,性能可以达到目标。
2.7.高层逻辑模型
图 2.1
高层逻辑模型
第三章
需求分析
3.1.功能识别和描述
(1) 客户端功能
旅行社把旅客要求订票的信息由专人负责输入,进行网上订票。
当旅客交付了预订金后,系统打印出取票通知和帐单给旅客。
(2) 服务器端功能
接收由旅行社客户端发回的所需机票信息。通过网络接收机票信息并存入到服务器的数据库中。
生成航班信息。根据所需机票信息(时间,地点),在数据库中查询并得到正确的航班的信息,分配所需的机票数并在数据库中做出已售出的标记。
传递航班信息到旅行社(客户端),把得到的航班信息通过网络传递到旅行社。
打印机票给已经订票的旅客。根据旅客的取票通知及帐单,经过确认无误后,接受旅客的付款后把机票印出来交给旅客。
3.2.数据流图
3.2.1
数据流图
(1) 旅客订票流程图,如图 3.1所示:
图 3.1
旅客订票流程
(2) 旅客取票流程图,如图3.2所示:
图 3.2
旅客取票流程
3.3.数据字典
3.4.简要算法
3.4.1
登陆系统
1. 输入用户名
2. 输入口令
3. 系统检查输入信息的合法性
4. 当信息不合法时,系统提示输入错误,并转回到1
5. 信息合法,检查用户属性
6. 根据用户属性,进入相应的子系统。
7. 系统记录登陆日志。
验证过程:
1. 要求用户输入用户名,并输入用户口令。
2.系统查找存在的用户,验证用户名和登记的口令。信息不合法时,系统提示输入错误,并转回到1。
3. 验证成功后系统根据不同的用户属性,进入不同的子系统。
4. 结束
用户登记过程:
1.由航空公司或者旅行社提出申请,并提供相关信息给系统,由系统管理员生成用户并给用户生成属性,更具用户属性赋予权限。
2.结束
3.4.2
订票
1.用户登陆系统以后,提交订票命令,进入订票界面。
2.根据订票需要,输入旅客信息。
3.验证旅客信息的完整性。
4.验证旅客信息的合法性。
5.若不合法,输出错误提示,并跳转到相应的表单,重复1、2
6.合法把订票表单提交到系统,系统格式化提交订票信息以后更新订票信息数据库。
7.提示订票成功。
验证过程:
1. 要求用户必须按要求输入表单需要的全部信息。
2. 在输入不全的情况下不允许提交,输出错误提示,跳转到相应的表单项,要求填写。
3. 用户在填写完成后提交表单,系统检查信息的合法性。
4. 不合法不允许提交,输出错误提示,跳转到相应的表单项,要求重新填写。再次提交之前转到2
5. 验证完整性和合法性之后提交表单给系统,系统格式化订票信息后加入旅客订票信息数据库。
6. 提示订票成功。
7. 结束。
3.4.3
查询航班
1.用户登陆系统以后,提交查询航班命令,进入查询界面。
2.输入查询表单中需要填写的信息。
3.验证旅客信息的完整性。
4.验证旅客信息的合法性。
5.若不合法,输出错误提示,并跳转到相应的表单,重复1、2
6.信息合法,系统根据表单提交的航班信息,查找数据库,把符合用户要求的航班信息格式化以后,以表格的形式响应给用户。
7.没有用户查询的航班,提示没有此航班。
查询过程:
1. 要求用户必须按要求输入表单需要的全部信息。
2. 在输入不全的情况下不允许提交,输出错误提示,跳转到相应的表单项,要求填写。
3. 用户在填写完成后提交表单,系统检查信息的合法性。
4. 不合法不允许提交,输出错误提示,跳转到相应的表单项,要求重新填写。再次提交之前转到2
5. 验证完整性和合法性之后提交表单到系统,系统根据表单提交的航班信息,查找数据库,把符合用户要求的航班信息格式化以后,以表格的形式响应给用户。
6. 如果没有用户查询的航班,提示没有此航班。
7. 结束。
3.4.4
添加航班
1.用户登陆系统以后,提交添加航班命令,进入添加界面。
1.输入添加表单中需要填写的信息。
2.验证旅客信息的完整性。
3.验证旅客信息的合法性。
4.若不合法,输出错误提示,并跳转到相应的表单,重复1、2
5.信息合法,系统根据表单提交的航班信息格式化航班信息以后,把航班信息添加到航班信息数据库中。
6.提示添加航班成功。
添加过程:
1. 要求用户必须按要求输入表单需要的全部信息。
2. 在输入不全的情况下不允许提交,输出错误提示,跳转到相应的表单项,要求填写。
3. 用户在填写完成后提交表单,系统检查信息的合法性。
4. 不合法不允许提交,输出错误提示,跳转到相应的表单项,要求重新填写。再次提交之前转到2
5. 验证完整性和合法性之后提交表单到系统,系统根据表单提交的航班信息格式化航班信息以后,把航班信息添加到航班信息数据库中。
6. 提示添加航班成功。
7. 结束。
3.4.5
安排航班
1.用户登陆系统以后,提交安排航班命令,进入安排航班界面。
2.系统提供所有的订票信息,并自动生成了符合要求的所有航班。
3.用户根据系统提供的航班信息安排航班。
4.对于没用适合航班的订票,将会没有航班进行选择,通知旅客没有合适机票。发出通知信息。
4.安排好后提交,安排命令。系统将安排信息格式化后,把数据添加到出票数据库。
5.提交后系统提示安排成功。
安排过程:
1.用户根据系统提供的航班信息安排好航班后,系统将安排信息格式化后,把数据添加到出票数据库
2.对于没有合适航班的订票,通知旅客没有合适的航班,并把订票信息添加到已通知数据库。
3.系统提示安排成功。
4.结束。
3.4.6
出票
1.用户登陆系统以后,提交出票命令,进入安排航班界面。
2.系统提供所有等待出票的信息。
3.用户提交出票。
4.系统发出通知旅客去票信息,并生成电子票。
5.用户的状态改为以出票,并激活了剥夺机票功能。用户可以根据实际情况剥夺机票。
6.被剥夺机票的订票信息将返回,订票队列,等待安排。
7.出票后显示出票成功。
出票过程:
1.用户点击出票用户的状态改为以出票,并激活了剥夺机票功能。
2.用户剥夺机票,被剥夺机票的订票信息将返回,订票队列,等待安排。
3.提示出票成功。
4.结束。
第四章 系统设计
总体设计可能的设计方法有自顶向下,逐步细化设计方法;模块化设计方法;结构化设计方法。针对以上系统要完成的功能,本系统总体设计采用自顶向下,逐步细化的方法将功能层次结构的各个部分组合起来,以完成整个系统的实现细节。
4.1.层次结构
4.1.1 系统的的顶层结构,如图4.1所示:
图 4.1
系统的的顶层结构
4.1.2 航班信息管理,如图4.2所示:
4.1.3 订票处理,如图4.3所示:
4.1.4 取票处理,如图4.4所示:
4.1.5 例外处理,如图4.5所示:(此处航班改变后,均做退票处理)
4.2.接口设计(人机界面设计)
管理员和票务员使用同一登陆界面,登陆后进去后有个自的界面,然后进一步操作。
4.2.1 大体的界面设计如图4.6所示。
图 4.6
界面设计
4.2.2 订票界面,如图4.7所示。
图 4.7
订票界面
4.3.数据库设计
4.3.1
整体E-R图,如图4.8所示:
图 4.8
整体E-R图
4.3.2
本系统使用了mysql数据库,由E—R图导出的数据库表如下。
(1)旅客信息,如表 4.1所示
表 4.1
旅客信息表
表名
passenger
列名
数据类型(精度范围)
主/外码
空/非空
备注
ID
int(11)
主码
非空
paName
varchar(30)
非空
sex
tinyint(1)
非空
identCard
varchar(20)
非空
mobilepone
varchar(30)
非空
startDate
date
非空
startCity
varchar(30)
非空
arriveCity
varchar(30)
非空
(2)航班信息,如表4.2所示
表 4.2 航班信息
表名
line
列名
数据类型(精度范围)
主/外码
空/非空
备注
ID
int(11)
主码
非空
lineName
varchar(30)
非空
startCity
varchar(30)
非空
arriveCity
varchar(30)
非空
lineDate
date
非空
lineTime
time
非空
price
int(11)
非空
linecount
int(11)
非空
(3)订票信息,如表4.3所示
表 4.3
订票信息
表名
line_passenger
列名
数据类型(精度范围)
主/外码
空/非空
备注
passenger_ID
int(11)
外码
非空
(passenger_ID,line_ID)是主码
line_ID
int(11)
外码
非空
informed
tinyint(1)
非空
(4)用户表,如表4.4所示:
表 4.4
用户表
表名
user
列名
数据类型(精度范围)
主/外码
空/非空
备注
username
varchar(30)
主码
非空
password
varchar(50)
非空
type
tinyint(1)
1代表航班管理的用户,其它是管理订票的用户
4.4.模块设计
模块设计将对总体设计中模块结构进行细化。
4.4.1
登陆模块如图4.9所示.
图 4.9
登陆模块
4.4.2
航班信息管理的各个模块如图4.10所示。
图4.10
详细模块
4.4.3
订票处理的各个模块如图4.11所示.
图 4.11
订票处理各模块
4.4.4
取票处理模块如图4.12所示.
图 4.12
取票处理
4.4.5
例外处理退票面模块如图4.13所示(延误取票和这个模块类似).
图 4.13
例外处理
第五章 编码和单元测试
5.1.编码
部分模块代码如下,此模块为处理订票模块:
<%@ page language="java" contentType="text/html; charset=UTF-8 pageEncoding="UTF-8"%>
<%@ page import="com.gmy.jipiao.*" %>
机票信息确认
<%
String passenger_ID = request.getParameter("passenger_ID");
String informed = request.getParameter("informed");
if(passenger_ID==null || passenger_ID.length()==0 || informed==null || informed.length()==0 ){
request.getRequestDispatcher("set_ticket.jsp").forward(request,response);
}
int passengerID = Integer.parseInt(passenger_ID);
Passenger passenger = (new DBPassenger()).getPassengerById(passengerID);
String sex = passenger.getSex()==1?"男":"女";
if(informed.equals("0")){
%>
<%
return;
}
String line_ID = request.getParameter("line_ID");
int lineID = Integer.parseInt(line_ID);
Line line = (new DBLine()).getLineByID(lineID);
String notice = (String) request.getAttribute("notice");
if (notice != null && notice != ""){
notice = "
" + notice + "";
}else
notice = " ";
%>