《Java 学习笔记:从入门到实战 / 张晓博编著》学习笔记
航空订票管理系统
前言
本文将介绍如何利用
Hibernate
来开发一个航空订票管理系统。
目的:牢固掌握 SQL 后台数据库的建立、维护以及前台应用程序的开发,为以后深入的学习打下坚实的基础。
本文技术栈:MySQL + Java + Hibernate + Swing
Java集成开发工具:IntelliJ IDEA 2021.2
数据库管理工具:Navicat
一、系统概述和总体设计
本项目的
系统规划书
分为如下两个部分:
(1)系统需求分析文档
(2)系统运行流程说明
1、系统需求分析
使用航空订票管理系统的用户主要是航空公司信息管理员,电话(网点)售票员,具体功能如下所示。
(1)航班功能管理模块
航班管理模块的主要功能包括:飞机信息和航班信息的添加、删除、修改。
(2)网点信息管理模块
针对机票销售网点添加、删除、修改和查询,且可查看哪些网站是否在线经营。
(3)订票管理功能模块
订单管理模块的功能相对于其他模块来说要复杂一点。机票查询和订票的添加、删除、修改。
根据需求分析中用户的要求设计系统的体系结构,如果所示。在体系结构示意图中,每一个叶结点是一个最小的功能模块。每一个功能模块都需要针对不同的表完成相同的数据库操作,即添加记录、删除记录、查询记录、更新记录。
2、系统 demo 流程
模拟系统的运行过程:运行服务器系统
后,首先会弹出服务器对话框,对用户的身份进行认证并确定用户的权限。然后使用 admin 用户(系统管理员)登录,创建其他用户,可以在系统维护菜单下系统管理添加、修改、删除操作。运行客户端系统
后,首先会弹出客户端对话框,对用户的身份进行认证并确定用户的权限。如果需要登录系统,建议使用 user 用户进行登录,否则向系统管理员申请账户。
在系统初始化时,有两个默认的用户:系统管理员、普通用户。系统管理员用户为 admin,密码为 admin,网点用户为 user,密码为 user,由程序设计人员添加到数据库表中。
进入系统后,首先需要增加基础信息。基础信息包括:飞机信息、航班信息。基础信息是航空订票管理系统的基础数据,它为航空订票管理系统其他模块提供数据参考,见下表:
基础信息 | 具体说明 |
---|---|
飞机信息 | 包括型号、头等舱座位数、公务舱座位数、经济舱座位数和最大航程属性描述等 |
航班信息 | 包括航班编号,出发地、目的地、起飞时间、到达时间、开始生效日期、结束日期、总公里数和全价等 |
航班信息查询 | 包括查询起始地址和到达地址的航班信息 |
网点管理 | 包括添加网点、修改网点和删除网点信息,查询网点是否在线。查看所有订单,分类查看网点订单,业绩分析统计 |
订票管理 | 包括添加订单、修改订单和删除订单信息,查询航班信息和网点登录 |
二、数据库设计
本项目系统的开发主要包括后台数据库的建立、测试数据录入以及前台应用程序的开发两个方面。数据库设计是系统设计开发的一个重要组成部分,数据库设计的好坏直接影响到程序编码的复杂程度。
1、选择数据库
结合本项目的目的并发性情况
,并根据远程访问数据库的特性
。在开发数据库管理信息系统时需要根据用户需求
、系统功能
和性能要求
等因素,选择后台数据库和相应的数据库访问接口。考虑到系统所要管理的数据量比较大和数据的准确性,且需要多用户同时运行访问。因为本项目需要实现多网点同时销售,所以一定要考虑数据的并发性
和其他数据库的特性。并发性决定了整个项目的访问效率,应用程序的开发采用目前比较流行的 Hibernate 数据库访问技术,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 |
(3)航班计划信息表 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 | i |