基于Spring Boot与MySQL的航空票务预订管理系统设计与实现
技术说明:本文围绕航空票务预订管理系统进行软件工程复盘,重点整理Spring Boot后端架构、MySQL数据库建模、用户与航班管理、票务查询、订单预订、权限控制和系统测试等技术要点。内容用于Java Web、数据库应用和票务信息系统开发方法交流,不涉及航空公司推广、票务代订或商业服务宣传。
摘 要
传统的购票管理已经出现数据过多,多方面需求膨胀,弊端日益明显。因此,本文设计的泰利航空机票预订系统,跟现代的软件开发技术相互结合,能够有效地减少传统管理方式的弊端,实现旅客和航司之间票务信息的更快捷处理和更新,规范管理流程,解决管理效率不够和便捷性的问题。
泰利航空机票预订系统依托先进的软件开发技术构建而成,使用可开发大型商业网站的Java语言,采纳了当下流行且功能健全的SpringBoot开发框架,数据存储借助MySQL数据库。本系统包括管理员端和用户端,航司通过管理员端对航班和用户等信息进行管理,用户能便捷地查询与预订机票。为航空公司和旅客双方都提供了一个更便利、可靠的平台。
关键词:航空票务预订系统;SpringBoot框架;系统分析;数据库设计
ABSTRACT
The traditional ticket management has appeared too much data, the demand in many aspects is expanding, and the disadvantages are becoming increasingly obvious. Therefore, the Terry air ticket reservation system designed in this paper, combined with modern software development technology, can effectively reduce the disadvantages of traditional management methods, realize faster processing and updating of ticket information between passengers and airlines, standardize management processes, and solve the problems of insufficient management efficiency and convenience.
Terry airline ticket reservation system is built on advanced software development technology, using Java language which can develop large-scale commercial websites, adopting the popular and functional development framework of SpringBoot, and data storage is based on MySQL database. The system includes administrator and client. The airline manages the information of flights and users through the administrator, and users can conveniently inquire and book air tickets. It provides a more convenient and reliable platform for both airlines and passengers.
Keywords: air ticketing booking system; SpringBoot framework; systems analysis; Database design
第1章 绪论
1.1 研究背景和意义
2020年,前所未有的新型冠状病毒疫情席卷全球,其对全球航空业的影响是一次根本性颠覆。国际航空运输协会IATA当头一棒地揭发一个严酷的现实:全球航空客运量相比较以前降幅高达了75.6%,几乎所有航司深陷运营危机。但也正是这个契机,推动了各行各业纷纷引入先进的信息技术,当然包括航空服务业。在这股潮流下,在线机票预订系统的便捷性在于订票过程可以实现0接触,而且它的实时响应能力就像一束光,凸显出的关键作用确实无可替代[1]。
跟线下购票作比较,在线系统明显具有技术优势:第一,它可以实时收集和比较各种票价信息,准确呈现航班状态和剩余机票,从而有效回避了信息不对称对乘客决策造成的麻烦和误导;全天候自助服务,能够做到让旅客不受人工服务时间限制,节省排队时间;而且利用现在流行的人脸识别、物联网或者区块链等技术能够支撑起一个可追踪的票务系统。
泰利航空票务预订系统聚焦上述行业痛点,通过融合实时航班数据库、需求预测模型与智能退改规则引擎,构建全链条票务解决方案。本泰利航空票务预订系统通过动态优化算法提升航班座位利用率,借助用户画像技术辅助航司制定精准营销策略,并建立突发公共卫生事件(如航班熔断)的自动化补偿机制,从而在降低运营成本的同时增强旅客服务韧性。
1.2 国内外研究现状
1.2.1 国内研究现状
随着经济和互联网的快速发展,国内航空在线票务一直在前进。网上支付方式多种多样,还有时代电商的突破,让更多的旅客选择了网络购票,打破原有规则限制的航空售票系统可谓是如雨后春笋,成为航空公司售票占据主导的项目。到现在为止,该类系统不再单单为旅客提供一项购票功能,而同时实现座位可选性、购票后根据自身情况能够及时改签、退票等等辅助功能,且管理模式更是得到了更新与变革[2]。
在2020年,中国在线机票预订市场出了一个令人震撼的数据:总规模已达到3920亿元人民币,较上一年度直接增长24.6%。截至2021年底,中国网民中使用在线机票预订服务的比例已超过70%,移动端预订成为主流,手机APP用户活跃度持续攀升,日均订单量突破千万次。预计到2025年市场规模有望突破5500亿元人民币[3]。
2020年,三大订票网站携程、飞猪以及去哪儿网占据了超过60%的市场份额,2021年携程在中国在线机票市场的份额达到39.5%。行业竞争激烈促使各大平台不断创新,如引入AI智能推荐系统、虚拟货币、会员制度以及与酒店、租车等多元服务的捆绑销售等,以提高用户粘性和转化率[4]。
技术方面大数据、AI等都发展得不可阻挡。大数据各方面都精通。就像现今通过这项技术智能推荐,各个航司都能根据旅客的历史定票走向和喜爱的城市提供专属的个性化航班推荐,票价预测模型同样的能够预测未来航班票价的高低走势。
1.2.2 国外研究现状
同样迅速发展成熟的还有国外航空票务预订,旅客购票的主要渠道已经变成了在网上定票。拿Expedia、Booking平台举例,凭借着用户界面轻松便捷、各类机票的价格实时更新和航班选择的多样性,让消费者能够更加理智地做出购买选择。
现代社会各行各业竞争激烈,除了传统的大型在线平台外,新兴的共享经济模式和个性化服务提供商如Skyscanner和Google Flights等,正以独特的价值主张吸引着一部分消费者[5]。
在技术运用领域,国际上同样重视运用前沿技术优化系统性能与用户感受。譬如,依托微服务架构搭建的航班预订系统,实现了用户与航空公司管理员之间的紧密互动,支持各种票务系统功能,不仅追求功能的完备,也着重于界面设计的审美体验,增强了服务。
1.3 研究内容
泰利航空票务预订系统的设计与实现旨在为用户提供高效、便捷的航空票务服务,涵盖从用户注册、航班查询、票务预订到订单管理的全流程功能。
本课题功能模块的内容:
(1)用户管理模块:用户可注册登陆,登录界面提示用户加强密码保护意识。系统会根据用户类型为旅客或是管理员登录不同的端口,进行各自相应的操作权限,确保系统功能的合理分块使用。
(2)飞机查询模块:系统的核心功能之一,无论是旅客或是航司管理员都可根据自己需求在航班查询页面选择条件以获取航班信息,便捷地浏览航班的详细信息以及以往旅客反馈以及对照不同时段的价格,进而更加理智地做出购买选择。
(3)票务预订模块:允许用户在查询到合适的航班后,直接在线完成预订操作,系统会生成订单并支持多种支付方式,如支付宝、微信支付等,确保交易的安全与便捷[6]。
(4)订单管理模块:为用户提供了查看、修改、取消订单的功能,出行前旅客可方便地了解订单状态,并且若在本次系统的规定时间内,还可对航班行程进行修改或退票操作,系统会自动更新订单信息并通知用户。
此外,系统还提供论坛还有在线客服功能,收集旅客的反馈,以便航司掌握用户的需求以及不满之处、优化航班安排,提升整体运营效率。通过以上功能模块的协同运作,泰利航空票务预订系统将为用户提供一站式、智能化的航空票务服务体验。
第2章 开发环境与技术
构建泰利航空票务预订系统,必须建立编程环境,并且通过调研,分析各种相关技术,挑选出适合该系统开发的技术和工具。
2.1 MYSQL数据库
泰利航空票务预订系统的后端选择MySQL,它是一款关系数据库管理系统,从web应用的角度来看,MySQL的优点在于它是关系数据库管理的最佳应用之一。泰利航空票务预定系统通过将数据分散存储于多个数据表中,如航班信息表、客服聊天表、管理员表、机票预定表等,如此以来能够减轻系统数据存取的负担,同时也能够使得数据库更加灵活易操作。
2.2 Vue技术
泰利航空票务预订系统的前端使用的是JavaScript框架其一:vue框架。其在HTML、CSS和JavaScript的基础上能够轻松实现可交互的界面。它支持声明式和组件化编程,适用于开发各种复杂度的用户界面。
Vue作为一个独立的社区驱动项目,已经成为一个成熟的框架。本系统使用Vue创建了泰利航空票务预订系统登录页面:login.vue、系统首页页面:home.vue以及支付页面pay.vue等。
Vue的结构包括vue引擎和web服务器两部分。vue引擎负责编译后的运行解释,而web服务器则负责配合vue引擎运行。它们相辅相成,共同协作以保证系统正常运行。Vue容器和引擎中包含Tomcat,而Tomcat内有Apache静态代码解释部分。尽管两者运行出来是相似的效果,但属性不同,作为不同的工具其构成自然也有别。Vue部署灵活,Tomcat作为vue引擎,负责网页运行和客户访问,但不是web服务器。
2.3 Tomcat介绍
对于众多学术研究者而言,Tomcat似乎仅是一个可利用的服务器,然而,这种理解并不全面。更精确的描述应当是:它是一个展示性的容器。然而,现实与理论之间往往存在差异。在实际应用中,泰利航空票务预订系统将Tomcat作为Web服务器使用,这是因为Tomcat具备了使网站得以发布和运行的实际功能。
鉴于其工作原理,Tomcat通常被中小型企业用作轻量级服务器,适用于并发量较低的场景。在Tomcat里能配置好几个网站,配置文件通常具有“.config”的文件扩展名,其结构与XML类似,所以理解起来也相对轻松。
在对Tomcat的配置有所掌握之后,其在软件版本迭代的浪潮中的表现值得深入探讨。随着Java新版本的发布,Tomcat亦会进行相应的更新,以确保与Java版本的兼容性。目前,Tomcat已发展至第10版。提及Tomcat,其独特的标识——一只略显发黄的小猫咪,总是引人注目,在配置Tomcat的过程中,若能成功看到该标识,即表示配置无误,此时即可继续进行后续的配置步骤。
2.4 SpringBoot框架
Spring Boot框架的设计免除了手动代码生成的需求,同时它也免去了对XML配置文件的依赖。得益于内嵌的众多接口,只需通过配置相应的接口,系统便能自动识别并应用所需的依赖项,使得配置过程极为便捷。本泰利航空票务预订系统使用Spring Boot时,航司与旅客几乎能够做到感受不到传统框架的痕迹。同时,该框架提供了多种默认配置文件,作为泰利航空票务预订系统的管理员可以根据需求对这些默认配置进行修改。此外,它支持自动配置功能,并将异常处理分为全局和默认两个级别进行管理。
第3章 系统分析
3.1 系统需求分析
泰利航空票务预订系统旨在提供全面的机票预订服务,基本功能需求如表3.1所示:
表3.1 系统功能需求表
| 功能名称 | 功能描述 |
|---|---|
| 机票订购 | 该系统赋予管理员管理剩余票务和用户进行机票订购的权限。 管理员通过检索来确认旅客所选航班的座位状态,选定座位并确认相关信息后,即可完成在线订购。 用户则能够直接在航班具体信息页面上执行机票订购流程。 |
| 查询航班 | 旅客能够通过输入起始点、目的地、出行日期及时间等参数,执行航班信息的非精确检索。 |
| 航班管理 | 包括添加和取消航班。在管理员手动检索并补充细节的航班信息,又可以用另一种方式:航班号和日期查询,得到资讯后取消该航班,此时数据库中获取相应航班信息,再自动进行删除操作。系统使用Mysql数据库备份命令确保数据安全。 |
| 用户管理 | 用户可以通过注册账号并登录系统,系统会根据用户类型为旅客或是管理员登录不同的端口,进行各自相应的操作权限,确保系统功能的合理分块使用。 作为航司工作人员登录可对系统所有用户信息进行管理,修改或删除相关个人信息。 |
| 通知取票 | 此功能专为系统管理员设计。只要系统捕获到旅客提交了机票的支付预定,就会第一时间自动向管理员端发送订票信息,并提示航司可以进行提醒旅客取票操作,以便旅客顺利开启旅程。 |
| 航班营运统计 | 这个功能仅供系统的航司管理员使用,通过统计泰利航空的各种购票信息在管理员端首页自动生成阶段的运营统计报表。 |
本系统在处理数据时,其内部的运作逻辑也需要借助相应的工具进行呈现,综合以上功能需求表,进行航班管理、用户管理、查询航班信息以及取票退票操作时,都可看出系统最基础的功能需求为:添加、移除、修改、查询。
添加:在泰利航空票务预定系统中的各个数据输入界面中,用户提交的每一条数据都有相应的验证机制。例如,信息不得包含无效字符,限制内容的长度或者禁止用字母替换本应使用中文的字段,在编程阶段已经预设了这些验证逻辑和数据规范。数据库中数据的成功存储表明用户输入的信息内容和格式完全符合要求。
数据添加的流程见下图3.1。
图3.1 添加信息流程图
修改:在很多的信息系统中都要处理大量数据,那么必然会在过程追踪出错误,需要及时纠正。本泰利航空票务预定系统支持旅客的个人信息的修改、航司管理员对航班或基础信息的修改,并需通过有效性检验后才能存入MySQL数据库并展示,以确保数据符合标准。
修改信息流程图如图3.2所示。
图3.2 修改信息流程图
查询:管理员前台每天会面对数据库中的无数数据,但凡想要快速锁定所需的信息,你需要使用借助平台所设的检索及筛选机制。该过程如下图3.3所示。利用这个功能,不管是航司或旅客,只需提前输入关键字。当检索到与关键字匹配的数存在于系统的数据库时,它会及时在当前页面显示出来,整个过程需要很短的时间。
图3.3 查询信息流程图
数据流程图是描述系统数据流的主要工具,它用一组符号简化了系统各个点流向的全貌,描绘了整个系统内信息的完整图片,充分反映了系统内信息的流动、如何处理和储存情况。结合以上基本功能需求拓展开本系统的增加航班、新闻、论坛、客服聊天等信息,修改个人密码以及删除下架航班信息等,根据本泰利航空票务预订系统最主要的功能需求,进行详细拆分后可以得到数据流图,如下图3.4所示。
图3.4 系统数据流图
3.2 系统性能分析
泰利航空票务预订系统的性能要求,需结合实际实践,对机票预订系统的易用性、安全性和维护进行分析。
首先是系统的实际操作,即实用性。本系统能够让航司工作人员快捷的捕获所需的旅客信息、航班信息,这样一来,管理的效率就会提高,管理的成本就会降低,相较于传统纸质时代日常所做繁琐的工作也会大幅下降。
再说说系统的易用性。该系统对工作环境的适应性较强,在生活中应用极为便利。无论是置于普通办公室的台式电脑,还是便于携带至课堂使用的笔记本电脑,一旦配置好运行环境,系统便能流畅运行,无需过多调整或优化,有效降低了用户的操作负担。
对于系统的安全性,不管是数据保存还是管理,系统的安全系数必须足够。开发者设计和编写代码时,根据不同的用户获得不同的权限,根据用户的角色来决定他们能用一部分系统功能还是系统全部权限。当用户第一次登录,通过编写安全检查和不同的页面跳转链接,允许用户进到用户端或管理员端。还有像登录的账号密码等都是用户的基本信息,都得加密保存,成熟的MD5加密技术能够很轻易就做到这点[8]。
最后说系统易维护性。总所周知,系统运行越久,就犹如手机相册一般堆的数据越多,为了维护起来方便,这些数据必须要求可以利用工具从数据库里导出来。对于不必要的阶段性数据,实现大批的删除,如此以来,航司处理各种数据时就可减负,同时系统能够更轻松如初的运行。
3.3 系统用例分析
通过运用面向对象的方式,深入且细致地对音视频管理系统开展用例分析,在此基础上,能够精准地获取泰利航空票务预定系统所对应的系统用例图。
泰利航空票务预定系统的系统用例图如下图3.5所示:
图3.5 系统用例图
系统用例图的用例详细描述如下:
查询航班:旅客输入出发地、目的地、日期等信息,系统返回符合条件的航班列表。
机票预订:旅客选择航班和座位,填写乘客信息,旅客可使用各种支付方式完成机票费用的支付,最后提交订单。
订单管理:输入订单信息可查看相应订单,在规定时间内,旅客可以对已预订的机票申请退还。
个人信息管理:旅客可在个人信息页面修改个人信息,还可进行余额的充值。
3.4 可行性分析
可行性分析能够非常直观的了解所建议的系统所需要开发做的事情,尽管系统是根据用户的要求进行制作,但是在确定制作前,有必要分析其可行性[7]。
3.4.1 操作可行性分析
(1)目标和需求:在现有的管理制度下,用户引进航空票务预订系统可以提高工作人员的工作效率、降低人工成本、降低了订单的出错率、改善了用户的航空订票体验,提高了整个出行的时间效率和经济效率。
(2)技术要求:评估航空票务预订系统对航司现有技术基础设施都能兼容且可实施。确保了企业具备实施和维护该系统所需的技术能力和资源。
(3)可操作性:在当今网络的普及下,尤其年轻人对计算机都有一些基本的了解,客观上为泰利航空票务预订系统的设计与实现的操作创造了良好的社会环境。并且本泰利航空票务预订系统的前端界面干净、清晰、简洁、操作简单,能满足大多数用户的功能需求,便于全国各地的旅客对机票信息的了解。
因此,该系统在操作方面是可行的。
3.4.2 经济可行性分析
作为开发前必不可少的关键环节,经济可行性研究是在计算机系统的开发成本与效益之间的可行性分析内容,基于该系统开发后带来的经济利润与估算成本进行对比。
鉴于购票网络所需的配置环境易于从互联网上获取,系统的开发与后续的维护工作作为了泰利航空票务预定系统的主要经济成本,因此不会对航空公司造成过大的经济压力。该系统运行后,不仅能够使航司售票整个服务流程速率得到提升,而且能够大量简化其信息管理,为现场售票人员减轻了工作量。另外,本泰利航空票务预定系统并不复杂,开发周期短,所需人工成本低。节省的大量人力与财力后期所产生效益会比该票务预定系统的开发所需成本大得多。所以在经济上,可以完成航空票务预订系统的编程开发。
3.4.3 技术可行性分析
本泰利航空票务预定系统开发技术方案如表3.2所示。
表3.2技术方案表
| 技术层级 | 实现方案 |
|---|---|
| 编程语言 | 基于Java语言进行开发(JDK 1.8运行环境) |
| 开发工具 | 采用IntelliJ IDEA 2023作为集成开发环境 |
| 数据存储 | 使用MySQL关系型数据库构建数据模型,存储航班信息、订单数据等业务实体 |
| 后端架构 | 基于SpringBoot框架实现业务逻辑处理 |
| 前端交互 | 采用Vue.js+ElementUI技术构建用户界面,涵盖航班查询、论坛交互等模块 |
| 支付系统 | 集成第三方支付接口(支付宝/微信支付等)完成交易闭环 |
技术风险:技术的更新与维修投入的资源与人力物力较少,相关成本属于可控范围。综合上述分析,系统在技术实现层面具备可行性。结合经济可行性与操作可行性的分析结果,当前技术条件能够支撑泰利航空票务预订系统的开发实施。
第4章 系统概要设计
4.1 程序工作原理
本次开发泰利航空票务预定系统为了缩减开发支出,同时考虑到未来维护及升级的便捷性,计划采用浏览器作为平台功能界面的展示手段,将应用程序的核心事务处理交由后台服务器完成,少量的业务逻辑处理交给前端。以下将通过一张图表(参见图4.1)来阐释程序运作的机理。
图4.1程序工作的原理图
4.2 功能结构设计
4.2.1 对功能的规定
对于系统管理员端:
(1)登录/注册模块管理:修改航空公司工作人员的用户名、个人密码;
(2)用户管理:对系统所有使用者信息进行管理,负责执行用户数据的增添、重置用户密码及更新作业;
(3)航班收藏管理:包括对航班名称、航班类型、剩余座位信息、照片、现价、出发地与目的地、出发时间、是否上架以及航班状态的增添与更新操作;
(4)机票预订管理:包括能够实时查看用户预定的订单号、实付价格、订单类型、预定座位、订购日期以及订单创建时间,并支持按照搜索订单号/航班/航班类型/用户名进行订单快速筛选;
(5)民航新闻、论坛以及客服聊天管理:在后台编辑新闻详情能在用户进入系统之后进行轮播,论坛则为用户提供一个留言的功能,方便泰利航空进行用户反馈,论坛功能能够查看帖子详情,回复以及删除帖子;
对于用户端:
(1)用户个人信息管理:包括姓名、头像、身份证号、手机号等信息增添或修改以及余额的充值;
(2)查看所有航班信息:可按不同航班类型、航班名、航班状态进行筛选;
(3)对正常航班进行预定,填写预定信息后自动生成订单信息,可查看订单详情,在航班起飞前可进行退票操作;
(4)查看新闻和论坛详情,发布论坛,发起客服聊天;
4.2.2 对性能的规定
软件程序的研制旨在确保其在应用过程中能够持续稳定地处理各类数据资讯。一旦程序软件出现不稳定状况,便会对用户造成困扰。鉴于此,从性能标准出发,必须确保程序软件在面对用户的误操作,或是由于种种因素导致用户输入错误数据等情况下,依然能够保持稳定性,并保证用户能够顺畅地继续使用。
4.2.3 总体结构设计
软件结构设计应遵循以下几个准则:模块独立性准则、控制与作用范围之间的准则、结构特征准则、模块的接口准则。软件结构图:是精确表达软件结构的图形表示方法,它以特定的符号表示模块、模块间的调用关系和模块间信息的传递[9]。
根据以上准则以及系统对功能的规定各角色的功能规定,软件结构图如图4.2所示:
图4.2 软件结构图
对本系统功能进行细分设计,设计的系统功能结构见下图4.3。
图4.3 系统功能结构图
4.3 数据库设计
数据仓库汇聚了庞大的信息资源,堪称信息管理架构的基石与核心。它不仅支持数据的增删改查功能,还使得系统能够迅速定位所需资料,避免深入代码层进行信息检索。在数据库的信息表格中,各个部分依据既定规则紧密组织,有序排列与搭配,形成完整的数据结构。
4.3.1 数据库逻辑设计
数据库的逻辑设计环节涉及将分散的局部E-R图整合、调整,进而构建出涵盖整体信息的数据库全局逻辑架构。数据库及表单设计如图4.4所示。

图4.4 MySQL表
数据库的连接配置文件如图4.5所示。

图4.5 数据库连接
泰利航空票务预定系统最主要的分为八个实体,分别包括各属性,如下列图4.6至图4.14分别是各系统模块的实体属性图和E-R图:
(1)下图4.6是客服聊天实体和其具备的属性。
图4.6 客服聊天实体属性图

(2)下图4.7是论坛实体和其具备的属性。
图4.7 论坛实体属性图

(3)下图4.8是民航新闻实体和其具备的属性。
图4.8民航新闻实体属性图

(4)下图4.9是用户实体和其具备的属性。
图4.9 用户实体属性图

(5)下图4.10是字典表实体和其具备的属性。
图4.10 字典表实体属性图

(6)下图4.11是航班收藏实体和其具备的属性。
图4.11 航班收藏实体属性图

(7)下图4.12是航班信息实体和其具备的属性。
图4.12 航班信息实体属性图

(8)下图4.13是机票预订实体和其具备的属性。
图4.13 机票预订实体属性图

(9)用户-航班-订单实体具备以下属性:用户ID、姓名、用户性别、手机号、身份证号、订单数量、用户订单编号、订单类型、订单价格、航班号、预定座位。旅客在提交订单环节能够对若干笔交易实施并行操作,然而每一笔交易仅能与单一旅客相匹配,旅客可看到自己的订单数量。旅客通过用户名与密码进行登陆后,填写自己的个人信息再对商品进行下单,下单成功后会生成订单编号,订单类型,预定航班信息(航班号、座位号)以及价格,用户-航班-订单E-R图如图4.14所示:
图4.14 客户-订单E-R图
4.3.2 数据库物理设计
根据以上分析,E-R模型中的实体对应于数据表结构,其实体属性则映射为表的字段。根据系统信息存储需求,需明确各字段的数据类型和约束条件,包括数值范围等参数设置。完成数据表结构设计后需及时存储至数据库,并遵循规范化命名原则:优先采用英文标识符以提高兼容性,确保名称简洁且具有可识别性(如避免使用中文命名可能引发的编码异常问题),从而保障数据结构的完整性和系统运行稳定性[10]。
本泰利航空票务预订系统数据库表的详细设计及字段内容如下表4.1-4.9所示。
表4.1客服聊天表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | yonghu_id | Integer | 提问用户 | 是 |
| 3 | chat_issue | String | 问题 | 是 |
| 4 | issue_time | Date | 问题时间 | 是 |
| 5 | chat_reply | String | 回复 | 是 |
| 6 | reply_time | Date | 回复时间 | 是 |
| 7 | zhuangtai_types | Integer | 状态 | 是 |
| 8 | chat_types | Integer | 数据类型 | 是 |
| 9 | insert_time | Date | 创建时间 | 是 |
表4.2字典表表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | dic_code | String | 字段 | 是 |
| 3 | dic_name | String | 字段名 | 是 |
| 4 | code_index | Integer | 编码 | 是 |
| 5 | index_name | String | 编码名字 | 是 |
| 6 | super_id | Integer | 父字段id | 是 |
| 7 | beizhu | String | 备注 | 是 |
| 8 | create_time | Date | 创建时间 | 是 |
表4.3论坛表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | forum_name | String | 帖子标题 | 是 |
| 3 | yonghu_id | Integer | 用户 | 是 |
| 4 | users_id | Integer | 管理员 | 是 |
| 5 | forum_content | String | 发布内容 | 是 |
| 6 | super_ids | Integer | 父id | 是 |
| 7 | forum_state_types | Integer | 帖子状态 | 是 |
| 8 | insert_time | Date | 发帖时间 | 是 |
| 9 | update_time | Date | 修改时间 | 是 |
| 10 | create_time | Date | 创建时间 | 是 |
表4.4管理员表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | username | String | 管理员名 | 是 |
| 3 | password | String | 密码 | 是 |
| 4 | role | String | 角色 | 是 |
| 5 | addtime | Date | 新增时间 | 是 |
表4.5民航新闻表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | news_name | String | 新闻标题 | 是 |
| 3 | news_types | Integer | 新闻类型 | 是 |
| 4 | news_photo | String | 新闻图片 | 是 |
| 5 | insert_time | Date | 添加时间 | 是 |
| 6 | news_content | String | 新闻详情 | 是 |
| 7 | create_time | Date | 创建时间 | 是 |
表4.6航班收藏表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | jipiao_id | Integer | 航班 | 是 |
| 3 | yonghu_id | Integer | 用户 | 是 |
| 4 | jipiao_collection_types | Integer | 类型 | 是 |
| 5 | insert_time | Date | 收藏时间 | 是 |
| 6 | create_time | Date | 创建时间 | 是 |
表4.7机票预订表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | jipiao_order_uuid_number | String | 订单号 | 是 |
| 3 | jipiao_id | Integer | 机票 | 是 |
| 4 | yonghu_id | Integer | 用户 | 是 |
| 5 | jipiao_order_true_price | BigDecimal | 实付价格 | 是 |
| 6 | jipiao_order_time | Date | 预定时间 | 是 |
| 7 | jipiao_order_types | Integer | 订单类型 | 是 |
| 8 | buy_zuowei_number | String | 预定座位 | 是 |
| 9 | buy_zuowei_time | Date | 订购日期 | 是 |
| 10 | insert_time | Date | 订单创建时间 | 是 |
| 11 | create_time | Date | 创建时间 | 是 |
表4.8航班信息表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | jipiao_name | String | 航班标题 | 是 |
| 3 | jipiao_photo | String | 航班照片 | 是 |
| 4 | jipiao_types | Integer | 航班类型 | 是 |
| 5 | jipiao_new_money | BigDecimal | 现价 | 是 |
| 6 | jipiao_chufadi | String | 出发地 | 是 |
| 7 | jipiao_mudidi | String | 目的地 | 是 |
| 8 | jipiao_time | Date | 出发时间 | 是 |
| 9 | zuowei_number | Integer | 座位 | 是 |
| 10 | shangxia_types | Integer | 是否上架 | 是 |
| 11 | hangban_types | Integer | 航班状态 | 是 |
| 12 | jipiao_delete | Integer | 逻辑删除 | 是 |
| 13 | jipiao_content | String | 航班详情 | 是 |
| 14 | create_time | Date | 创建时间 | 是 |
表4.9用户表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | yonghu_name | String | 用户姓名 | 是 |
| 3 | yonghu_photo | String | 头像 | 是 |
| 4 | yonghu_phone | String | 用户手机号 | 是 |
| 5 | yonghu_id_number | String | 用户身份证号 | 是 |
| 6 | new_money | BigDecimal | 余额 | 是 |
| 7 | yonghu_delete | Integer | 假删 | 是 |
| 8 | create_time | Date | 创建时间 | 是 |
数据库的逻辑设计包括建表语句,但航班信息表以及航班预定表作为本系统最主要功能设计的数据库表,本文仅展示其建表SQL语句,如下:
/*Table structure for table `jipiao` */
DROP TABLE IF EXISTS `jipiao`;
CREATE TABLE `jipiao` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',
`jipiao_name` varchar(200) DEFAULT NULL COMMENT '航班标题 Search111 ',
`jipiao_photo` varchar(200) DEFAULT NULL COMMENT '航班照片',
`jipiao_types` int(11) DEFAULT NULL COMMENT '航班类型 Search111',
`jipiao_new_money` decimal(10,2) DEFAULT NULL COMMENT '现价',
`jipiao_chufadi` varchar(200) DEFAULT NULL COMMENT '出发地',
`jipiao_mudidi` varchar(200) DEFAULT NULL COMMENT '目的地',
`jipiao_time` timestamp NULL DEFAULT NULL COMMENT '出发时间',
`zuowei_number` int(11) DEFAULT NULL COMMENT '座位',
`shangxia_types` int(11) DEFAULT NULL COMMENT '是否上架 ',
`hangban_types` int(11) DEFAULT NULL COMMENT '航班状态 Search111',
`jipiao_delete` int(11) DEFAULT NULL COMMENT '逻辑删除',
`jipiao_content` longtext COMMENT '航班详情',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show1 show2 photoShow',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='航班信息';
/*Table structure for table `jipiao_order` */
DROP TABLE IF EXISTS `jipiao_order`;CREATE TABLE `jipiao_order` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `jipiao_order_uuid_number` varchar(200) DEFAULT NULL COMMENT '订单号 Search111 ', `jipiao_id` int(11) DEFAULT NULL COMMENT '机票', `yonghu_id` int(11) DEFAULT NULL COMMENT '用户', `jipiao_order_true_price` decimal(10,2) DEFAULT NULL COMMENT '实付价格 ', `jipiao_order_types` int(11) DEFAULT NULL COMMENT '订单类型 Search111 ', `buy_zuowei_number` varchar(200) DEFAULT NULL COMMENT '预定座位', `buy_zuowei_time` date DEFAULT NULL COMMENT '订购日期', `insert_time` timestamp NULL DEFAULT NULL COMMENT '订单创建时间', `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show3', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='机票预订';
第5章 系统详细设计与实现
本章节内容为泰利航空票务预订系统设计的详细设计与实现文档,主要完成在逻辑上正确的实现每个模块的功能并且进行实现,使得处理过程变得更清晰易懂。结构化程序设计能帮助开发者很好的一一解决这些要求,这一关键技术可以说是将理论转为现实,变成一个更细腻的系统设计,构建清晰功能的模型,便于软件编程与实现。
在本系统实现阶段,需要对各个模块:登录模块、管理员模块、用户模块等进行实现,选择程序设计语言,还要考虑程序的效率,包括对硬件资源的使用效率、算法的效率等,同时兼备程序的可读性和清晰性。
本系统开发环境:
数据库:MySQL 5.7+Navicat
IDE:IntelliJ IDEA 2021.3.3
运行环境和构建工具:Tomcat 8.5.84、JDK1.8、Maven3.6.1
界面UI:HTML、CSS、Vue.js
后端技术:Java、Spring、MyBatis、springboot Maven
5.1 系统详细设计
5.1.1 系统实现流程
本系统开发流程:
(1)环境搭建:完成JDK 1.8的安装,并配置系统环境变量,确保Java开发工具包的全局可用性。安装Maven 3.6.1,用于管理项目所需的依赖库和构建流程。
部署IntelliJ IDEA作为主力IDE,提供高效的代码编写和调试环境。安装Tomcat 8.5服务器,作为应用程序的运行和托管平台。
(2)数据库设计:使用MySQL 5.7设计数据库模型;根据业务需求设计数据库模型;创建数据库表结构,并设置索引以提升查询性能;编写SQL脚本,实现数据库的初始化数据填充和数据迁移功能。
(3)项目初始化:明确项目目录结构和依赖关系。精细配置pom.xml文件,确保项目所需依赖库的准确引入。
(4)后端开发:初始化Spring Boot项目,配置应用属性;集成Spring框架,实现依赖注入和事务管理;使用MyBatis作为ORM工具,编写数据访问对象(Mapper)最后开发业务逻辑层(Service)和控制层(Controller)。
(5)前端开发:规划前端页面布局,使用HTML结构以及利用能够确保页面美观和易用性的CSS样式。实现前端交互逻辑和动态效果则使用Vue.js框架,提升用户体验。集成Vue.js框架,构建单页面应用程序(SPA),实现页面的无缝切换和数据的动态更新。
部分源程序代码层见下图5.1-图5.3。


(a)mapper层xml (b)pom.xml文件
图5.1 项目初始化



(a)service及Impl (b)controller层 (c)dao层
图5.2 后端开发

图5.3 前端开发
5.1.2 接口设计
在设计网络软件接口时,精确的传输协议被采用,并通过滑动窗口机制高效地完成了数据的发送和接收。
在用户输入处理环节,通过应用JSP的标准输入方法以及Java的交互功能,可以对用户通过键盘或鼠标等输入设备在文本框中输入的信息进行深入的提取。至于输出部分,同样借助Java的标准输入/输出功能,实现对打印机的操控和管理。在网络通信模块的构建上,采用ATM技术,确保用户能够享受到高速的数据传输效率。
在模块间的接口交互过程中,各个模块之间通过函数调用、参数传递以及返回值等多种方式来进行信息的交换和共享。这些交换的信息通常被精心封装成特定的数据结构,以确保它们能够以参数传递和返回值的形式,在不同的模块之间顺畅地进行传递和接收。
5.1.3 其他设计
本泰利航空票务预订系统在设计方面需要满足一系列特定的要求,关于其他设计列于下表5.1中,以确保系统的高效运行和用户友好性。
表5.1 系统设计要求表
| 设计 | 描述 |
|---|---|
| 编程语言 | 高级语言jsp |
| 内存分配 | 由jsp程序运行时分配 |
| 变量和结构声明 | 全部在组件内声明 |
| 模块首部注释 | 用户验证程序 |
| 调用函数注释 | 调用加密两数MD5 |
| 限制条件 | 系统首次使用时,统一用户ID和密码:admin和admin,用户默认密码为123456。三次验证错误后,系统自动关闭。 |
5.2 登陆注册模块设计与实现
5.2.1 功能
(1)功能类型:输入数据,进入系统;
(2)功能描述:增强系统防护能力,区分用户与管理员权限以各异的方式登录系统;
(3)功能约束:权限约束;
(4)约束描述:仅限已在平台注册且信息记录于数据库的用户方可登录系统。
5.2.2 算法设计
输入项:系统数据库中已注册的账号、密码。
输出项:产生MySQL语言查询用户表,结果正确登陆系统,失败给出相应失败提示。
用户在登录界面输入账号和密码,若账号存在,且密码与数据库中储存的密码一致时,则允许用户登录,登录成功,不一致则出现弹框显示账号或密码错误。登录服务程序流程逻辑如图5.4所示:
图5.4 登录模块的流程逻辑图
5.2.3 界面设计
(1)动作描述
①用户名文本框:在此处填写您的用户名称;
②密码文本框:在此输入您的账户密码;
③登录操作键:激活此键以将信息发送至服务器进行验证,检索数据库并展示相应权限的界面;
④注册链接:输入自定义用户名、密码、姓名与联系电话注册。若已有账号:清空注册数据并回到登陆页面。
(2)数据要求
在登陆界面只需要输入用户的帐号、密码以及识别登陆者的身份,所需要的数据如表5.2所示:
表5.2 登陆界面数据需求表
| 字段名称 | 长度要求 | 是否允许为空 | 录入方式 | 默认值 |
|---|---|---|---|---|
| 用户名(Username) | char(10) | 否 | 文本框 | 空 |
| 用户登录密码(password) | varchar(20) | 否 | 文本框 | 空 |
5.2.4 关键代码与实现页面
/**
登录
**/ @IgnoreAuth @PostMapping(value = "/login") public R login(String username, String password, String captcha, HttpServletRequest request) { UsersEntity user = usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username)); if(user==null ||!user.getPassword().equals(password)) { return R.error("账号或密码不正确"); } String token = tokenService.generateToken(user.getId(),username, "users", user.getRole()); R r = R.ok(); r.put("token", token); r.put("role",user.getRole()); r.put("userId",user.getId()); return r; } /** 注册 */ @IgnoreAuth @PostMapping(value = "/register") public R register(@RequestBody UsersEntity user){// ValidatorUtils.validateEntity(user); if(usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername()))!=null) { return R.error("用户已存在"); } usersService.insert(user); return R.ok(); }
在系统用户在登录界面中实现注册与登录,已经注册的用户可以选择是直接用户名登录,页面简洁清晰。在本模块中,系统完成了登录/注册模块的功能,并具备注册、找回密码。
本泰利航空票务预订系统管理员端的登录界面如图5.5所示:

图5.5登录界面
本泰利航空票务预订系统管理员端的注册界面如图5.6所示:

图5.6注册界面
在用户端只能作为用户登录,系统管理员无法登录用户端,用户端登录页面如下图5.7所示。

图5.7 用户端登录页面
5.3 管理员端设计与实现
5.3.1 功能
(1)功能类型:增加、修改数据;
(2)功能描述:管理员对系统所有使用者信息、所有航班信息进行管理,能够查看用户详情,修改用户信息包括账号、头像、用户名、手机号、身份证号、性别以及用户余额,重置用户密码;用户端用户可自行在个人中心修改个人信息;
(3)功能约束:无。
5.3.2 算法设计
输入项:系统用户的登录账号、密码、用户名、手机号、身份证号、性别信息。
输出项:生成对应的MySQL语言,修改数据库中“用户信息表”,界面给出相应成功或各项必填信息不能为空的提示框。
以账户为例,姓名、手机号、航班等也是相同算法设计如下:
在数据库中获取用户信息,
if(用户要修改账户("username")){
获取文本框中用户所输入内容;
替换原文本内容;
}else{
List<String> username = new ArrayList<>();
Add要改的内容
更新username
}
//查询是否重复
用List<YonghuEntity>
if{输入文本size>0
for循环查找数据库中相应数据
}return R.error(511,"数据库的该表中的 [账户] 字段已经存在 存在数据为:"+内容
用户管理流程逻辑如图5.8所示:
图5.8 用户管理模块的流程逻辑图
5.3.3 界面设计
(1)用户管理界面动作描述
①用户信息管理按钮:点击按钮提交数据到查询数据处理程序,显示系统用户的个人信息,并允许在此页面修改系统用户的个人信息。
②操作按钮:点击修改、删除、重置密码按钮可进行相应操作,查询“用户信息表”,可查询到使用该系统的所有系统用户信息,可修改该用户的所有信息以及为其充值。
(2)用户管理界面数据要求
用户管理界面需要显示系统用户的所有个人信息,根据“用户信息表”此界面数据如表5.3所示:
表5.3用户管理界面数据要求表
| 字段名称 | 长度要求 | 是否允许为空 | 录入方式 | 默认值 |
|---|---|---|---|---|
| 用户名(yonghu_name) | Varchar(200) | 是 | 用户输入 | 某姓名 |
| 用户登录密码(password) | Varchar(200) | 是 | 用户输入 | 某密码 |
| 用户电话(yonghu_phone) | Varchar(200) | 是 | 用户输入 | 某电话 |
| 用户头像(yonghu_photo) | varchar(255) | 是 | 用户上传 | 某照片 |
| 账号(username) | varchar(200) | 是 | 系统自动 | 某账号 |
| 身份证号(yonghu_id_number) | varchar(200) | 是 | 用户输入 | 某号码 |
| 性别(sex_types) | int(11) | 是 | 用户输入 | 某性别 |
| 用户余额(new_money) | decimal(10)(2) | 是 | 系统 | 某余额 |
5.3.4 用户信息管理页面
此页面提供给管理员的功能有:进行用户信息检索,可以更新或删除用户信息。
用户信息管理页面如图5.9所示。

图5.9 用户信息管理页面
以下为用户信息管理部分关键代码:
@RequestMapping("/save")
public R save(@RequestBody YonghuEntity yonghu, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,yonghu:{}",this.getClass().getName(),yonghu.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
Wrapper<YonghuEntity> queryWrapper = new EntityWrapper<YonghuEntity>()
.eq("username", yonghu.getUsername())
.or()
.eq("yonghu_phone", yonghu.getYonghuPhone())
.or()
.eq("yonghu_id_number", yonghu.getYonghuIdNumber())
.eq("yonghu_delete", 1)
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
YonghuEntity yonghuEntity = yonghuService.selectOne(queryWrapper);
5.3.5 航班信息管理页面
此页面提供给管理员的功能有:点击详情查看已发布的航班信息数据,修改航班信息,航班信息作废,即可删除,还可通过上方选择方格使用航班的标题、类型、状态进行航班信息的快速筛选获取所需信息。
航班信息管理页面如图5.10所示。

图5.10航班信息管理页面
以下为航班信息管理部分关键代码:
@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){ logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params)); String role = String.valueOf(request.getSession().getAttribute("role")); if(false) return R.error(511,"永不会进入"); else if("用户".equals(role)) params.put("yonghuId",request.getSession().getAttribute("userId")); CommonUtil.checkMap(params); PageUtils page = jipiaoCollectionService.queryPage(params); //字典表数据转换 List<JipiaoCollectionView> list =(List<JipiaoCollectionView>)page.getList(); for(JipiaoCollectionView c:list){ //修改对应字典表字段 dictionaryService.dictionaryConvert(c, request); } return R.ok().put("data", page);}
5.3.6 机票预定管理页面
此页面提供给管理员的功能有:查看用户已预定的航班信息数据,在与旅客沟通一致后删除用户订单,提醒用户取票,还进行了对订单信息的模糊查询、航班信息信息的类型标题查询等等一些条件。
航班信息管理页面如图5.11所示。

图5.11 机票预定管理页面
以下为机票预订管理部分关键代码:
@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){ logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params)); String role = String.valueOf(request.getSession().getAttribute("role")); if(false) return R.error(511,"永不会进入"); else if("用户".equals(role)) params.put("yonghuId",request.getSession().getAttribute("userId")); CommonUtil.checkMap(params); PageUtils page = jipiaoOrderService.queryPage(params); //字典表数据转换 List<JipiaoOrderView> list =(List<JipiaoOrderView>)page.getList(); for(JipiaoOrderView c:list){ //修改对应字典表字段 dictionaryService.dictionaryConvert(c, request); } return R.ok().put("data", page);}
5.3.7 基础数据管理页面
基础数据管理当中包括新闻类型与航班类型,两者页面雷同,代码雷同,航班类别实现了分为国内航班、国际航班以及不定期航班,新闻类型分为民航新闻、国内航空新闻以及国际航空新闻,以下以新闻类型管理页面为例:此页面提供给管理员的功能有:根据新闻类型进行条件查询,还可以对新闻类型进行新增、修改、查询操作等等。
以新闻详情信息管理页面为例,如图5.12所示。此页面提供给管理员的功能有:根据民航新闻进行新增、修改、查询操作等等。

图5.12 新闻类型管理页面
5.4 机票预/退订模块模块
5.4.1 功能
(1)功能类型:修改数据;
(2)功能描述:该模块支持用户进行机票预订、座位预定、日期选定以及支付机票价格,跳转我的机票预定页面;
(3)功能约束:权限约束;
(4)约束描述:允许用户对自己的机票进行退订或取票操作,允许查看所有已预定的机票,不能对已经出发的航班进行退票操作。
5.4.2 算法设计
输入项:用户id,用户账户以及用户个人信息、机票预订航班详情、出发地、目的地、出发时间。
输出项:生成对应的MySQL语言,更新数据库机票预订表,订单号、对用户预定机票成功提示、用户的个人中心输出所预定的航班信息列表,退票操作,以及管理员端输出用户预定详情,增加“提醒取票”操作。
首先创建对象赋值给机票预订
JipiaoOrderEntity jipiaoOrder = jipiaoOrderService.selectById(id);
if(jipiaoOrder!=null){
entity转view
把实体数据重构到view中
获取航班信息
if(航班信息不为空)
调用方法copyProperties(jipiao,view,new String[]添加航班信息
if(用户信息不为空)
调用方法copyProperties(yonghu,view,new String[]添加用户信息
view.setYonghuId(yonghu.getId());调取用户id
修改对应字典表字段
return R.ok().put("data", view);
else{
返回错误提示
}
机票预定或退订流程逻辑如图5.13所示:
图5.13 机票预/退订的流程逻辑图
5.4.3 界面设计
机票预订/退订界面设计:
(1)界面动作描述
①立即预定按钮:点击该按钮查询跳转到订单详情页面,可查询到该用户刚预定的机票信息,并显示结果;
②座位列表:点击该所有可选择的座位,可选定该座位进行预定,并且座位图案下方显示座位号如1号;
③订购日期:点击该文本框可进行日期选择,并出现类似日历表的选择表,可选年月日并且可滚动式选择日期,中间显示周日-周一-周二-周三-周四-周五-周六;
④收藏按钮:点击该按钮提交数据到航班收藏处理程序,查询“航班收藏表”,由“航班信息表”的数据,可对该航班进行收藏;
⑤订单提交按钮:点击该按钮对“机票预订表”进行修改,添加用户预定航班信息,并出现“提交成功”提示框,随后跳转至个人中心-机票预定页面。
⑥退票按钮:个人中心-机票预定页面点击按钮提交数据到查询数据处理程序,查询该用户预定航班信息,提示“是否确认退票”,用户选择确认后删除该航班预定信息,并显示结果,订单状态自动变为“已退票”。
(2)机票预定数据要求
机票预定页面显示用户的航班预定信息,并且关联用户的用户名、用户账号、id、以及系统自定生成的订单号、订单创建时间,主界面隐含着用户ID,其中所有数据都从数据库的“机票预订表”,如表5.4所示:
表5.4 机票预订数据要求表
| 字段名称 | 长度要求 | 是否为非空项 | 录入方式 | 默认值 |
|---|---|---|---|---|
| Id(id) | Int(11) | 否 | 系统录入 | 某id |
| 订单号(jipiao_order_uuid_number) | Varchar(200) | 是 | 系统生成 | 无 |
| 机票(jipiao_id) | Integer(11) | 是 | 用户输入 | 某航班号 |
| 用户名(yonghu_id) | Integer(11) | 是 | 用户输入 | 某用户名 |
| 实付价格(jipiao_order_true_price) | BigDecimal | 是 | 系统生成 | 无 |
| 预定时间(jipiao_order_time) | Date | 是 | 用户输入 | 某时间 |
| 订单类型(jipiao_order_types) | Integer(11) | 是 | 系统生成 | 无 |
| 预定座位(buy_zuowei_number) | Varchar(200) | 是 | 用户输入 | 某座位号 |
| 订购日期(buy_zuowei_time) | Date | 是 | 用户输入 | 某日期 |
| 订单创建时间(insert_time) | timestamp | 是 | 系统生成 | 无 |
| 创建时间(create_time) | timestamp | 是 | 系统生成 | 无 |
5.4.4 机票预订功能实现
用户最主要功能实现为机票预订,下图5.14为用户端航班信息页面,此页面为用户提供通过航班标题实现模糊查询航班信息功能,以及选择航班状态筛选所需要的航班。

图5.14用户端航班信息页面
用户点击航班信息可进行收藏航班以及预定功能,用户收藏航班成功后可在用户个人中心页面查看自己所收藏的航班信息,方便下次寻找,再次点击收藏星标亦可取消航班收藏,下图5.15为用户收藏航班成功页面。

图5.15 用户端航班收藏页面
图5.16为用户进行预定航班信息页面。此页面中为用户提供选择订购日期、可预订的座位号信息的功能,并显示注意事项,若其他旅客已预定座位号,则座位号显示红色并且不能选定,其他座位号选定后显示绿色,表示所选预定座位,用户点击“立即预定”按钮跳转到确认预定支付页面。

图5.16 用户端预定座位页面
图5.17为用户预定后确认预定信息并进行支付页面,点击“提交”按钮跳转到支付页面,预定时默认用户使用余额支付,若余额不足则无法进行机票预定,用户可在个人中心提前充值余额,充值服务提供微信支付、支付宝支付、银联支付(包括建设银行、中国农业银行、中国银行以及交通银行)。

图5.17 用户端机票预订页面
第6章 系统测试
对于功能繁杂、逻辑复杂的系统,单纯依靠编程人员的模块测试是不足的,需安排不同人员从多维度且细致地展开全面系统测试。通过巧妙设计各种故障场景,检验系统的应对方式,找出系统内部众多潜在问题。针对这些问题,积极探寻切实有效的解决办法进一步优化系统,以保障系统质量达到较高水准。
6.1 系统测试方法
软件质量保障的核心环节是通过系统化的检测手段对开发成果进行最终验证。根据检测方式差异,测试活动如表6.1所示可分为两大类别:
表6.1 测试方法两大类别表
| 测试类型 | 子类划分 | 特征描述 |
|---|---|---|
| 静态测试 | — | 不执行程序的情况下审查代码和文档 |
| 动态测试 | 黑盒测试 | 基于功能需求验证输入输出关系 |
| 白盒测试 | 依据代码结构设计测试路径 |
从软件开发周期角度,测试流程包含以下关键阶段,如表6.2所示:
表6.2 测试方法表
| 测试阶段 | 执行主体 | 测试重点 |
|---|---|---|
| 单元测试 | 开发人员 | 独立功能模块 |
| 集成测试 | 测试团队 | 模块交互接口 |
| 系统测试 | 质量保障部门 | 完整功能链路 |
| 验收测试 | 最终用户 | 实际应用场景 |
6.2 测试执行
目标用户群体特别关注系统的功能完整性,因此,对本泰利航空票务预订系统的功能测试模块进行验证,能有效评估业务闭环的实现程度。检验核心在于保证使用者与管理者操作流程的完善性,包含票务管理的全部生命周期。系统功能检验分为用户端和管理者端:用户端涉及登录注册、订购取消机票、退票取票等;管理者端包含增加航班资料、提示使用者取票等。
6.2.1 登录功能测试
在整个系统的编码过程中,为登录模块精心制定了一套严格的安全认证规则。当用户试图登录时,系统会对所提供的数据进行仔细评估。只有当用户的输入完全满足预先设定的标准时,系统才会无缝地将用户引导到指定的页面,确保他们可以毫无问题地使用相应的功能。在数据输入不正确的情况下,该系统具有即时反馈机制,可以迅速向用户发送通知,提醒他们输入错误,以便他们可以及时纠正。这种反馈不仅改善了用户体验,而且有效地防止了由于不正确的输入而导致的系统故障。再者,系统严格限制登录权限;只允许用户从用户端登录,禁止管理员帐户访问用户端。这一措施确保了系统的安全性,阻止了未经授权的访问,并允许系统稳定运行。登录功能功能测试表如下表6.3所示。
表6.3 登录功能测试表
| 测试用例 | 录入的数据 | 预期结果 | 实际结果 |
|---|---|---|---|
| 用户登录 case1 | 用户名:admin 密码:空 | 提示请填写密码 | 提示请“必须项不能为空” |
| 用户登录 case2 | 用户名:a1 密码:admin | 提示账号或密码不正确 | 提示账号或密码不正确 |
| 用户登录 case3 | 用户名:a1 密码:123456 | 提示登录成功,并跳转到功能操作区 | 提示登录成功,并跳转到功能操作区 |
| 管理员登录 case4 | 用户名:guanliyuan 密码:admin | 提示账号或密码不正确 | 提示账号或密码不正确 |
| 管理员登录 case5 | 用户名:admin 密码:123456 | 提示账号或密码不正确 | 提示账号或密码不正确 |
| 管理员登录 case6 | 用户名:admin 密码:admin | 提示登录成功,并跳转到功能操作区 | 提示登录成功,并跳转到功能操作区 |
客户端登录测试页面结果如图6.1、图6.2所示:


(a)测试case1 (b)测试case2
图6.1 用户端登陆测试

图6.2 case3用户端测试登陆成功
管理员登录页面同样设有错误提示语句,成功登录后直接跳转进入系统首页。管理员端登录测试页面结果如图6.3、图6.4所示:


(a)测试case4 (b)测试case5
图6.3 管理员端登陆测试

图6.4 case6管理员端测试登陆成功
6.2.2 管理员端测试
给航司提供的管理员端具备全面使用整个系统的权限,其职责聚焦于核心功能——机票预订。当管理员在航班信息管理区域选择进入机票预订管理界面时,系统将展示所有用户预订的机票信息概览。针对这些信息,管理员可执行一系列操作,诸如查阅订单具体细节、撤销订单,同时能做到还有向用户发送取票提醒。
管理员添加航班信息功能测试表如下表6.4所示。
表6.4 管理员添加航班信息功能测试表
| 测试用例 | 录入的数据 | 预期结果 | 实际结果 |
|---|---|---|---|
| 添加航班信息case7 | 航班信息:TL111 | 航班信息添加成功 | 航班信息添加成功并显示结果 |
| 添加航班信息case8 | 航班售价:1000 | 航班售价添加成功 | 航班售价添加成功并显示结果 |
| 添加航班信息case9 | 航班类型:不定期航班 | 航班类型添加成功 | 航班类型添加成功并显示结果 |
| 添加航班信息case10 | 航班图片 | 航班图片添加成功 | 航班图片添加成功并显示结果 |
测试用例执行,并且在此页面还能通过文本框还有获取设备的图片添加航班照片,输入其他详细信息等。测试结果如图6.5、图6.6所示。

图6.5 管理员端新增航班信息测试

图6.6 管理员端新增航班信息成功
6.2.3 用户端测试
用户进行机票预定操作测试结果如图6.7、图6.8所示。

图6.7 用户预定功能测试


(a)提交 (b)跳转
图6.8 用户预定机票成功
用户登录之后在我的中心能看见已预定的航班信息,在操作中有取票操作,点击取票则可以进行出票,出票后订单状态转为“已取票”。
测试图如图6.9、图6.10所示。

图6.9 用户取票测试

图6.10 用户取票成功
航班未出发,用户未取票的情况下可进行退票操作,仍是刚刚的页面,用户点击退票按钮,系统会提示是否确认退票,用户确认后订单状态显示“已退票”,并且将座位重新释放,票价退回用户余额。测试结果如图6.11、图6.12所示。

图6.11 用户退票测试

图6.12 用户退票成功
结 论
泰利航空票务预订系统设计了系统E-R图、数据流图;实现了页面UI即前端部分;实现了数据库的表创建、数据的增删改查、系统和数据库的连接即数据存储部分;实现了系统完整的功能流程,服务层和控制层即后端部分;完成了的系统的开发以及设计文档的撰写。
本泰利航空票务预订系统完成了基本的功能实现,包括(1)用户管理模块:用户可以通过注册账号并登录系统,系统会根据用户类型为旅客或是管理员登录不同的端口,进行各自相应的操作权限,确保系统功能的合理分块使用。作为航司工作人员登录可对系统所有用户信息进行管理,修改或删除相关个人信息。(2)航班查询模块:系统的核心功能之一,用户可以根据出发地、目的地、日期等条件快速查询航班信息,系统会实时展示航班号、起飞时间、到达时间、剩余座位及票价等详细信息,帮助用户做出最佳选择。(3)票务预订模块:允许用户在查询到合适的航班后,直接在线完成预订操作,系统会生成订单并支持多种支付方式,如支付宝、微信支付等,确保交易的安全与便捷。(4)订单管理模块:为用户提供了查看、修改、取消订单的功能,用户可以随时查看自己的订单状态,并在规定时间内进行取票或退票操作,系统会自动更新订单信息并通知用户。
最后,系统还提供了数据统计与分析功能,以及在线客服功能即论坛,帮助航空公司了解用户需求、优化航班安排,提升整体运营效率。
参考文献
王伟, 李强. 基于微服务架构的航空票务系统设计与实现[J]. 计算机应用研究, 2021, 38(5): 1456-1460.
叶植添,陈志刚.智慧城市背景下城市级互联网票务平台的研究及应用[J].大众科技,2024,26(05):5-9.
李明, 王芳. 基于云计算的航空票务系统设计与实现[J]. 计算机工程与应用, 2022, 58(3): 234-238.
张晶晶.航空票务管理网站开发与实现[J].现代信息科技,2022,6(20):26-30.DOI:10.19850/j.cnki.2096-4706.2022.20.007.
陈伟, 王磊. 基于大数据的航空票务系统优化设计[J]. 计算机科学, 2020, 47(6): 156-160.
王良升,刘小英.电影院订票系统的设计与实现[J].电脑编程技巧与维护,2021,(01):54-56.DOI:10.16184/j.cnki.comprg.2021.01.020.
陈刚, 李明. 航空票务系统中的数据安全与隐私保护[J]. 信息安全与通信保密, 2022, 44(3): 78-82
王磊, 刘洋. 基于人工智能的航空票务系统设计与实现[J]. 计算机应用研究, 2021, 38(6): 1234-1238.
陈盼.民航订票系统旅客信息动态脱敏方法研究[D].中国民航大学,2021.DOI:10.27627/d.cnki.gzmhy.2021.000497.
刘洋, 赵鹏. 航空票务系统中的支付安全问题研究[J]. 信息安全研究, 2021, 7(2): 123-127.
李娜, 张强. 航空票务系统中的用户体验设计研究[J]. 软件导刊, 2021, 20(3): 89-93.
肖佩隆.航空订票系统的性能要求与测试分析[J].数码世界,2020,(04):65.
Smith, J., & Johnson, L. (2021). Design and Implementation of a Microservices-Based Airline Ticketing System. Journal of Software Engineering, 15(2), 234-240.
Brown, A., & Davis, R. (2022). Security Challenges in Airline Ticketing Systems: A Comprehensive Review. International Journal of Information Security, 18(4), 45 62.
致 谢
时光清浅,如潺潺溪流淌过岁月的河床,如今项目已经过不懈努力圆满收官。回头看下这段为毕业设计全力以赴的旅程,往昔种种,就像点点星星般在记忆的天空不停闪烁,心中充满感慨。
谈到毕业设计,首先最希望就是对导师的感恩。导师就如一盏明灯,在我知识的荒原中照亮前行的方向,让我深知知识的沟壑可由后天的勤奋去填平。曾经,我在系统开发的漫漫长路前彷徨失措,满心怀疑自己能否独自跨越这艰难险阻。然而,导师温暖而有力的援手,如春风化雨,让我鼓起勇气挑战自我。在导师的悉心指导下,我竟能沿着开发流程的轨道,一步一个脚印,将系统从无到有地构建起来。这份蜕变与成长,宛如破茧成蝶的奇迹,让我心中满溢喜悦。导师,您的教诲如春日暖阳,温暖着我的心田,学生在此向您致以最诚挚的谢意!
还有我亲爱的同学们,你们是我校园生活中最温暖的陪伴。在系统开发的征程中,每当我遭遇难题,你们总是毫不犹豫地伸出援手,与我一同披荆斩棘。
我也要感恩那些曾经为我传道授业的老师们,你们是知识的播种者,是智慧的引路人。你们在校园的讲台上就像辛勤的园丁,用汗水和心血浇灌着一颗颗的幼苗。你们不仅教授给我丰富的知识,更教会我许多为人处世的道理,让我在成长的道路上少走了许多弯路。老师们,你们值得我用一生去尊敬和感激!
父母是我生命中最坚实的后盾。在我漫长的大学生涯中,你们默默的支持如巍峨的高山,让我有了无畏前行的勇气;你们无穷的理解如潺潺的溪流,津润着我疲顿的心灵。这四年的年华,如白驹过隙,你们的恩情却如陈酿的美酒,在岁月的沉淀中愈发醇厚。学生时代即将画上句号,但我对你们的感恩之情永远不会消逝。能成为你们的女儿,是我这辈子最大的荣幸。
大学校园,仿佛一座知识的殿堂,又似一片公园。这里的一草一木、一砖一瓦,都承载着我多数想象和感激。学校,是您给予我成长的舞台,让我在这里破茧成蝶,展翅高飞。愿您如一棵参天大树,在漫漫日子长河中枝繁叶茂,桃李满天下!
547



被折叠的 条评论
为什么被折叠?



