航班订票系统项目文档

 

XX航空公司国内机票售票系统项目文档

项目描述:

我们要为某航空公司开发一套国内机票售票系统,要求能通过分布在全国各主要城市的该航空公司的营业网点为顾客提供航班查询,购买机票以及退票的服务。该系统的工作流程如下:当顾客到达营业网点后向航空公司营业员提供出发地,目的地和出发日期,营业员根据以上信息,操作软件,连接航空公司的服务器,查询满足条件的航班,然后根据顾客的要求选择某个航班,输入乘客信息,以及舱位信息,然后执行出票操作。该系统在营业网点内能够完成营业员登录,查询航班,出票等功能;在航空公司内部能够完成添加或删除航班,添加或删除营业网点,添加或删除营业员等功能。除此之外,该系统还要求能统计每个营业网点的业务量,以及每位营业员的工作量,并将这些信息保存在服务器端,并能在服务器端随时查询。

 

术语表:

航班计划(Flight Scheduler):用来描述由某个航空公司执行的某个定期航班的计划表。例如:由中国国际航空公司执行的每天早上8:00从北京起飞,上午10:00到达上海的CA1202就是一个航班计划。

属性:航班号,起始日期,结束日期,出发地,目的地,离港时间到港时间,里程,飞机机型,班期,基准票价。

 

航班(Flight):用来描述在某个确定日期执行某个定期航班计划的一次航班。例如:2008525从北京飞上海的CA1202就是一个航班的实例。

属性:航班计划,出发日期,各舱剩余座位数,折扣。

 

起始日期(Start Date):用来描述某个航班计划开始的日期。

 

结束日期(End Date):用来描述某个航班计划结束的日期。

 

营业网点(Branch):用来描述航空公司的某个分支机构,该机构能使用该系统为顾客提供查询航班和出票的服务。营业网点通过若干台终端机器与航空公司的服务器相连,

属性:编号,名称,地址,电话。

 

营业员(Sales):用来描述在营业网点操作该系统的操作人员,每个营业员必须凭姓名和密码登录系统后才能为顾客提供服务,同时在服务器端要记录每个营业员的工作时间及业务量。

属性:编号,姓名,密码,所属营业网点编号。

 

航班号(Flight Number):由航空公司给航班计划定义的唯一标识号码,该号码由2位英文字符和4位数字组成,2位英文字符是航空公司编码,4位数字是航班编码。例如:CA1202就是一个航班计划的航班号,其中CA代表中国国际航空公司,1202代表航班的编号。

 

出发地(From City):用来描述某个航班计划的起飞城市和机场,所有国内机场均用三个英文字母的代码表示,详情请见附录I(国内机场代码表)。

 

目的地(To City):用来描述某个航班计划的到达城市和机场,所有国内机场均用三个英文字母的代码表示,详情请见附录I(国内机场代码表)。

 

离港时间:(Departure):用来描述某个航班计划的从出发地机场离开的时刻,离港时间一般代表飞机舱门关闭,不再接收乘客的时刻。该时间精确到分钟。

 

到港时间:(Arrival):用来描述某个航班计划到达目的地机场的时间,到港时间一般代表飞机舱门开启,允许乘客下飞机的时刻,该时间精确到分钟。

 

出发日期(Date):用来描述某个航班的出发日期,该日期精确到某一天。

 

班期(Scheduler):用来描述某个航班计划在一周之内哪些天有航班,哪些天没有航班。

 

舱位等级:(Cabin Class):用来描述航班的不同舱位,一般分为三种:头等舱(F),公物舱(C),经济舱(Y)。不同的舱位等级具有不同的机票折扣,详情请参见舱位折扣机票价格

**实际情况中航空公司定义的舱位等级可能更复杂,在本项目中为简化业务模型,只对舱位等级作上述三种划分。

 

乘客类型:(Passenger type):用来描述乘坐航班的乘客的类型,一般分为三种:成人(A)age>12),儿童(C)2<age<=12),婴儿(I)0<=age<=2)。不同的乘客类型具有不同的机票折扣,详情请见乘客折扣。在这三种乘客类型中,成人和儿童占用座位,而婴儿不占用座位,婴儿票不能单独出售,一张婴儿票必须凭一张成人票售出。

 

飞机机型:(Airplane Model):用来描述执行某个航班计划的飞机的型号,一般来讲,一个航班计划的各次航班都应该采用同种机型的飞机来执行。不同的飞机型号有不同的航程及各舱座位数。详情请参见附录II民航飞机型号一览表

**实际情况中,各种机型的座位数是不一样的,同一机型还分好几个系列,如B737(波音737)有B737-200B737-300....B737-900等多个系列,每个系列座位数都不一样。即使是同一型号、同一系列的机型,所属的航空公司不同,座位数也会不同,因为航空公司在购买飞机时,会根据自己的需要要求厂家采用不同的布局,不同的布局会有不同的头等舱、公务舱、经济舱座位数。在本项目中为简化业务模型,我们认为同种型号的飞机各舱座位数是固定的。

 

基准票价:(Full Price)是指某个航班在没有季节折扣时的一张经济舱成人票的价格,该价格作为该航班计划的基准价格,最终机票价格应该在此基础上乘以季节折扣舱位折扣乘客类型折扣

 

季节折扣:(Season Discount)航空公司根据不同季节的客流状况调整的航班的折扣,只有经济舱的成人票才享受季节折扣。

 

舱位折扣:(Class Discount)不同舱位在基准价格基础上的价格系数,头等舱为1.5,公务舱为1.3,经济舱为1.0

 

乘客类型折扣:(Passenger Discount):不同乘客类型在基准票价基础上的价格系数,成人为1.0,儿童为0.5,婴儿为0.1

 

机票订单(Ticket Order):一张成功出票的机票记录,

 

机票价格:(Ticket Price):一张机票的价格,机票价格由以下公式计算:

经济舱成人票票价=基准价格*季节折扣

其他舱位乘客票价=基准价格*舱位折扣*乘客类型折扣

 

燃油税:国家统一征收的,由乘坐民航飞机的乘客负担的一种税收,计算办法:800KM以内(含)的航程,每人税费为60元,800KM以上的航程每人税费为100元,儿童票减半收取,婴儿票免收燃油税。燃油税的征收不区分乘客舱位。该项税费捆绑在机票上由航空公司代收代缴。

 

机场建设费:国家统一收取的,由乘坐民航飞机的乘客负担的一种收费项目,用于支援民航机场的建设。收取办法:乘坐70座以下(含)的小飞机,每人每次收取10元;乘坐70座以上的大飞机,每人每次收取50元。儿童和婴儿都不收取机场建设费。机场建设费的征收不区分乘客舱位。该项收费捆绑在机票上由航空公司代收代缴。

 

机票应收款:一张机票的应收款=机票价格+燃油税+机场建设费

 

 

需求分析:

1,系统功能模块:

 

2,系统活动图:

 

3,用例图:

客户端用例:

 

服务器端用例:

 

概要设计:

1,  业务模型:

2,  数据库设计

设计出如下数据库表结构:

机场表(AIRPORT):

字段名

描述

类型

约束

备注

airport_code

机场代码

CHAR(3)

Primary Key

 

city

所在城市

VARCHAR(20)

NOT NULL

 

airport_name

机场名

VARCHAR(20)

 

若为空,则用城市名表示

 

飞机机型表(AIRPLANE_MODEL:

字段名

描述

类型

约束

备注

model

机型

VARCHAR (20)

PRIMARY KEY

 

max_sail_length

最大航程

NUMBER(6)

NOT NULL

 

first_class_seats

头等舱座位数

NUMBER(3)

NOT NULL

 

business_class_seats

公务舱座位数

NUMBER(3)

NOT NULL

 

economy_class_seats

经济舱座位数

NUMBER(3)

NOT NULL

 

 

航班计划表(FLIGHT_SCHEDULER:

字段名

描述

类型

约束

备注

flight_number

航班号

CHAR(6)

PRIMARY KEY

 

start_date

开始日期

DATE

NOT NULL

 

end_date

结束日期

DATE

NOT NULL

 

from_city

出发地机场

CHAR(3)

REFERENCES airport.airport_code

NOT NULL

 

to_city

目的地机场

CHAR(3)

REFERENCES airport.airport_code

NOT NULL

 

departure_time

离港时间

DATE

NOT NULL

 

arrival_time

到港时间

DATE

NOT NULL

 

airplane

执行机型

VARCHAR(20)

REFERENCES airplane_model.model

NOT NULL

 

scheduler

班期

CHAR(7)

NOT NULL

 

sail_length

航程

NUMBER(5)

NOT NULL

 

 

航班表(FLIGHT):

字段名

描述

类型

约束

备注

id

航班编号

NUMBER(8)

PRIMARY KEY

 

flight_number

航班号

CHAR (6)

REFERENCES flight_scheduler. flight_number

 

departure_date

出发日期

DATE

NOT NULL

 

first_class_remain_seats

头等舱剩余座位数

NUMBER(3)

NOT NULL

 

business_class_remain _seats

公务舱剩余座位数

NUMBER(3)

NOT NULL

 

economy_class_remain _seats

经济舱剩余座位数

NUMBER(3)

NOT NULL

 

season_ discount

季节折扣

NUMBER(4,2)

NOT NULL

DEFAULT 1.0

 

 

营业网点表(BRANCH):

字段名

描述

类型

约束

备注

id

网点编号

NUMBER (4)

PRIMARY KEY

 

name

网点名称

VARCHAR(40)

NOT NULL

 

address

地址

VARCHAR (50)

NOT NULL

 

telephone

电话

VARCHAR(15)

 

 

province

所在省份

VARCHAR(10)

NOT NULL

 

city

所在城市

VARCHAR(10)

NOT NULL

 

 

营业员表(SALES

字段名

描述

类型

约束

备注

id

营业员编号

NUMBER (6)

PRIMARY KEY

 

branch_id

网点编号

NUMBER(4)

NOT NULL  REFERENCES BRANCH.id

 

name

营业员名称

VARCHAR(10)

NOT NULL

 

password

登录密码

VARCHAR(10)

NOT NULL

 

 

出票记录表(TICKET_ORDER):

字段名

描述

类型

约束

备注

id

机票编号

NUMBER(10)

PRIMARY KEY

 

flight_id

航班编号

NUMBER(8)

NOT NULL

REFERENCES FLIGHT.id

 

passenger_name

乘客姓名

VARCHAR(40)

NOT NULL

 

certification_number

证件号码

VARCHAR(20)

NOT NULL

 

order_date

出票日期

DATE

NOT NULL

 

class

舱位等级

CHAR(1)

NOT NULL CHECK IN(F,C,Y)

 

passenger_type

乘客类型

CHAR(1)

NOT NULL CHECK IN(A,C,I)

 

branch_id

营业网点编号

NUMBER(4)

NOT NULL

REFERENCES BRANCH.id

 

sales_id

营业员编号

NUMBER(6)

NOT NULL

REFERENCES SALES.id

 

 

 

3, DAO接口设计

1) SalesDAO

package com.tarena.abs.dao;

import com.tarena.abs.model.*;

 

/**

* 对营业员数据进行访问的接口。

* @author tangliang

*

*/

public interface SalesDAO{

/**

 * 根据给定的姓名和密码在底层数据源中查找营业员的纪录,

 * 若找到,则返回该营业员对象,若没找到或密码错误则返回null

 * @param name 营业员姓名

 * @param passwd 营业员密码

 * @return 找到的营业员对象或null

 */

public Sales getSales(String name,String passwd);

/**

 * 向底层数据中添加一个营业员纪录。

 * @param user 要添加的营业员对象

 * @return 若添加成功返回true,否则返回false

 */

public boolean addSales(Sales user);

/**

 * 根据指定的营业员的姓名在底层数据源中删除该营业员。

 * @param name 营业员姓名

 * @return 若删除成功返回true,否则返回false

 */

public boolean removeSales(String name);

/**

 * 修改指定营业员的密码。

 * @param name 营业员姓名

 * @param oldPassword 旧密码

 * @param newPassword 新密码

 * @return 若修改成功返回true,否则返回false

 */

public boolean modifyPassword(String name,String oldPassword,String newPassword);

}

 

2) FlightDAO

package com.tarena.abs.dao;

import java.util.Set;

import java.util.Calendar;

import com.tarena.abs.model.*;

 

/**

 * 对航班和航班计划数据访问的接口。

 * @author tangliang

 *

 */

public interface FlightDAO{

/**

 * 根据指定出发地,目的地和出发日期在底层数据源中查找

 * 得到所有的航班对象的集合。

 * @param fromAddr 出发地

 * @param toAddr 目的地

 * @param date 出发日期

 * @return 航班集合

 */

public Set getAllFlights(String fromAddr,String toAddr,Calendar date);

/**

 * 添加指定的航班计划对象。

 * @param fs 要添加的航班计划对象。

 * @return 添加成功返回true,否则返回false

 */

public boolean addFlightScheduler(FlightScheduler fs);

/**

 * 根据给定的航班编号在底层数据源中删除该航班计划,以及该计划下的所有航班。

 * @param flightNumber 要删除的航班计划的航班编号。

 * @return 删除成功返回true,否则返回false

 */

public boolean removeFlightScheduler(String flightNumber);

/**

 * 该方法更新航班--删除过期航班,创建可以接受预订的航班。

 * 航班的接受预订期是指从当前日期开始往后60天。

 *

 */

public void updateFlights();

/**

 * 得到所有航班计划对象

 * @return

 */

public Set getAllFlightSchedulars();

 

}

 

 

3) BranchDAO

package com.tarena.abs.dao;

 

import com.tarena.abs.model.*;

import java.util.Set;

 

/**

 * 对营业网点数据访问的接口

 * @author tangliang

 *

 */

public interface BranchDAO {

       /**

        * 根据给定的编号在底层数据源中查找营业网点的纪录,

        * 若找到,则返回该营业网点对象,若没找到则返回null

        * @param id 营业网点编号

        */

       public Branch getBranch(int id);

      

       /**

        * 查找指定的省份和城市的所有营业网点

        * @param province 省份

        * @param city 城市

        * @return 满足条件的营业网点的集合

        */

       public Set<Branch> getAllBranch(String province,String city);

      

       /**

        * 向底层数据中添加一个营业网点。

        * @param branch 要添加的营业网点对象

        * @return 返回该营业网点的编号。

        */

       public int addBranch(Branch branch);

      

       /**

        * 根据指定的营业网点的名称在底层数据源中删除该营业网点。

        * @param name 营业网点名称

        * @return 若删除成功返回true,否则返回false

        */

       public boolean removeBranch(String name);

      

       /**

        * 根据指定的营业网点的编号在底层数据源中删除该营业网点。

        * @param id 营业网点编号

        * @return 若删除成功返回true,否则返回false

        */

       public boolean removeBranch(int id);

}

 

4) TicketOrderDAO

package com.tarena.abs.dao;

import java.util.Set;

import java.util.Calendar;

import com.tarena.abs.model.*;

/**

 * 机票出票记录访问接口

 * @author tangliang

 *

 */

public interface TicketOrderDAO {

/**

 * 执行出票的操作。

 * @param ord 订单对象

 * @return 若出票成功返回true,否则返回false

 */

public boolean order(TicketOrder ord);

/**

 * 执行退票操作。

 * @param TicketNumber 机票编号

 * @return 退票成功返回true,否则返回false

 */

public boolean cancelOrder(int TicketNumber);

/**

 * 查询指定营业网点在指定时间段内的出票记录

 * @param branch 营业网点

 * @param startDate 开始日期

 * @param endDate 结束日期

 * @return 满足条件的出票记录集合

 */

public Set<TicketOrder> getAllTicketOrder(Branch branch,Calendar startDate,Calendar endDate);

/**

 * 查询指定营业员在指定时间段内的出票记录

 * @param sales 营业员

 * @param startDate 开始日期

 * @param endDate 结束日期

 * @return 满足条件的出票记录集合

 */

public Set<TicketOrder> getAllTicketOrder(Sales sales,Calendar startDate,Calendar endDate);

/**

 * 得到指定营业网点指定日期内的营业额。

 * @param branch 营业网点

 * @param startDate 开始日期

 * @param endDate 结束日期

 * @return 营业额

 */

public double getAllTicketMoney(Branch branch,Calendar startDate,Calendar endDate);

/**

 * 得到指定营业员指定日期内的营业额。

 * @param sales 营业员

 * @param startDate 开始日期

 * @param endDate 结束日期

 * @return 营业额

 */

public double getAllTicketMoney(Sales sales,Calendar startDate,Calendar endDate);

/**

 * 得到所有营业网点指定日期内的营业额

 * @param startDate 开始日期

 * @param endDate 结束日期

 * @return 营业额

 */

public double getAllTicketMoney(Calendar startDate,Calendar endDate);

}

4,  主要工作流程:

 

详细设计:

1, 各功能模块设计

2, 系统配置

3, 代码框架

4,  

代码框架:

?????

 

 

附录I:国内通航机场名及代码表

地区

城市

三字码

机场名

北京

北京

PEK

首都

上海

上海

SHA

虹桥

 

PVG

浦东

重庆

重庆

CKG

江北

天津

天津

TSN

滨海

河北

石家庄

SJW

正定

秦皇岛

SHP

山海关

山西

太原

TYN

武宿

常治

CIH

 

运城

YCU

 

内蒙古

呼和浩特

HET

白塔

包头

BAV

包头

海拉尔

HLD

东山

锡林浩特

XIL

 

吉林

长春

CGQ

大房身

吉林

JIL

二台子

延吉

YNJ

 

辽宁

沈阳

SHE

桃仙

大连

DLC

周水子

丹东

DDG

浪头

锦州

JNZ

锦州

朝阳

CHG

 

黑龙江

哈尔滨

HRB

阎家岗

齐齐哈尔

NDG

三家子

加木斯

JMU

东郊

牡丹江

MDG

海浪

河南

郑州

CGO

新郑

洛阳

LYA

洛阳

南阳

NNY

姜营

浙江

杭州

HGH

萧山

宁波

NGB

栎社

温州

WNZ

永强

黄岩

HYN

路桥

义乌

YIW

义乌

衢州

JUZ

 

舟山

HSN

朱家尖

安徽

合肥

HFE

骆岗

黄山

TXN

屯溪

安庆

AQG

大龙山

福建

福州

FOC

长乐

厦门

XMN

高崎

晋江

JJN

泉州

武夷山

WUS

武夷山

江西

南昌

KHN

昌北

九江

JIU

九江

赣州

KOW

黄金

景德镇

JDZ

 

广东

广州

CAN

白云

深圳

SZX

宝安

湛江

ZHA

湛江

珠海

ZUH

三灶

汕头

SWA

外砂

梅县

MXZ

梅县

湖南

长沙

CSX

黄花

常德

CDG

桃花源

张家界

DYG

荷花

衡阳

HNY

 

宁夏

银川

INC

河东

山东

济南

TNA

遥墙

青岛

TAO

流亭

烟台

YNT

莱沂

潍坊

WEF

 

威海

WEH

 

临沂

LYI

临沂

济宁

JNG

 

云南

昆明

KMG

巫家坝

景洪

JHG

景洪版纳

丽江

LJG

三义

大理

DLU

大理

芒市

LUM

 

中甸

DIG

中甸

香格里拉/迪文

保山

BSD

 

西藏

拉萨

LXA

贡嘎

陕西

西安

SIA

咸阳

汉中

HZG

 

延安

ENY

 

新疆

乌鲁木齐

URC

地窝堡

伊宁

YIN

伊宁

喀什

KHG

喀什

库尔勒

KRL

 

阿克苏

AKU

阿克苏

阿勒泰

AAT

 

和田

HTN

和田

库车

KCA

 

且末

IQN

且末

塔城

TCG

 

阿尔玛塔

ALA

 

海南

海口

HAK

美兰

三亚

SYX

凤凰

湖北

武汉

WUH

天河

襄樊

XFN

刘集

沙市

SHS

 

宜昌

YIH

三峡

恩施

ENH

 

贵州

贵阳

KWE

龙洞堡

铜仁

TEN

 

四川

成都

CTU

双流

万县

WXN

梁平

泸州

LZO

蓝田

宜宾

YBP

莱坝

广元

GYS

 

绵阳

MIG

 

西昌

XIC

青山

九寨沟

JZH

黄龙

铜仁

TEN

 

甘肃

兰州

LHW

中川

敦煌

DNH

 

广西

南宁

NNG

吴墟

桂林

KWL

两江

柳州

LZH

白莲

北海

BHY

福成

江苏

南京

NKG

禄口

常州

CZX

牵牛

徐州

XUE

观音

连云港

LYG

白塔埠

南通

NTG

兴东

盐城

YNZ

南洋

无锡

WUX

硕放

 

 

 

 

附录II 民航飞机型号一览表

飞机型号

制造厂商

最大航程

头等舱座位数

公务舱座位数

经济舱座位数

A310-300

欧洲空中客车工业公司

6820

12

20

204

A310-200

 6820

 12

20

228

A340-200

12510

16

20

340

A300-600

 12510

 12

0

274

A320

5400

12

0

165

B747-400COM

美国波音飞机制造公司

 12000

20

20

360

B747-400

12780

20

20

400

B747COM

 8500

 12

20

291

B747SP

 8500

 12

20

291

B747-300

 12500

24

40

600

B707

6300 

8

0

155

B767-200

 5800

12

20

214

B767-300

 5800

 12

20

225

B757-200

美国波音飞机制造公司

5890

 12

12

200

B737-200

 4300

12

20

218

B737-300

2923

12

0

248

B737-500

 2580

12

0

133

B777-200A

9000

12

0

380

B777-200B

 5400

12

20

292

MD-82

美国麦克唐纳-道格拉斯公司

5000

12

0

145

MD-90

 5400

12

0

153

MD-11

12500

20

20

340

BAE146-100

英国宇航公司

 2100

8

0

88

BAE146-300

 1800

 8

0

122

YAK-42

俄罗斯柳辛设计集团

 2300

 12

0

120

TU-154M

5800

 12

12

164

IL-86

 12000

 12

20

350

FOK-100

荷兰福克公司

 6800

 8

0

108

YN7

西安飞机制造厂

 2700

 4

 

48

S34

瑞典

 2100

 0

0

35

MD23

美国

 1500

 0

0

16

ATR

法国

 1800

 8

0

60

328

美国

 2100

0

32

DH8

加拿大

 2500

 4

0

52

 

 

posted on 2009-04-30 14:07 雪中霖雨 阅读(978) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

留言簿

文章档案(12)

相册

欢迎到我的百度blog

订阅我的博客到您的QQ邮箱

搜索

最新评论