【项目1】航空订票管理系统——一个完整的系统级项目的设计与实现(技术栈:MySQL + Java + Hibernate + Swing)
《Java 学习笔记:从入门到实战》是一本以航空订票管理系统为背景的Java学习指南,内容涵盖项目背景、技术栈、需求分析、数据库设计、系统架构、功能模块实现及测试总结。以下是摘要:
项目背景
项目名称:航空订票管理系统
开发语言:Java
技术栈:MySQL + Hibernate + Swing + Navicat
开发工具:IntelliJ IDEA 2021.2
开发平台:Windows 10
目标:开发一个功能完善的航空订票管理系统,支持航班信息、网点信息及订票信息的管理。技术栈
开发语言:Java
后端数据库:MySQL
数据库访问:Hibernate
前端开发:Swing
数据库管理工具:Navicat核心内容
项目概述
系统功能:
- 航班信息管理:添加、删除、修改航班信息。
- 网点信息管理:添加、删除、修改网点信息,查询网点信息。
- 订票信息管理:添加、删除、修改订票信息,查询订票信息。
用户群体:- 航空公司信息管理员:负责航班信息管理。
- 网点售票员:负责网点信息和订票信息管理。
- 普通用户:在线查询航班信息和订票信息。
数据库设计
选择数据库:MySQL
数据库访问:使用Hibernate进行 JDBC 集成
数据库结构:
- 用户表(user):存储用户信息(ID、姓名、密码、城市、地址)。
- 航班信息表(flight)
《Java 学习笔记:从入门到实战 / 张晓博编著》学习笔记
航空订票管理系统
-
前言
-
一、系统概述和总体设计
-
-
- 1、系统需求分析
- 2、系统 demo 流程
-
-
二、数据库设计
-
-
- 1、选择数据库
- 2、数据库结构的设计
-
三、系统框架设计
1、主界面的设计工作需要进行
2、菜单系统的开发是必要环节
3、基于...的访问类配置是关键步骤
4、登录功能模块的实现是系统的核心组成部分
- 四、功能模块实现
-
(一)航班信息管理模块
-
1、新增飞机信息管理
- 2、新增航班信息记录
- 3、新增航班规划安排
-
(二)网点管理模块
-
- 1、网点添加管理
- 2、删除网点管理
-
(三)订票管理模块
-
- 1、网点登录管理
- 2、订票信息管理
-
-
五、系统测试
-
前言
本文将介绍如何运用 Hibernate 技术结合 Java 编程语言来实现航空订票系统的功能。学习目标:牢固掌握 SQL 后台数据库的建立、搭建和维护以及前台应用程序的开发,为以后深入的学习打下坚实的基础。开发方法:使用 Hibernate 技术结合 Java 编程语言来实现航空订票系统的功能。
本文的技术架构采用MySQL、Java、Hibernate和Swing的组合。IntelliJ IDEA 2021.2作为Java开发集成工具被采用。Navicat被选作数据库管理工具。
一、系统概述和总体设计
本项目的系统规划书包含如下两个章节:
(1)系统需求分析文档
(2)系统运行流程说明
1、系统需求分析
主要由航空公司信息管理员、电话(网点)售票员担任用户角色。该系统包含三个主要功能模块:航班信息管理模块、网点信息管理模块以及订票信息管理模块。航班信息管理模块的主要功能涉及飞机信息和航班信息的增删改操作。网点信息管理模块的主要功能包括机票销售网点信息的增删改查操作,同时可查询各销售网点的在线经营状态。订票信息管理模块则相对复杂,主要功能包括机票查询和订票信息的增删改操作。
基于用户需求分析报告中提出的功能需求,本系统将按照以下方式设计其体系结构。在体系结构图中,每个叶子节点代表一个最小的功能模块。每个功能模块均需针对不同的表执行相同的数据库操作任务,具体包括添加记录、删除记录、查询记录、更新记录。

2、系统 demo 流程
模拟系统的运行过程:首先,运行服务器系统后,系统会显示一个服务器界面,对用户的身份进行验证并确定权限等级。系统管理员可以通过admin账户登录,创建和管理其他用户。所有系统管理功能均位于系统维护菜单中。其次,运行客户端系统后,用户将看到一个客户端界面,进行身份验证并确定权限等级。用户身份验证通过后,建议使用普通user账户登录系统。如需访问系统功能,建议直接登录,若无权限则需联系系统管理员。
在系统初始化阶段,预设了两个默认用户:系统管理员和普通用户。系统管理员名为 admin,密码为 admin;网点用户名为 user,密码为 user,经程序设计人员录入数据库表中。

在系统中,第一步是录入基础信息。这些信息包含飞机信息和航班信息。基础信息构成航空订票管理系统的数据基础,这些数据为航空订票管理系统其他模块提供参考依据,并见下表。
| 基础信息 | 具体说明 |
|---|---|
| 飞机信息 | 包括型号、头等舱座位数、公务舱座位数、经济舱座位数和最大航程属性描述等 |
| 航班信息 | 包括航班编号,出发地、目的地、起飞时间、到达时间、开始生效日期、结束日期、总公里数和全价等 |
| 航班信息查询 | 包括查询起始地址和到达地址的航班信息 |
| 网点管理 | 包括添加网点、修改网点和删除网点信息,查询网点是否在线。查看所有订单,分类查看网点订单,业绩分析统计 |
| 订票管理 | 包括添加订单、修改订单和删除订单信息,查询航班信息和网点登录 |
二、数据库设计
本项目系统的开发主要包含后端数据库的搭建、测试数据的录入以及前端应用程序的开发这三个主要部分。数据库设计在系统设计和开发过程中占据着关键地位,系统的程序编码复杂程度会受到数据库设计优劣的直接影响。
1、选择数据库
基于项目目标及并发性特征,结合远程访问数据库的特性,在开发数据库管理信息系统时,需要综合考虑用户需求、系统功能、性能指标等因素,以选择合适的后台数据库和数据库访问接口。鉴于系统需管理的数据量大且准确性要求高,同时要求多用户同时运行访问。由于本项目涉及多网点销售,因此必须充分考虑数据的并发性及其对系统性能的影响。并发性直接决定了系统的访问效率,因此在开发过程中,采用目前较为流行的Hibernate 数据访问技术框架。该框架不仅实现了Java对象与数据库表之间的映射(包括Java数据类型与SQL数据类型的转换),还提供面向对象的数据查询检索功能,从而大幅降低了手动处理SQL语句和JDBC操作的开发时间。随着市场需求的持续发展,后续升级操作将更加便捷。综合权衡之下,本项目最终确定采用MySQL 数据库作为核心数据存储引擎。
要点:
后台数据库:MySQL 数据库
相应的数据库访问技术:Hibernate
2、数据库结构的设计
基于需求分析规划的结果表明,整个项目涉及五种核心信息,因此相应的数据库体系也需要涵盖这五种信息。系统需要建立五个数据库表,各数据库表的具体设计架构如下所述。
(1)用户信息表 user,用来保存用户信息,结构如表所示。
| 编号 | 字段名称 | 数据结构 | 说明 |
|---|---|---|---|
| 1 | oid | bigint(20) | 网点 ID |
| 2 | name | varchar(12) | 网点名称 |
| 3 | passwd | varchar(12) | 网点密码 |
| 4 | city | varchar(20) | 城市 |
| 5 | address | varchar(20) | 地址 |
(2)航班信息表 flight,用来保存航班信息,结构如表所示。
| 编号 | 字段名称 | 数据结构 | 说明 |
|---|---|---|---|
| 1 | oid | bigint(20) | 航班ID |
| 2 | first_class_remain_seats | int(11) | 头等舱余位数 |
| 3 | business_class_remain_seats | int(11) | 商务舱余位数 |
| 4 | economy_class_remain_seats | int(11) | 经济舱余位数 |
| 5 | priceOff | double | 折扣 |
| 6 | calendar | datetime | 飞行日期 |
| 7 | schid | bigint(20) | 航班计划 ID |
航班计划信息数据库 flightscheduler,用于存储航班计划相关信息,具体结构如表所示。
| 编号 | 字段名称 | 数据结构 | 说明 |
|---|---|---|---|
| 1 | oid | bigint(20) | 航班计划 ID |
| 2 | flightNumber | varchar(6) | 航班号 |
| 3 | fromAddress | varchar(10) | 出发地 |
| 4 | toAddress | varchar(10) | 目的地 |
| 5 | length | int(11) | 里程 |
| 6 | scheduler | tinyint(4) | 班次 |
| 7 | price | double | 价格 |
| 8 | startDate | datetime | 有效开始日期 |
| 9 | endDate | datetime | 结束日期 |
| 10 | fromhour | int(11) | 起飞时 |
| 11 | frommin | int(11) | 起飞分 |
| 12 | tohour | int(11) | 到达时 |
| 13 | tomin | int(11) | 到达分 |
| 14 | planemodel | bigint(20) | 飞机ID |
(4)飞机信息表 planemodel,用来保存飞机信息,结构如表所示。
| 编号 | 字段名称 | 数据结构 | 说明 |
|---|---|---|---|
| 1 | oid | bigint(20) | 飞机 ID |
| 2 | model | varchar(255) | 型号 |
| 3 | first_class_seats | int(11) | 头等舱数量 |
| 4 | business_class_seats | int(11) | 商务舱数量 |
| 5 | economy_class_seats | int(11) | 经济舱数量 |
| 6 | maxLength | int(11) | 最大里程 |
(5)订票信息表 ticketorder,用来保存订票信息,结构如表所示。
| 编号 | 字段名称 | 数据结构 | 说明 |
|---|---|---|---|
| 1 | oid | bigint(20) | 订票 ID |
| 2 | passengerName | varchar(12) | 订票人名称 |
| 3 | passengerId | varchar(18) | 订票人代号 |
| 4 | cabinclass | varchar(15) | 舱位 |
| 5 | tickettype | varchar(15) | 订票类型 |
| 6 | cal | datetime | 订票日期 |
| 7 | branchid | bigint(20) | 网点 ID |
| 8 | flightid | bigint(20) | 航班 ID |
根据上表可知,不同数据库表之间的关系如下图所示:

相关数据库创建脚本如下:
> CREATE TABLE `user` (
> `oid` bigint(20) NOT NULL COMMENT '网点 ID',
> `name` varchar(12) NULL COMMENT '网点名称',
> `passwd` varchar(12) NULL COMMENT '网点密码',
> `city` varchar(20) NULL COMMENT '城市',
> `address` varchar(20) NULL COMMENT '地址',
> PRIMARY KEY (`oid`)
> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
>
>
> CREATE TABLE `flight` (
> `oid` bigint(20) NOT NULL COMMENT '航班ID',
> `first_class_remain_seats` int(11) NULL COMMENT '头等舱余位数',
> `business_class_remain_seats` int(11) NULL COMMENT '商务舱余位数',
> `economy_class_remain_seats` int(11) NULL COMMENT '经济舱余位数',
> `priceOff` double NULL COMMENT '折扣',
> `calendar` datetime NULL COMMENT '飞行日期',
> `schid` bigint(20) NULL COMMENT '航班计划 ID',
> PRIMARY KEY (`oid`)
> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
>
>
> CREATE TABLE `flightscheduler` (
> `oid` bigint(20) NOT NULL COMMENT '航班计划 ID',
> `flightNumber` varchar(6) NULL COMMENT '航班号',
> `fromAddress` varchar(10) NULL COMMENT '出发地',
> `toAddress` varchar(10) NULL COMMENT '目的地',
> `length` int(11) NULL COMMENT '里程',
> `scheduler` tinyint(4) NULL COMMENT '班次',
> `price` double NULL COMMENT '价格',
> `startDate` datetime NULL COMMENT '有效开始日期',
> `endDate` datetime NULL COMMENT '结束日期',
> `fromhour` int(11) NULL COMMENT '起飞时',
> `frommin` int(11) NULL COMMENT '起飞分',
> `tohour` int(11) NULL COMMENT '到达时',
> `tomin` int(11) NULL COMMENT '到达分',
> `planemodel` bigint(20) NULL COMMENT '飞机ID',
> PRIMARY KEY (`oid`)
> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
>
>
> CREATE TABLE `planemodel` (
> `oid` bigint(20) NOT NULL COMMENT '飞机 ID',
> `model` varchar(255) NULL COMMENT '型号',
> `first_class_seats` int(11) NULL COMMENT '头等舱数量',
> `business_class_seats` int(11) NULL COMMENT '商务舱数量',
> `economy_class_seats` int(11) NULL COMMENT '经济舱数量',
> `maxLength` int(11) NULL COMMENT '最大里程',
> PRIMARY KEY (`oid`)
> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
>
>
> CREATE TABLE `ticketorder` (
> `oid` bigint(20) NOT NULL COMMENT '订票 ID',
> `passengerName` varchar(12) NULL COMMENT '订票人名称',
> `passengerId` varchar(18) NULL COMMENT '订票人代号',
> `cabinclass` varchar(15) NULL COMMENT '舱位',
> `tickettype` varchar(15) NULL COMMENT '订票类型',
> `cal` datetime NULL COMMENT '订票日期',
> `branchid` bigint(20) NULL COMMENT '网点 ID',
> `flightid` bigint(20) NULL COMMENT '航班 ID',
> PRIMARY KEY (`oid`)
> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
>
>
>
> -- 已存在表增加外键
> ALTER TABLE `flight` ADD FOREIGN KEY (`schid`) REFERENCES `flightscheduler` (`oid`);
> ALTER TABLE `flightscheduler` ADD FOREIGN KEY (`planemodel`) REFERENCES `planemodel` (`oid`);
> ALTER TABLE `ticketorder` ADD FOREIGN KEY (`branchid`) REFERENCES `user` (`oid`);
> ALTER TABLE `ticketorder` ADD FOREIGN KEY (`flightid`) REFERENCES `flight` (`oid`);
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

三、系统框架设计
系统框架设计环节是整个项目的基础,框架设计的优劣直接影响后续开发,同样,这也会直接影响后期升级的复杂程度。经过精心的规划和分析,本项目将引入Hibernate技术进行数据库操作。本节将深入讲解系统框架设计的具体实现过程。
1、设计主界面
用户运行服务器终端后,即可进入系统的服务器端界面。所有功能已按类别整理至不同的菜单栏中,具体包括航班管理、网点管理和订单管理等模块,如图所示。



2、设计菜单
3、配置 Hibernate 访问类
4、系统登录模块设计
四、功能模块实现
(一)航班信息管理模块
1、添加飞机管理




2、添加航班管理信息




3、添加航班计划




(二)网点管理模块
1、网点添加管理




2、删除网点管理




(三)订票管理模块
1、网点登录管理
2、订票信息管理
五、系统测试
相关文章
- [Hibernate 睡眠指南]:深入解析JavaBean的生命周期管理,掌握事务控制与数据库访问的最佳实践。
- [Swinging Java 快速入门]:全面解析Java Swing组件的使用方法,从基本控件到复杂布局实现完整开发流程。
