飞机订票系统课程设计
项目概述
本项目旨在设计并实现一个功能完善的飞机订票系统,该系统将模拟真实的在线机票预订流程,为用户提供航班查询、机票预订、订单管理等功能,并为管理员提供航班信息管理、订单处理等后台管理功能,通过本课程设计,学生可以综合运用所学的编程语言、数据库、软件工程等知识,锻炼分析问题、解决问题以及团队协作的能力。
需求分析
需求分析是项目成功的关键,我们将需求分为功能性需求和非功能性需求。

功能性需求
A. 用户端功能
- 用户注册与登录:
- 用户可以通过填写用户名、密码、邮箱、手机号等信息进行注册。
- 已注册用户可以通过用户名和密码登录系统。
- 提供“忘记密码”功能(可选,作为加分项)。
- 航班查询:
- 用户可以根据出发城市、目的城市、出发日期进行航班查询。
- (高级)可以增加“返回日期”,实现往返查询。
- (高级)可以增加“航空公司”、“起飞时间段”等筛选条件。
- 查询结果以列表形式展示,包含航班号、航空公司、起飞/到达时间、经停信息、价格等信息。
- 机票预订:
- 用户选择一个航班后,进入预订页面。
- 用户需要选择乘客信息(可从已保存的联系人中选择或新增)。
- 用户需要选择舱位等级(如经济舱、商务舱)。
- 系统需要实时显示所选航班和舱位的价格。
- 用户确认订单后,进入支付环节(模拟支付)。
- 订单管理:
- 用户可以在“我的订单”页面查看所有已预订的订单。
- 订单信息应包括:订单号、航班详情、乘客信息、票价、订单状态(如“待支付”、“已支付”、“已出票”、“已取消”)等。
- 用户可以对“待支付”的订单进行取消操作。
- 用户可以对“已支付”的订单申请退票(可选,作为加分项)。
- 个人信息管理:
- 用户可以查看和修改个人资料(如密码、邮箱、手机号)。
- 用户可以管理常用乘客信息,方便下次预订。
B. 管理员端功能
- 管理员登录:
管理员通过预设的用户名和密码登录后台管理系统。
- 航班信息管理:
- 航班添加: 管理员可以新增航班信息,包括航班号、航空公司、出发/到达城市、起飞/到达日期时间、经济舱/商务舱价格、总座位数等。
- 航班修改: 管理员可以修改现有航班的各项信息。
- 航班删除: 管理员可以删除某个航班(需谨慎处理,应关联检查订单)。
- 航班查询: 管理员可以根据条件查询航班列表。
- 订单管理:
- 管理员可以查看所有用户的订单列表。
- 管理员可以根据订单状态、用户名等条件进行筛选和搜索。
- 管理员可以处理异常订单(如手动修改订单状态)。
- 用户管理:
- 管理员可以查看所有注册用户列表。
- 管理员可以禁用或启用特定用户账号。
非功能性需求
- 性能: 系统应能快速响应用户的查询请求,尤其是在高并发情况下(如节假日查询高峰)。
- 易用性: 界面设计简洁直观,操作流程符合用户习惯。
- 可靠性: 系统运行稳定,数据存储安全可靠,避免出现数据丢失或错误。
- 安全性: 用户密码等敏感信息需加密存储,防止SQL注入、跨站脚本等常见网络攻击。
- 可扩展性: 系统设计应具备良好的扩展性,便于未来增加新功能(如酒店预订、租车服务接口等)。
系统设计
技术选型建议
- 前端:
- 基础: HTML, CSS, JavaScript。
- 框架: Vue.js 或 React (推荐,能大幅提升开发效率和用户体验)。
- UI库: Element Plus (Vue) / Ant Design (React)。
- 后端:
- 语言: Java (Spring Boot 框架), Python (Django/Flask 框架), Node.js (Express 框架)。
- 推荐: Spring Boot,生态成熟,社区庞大,非常适合作为课程设计的技术栈。
- 数据库:
- 关系型数据库: MySQL 或 PostgreSQL (推荐),数据结构化清晰,适合存储机票、订单等关系型数据。
- 开发工具:
- IDE: IntelliJ IDEA (Java), VS Code (通用)
- 版本控制: Git
- 项目管理: Maven / Gradle
系统架构设计
采用经典的 B/S (Browser/Server) 架构和 MVC (Model-View-Controller) 设计模式。

- 表现层: 由前端页面构成,负责用户交互和数据展示。
- 业务逻辑层: 由后端服务构成,负责处理核心业务逻辑,如用户认证、航班查询、订单创建等。
- 数据访问层: 负责与数据库进行交互,实现数据的增删改查。
数据库设计 (E-R图与表结构)
数据库是系统的核心,以下是核心数据表的设计。
核心实体:
- 用户
- 航班
- 订单
- 乘客
- 航班班次 (用于表示同一航线在不同日期的飞行)
数据表设计 (SQL示例):
-- 用户表 CREATE TABLE `users` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `username` VARCHAR(50) NOT NULL UNIQUE, `password` VARCHAR(255) NOT NULL, -- 存储加密后的密码 `email` VARCHAR(100) NOT NULL UNIQUE, `phone` VARCHAR(20) NOT NULL UNIQUE, `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 乘客表 (与用户是多对一关系,一个用户可以有多个乘客信息) CREATE TABLE `passengers` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `user_id` INT NOT NULL, `name` VARCHAR(50) NOT NULL, `id_card` VARCHAR(18) NOT NULL, `phone` VARCHAR(20) NOT NULL, FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ); -- 航班表 CREATE TABLE `flights` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `flight_number` VARCHAR(20) NOT NULL, -- 如 "CA1234" `airline` VARCHAR(50) NOT NULL, -- 如 "中国国际航空" `departure_city` VARCHAR(50) NOT NULL, `arrival_city` VARCHAR(50) NOT NULL, `departure_time` DATETIME NOT NULL, `arrival_time` DATETIME NOT NULL, `economy_price` DECIMAL(10, 2) NOT NULL, `business_price` DECIMAL(10, 2) NOT NULL, `total_seats` INT NOT NULL, `available_seats` INT NOT NULL, `status` VARCHAR(20) DEFAULT 'AVAILABLE' -- 状态: AVAILABLE, CANCELLED ); -- 订单表 CREATE TABLE `orders` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `order_number` VARCHAR(50) NOT NULL UNIQUE, -- 生成唯一订单号 `user_id` INT NOT NULL, `flight_id` INT NOT NULL, `passenger_id` INT NOT NULL, `cabin_class` VARCHAR(20) NOT NULL, -- ECONOMY, BUSINESS `price` DECIMAL(10, 2) NOT NULL, `status` VARCHAR(20) DEFAULT 'PENDING', -- PENDING, PAID, CANCELLED `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (`user_id`) REFERENCES `users`(`id`), FOREIGN KEY (`flight_id`) REFERENCES `flights`(`id`), FOREIGN KEY (`passenger_id`) REFERENCES `passengers`(`id`) );
核心功能模块设计
- 用户认证模块:
- 注册: 接收用户信息,对密码进行加盐哈希处理(如使用BCrypt),存入
users表。 - 登录: 接收用户名和密码,从数据库查询用户,比对哈希后的密码,成功后,生成并返回一个Token(如JWT),用于后续请求的身份验证。
- 注册: 接收用户信息,对密码进行加盐哈希处理(如使用BCrypt),存入
- 航班查询模块:
- 接收查询参数(出发地、目的地、日期)。
- 构建 SQL
SELECT语句,查询flights表。 - 将查询结果封装成 JSON 格式返回给前端。
- 订单创建模块:
- 事务处理: 这是一个关键步骤,创建订单需要执行多个操作,必须保证原子性。
- 检查航班余票是否足够。
- 锁定余票(或直接将
available_seats减1)。 - 在
orders表中创建一条新记录。 - 提交事务,如果任何一步失败,则回滚,恢复余票数。
- 支付模块 (模拟):
- 接收订单ID。
- 将订单状态从
PENDING修改为PAID。 - 可以调用一个模拟的支付接口(打印一条支付成功日志即可)。
实现步骤建议
- 环境搭建: 安装 JDK, Maven, MySQL, IDE等。
- 数据库创建与初始化: 创建数据库,并根据上述设计创建表结构。
- 后端项目搭建:
- 使用 Spring Initializr 创建一个 Spring Boot 项目。
- 引入必要的依赖:Spring Web, Spring Data JPA (或 MyBatis), MySQL Driver, Lombok, Spring Security (可选,用于认证)。
- 配置
application.properties文件,连接数据库。 - 创建实体类,与数据库表对应。
- 创建 Repository 接口,用于数据访问。
- 创建 Service 层,编写业务逻辑。
- 创建 Controller 层,提供 RESTful API 接口。
- 前端项目搭建:
- 使用 Vue CLI 或 Vite 创建一个 Vue 项目。
- 安装 Element Plus 和 Axios (用于发送HTTP请求)。
- 设计页面布局和组件(如登录页、首页、航班列表页、订单页等)。
- 调用后端 API,实现数据交互和页面渲染。
- 功能联调:
前后端配合,逐一实现用户注册、登录、查询、预订、订单查看等功能。

- 测试与优化:
- 进行单元测试和集成测试。
- 检查边界条件(如查询无结果、预订无票航班等)。
- 优化前端UI/UX和后端性能。
难点与解决方案
- 难点1: 高并发下的余票超卖问题。
- 解决方案: 使用数据库的事务和行级锁,在更新座位数时,使用
SELECT ... FOR UPDATE语句锁定该行记录,确保在事务完成前其他事务无法修改,从而保证数据一致性。
- 解决方案: 使用数据库的事务和行级锁,在更新座位数时,使用
- 难点2: 前后端分离下的跨域问题。
- 解决方案: 在后端 Spring Boot 项目中,配置一个
WebMvcConfigurer,添加跨域配置,允许前端域名访问。
- 解决方案: 在后端 Spring Boot 项目中,配置一个
- 难点3: 复杂的业务逻辑。
- 解决方案: 将复杂的逻辑拆分到 Service 层的不同方法中,保证代码的清晰和可维护性,多写注释,理清业务流程。
项目总结与展望
在项目完成后,应撰写一份总结报告,内容包括:
- 项目概述与目标回顾。
- 技术选型与架构设计的说明。
- 核心功能的实现细节。
- 遇到的问题及解决方案。
- 项目的不足之处与未来可扩展的方向。
未来展望:
- 引入分布式缓存 (如 Redis) 缓存热门航班信息,减轻数据库压力。
- 引入消息队列 (如 RabbitMQ/Kafka) 处理订单创建、支付通知等异步任务,提高系统吞吐量。
- 增加实时推送功能,当航班状态变更时,通过 WebSocket 通知相关用户。
- 引入微服务架构,将用户服务、航班服务、订单服务等拆分成独立的服务,提高系统的可扩展性和容错性。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。