飞机订票系统课程设计

99ANYc3cd6 课程介绍 1

飞机订票系统课程设计

项目概述

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

需求分析

需求分析是项目成功的关键,我们将需求分为功能性需求和非功能性需求。

飞机订票系统课程设计-第1张图片-指南针培训网

功能性需求

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) 设计模式

飞机订票系统课程设计-第2张图片-指南针培训网
  • 表现层: 由前端页面构成,负责用户交互和数据展示。
  • 业务逻辑层: 由后端服务构成,负责处理核心业务逻辑,如用户认证、航班查询、订单创建等。
  • 数据访问层: 负责与数据库进行交互,实现数据的增删改查。

数据库设计 (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),用于后续请求的身份验证。
  • 航班查询模块:
    • 接收查询参数(出发地、目的地、日期)。
    • 构建 SQL SELECT 语句,查询 flights 表。
    • 将查询结果封装成 JSON 格式返回给前端。
  • 订单创建模块:
    • 事务处理: 这是一个关键步骤,创建订单需要执行多个操作,必须保证原子性。
    1. 检查航班余票是否足够。
    2. 锁定余票(或直接将available_seats减1)。
    3. orders表中创建一条新记录。
    4. 提交事务,如果任何一步失败,则回滚,恢复余票数。
  • 支付模块 (模拟):
    • 接收订单ID。
    • 将订单状态从 PENDING 修改为 PAID
    • 可以调用一个模拟的支付接口(打印一条支付成功日志即可)。

实现步骤建议

  1. 环境搭建: 安装 JDK, Maven, MySQL, IDE等。
  2. 数据库创建与初始化: 创建数据库,并根据上述设计创建表结构。
  3. 后端项目搭建:
    • 使用 Spring Initializr 创建一个 Spring Boot 项目。
    • 引入必要的依赖:Spring Web, Spring Data JPA (或 MyBatis), MySQL Driver, Lombok, Spring Security (可选,用于认证)。
    • 配置 application.properties 文件,连接数据库。
    • 创建实体类,与数据库表对应。
    • 创建 Repository 接口,用于数据访问。
    • 创建 Service 层,编写业务逻辑。
    • 创建 Controller 层,提供 RESTful API 接口。
  4. 前端项目搭建:
    • 使用 Vue CLI 或 Vite 创建一个 Vue 项目。
    • 安装 Element Plus 和 Axios (用于发送HTTP请求)。
    • 设计页面布局和组件(如登录页、首页、航班列表页、订单页等)。
    • 调用后端 API,实现数据交互和页面渲染。
  5. 功能联调:

    前后端配合,逐一实现用户注册、登录、查询、预订、订单查看等功能。

    飞机订票系统课程设计-第3张图片-指南针培训网
  6. 测试与优化:
    • 进行单元测试和集成测试。
    • 检查边界条件(如查询无结果、预订无票航班等)。
    • 优化前端UI/UX和后端性能。

难点与解决方案

  • 难点1: 高并发下的余票超卖问题。
    • 解决方案: 使用数据库的事务行级锁,在更新座位数时,使用 SELECT ... FOR UPDATE 语句锁定该行记录,确保在事务完成前其他事务无法修改,从而保证数据一致性。
  • 难点2: 前后端分离下的跨域问题。
    • 解决方案: 在后端 Spring Boot 项目中,配置一个 WebMvcConfigurer,添加跨域配置,允许前端域名访问。
  • 难点3: 复杂的业务逻辑。
    • 解决方案: 将复杂的逻辑拆分到 Service 层的不同方法中,保证代码的清晰和可维护性,多写注释,理清业务流程。

项目总结与展望

在项目完成后,应撰写一份总结报告,内容包括:

  • 项目概述与目标回顾。
  • 技术选型与架构设计的说明。
  • 核心功能的实现细节。
  • 遇到的问题及解决方案。
  • 项目的不足之处与未来可扩展的方向。

未来展望:

  • 引入分布式缓存 (如 Redis) 缓存热门航班信息,减轻数据库压力。
  • 引入消息队列 (如 RabbitMQ/Kafka) 处理订单创建、支付通知等异步任务,提高系统吞吐量。
  • 增加实时推送功能,当航班状态变更时,通过 WebSocket 通知相关用户。
  • 引入微服务架构,将用户服务、航班服务、订单服务等拆分成独立的服务,提高系统的可扩展性和容错性。

标签: 航班管理 订票流程 系统架构

抱歉,评论功能暂时关闭!