航空订票系统详细设计.docx
- 文档编号:5922234
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:30
- 大小:455.91KB
航空订票系统详细设计.docx
《航空订票系统详细设计.docx》由会员分享,可在线阅读,更多相关《航空订票系统详细设计.docx(30页珍藏版)》请在冰豆网上搜索。
航空订票系统详细设计
详细设计报告
一、引言
1.1编写目的:
本阶段在系统的需求分析的基础上,对航空订票系统做详细设计。
主要解决了实现该系统程序模块具体设计问题。
包括确定算法,数据结构,模块接口的使用,数据库的动态操作以及界面设计等。
在以下的概要设计报告中将对在本阶段中对系统所做的所有详细设计进行详细的说明。
在下一阶段的编码过程中,程序设计员可参考此详细设计报告,在详细设计对机票预定系统所做的算法设计,数据结构以及数据库动态操作的基础上,对系统进行编码。
1.2项目背景:
开发软件名称:
航空订票系统。
用户:
航空公司运行环境:
宿舍电脑。
开发平台:
MyEclipse7.0PostgreSql数据库。
系统架构:
该系统采用java+jsp框架
1.3定义:
查询:
对数据库的操作的一种,用于搜索数据信息。
插入:
对数据库的操作的一种,用于将数据存入数据库中。
更新:
对数据库的操作的一种,用于更改数据库中的数据信息。
PostgreSql:
系统服务器所使用的数据库管理系统(DBMS)。
SQL:
一种用于访问查询数据库的语言事务流:
数据进入模块后可能有多种路径进行处理。
主键:
数据库表中的关键域。
值互不相同。
外部主键:
数据库表中与其他表主键关联的域。
1.4参考资料:
需求分析说明书软件开发小组
软件工程齐治昌谭庆平宁洪等高等教育出版社
实用软件工程郑人杰等,清华大学出版社。
二、总体设计
2.1需求概述
航空订票系统的总目标是:
在计算机网络,数据库和先进的开发平台上,利用现有的软件,配置一定的硬件,开发一个具有开放体系结构的、易扩充的、易维护的、具有良好人机交互界面的机票预定系统,实现航空公司的机票销售的自动化的计算机系统,为企业的决策层提供准确、精细、迅速的机票销售信息。
具体功能为用户把预定机票的旅客信息(姓名、性别、身份证号码(护照号码)、乘坐时间、出行始发地和目的地等)输入到系统中,系统为旅客安排航班。
当旅客交付了预订金后,系统打印出取票通知和帐单给旅客,旅客在飞机起飞前一天凭取票通知和帐单交款取票,系统核对无误即打印出机票给旅客。
此外航空公司为随时掌握各个航班飞机的乘载情况,需要定期进行查询统计,以便适当调整。
同时还需完成旅客延误了取票时间的处理,航班取消后的处理,旅客临时更改航班的处理等。
根据可行性研究的结果和客户的要求,分析现有情况及问题,采用B/S结构,将机票预定系统划主要就是服务器端子系统。
2.2软件结构:
图1软件结构图
三、程序描述
3.1各功能详细描述:
本系统主要用于机票预订,所以提供了以下几个子功能:
机票预订,取票通知,查询航班,查询机票,退票,打印机票,各航班的营运统计,以及后台方面的航班的添加,取消航班,机票的生成,以及航班的查询等后台功能。
1、机票预订功能:
用户和机场管理员有权力进行该项功能。
首先通过查询得到旅客所需的航班,确定该航班还有没有被预订的座位,然后选择座位的等级,填写旅客的详细信息之后就可进行网上预订机票。
2、取票通知:
该项功能只有用户和机场管理员有权力进行操作,在机票预订功能成功完成之后,系统会自动给浏览器端发送一条取票信息以及所需缴纳的费用。
旅行社可以利用特定设备将该取票信息打印出来,这就是取票通知。
3、查询航班:
可以通过输入出发地,目的地,日期和时间选定自己航班。
4、查询机票:
该项功能用户、游客、管理员都可以操作,可以通过自己的身份证号以及取票通知上的机票号查询自己的机票信息。
5、退订机票:
该功能只有用户和机场管理员有权力操作,利用身份证号和对应的机票号就可以查询到机票信息,然后就可以退订机票。
6、打印机票:
该功能只有机场管理员有权力操作,只有当管理员确认旅客已经付款后才予以打印机票,可以通过身份证号和对应的取票信息上的机票号查询机票信息,然后服务器返回机票信息,管理员就可以打印该机票信息,交给旅客。
7、各航班的营运统计:
该项功能只有机场管理员才能操作,他可以通过输入年份和月份查询当月个航班的营运情况,以便机场能够及时掌握航班动态。
8、后台的航班添加:
该项功能只有机场管理员才能操作,他通过提供航班的具体信息添加航班信息。
9、后台的取消航班:
该项功能只有机场管理员才能操作,先通过航班号和航班日期查询到航班信息后,取消航班就可以将该航班从数据库中删除。
10、后台的航班查询:
该项功能只有机场管理员才能操作,通过航班号和航班日期查询到航班信息。
11、后台的机票生成:
该项功能只有机场管理员才能操作,可以通过该项功能给刚添加的航班生成对应的飞机票号纪录。
3.2
主要的系统功能模块如下:
(1)管理员登陆模块ManagerDAO.getManager()
(2)管理员修改密码模块ManagerDAO.modifyPassword()
(3)删除用户ManagerDAO.deleteConsumer()
(4)添加新管理员ManagerDAO.addManager()
(5)删除管理员模块ManagerDAO.deleteManager()
(6)发布新航班模块ManagerDAO.addNewFlight()
(7)删除航班模块ManagerDAO.deleteFlight()
(8)根据信息查看航班信息模块ConsumerDAO.getFlightByInformation()
(9)
推荐信息模块InformationDAO.getInformationByKeyWord()
信息采集器
3.3数据库设计:
普通用户(Consumer)
字段名
字段类型
是否为空
默认值
字段含义
注释
consumerId
VARCHAR2
(10)
N
用户编号
用以标示不同用户。
consumerName
VARCHAR2
(20)
N
用户名称
用户自己取的名字有利于用户记忆,可以用来登录等。
consumerPassword
VARCHAR2
(20)
N
用户密码
用于确定用户身份。
consumerGender
VARCHAR2
(1)
N
用户性别
consumerBooking
Fligt
VARCHAR2
(20)
Y
用户已订票航班
用于储存用户已订票的航班。
consumerBooking
Seat
VARCHAR2
(20)
Y
用户已定机票
的座位号
用于储存用户已订票航班的座位号。
consumerIDCardO
rPassportNo
VARCHAR2
(20)
N
用户的身份证
号或护照号
用户取票的凭证(身份证号或护照号)
consumerTelepho
ne
VARCHAR2
(11)
N
联系电话
用已与用户取得联系
consumerMailBox
VARCHAR2
(20)
N
电子邮箱
用已与用户取得联系
管理员(Manager)
字段名
字段类型
是否为空
默认值
字段含义
注释
managerId
VARCHAR2
(10)
N
管理员编号
用以标示不同管理员。
managerName
VARCHAR2
(20)
N
管理员名称
管理员自己取的名字有利于其记忆,可以用来登录等。
managerPassword
VARCHAR2
(20)
N
管理员密码
用于确定管理员身份。
航班表(FLIGHT)
字段名
字段类型
是否为空
默认值
字段含义
注释
flightId
CHAR(6)
N
飞机编号
PRIMARYKEY
startDate
DATE
N
出发日期
飞机起飞的日期
endDate
DATE
N
到达日期
飞机到达的日期
fromAddress
VARCHAR2
(20)
N
出发地点
飞机起飞地点
toAddress
VARCHAR2
(20)
N
到达地点
飞机目的地
startTime
DATE
N
出发时间
起飞时间
endTime
DATE
N
到达时间
到达目的地时间
scheduler
CHAR(7)
N
班期
sailLength
NUMBER(5)
N
航程
座位表(FLIGHT)
字段名
字段类型
是否为空
默认值
字段含义
注释
flightId
CHAR(6)
N
飞机编号
flightnumber
CHAR(6)
N
航班号
PRIMARYKEY
firstclassremainseats
NUMBER(3)
N
头等舱剩余座位数
飞机到达的日期
business_class_remainseats
NUMBER(3)
N
公务舱剩余座位数
economy_class_r
emainseats
NUMBER(3)
N
经济舱剩余座位数
priceoff
NUMBER(4
2)
N
季节折扣
calendar
DATE
N
出发日期
3.4、流程图:
将request对象写向服务
出票请求
查询航班请求
修改密码请
登陆请求
调
用
调
用
调
用
调
用
TicketOrderD
AO
FligthDao
Branc
hDao
Branc
hDao
封装response对象
将response对象写往客
解析request对象将结果显示在客
图5流程图
3.5DAO接口设计
设计了通用的DAO接口,而不是直接写访问数据库的实现类,这样可以创建不同的实现类来实现接口,使标准制定和标准实现分离。
当换了数据库,或者换了数据库访问技术,就可以写新的实现类,不用改变原来的代码。
如定义FlightDAO接口,若从文件中读取数据可以定义FlightDaoFromFile实现类,若利用JDBC访问数据可以定义FlightDaoFromJDBC实现类,若利用hibernate访问数据可以定义FlightDaoFromHibernate实现类等。
3.5.1FlightDAO
flightDAO用来航班计划,航班的数据访问。
packagecom.tarena.abs.dao;
importcom.tarena.abs.model.*;
importjava.util.*;
//对航班和航班计划数据访问的接口。
publicinterfaceFlightDAO{
//根据指定出发地,目的地和出发日期在底层数据源中查找
//得到所有的航班对象的集合。
publicSetgetAllFlights(StringfromAddr,StringtoAddr,Calendardate);
//执行出票的操作。
publicbooleanorder(Orderord);
//添加指定的航班计划对象。
publicbooleanaddFlightSchedular(FlightSchedularfs);
//根据给定的航班编号在底层数据源中删除该航班计划,
//以及该计划下的所有航班。
publicbooleanremoveFlightSchedular(StringflightNumber);
//得到所有航班计划对象
publicSetgetAllFlightSchedulars();
//添加航班
publicbooleanaddFlight(Flightfl);
}
3.5.2TicketOrderDAO
TicketOrderDAO用来访问票单数据。
packagecom.tarena.abs.dao;
importjava.util.Set;
importjava.util.Calendar;
importcom.tarena.abs.model.*;
//机票出票记录访问接口
publicinterfaceTicketOrderDAO{
//执行出票的操作。
publicbooleanorder(Orderord);
//执行退票操作。
publicbooleancancelOrder(intTicketNumber);
//查询指定营业网点在指定时间段内的出票记录
publicSet
//得到指定营业网点指定日期内的营业额。
publicdoublegetAllTicketMoney(Branchbranch,CalendarstartDate,CalendarendDate);
//得到所有营业网点指定日期内的营业额
publicdoublegetAllTicketMoney(CalendarstartDate,CalendarendDate);
//查询所有出票信息
publicSet
}
4关健代码分析
4.1流程代码分析服务器启动时读取配置文件,读取数据,并且服务器端ServerSocket等待客户端线程访问,当收到客户端相应后,则创建一个新的服务线程执行服务。
ServerSocketss=null;
Sockets=null;
try{
//创建服务器socketss=new
ServerSocket(Integer.parseInt(pro.getProperty("ServerPort")));
while(true){
s=ss.accept();
//转发给serverThread处理(传递socket参数)
newServerThread(s).start()
}catch(IOExceptione){e.printStackTrace();
服务线程ServerThread通过构造函数接受
socket,然后转发给Controller
publicclassServerThreadextendsThread{Sockets;
protectedServerThread(Sockets){//this.s=s;
用传入的socket初始化
}publicvoidrun(){
try{
newController(s).handle();//}catch(Exceptione){e.printStackTrace();
交给控制器处理
}finally{
try{s.close();}catch(IOExceptione){}
}
}
}
由controller调用handle方法,分析请求对象。
if(type.equals("login")){//登陆处理
loginHandle(req);
}elseif(type.equals("flightSearch")){//
flightSearchHandle(req);
}elseif(type.equals("order")){//
航班计划查询处理
订单处理
orderHandle();
}elseif(type.equals("quit")){//退出处理
//quitHandle();
break;
}elseif(type.equals("modifyPasswd")){
modifyPasswd(req);
}
有不同的处理程序,调用相应的dao将查询信息封装到response中。
hs=(HashSet)(flightDao.getAllFlights(fromAddr,toAddr,cal));Responseres=newResponse("flightSearch");res.setData(hs);
4.2
再把
用表格显示表单当客户端查询到航班计划时,把flightlist航班集合传给FlightTableModel,
FLightTableModel传给JTable,然后把JTable加入JScorllPane,就会自动显示数据。
FlightTableModelftm=newFlightTableModel(flightlist);
JTablejt=newJTable(ftm);ClientMainClass.clientFrame.setTable(jt);
FlightTableModel实现了AbstractTableModel接口,实现了如下四个方法。
packagecom.tarena.abs.client;
importjavax.swing.table.*;
importjava.util.*;
importcom.tarena.abs.model.*;
publicclassFlightTableModelextendsAbstractTableModel{
ArrayLists;
publicFlightTableModel(ArrayLists){
this.s=s;
}
//获得列名
publicStringgetColumnName(intarg0){switch(arg0){
case0:
return"
航班号";
case1:
return"
出发地";
case2:
return"
目的地";
case3:
return"
起飞时间"
case4:
return"
到达时间"
case5:
return"
机型";
case6:
return"
票价";
case7:
return"
头等舱";
case8:
return"
公务舱";
case9:
return"
经济舱";
default:
returnnull;
}
//获得行数
publicintgetColumnCount(){
return10;
}
//获得列数
publicintgetRowCount(){
returns.size();
}
//获得指定位置的值
publicObjectgetValueAt(introw,intcol){
Flightf=(Flight)s.get(row);
if(row<0||row>s.size())
returnnull;
switch(col){
case0:
returnf.getSch().getFlightNumber();
case1:
returnf.getSch().getFromAddress();
case2:
returnf.getSch().getToAddress();
case3:
returnf.getSch().getFromTime();
case4:
returnf.getSch().getToTime();
case5:
returnf.getSch().getPlane();
case6:
return
(int)(f.getSch().getPrice()*f.getPriceOff());
case7:
returnf.getFCSRemain();
case8:
returnf.getBCSRemain();
case9:
returnf.getECSRemain();default:
returnnull;
}
}
}
4.3Hibernate映射关系
1、构建pojo(PlainOldJavaObjects)对象
用JDBC储存数据时,涉及多个表格的修改,查找。
工作难度较大。
所以考虑用hibernate
实现数据储存。
首先把模型改写为标准pojo。
(1)添加Long类型的oid属性。
(2)为保存每个属性添加getter,setter方法。
(3)添加无参构造函数。
(4)写hibernate映射文件。
2、Hibernate储存原理
当储存数据时,hibernate自动调用getter方法,把属性存入相应字段。
当读取数据时,hibernate自动调用无参构造方法创建对象,然后调用setter方法给对象赋值,从而产生和原来对象相等(equals)的对象。
当增、删、改操作时,hibernate会自动把与原数据相关联的表的字段修改(必须设置级联)。
3、映射关系分析
(1)航班计划和飞机型号是多对一关系:
每个航班计划都包含飞机型号属性,各飞机型号会被多个航班计划引用。
(2)航班和航班计划是多对一的关系:
每个航班都属于某个航班计划,因此每个航班都包含一个航班计划属性,而每个航班表都有一个外间指向航班计划的id子段。
(3)定单与航班是多对一关系:
一个定单包含的航班信息有它包含的航班属性得到,通过航班属性还可以得到航班计划和飞机型号的信息。
每个定单只能有一个航班,每个航班可以包含在多个定单中,因此定单与航班是多对一关系。
(4)定单和网点是多对一的关系:
原理同定单和航班的关系。
5总结
航空订票系统使用软件分层结构,利用面向对象的设计方法,并把学到的知识应用于实践。
实现了稳定、可维护、可扩展性的软件,并且完成业务需求。
如做以下改进会使系统更加完善:
1、初始化配置参数:
程序是直接读配置文件来读取初始化参数的,如下所示:
ServerIP=127.0.0.1
ServerPort=8888可以将此参数放入程序中,由用户或管理员输入,来选侧不同的服务器。
客户端的参数设置及重新连接功能有待实现。
2、服务器掉线:
默认是实现是客户端先退出,通知服务器,服务器从内存中删掉此客户端,然后客户端关闭连接。
privatevoidquitHandle(Requestreq){
StringcurrentUserName=(String)req.getData("currentUser");for(Objecto:
onlineAgent){Brancha
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 航空 订票 系统 详细 设计