毕业设计实战:基于Java+Spring Boot+MySQL的民航网上订票系统设计与实现全流程指南

27 阅读21分钟

毕业设计实战:基于Java+Spring Boot+MySQL的民航网上订票系统设计与实现全流程指南

在开发“基于Java+Spring Boot+MySQL的民航网上订票系统”毕业设计时,曾因“机票预订表未通过航班ID与航班信息表建立外键关联”踩过关键坑——初期仅在两张表单独设计编号字段,未设置关联约束,导致管理员查询某订单对应的航班出发时间、剩余座位时,需手动匹配航班编号与预订记录,耗费1.5天重构表结构、补全关联SQL才解决问题📝。基于此次实战经验,本文将系统拆解从需求分析、技术选型、功能实现到测试验收的全流程要点,附避坑技巧与实操细节,为同类毕设提供可落地的实施指南。

一、需求分析:锚定民航订票核心诉求,避免功能冗余返工

部分同学在毕设初期易陷入“功能堆砌”误区,比如笔者曾耗时2天开发“民航客流可视化大屏模块”,最终因偏离“航班管理、机票预订、用户管理、新闻公告”核心需求被导师要求删减。明确“用户角色-核心功能”对应关系,是降低返工率的关键前提。

1. 核心用户与功能拆解(优化后角色权限体系)

系统核心用户分为管理员与普通用户两类,前期曾因混淆“用户”与“管理员”的“航班上架权限”,导致用户可自行发布虚假航班信息,明确角色边界后系统数据规范性显著提升,具体功能分工如下:

管理员端(核心必做功能)
  • 全维度信息管理
    • 用户管理:维护民航用户账号(新增、密码重置、逻辑删除),支持按姓名/手机号/身份证号筛选,查看用户完整资料(头像、邮箱、余额、账户状态),禁用违规账号(禁用后不可登录);
    • 管理员管理:新增子管理员账号(分配“航班管理”“机票审核”“新闻发布”等权限),修改管理员密码,删除失效账号,支持按用户名模糊查询;
    • 字典管理:配置系统固定选项(如航班类型、新闻类型、订单状态、支付类型),确保数据录入规范性(如航班类型仅可选“国内航班”“国际航班”,订单状态仅可选“待支付”“已完成”“已取消”);
  • 核心业务管控
    • 航班信息管理:录入航班信息(上传航班照片、生成唯一编号、填写标题/类型/出发地/目的地/出发时间/座位数/现价、编写详情),维护航班状态(修改座位数、标记上架/下架、更新现价),支持按航班标题、类型筛选,座位数<5个时标橙预警;
    • 机票预订管理:查看用户机票订单(关联用户、航班、预订座位、实付价格),处理订单异常(如用户取消订单后恢复对应航班座位),支持按订单号、用户ID、订单状态筛选,导出订单数据生成月度报表;
    • 民航新闻管理:发布民航相关新闻(填写标题、上传图片、选择类型、编写详情、设置发布时间),维护新闻内容(修改、删除过期新闻),按发布时间倒序展示;
    • 客服聊天管理:查看用户咨询留言(含问题内容、提问时间),填写回复并同步通知用户,删除恶意留言(含虚假投诉、广告内容),支持按用户ID、问题关键词筛选;
  • 互动与数据统计
    • 论坛管理:查看用户发帖(关联用户、标题、内容、时间),回复用户疑问,删除恶意帖子(含谣言、不当言论),支持按帖子标题、发布时间筛选;
    • 数据统计:按“订单类型”统计数量(待支付/已完成/已取消),按“航班类型”统计预订次数,生成柱状图,直观展示民航订票业务数据。
用户端(核心需求功能)
  • 民航订票服务使用
    • 航班查询与收藏:浏览已上架航班(按出发地/目的地/出发时间/航班类型筛选),查看航班详情(照片、标题、出发地、目的地、出发时间、座位数、现价、详情),点击“收藏”添加至个人收藏列表,收藏航班下架时接收系统提醒;
    • 机票预订:选择航班后填写预订座位(≤当前剩余座位数),系统自动计算实付价格,选择支付类型(如“余额支付”)提交订单,在“我的订单”页面查看订单状态(待支付/已完成/已取消)、预订信息;
    • 客服咨询:向管理员提交咨询留言(填写问题内容),查看回复进度,跟踪问题解决情况;
  • 个人中心与信息浏览
    • 个人资料管理:修改个人信息(更新头像、手机号、邮箱),查看账户余额与订单记录,重置登录密码;
    • 信息浏览:查看民航新闻公告(按类型筛选),在论坛发布帖子(填写标题、内容),查看管理员与其他用户回复,无修改公共信息、审核内容的权限。

2. 需求分析避坑要点(实战经验总结)

  • 拒绝空想调研:邀请4-5名同学模拟“用户查询航班-预订机票-管理员处理订单”“用户提交咨询-管理员回复”场景,收集真实诉求。例如,基于用户“实时了解订单状态”需求,增设“订单状态跟踪”功能,实用性远高于冗余的“民航客流可视化大屏模块”;
  • 绘制可视化用例图:用DrawIO绘制核心用例图(如“管理员-航班上架”“用户-机票预订”“管理员-客服回复”),汇报时直观呈现逻辑,避免纯文字描述偏差;
  • 明确约束条件:提前规定“航班照片/新闻图片/用户头像仅限JPG/PNG(≤5MB)”“航班编号自动生成(格式:HB+日期+序号,如HB20240601001)”“出发时间需选择未来日期”“新闻标题≥5字、内容≥30字”“订单预订座位数≥1、≤剩余座位数”,为编码提供明确依据。

3. 可行性分析:从五维度论证,提升毕设专业性

可行性分析是开题关键,需避免泛泛而谈“可行”,从以下维度具体展开:

  • 时间可行性:预留2个月开发周期,拆分“需求分析(7天)→ 环境搭建(5天)→ 数据库设计(7天)→ 功能开发(28天)→ 测试验收(13天)”,每日投入3小时,结合导师指导可按时完成;
  • 经济可行性:开发工具均为免费/开源(Eclipse/IDEA社区版、MySQL 5.7、Tomcat 8.5),硬件用个人笔记本,开发成本为零;系统上线后可替代民航传统手工订票模式(如纸质订单记录、Excel统计航班座位),减少记录误差(原手工误差率16%,系统上线后降至3%)、提升订票管理效率;
  • 操作可行性:界面参考主流订票平台交互逻辑,高频功能(航班查询、机票预订、个人中心)置于首页,经测试,用户3分钟内可完成机票预订,管理员2分钟内可掌握航班上架操作;
  • 技术可行性:Java、Spring Boot、MySQL、Vue均为高校核心课程内容,资料丰富(如《Spring Boot实战》《MySQL从入门到精通》),技术门槛可控;需注意避免Tomcat 10版本,前期联调时出现Servlet API兼容问题,切换至Tomcat 8.5后解决;
  • 法律可行性:技术与工具均为开源授权,无版权纠纷;用户数据遵循《个人信息保护法》,不收集无关信息(如用户社交账号),论文与源码无抄袭,符合法律要求。

二、技术选型:优先稳定适配,拒绝盲目追新

前期曾跟风选用Java 11+Vue 3+Redis技术栈,因Redis缓存配置不当导致机票订单数据重启后丢失,调试耗时1.2天。后续调整为“Java 8+MySQL 5.7+Eclipse/IDEA社区版+Spring Boot 2.5.x+Vue 2.x+Tomcat 8.5”组合,兼顾稳定性与开发效率,适合新手上手。

1. 核心技术栈选型说明(含避坑提醒)

技术工具选型理由避坑提醒
Java 8语法简洁,支持面向对象编程,与Spring Boot、Tomcat 8.5兼容性最佳,满足多角色权限、民航订票流程开发避免Java 11+版本,部分旧依赖(如commons-fileupload)支持不完善,易出现航班照片上传IO异常
MySQL 5.7支持事务与外键,满足多表关联(航班-机票订单、用户-收藏、用户-客服聊天),utf8mb4编码解决航班详情、新闻内容生僻字乱码安装时手动设编码为utf8mb4,默认编码会导致论坛帖子含特殊符号乱码;开启事务确保机票预订与航班座位扣减原子性
Eclipse/IDEA社区版Eclipse轻量易用,适合Java新手入门;IDEA支持Spring Boot、MySQL插件,断点调试便捷,代码提示更丰富,可按需选择安装“Maven Helper”插件管理依赖,避免手动导Jar包版本冲突,前期因缺失mysql-connector导致数据库连接失败
Spring Boot 2.5.x简化Spring配置,内置Tomcat,快速集成数据库操作、数据校验组件,降低开发复杂度(如自动处理跨域)避免Spring Boot 3.x版本,与Java 8兼容性差,易出现配置解析错误;配置文件明确数据库URL(加useSSL=false防SSL报错)
Vue 2.x轻量级前端框架,支持组件化开发,快速实现动态页面(航班查询、机票预订、新闻浏览),数据绑定简化前后端交互避免Vue 3.x版本,部分UI组件(ElementUI)兼容不足,易出现表单校验错误;配置axios拦截器处理请求超时问题
Tomcat 8.5适配Java 8与Spring Boot,部署简单,支持热部署(修改代码无需重启服务器)避免Tomcat 10版本,与Spring Boot 2.5.x存在Servlet API兼容问题,易出现页面无法访问;端口设为8081(默认8080易冲突)

2. 开发环境搭建步骤(实操指南)

  1. 安装JDK 1.8:配置“JAVA_HOME”“Path”环境变量,cmd执行“java -version”显示“1.8.x”即为成功;
  2. 安装开发工具与插件:选择Eclipse或IDEA社区版,Eclipse需安装“Spring Tools 4”插件,IDEA需安装“Vue.js”“Maven Helper”插件,配置JDK为1.8,编码设为UTF-8;
  3. 安装MySQL 5.7:用Navicat创建数据库“civil_air_ticket_system”,编码utf8mb4,执行脚本创建表(用户表、航班表、机票订单表等);
  4. 配置Tomcat 8.5:解压后在开发工具中配置服务器,测试访问http://localhost:8081,出现默认页面即成功;
  5. 创建Spring Boot项目:通过开发工具创建Maven项目,pom.xml引入Spring Boot Web、MySQL Driver、MyBatis等依赖,配置application.properties(数据库连接、端口、静态资源路径);
  6. 前端开发与联调:用Vue+ElementUI开发登录、航班查询、机票预订页面,打包后放入Spring Boot的static目录,编写“查询航班列表”接口,前端调用成功即环境搭建完成。

三、数据库设计:精简核心关联,避免数据混乱

数据库是民航网上订票系统的核心,前期因未关联“机票预订表”与“航班信息表”,导致无法追溯订单对应的航班详情,后续用“实体-属性-关系”分析法梳理,效率显著提升。

1. 核心表结构设计(精简版,共9张核心表)

  • 管理员表(admin):id(主键)、username(账号,唯一)、password(MD5加密)、role(角色)、addtime(新增时间);
  • 用户表(yonghu):id(主键)、yonghu_name(姓名)、yonghu_phone(手机号,唯一)、yonghu_id_number(身份证号,唯一)、yonghu_photo(头像路径)、yonghu_email(邮箱)、new_money(余额)、yonghu_delete(逻辑删除,0=正常,1=删除)、create_time(创建时间);
  • 航班信息表(jipiao):id(主键)、jipiao_name(航班标题)、jipiao_uuid_number(航班编号,唯一)、jipiao_photo(航班照片路径)、jipiao_types(航班类型)、jipiao_new_money(现价)、jipiao_chufadi(出发地)、jipiao_mudidi(目的地)、jipiao_time(出发时间)、zuowei_number(座位数)、shangxia_types(是否上架)、hangban_types(航班状态)、jipiao_delete(逻辑删除,0=正常,1=删除)、jipiao_content(航班详情)、create_time(创建时间);
  • 机票预订表(jipiao_order):id(主键)、jipiao_order_uuid_number(订单号,唯一)、jipiao_id(航班ID,外键关联航班表id)、yonghu_id(用户ID,外键关联用户表id)、jipiao_order_true_price(实付价格)、jipiao_order_time(预订时间)、jipiao_order_types(订单类型)、buy_zuowei_number(预订座位)、buy_zuowei_time(订购日期)、insert_time(订单创建时间)、create_time(创建时间);
  • 航班收藏表(jipiao_collection):id(主键)、jipiao_id(航班ID,外键关联航班表id)、yonghu_id(用户ID,外键关联用户表id)、jipiao_collection_types(类型)、insert_time(收藏时间)、create_time(创建时间);
  • 民航新闻表(news):id(主键)、news_name(新闻标题)、news_types(新闻类型)、news_photo(新闻图片路径)、insert_time(添加时间)、news_content(新闻详情)、create_time(创建时间);
  • 客服聊天表(chat):id(主键)、yonghu_id(用户ID,外键关联用户表id)、chat_issue(问题)、issue_time(问题时间)、chat_reply(回复)、reply_time(回复时间)、zhuangtai_types(状态)、insert_time(创建时间)、create_time(创建时间);
  • 论坛表(forum):id(主键)、forum_name(帖子标题)、yonghu_id(用户ID,外键关联用户表id)、users_id(管理员ID,外键关联管理员表id)、forum_content(发布内容)、super_ids(父id)、forum_state_types(帖子状态)、insert_time(发帖时间)、update_time(修改时间)、create_time(创建时间);
  • 字典表(dic):id(主键)、dic_code(字段)、dic_name(字段名)、code_index(编码)、index_name(编码名字)、super_id(父字段id)、beizhu(备注)、create_time(创建时间)。

2. 核心表关联测试(提前验证,避免返工)

建表后立即测试关联逻辑,步骤如下:

  1. 插入测试数据:航班表(id=1,jipiao_name=“北京-上海航班”,jipiao_chufadi=“北京”,jipiao_mudidi=“上海”,jipiao_time=“2024-06-10 09:00:00”,zuowei_number=20,jipiao_new_money=800.00,shangxia_types=“上架”)、用户表(id=1,yonghu_name=“李华”,yonghu_phone=“13800138000”,new_money=1000.00)、机票预订表(id=1,jipiao_id=1,yonghu_id=1,buy_zuowei_number=2,jipiao_order_true_price=1600.00,jipiao_order_types=“已完成”);
  2. 编写JOIN查询SQL,验证“某订单的航班信息与用户信息关联”:
SELECT o.jipiao_order_uuid_number, o.buy_zuowei_number, o.jipiao_order_true_price, o.jipiao_order_types, o.insert_time,
       j.jipiao_name, j.jipiao_photo, j.jipiao_chufadi, j.jipiao_mudidi, j.jipiao_time, j.zuowei_number, j.jipiao_content,
       y.yonghu_name, y.yonghu_phone, y.new_money
FROM jipiao_order o
JOIN jipiao j ON o.jipiao_id = j.id
JOIN yonghu y ON o.yonghu_id = y.id
WHERE o.jipiao_order_uuid_number = 'DD20240601001';

若能查询出“订单详情(订单号、预订座位、实付价格、状态、时间)、航班详情(标题、照片、出发地、目的地、时间、座位数、介绍)、用户信息(姓名、手机号、余额)”,说明关联正确;若出现外键错误,检查字段类型是否匹配(如jipiao_id与航班表id是否同为Integer)。

关键避坑提醒:切勿将航班照片、用户头像等二进制数据存入数据库!前期尝试导致数据库体积骤增(50张航班照片使数据库增大450MB),后续改为存储文件路径(如/static/jipiao/photo1.jpg),大幅提升查询速度。

四、功能实现:聚焦核心模块,提升答辩竞争力

无需开发所有功能,优先完成3个核心模块即可满足答辩要求,突出开发重点:

1. 管理员端:航班信息管理与机票订单处理模块(必做核心模块)

  • 核心逻辑
    1. 航班信息维护:管理员进入航班管理页,点击“新增航班”,上传照片(校验格式JPG/PNG、大小≤5MB),填写标题、类型(下拉加载字典表)、出发地、目的地、出发时间(选择未来日期)、座位数(≥0)、现价(≥100元)、详情(≥30字),提交后自动生成航班编号;修改航班时,仅可调整座位数、现价、详情,上架/下架状态需单独操作,座位数<5个时标橙预警;
    2. 机票订单处理:查看用户订单列表(按创建时间倒序),待支付订单标黄提醒,点击“详情”查看订单关联的航班、用户信息,处理“用户取消订单”请求(同步恢复对应航班座位),支持按订单类型、用户ID筛选;
    3. 订单数据统计:按“订单类型”统计数量(待支付/已完成/已取消),按“航班类型”统计预订次数,生成柱状图,支持导出Excel报表(含订单号、用户姓名、航班标题、实付价格)。
  • 页面设计(Vue+ElementUI)
    • 航班管理区:筛选区(航班标题、类型、上架状态)、表格展示航班编号、标题、类型、出发地、目的地、出发时间、座位数、现价、状态,操作列含“修改”“下架”“查看预订”;
    • 订单处理区:筛选区(订单号、用户ID、订单类型)、表格展示订单号、用户姓名、航班标题、预订座位、实付价格、状态,操作列含“详情”“处理取消”;
    • 数据统计区:顶部为统计卡片(本月订单总量、本月营收、热门航班类型),中部为图表展示区,底部为“导出报表”按钮。

2. 用户端:航班查询与机票预订模块(答辩亮点模块)

  • 核心逻辑
    1. 航班查询:用户进入航班列表页,按“出发地”“目的地”“出发时间”“航班类型”筛选,卡片式展示航班(含缩略图、标题、出发地、目的地、出发时间、座位数、现价),座位充足标绿,点击“详情”查看完整信息;
    2. 机票预订:选择航班后,填写预订座位数(≤当前剩余座位数),系统自动计算实付价格,若用户余额不足,提示“余额不足,请充值”;余额充足时,选择支付类型(余额支付),提交后生成订单(状态为“待支付”),30分钟未支付自动取消并释放座位;
    3. 订单查询与收藏:在“我的订单”页面,查看所有订单(按时间倒序),点击“详情”查看订单关联的航班信息、支付状态;对感兴趣的航班点击“收藏”,在“我的收藏”中快速查看,收藏航班下架时接收系统提醒。
  • 页面设计
    • 航班查询区:顶部为筛选栏(出发地/目的地输入框、出发时间选择器、航班类型下拉框),中部为卡片式航班列表,底部为“加载更多”按钮;
    • 机票预订区:航班信息展示区(含照片、标题、出发地、目的地、时间、现价)、预订座位数输入框(带数值校验)、实付价格计算展示区、支付类型选择框、“提交订单”按钮;
    • 订单查询区:表格展示订单号、航班标题、预订座位、实付价格、状态,操作列含“详情”“取消订单”(仅待支付订单显示)。

3. 管理员端:民航新闻管理与客服聊天模块(核心需求模块)

  • 核心逻辑
    1. 新闻发布:管理员进入新闻管理页,点击“新增新闻”,上传图片(校验格式JPG/PNG、大小≤5MB),填写标题(≥5字)、类型(下拉加载字典表)、详情(≥30字),选择发布时间,提交后按发布时间倒序展示;
    2. 客服聊天回复:查看用户咨询留言列表(按留言时间倒序),未回复留言标红,点击“回复”填写内容(如“航班取消可申请全额退款”),提交后同步通知用户,支持按用户ID、问题关键词筛选;
    3. 新闻与留言管理:删除过期新闻(发布超过30天),删除恶意留言(含广告、虚假投诉),支持批量操作。
  • 页面设计
    • 新闻管理区:筛选区(新闻标题、类型)、表格展示新闻标题、类型、发布时间、图片预览,操作列含“修改”“删除”“查看详情”;
    • 客服聊天区:筛选区(用户ID、问题关键词)、表格展示用户姓名、问题内容、留言时间、回复状态,操作列含“回复”“删除”;
    • 新闻详情区:标题展示区、图片展示区、发布时间标签、详情内容区,底部为“返回列表”按钮。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、测试验收:全面排查问题,保障答辩顺利

笔者前期未测试“用户重复提交机票预订”场景,导致出现“同一用户对同一航班生成2条待支付订单”的bug,被导师指出“未做‘用户+航班+预订时间’唯一性校验”并扣分😥。需针对性完成以下测试:

1. 核心功能测试用例

测试场景操作步骤预期结果
用户重复提交机票预订用户进入航班详情页→选择2个座位提交→未刷新页面再次选择2个座位提交系统提示“您已提交该航班的预订申请,待支付中,无需重复提交”,预订失败
管理员处理取消订单管理员进入订单处理→选择“已支付”订单→点击“处理取消”→确认提交订单状态更新为“已取消”,对应航班座位恢复(如原座位20→22),用户收到通知
用户预订航班余额不足用户选择“现价800元的航班”→预订2个座位(实付1600元)→用户余额1000元→提交订单系统提示“余额不足(当前1000元,需1600元),请充值”,订单创建失败

2. 兼容性与性能测试

  • 兼容性:测试Chrome、Firefox、Edge浏览器,修复IE11下表单样式错乱、航班照片预览失败问题;测试手机端浏览器,确保航班查询、机票预订页面自适应(按钮大小适配手指点击);
  • 性能:用Jmeter模拟30个用户同时创建机票订单,系统响应时间≤2秒,无数据丢失;查询100条机票订单记录(关联航班、用户数据),耗时≤1秒,加载流畅。

3. 测试报告撰写

包含“测试目的、范围、用例、结果”,明确已修复问题(重复预订校验、订单取消座位恢复、浏览器兼容),结论说明“核心功能无严重bug,可满足民航网上订票需求”,附测试截图(如重复预订提示、余额不足提示)。

六、答辩准备:掌握3个技巧,提升通过率

  1. 演示流程梳理:按“管理员新增航班-用户查询航班-用户预订机票-管理员处理订单-用户取消订单”演示,每个步骤停顿2秒,重点展示“机票订单与航班表关联逻辑”“订单取消后座位恢复流程”,让评委清晰看到功能流转;
  2. 突出问题解决能力:重点讲“机票预订表与航班表关联修复”“重复机票预订校验实现”“数据库图片路径存储优化”,结合开发踩坑与解决方案(如“初期用二进制存航班照片导致数据库卡顿,改为路径存储后查询速度提升40%”),比单纯讲技术栈更有说服力;
  3. 提前预判问题:针对“如何保障航班座位准确”,回答“订单创建座位扣减、取消订单座位恢复、事务确保原子性”;针对“如何避免用户恶意下单”,回答“待支付订单30分钟自动取消、重复预订校验、违规账号禁用”。

结语

本文基于Java+Spring Boot+MySQL的民航网上订票系统实战经验,核心是“聚焦民航订票核心业务(航班管理、机票预订、新闻公告)、优先稳定技术、提前排查表关联与数据校验问题”。毕设无需追求复杂功能(如AI航班推荐、在线支付对接),把航班管理、订单处理、客服互动等核心功能做扎实,即可顺利通过答辩。

若需要核心源码(带注释)、数据库脚本(含测试数据)、ER图模板,可在评论区留言“Java+Spring Boot民航网上订票系统”获取;若在模块开发中遇问题(如机票订单关联逻辑、航班座位预警实现),也可留言咨询,笔者将及时回复。

收藏本文,便于开发查阅~ 祝各位同学毕设顺利,轻松毕业!🎉