基于SpringMVC和MyBatis实现的铁路售票系统

铁路售票系统

致力于开发一个铁路售票系统,涵盖了绪论、需求分析、概要设计、数据库设计、详细设计、系统实现、测试报告、结论和参考文献等内容。旨在为用户提供便捷的车票订购和取票服务。通过该系统,用户可以在线完成车票订购,进行支付并打印车票。论文将详细介绍系统的需求分析过程,包括站点信息维护和车次信息维护;设计阶段将涵盖概要设计、数据库设计和详细设计;系统实现将使用Spring、SpringMVC和MyBatis等后端技术,以及JSP、jQuery和EasyUI等前端技术。在测试阶段,将编写测试报告以验证系统的功能和性能。最后,根据实现和测试结果,结论将总结系统的优点和不足,并提出改进建议。

关键词 铁路售票系统;站点信息维护;车次信息维护;网上订票;取票

目 录

第1章 绪论. 1

1.1 引言. 1

1.2 研究内容和方法. 1

1.2.1 研究内容. 1

1.2.2 研究方法. 2

1.3 本文结构. 2

第2章 需求分析. 4

2.1 需求获取方法和过程. 4

2.1.1 需求识别和收集. 4

2.1.2 需求分析和整理. 4

2.2 需求规格说明书. 4

2.2.1 功能需求. 4

2.2.2 性能需求. 7

2.2.3 安全需求. 8

2.3 需求验证和管理. 9

2.3.1 需求验证和确认. 9

2.3.2 需求管理和变更控制. 9

第3章 概要设计. 10

3.1 系统架构设计. 10

3.1.1整体架构设计. 10

3.1.2 模块划分与功能关系. 10

3.2 数据流程设计. 11

3.2.1 用户交互流程设计. 11

3.2.2 数据传递流程设计. 12

3.3 用户界面设计. 13

3.3.1 登录界面设计. 13

3.3.2 车票查询与预订界面设计. 14

3.3.3 订单管理界面设计. 15

第4章 数据库设计. 16

4.1 数据库设计. 16

4.2 概念设计. 17

4.3 逻辑设计. 19

第5章 详细设计. 22

5.1 系统主页. 22

5.2 管理员页面设计. 23

5.3 用户功能界面设计. 25

5.4 数据存储方案. 27

第6章 系统实现. 28

6.1 开发工具与技术栈. 28

6.1.1 开发环境配置. 28

6.1.2 技术栈选择与理由. 29

6.2 前端实现与用户界面设计. 29

6.2.1 前端框架选择与配置. 29

6.2.2 用户界面设计与交互流程. 30

6.3 后端实现与数据库设计. 31

6.3.1 服务器端架构设计. 31

6.3.2 数据库设计与连接池配置. 31

6.3.3 后端业务逻辑实现与接口设计. 32

6.4 Docker容器部署. 32

6.4.1 环境准备. 32

6.4.2 Tomcat容器. 32

6.4.3 MySQL容器. 33

6.4.4 本地数据库连接云端数据库. 33

6.4.5 公网访问. 34

第7章 测试报告. 35

7.1 测试目的和范围. 35

7.1.1 测试目的. 35

7.1.2测试范围. 35

7.2 测试环境和工具. 35

7.2.1 测试环境. 35

7.2.2 测试工具. 36

7.3 测试方法和执行结果. 36

7.3.1 功能测试. 36

7.3.2 兼容性测试. 49

7.3.3 弱网测试. 50

7.3.4 前端性能测试. 52

7.4 测试结果和分析. 52

7.5 测试结论和建议. 53

结 论. 54

参 考 文 献. 56

第1章 绪论

1.1 引言

火车站作为客运交通的重要枢纽,面临着管理和规范等方面的诸多挑战。其中,订票作为客运业务的基础环节,不仅涉及到管理效率的提升,还直接关系到客户服务的质量。然而,传统的售票方式已经无法满足现代客运业务流量急剧增长的需求,迫切需要一种全新的订票方式来应对客运高峰时期的压力,并为用户提供方便快捷的订票服务。

为解决这一问题,本论文旨在开发一个铁路售票系统,利用开发工具IDEA和MySQL5.7数据库进行开发。该系统将通过引入网上订票的方式,为火车站订票业务带来便捷和高效的解决方案。通过该系统,用户可以通过网络平台完成订票,不再受限于传统的排队购票方式,从而减少排队时间,缓解客运高峰时期的压力。

1.2 研究内容和方法

1.2.1 研究内容

本论文的研究内容是铁路售票系统的设计与实现,旨在解决火车站市场管理和规范问题。铁路售票系统是一个复杂的信息系统,涉及站点信息维护、车次信息维护、座位信息维护、网上订票、取票等功能。

论文将深入探讨如何设计和实现铁路售票系统的各项功能,并重点关注以下方面:

站点信息维护:设计一个可靠的系统模块,用于管理和维护火车站的站点信息,包括始发站和终点站名称、发车时间、距离等。

车次信息维护:开发功能强大的模块,用于管理和维护火车车次的相关信息,包括车次编号、列车名、列车类型、座位数量、每公里价格等。

网上订票:实现一个用户友好的网上订票功能,使普通网民能够方便快捷地订购火车票,包括查询车次、选择座位、提交订单等步骤。

支付: 在系统中设置余额显示功能,每次交易都会产生余额变动,余额不足会提醒用户进行充值,余额足够则正常支付扣款。

1.2.2 研究方法

为了实现铁路售票系统,本论文采用以下方法:

技术栈选择:使用Spring、SpringMVC和MyBatis作为后端开发框架,利用JSP、jQuery和EasyUI作为前端开发工具,以实现系统的各项功能。

开发工具:使用JDK 1.8配合IDEA作为开发工具,以及MySQL 5.7作为数据库管理系统,为系统的设计和实现提供支持。

通过以上方法,编写系统的后端代码和前端界面,并进行测试和优化,以确保铁路售票系统的正常运行和用户体验。同时,对系统的安全性和稳定性进行考虑,保护用户的个人信息和支付安全。

1.3 本文结构

第一章:绪论

介绍铁路售票系统的研究背景和意义。首先讨论现代交通管理中铁路售票系统的重要性和应用价值,并分析传统售票方式存在的问题和局限性。接下来,明确论文的研究目的和范围,定义铁路售票系统的设计目标和研究范围。最后,简要介绍本文的主要内容和结构安排。

第二章:需求分析

详细描述铁路售票系统的功能需求、性能需求和安全需求。具体列举用户注册与登录、车票查询与预订、订单管理、支付与退款等功能需求,并确立系统对响应时间、并发处理能力、用户数据保护和交易安全性的要求。此外,编写需求规格说明书,对系统需求进行准确明确的定义和规范。

第三章:概要设计

设计铁路售票系统的整体架构和模块划分。绘制数据流程图,清楚描述各个功能模块之间的数据流动和交互关系。此外,展示系统用户界面的设计和布局,以及系统与其他模块或系统之间的接口设计。

第四章:数据库设计

介绍铁路售票系统的数据库设计过程。使用E-R图描述系统的概念模型,明确系统的实体、属性和关系。然后,将概念模型转换为逻辑模型,确定关系模式和表结构。最后,实现逻辑模型为物理模型,进行数据库表的创建和测试。

第五章:详细设计

详细描述铁路售票系统的功能模块设计和数据库模块设计。逐一讨论各个功能模块的设计思路和功能实现,确保系统的功能完备和性能优良。同时,详细讨论数据库模块的设计,包括表结构设计和数据存储方案。

第六章:系统实现

介绍铁路售票系统的实际实现过程。详细讨论系统的开发工具和技术栈。

第七章:测试报告

在测试报告章节中,我们将详细记录铁路售票系统的测试过程和结果。我们将介绍测试方法和测试用例的设计,执行各项测试并记录测试结果。最后,我们将对测试结果进行分析和总结,评估系统的性能和可靠性。

第2章 需求分析

2.1 需求获取方法和过程

本系统的需求获取方法和过程按照以下步骤进行。

2.1.1 需求识别和收集

与铁路客运部门、售票员和乘客的访谈,调研现有的铁路售票系统及相关案例。

分析相关的业务文档和规范,评估现有的铁路售票系统的优缺点。

2.1.2 需求分析和整理

客户端功能需求:用户注册、登录、车次查询、订票、退票等;

服务器端功能需求:票务管理、订单处理等;

分析性能需求:响应时间、并发用户数、系统容量;

确定安全需求:用户身份验证、数据加密、审计日志。

2.2 需求规格说明书

2.2.1 功能需求

铁路售票系统是一个旨在提供方便、高效、安全的售票服务的系统。该系统旨在满足铁路客运业务的需求,为用户提供便捷的车次查询、订票、退票等功能,并为铁路管理部门提供有效的票务管理功能。

整个系统间的各子模块的结构图如下所示:

img

图2-1 系统子模块图

以下是铁路售票系统的主要功能描述:

用户管理功能

1.1 用户注册:用户可以注册个人账户,包括用户名、密码和个人信息;

1.2 用户登录:注册用户可以使用用户名和密码登录系统。在浏览器上输入http://localhost:8080/ssm_train_ticket_sale/,进入登录功能模块,选择登录身份区别是普通用户或是系统管理员;

1.3 用户信息管理:用户可以修改个人信息,如联系方式。

车次查询与订票功能

2.1 车次查询:用户可以根据始发站、终点站、发车时间等条件查询可用的车次信息;

2.2 座位选择:用户可以选择座位类型和位置进行订票;

2.3 订票确认:用户确认选择的车次和座位后,系统生成订单并进行支付;

2.4 电子票生成:系统生成电子车票,用户可进行打印。

退票功能

3.1 退票申请:用户可以提交退票申请,提供订单信息和退票原因;

3.2 退票审核:系统对退票申请进行审核,并根据退票规则进行处理;

3.3 退款处理:系统根据审核结果进行退款处理,并向用户发送退款通知。

票务管理功能

4.1 订单管理:系统对订单进行管理,包括订单查询、修改和取消;

4.2 座位管理:系统对座位信息进行管理,包括座位状态和座位调整;

4.3 车次管理:系统对车次的添加、车次更新、删除。

系统管理功能

5.1 权限管理:系统根据用户角色划分权限,限制对系统功能的访问;

5.2 数据备份与恢复:系统进行定期数据备份,并支持数据恢复操作;

5.3 日志记录:系统记录用户操作日志,包括登录、订票、退票等操作。

2.2.2 性能需求

响应时间:

系统应具备快速响应用户请求的能力,对于常见的操作(如车次查询、订票、退票等),系统应在数秒内给出响应。

在高峰期和繁忙时段,系统仍应保持较低的响应时间,以确保用户能够快速完成操作。

并发性能:

系统应具备处理大量并发用户的能力,能够同时处理多个用户的查询、订票和退票请求。

在高峰期,系统应能够有效分配资源,确保用户的请求能够及时响应,避免因并发访问而导致系统崩溃或响应变慢。

可扩展性:

系统应具备良好的可扩展性,能够根据需求进行水平或垂直扩展,以应对用户数量和数据规模的增长。

系统的架构应设计合理,允许在需要时添加更多的服务器或增加系统资源,以提高系统的整体性能和容量。

数据处理能力:

系统应具备高效的数据处理能力,能够快速查询和处理大量的车次、座位、订单等数据。

数据库设计应优化查询性能,采用合适的索引和数据结构,以提高数据访问速度和查询效率。

可靠性:

系统应具备高可靠性,能够保证用户数据的安全性和完整性,防止数据丢失或损坏。

系统应具备容错和错误处理机制,能够及时检测和纠正错误,避免系统故障导致的数据丢失或服务中断。

安全性:

系统应具备严格的安全控制机制,确保用户的个人信息和支付信息得到保护。

用户密码应以安全的方式进行存储和传输,采用加密算法确保数据的机密性。

系统应防止未经授权的访问和恶意攻击,采用安全协议和防火墙等技术手段加强系统的安全性。

2.2.3 安全需求

认证和授权:

系统应提供用户认证机制,确保只有经过身份验证的用户才能访问敏感数据和执行关键操作。

系统应具备授权机制,按照用户的权限级别控制其对系统功能和数据的访问权限。

数据保密性:

系统应采用加密算法,对用户的个人信息、支付信息以及其他敏感数据进行加密存储和传输,确保数据在存储和传输过程中的机密性。

系统应采取措施防止未经授权的访问和数据泄露,包括对数据库的访问控制、网络安全措施等。

审计和日志记录:

系统应具备审计和日志记录功能,记录用户的操作日志、系统事件和异常情况,以便进行安全审计和故障排查。

日志记录应包括用户的登录信息、操作时间、操作内容等关键信息,保留一定时间的日志记录。

异常处理和恢复:

系统应具备异常处理和恢复机制,能够检测和处理系统运行过程中的异常情况,避免安全漏洞被利用或系统被攻击。

在出现安全事件或系统故障时,系统应能够及时做出反应,并采取必要的措施进行修复和恢复。

网络安全:

系统采用安全协议和加密技术,确保网络传输过程中数据机密性和完整性。

系统应防止网络攻击,包括拒绝服务攻击、跨站脚本攻击等,通过合理的网络安全策略和防火墙等措施保护系统的安全性。

安全更新和维护:

系统应具备安全更新和维护机制,及时修复系统中发现的安全漏洞和缺陷,保持系统的安全性和稳定性。

系统的安全更新和维护过程应受到严格的控制,确保更新的安全性和完整性,避免因更新过程引入新的安全风险。

2.3 需求验证和管理

2.3.1 需求验证和确认

创建原型或演示系统,以便与相关方进行交互,确保系统的功能和界面符合他们的期望。

安排评审会议,与相关方共同审查和确认需求规格说明书,确保准确地捕捉到他们的需求。

进行用户验收测试,邀请相关方测试系统的功能并提供反馈。

2.3.2 需求管理和变更控制

建立一个需求管理机制,使用需求跟踪工具来记录和跟踪需求的状态和变更。

定期与相关方进行沟通和反馈,以便及时处理需求变更和调整。

进行影响分析,评估需求变更对项目进度、成本和质量的影响,做出决策。

第3章 概要设计

3.1 系统架构设计

3.1.1整体架构设计

前端界面:提供用户界面,包括票务查询、购票、订单管理等功能,与用户进行交互。

后端服务:处理用户请求,包括票务信息管理、订单处理、支付接口等功能与数据库进行交互。

数据库:存储票务信息、用户信息、订单信息等核心数据,提供数据的持久化存储和查询功能。

安全模块:负责用户认证、数据加密、权限管理等安全相关功能,确保系统的安全性和可靠性。

3.1.2 模块划分与功能关系

模块划分:

用户界面模块:负责与用户进行交互,提供友好的界面和操作体验。与后端服务模块进行通信,发送用户请求并接收响应。

后端服务模块:处理用户请求,包括票务查询、购票、订单管理等功能。与数据库模块进行交互,读取和更新数据。

数据库模块:存储系统的核心数据,包括票务信息、用户信息、订单信息等。提供数据的持久化存储和查询功能,为后端服务模块提供数据支持。

安全模块:负责用户认证、数据加密、权限管理等安全相关功能。确保用户信息和交易数据的安全性,与用户界面模块和后端服务模块进行交互。

模块之间的功能关系如下:

用户界面模块通过用户界面与用户进行交互,接收用户输入的请求并将其发送给后端服务模块;

后端服务模块接收到用户请求后,根据请求类型调用相应的功能模块进行处理,如票务查询、购票、订单管理等;

后端服务模块与数据库模块进行交互,读取和更新数据库中的数据,确保数据的一致性和完整性;

安全模块负责用户认证、数据加密和权限管理等安全相关功能,确保系统的安全性和可靠性。

3.2 数据流程设计

3.2.1 用户交互流程设计

用户登录:用户通过界面输入用户名和密码进行登录。

img

图3-1 登录数据流图

查询车票:用户输入出发站点、到达站点和日期进行车票查询

img

图3-2 查询管理数据流图

购票:用户选择车次和座位,填写乘客信息并进行支付。

订单管理:用户可以查看、取消和修改已购买的订单。

业务流程图:展示铁路售票系统的整体业务流程,包括用户与系统的交互和各个功能模块的执行顺序。

img

图3-3 业务流程图

3.2.2 数据传递流程设计

数据传递流程设计包括各个功能模块之间的数据传递和处理流程。

包括用户界面模块、后端服务模块、数据库模块和安全模块之间的数据传递流程。

车次、车票和站点数据在系统各个模块之间的传递和处理:

img

图3-4 车次、车票、站点管理数据流图

3.3 用户界面设计

3.3.1 登录界面设计

登录界面应具有以下元素:

用户名输入框

密码输入框

登录按钮

忘记密码链接

注册链接

用户可以在用户名输入框中输入他们的用户名,密码输入框中输入对应的密码,并通过点击登录按钮进行身份验证和登录操作;

如果用户忘记密码,可以点击"忘记密码"链接,进行密码重置操作;

如果用户还没有注册账号,可以点击"注册"链接,系统将导航用户到注册界面,以完成新账号的注册流程。

img

img

图3-5 用户登录与密码重置

img

图3-6 新用户注册

3.3.2 车票查询与预订界面设计

车票查询与预定界面应具有以下元素:

始发站输入框

终点站输入框

发车时间选择器

到达时间选择器

搜索按钮

车票列表

预定按钮

用户可以在始发站输入框和终点站输入框中输入相应的城市或车站名称,选择发车日期,并通过点击查询按钮来获取符合条件的车票列表;

车票列表应显示可用车票的相关信息,如车次、出发时间、到达时间和票价等;

用户可以选择某个车票,并通过点击预定按钮来预订选定的车票。

img

图3-7 售票大厅

3.3.3 订单管理界面设计

订单管理界面应具有以下元素:

订单列表

订单详情

取消订单按钮

订单列表应显示用户已预订的所有订单的摘要信息,如订单号、车次、出发时间和状态等;

用户可以选择某个订单,并在订单详情中查看更详细的订单信息,如乘客姓名、座位信息和付款状态等。

用户可以通过点击取消订单按钮来取消选定的订单。

img

图3-8 我的订单

第4章 数据库设计

4.1 数据库设计

数据库是指自描述的完整记录的集合。它除了包含用户的源数据外,还包含关于它本身结构的描述。

数据库设计是建立数据库及其应用系统的技术,是信息系统开发和建设中的核心技术,具体说,数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致。另外,合理的数据库结构将非常有利于程序的实现。数据库设计(Database Design)是指根据用户的需求,在某一具体的数据库管理系统上,设计数据库的结构和建立数据库的过程,就是规划和结构化数据库中的数据对象以及这些数据对象之间关系的过程。

1、数据库设计的一般性原则

第一个基本规则:对于每一个要存储其信息的实体(或事物),我们都应该给他一个自己的表;

第二个处理规则:如果你需要在一个列中存储多个值,那证明你的设计可能是有缺陷的。

简单的数据关系:一对一;一对多;多对一;多对多

在数据库的设计中:要做到数据规范化、完整性、数据冗于和规范实例化。

在整个设计过程中,必须按步骤认真完成。

2、数据库设计的过程(六个阶段)

需求分析阶段,准确了解与分析用户需求(包括数据与处理)是整个设计过程的基础,是最困难、最耗费时间的一步。

概念结构设计阶段是整个数据库设计的关键,通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。

逻辑结构设计阶段将概念结构转换为某个DBMS所支持的数据模型对其进行优化。

数据库物理设计阶段为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。

数据库实施阶段运用DBMS提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。

数据库运行和维护阶段数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行评价、调整与修改。

在设计过程中把数据库的设计和对数据库中数据处理的设计紧密结合起来将这两个方面的需求分析、抽象、设计、实现在各个阶段同时进行,相互参照,相互补充,以完善两方面的设计。

数据库的设计在数据库应用系统的开发中占有很重要的地位。只有设计出合理的数据库,才能为建立在数据库上的应用提供方便。

4.2 概念设计

概念设计阶段,一般是使用语义数据模型描述概念模型,目的是使即使是非专业人员也可以看的懂。通常是使用E-R模型图作为概念设计的描述工具进行设计。

概念结构设计的第一步就是对需求分析阶段收集到的数据进行分类、组织(聚集),形成实体、实体的属性,标识实体的码,确定实体之间的联系类型(1:1,1:N,M:N),设计分E-R图。

在经过仔细调查12306网站的售票过程和对内容的详细分析基础上,对本系统的需求,设计了数据库的E-R图,部分如下:

(1)用户E-R图

img

图4-1 用户E-R图

(2)售票信息E-R图

img

图4-2 售票信息E-R图

(3)订票信息E-R图

img

图4-3 订票信息E-R图

(4)列车信息E-R图

img

图4-4 车次信息E-R图

4.3 逻辑设计

逻辑结构设计的主要任务是,把由概念结构设计阶段得出的E-R图转换为相应的逻辑结构。数据库逻辑设计包括所需的实体和关系,实体规范化等工作。数据库逻辑设计决定了数据库及其应用的整体性能,调优位置。如果数据库逻辑设计不好,则所有调优方法对于提高数据库性能的效果都是有限的。为了使数据库设计的方法走向完备,数据库的规范化理论必须遵守。规范化理论为数据库逻辑设计提供了理论指导和工具,在减少了数据冗余的同时节约了存储空间,同时加快了增、删、改的速度。

在规范的数据库逻辑设计时,还应考虑适当地破坏规范规则,即反规范化设计,来降低索引、表的数目,降低连接操作的数目,从而加快查询速度。常用的反规范技术有增加冗余列、增加派生列、重新组表等。 总之,在进行数据库逻辑设计时,一定要结合应用环境和现实世界的具体情况合理地选择数据库模式。

用户信息表,订票信息表,售票信息表,列车信息表,座位信息表分别如下面的5个表所示。

表4-1 用户信息表

列名数据类型长度是否主键是否可空
用户名Int5Not null
密码Varchar45null
姓名Varchar45null
身份证号Varchar18null
邮箱Varchar45null
手机号Varchar45null
账户余额Double11null
权限TinyInt1null
登录时间DateTime20null

表4-2订票信息表

列 名数据类型长 度是否主键是否可空
订单idVarchar45Not null
订票人用户名Varchar45null
订票人姓名Varchar45null
下单时间Datetime20null
发车时间Datetime20null
预计到达时间Datetime20null
始发站Varchar11null
终点站Varchar11null
列车名Varchar45null
订单状态Varchar45null
座位类型Varchar45null
座位号Varchar45null

表4-3 售票信息表

字段名数据类型长 度是否主键是否可空
车票IDInt11Not null
车次Varchar45null
始发站Varchar45null
终点站Varchar45null
票价Int11null
发车时间DateTime20null
预计到达时间DateTime20null
历时Varchar45null
列车类型Varchar45null
票数Int10null

表4-4 列车信息表

字段名数据类型长 度是否主键是否可空
列车名Varchar45Not null
始发站Varchar45Not null
票价Double11Not null
票数Int11Not null

表4-5座位信息表

列 名数据类型长 度是否主键是否可空
座位IDInt11Not null
所属列车Varchar45null
座位类型Varchar45null
车厢Varchar45null
座位号Varchar45null
状态Varchar45null

第5章 详细设计

5.1 系统主页

通过登录站点登录访问系统主页面,输入用户或管理员的信息实现用户的登录和用户身份的识别,并区别用户的权限实现不通的操作。

系统主页是用户访问铁路售票系统的入口,应该提供清晰的导航和主要功能入口。设计要点如下:

导航栏:包含系统的Logo和主要功能链接,如车票查询、订单管理等。

img

图5-1 导航栏

img

图5-2 导航栏

车票查询模块:提供车票查询表单,包括始发站、终点站、发车时间等条件输入框和搜索按钮。

img

图5-3 车票查询模块

用户登录/注册入口:在页面中提供用户登录和注册的链接,方便用户进行身份验证和账号注册。

img

图5-4 用户登录/注册入口

5.2 管理员页面设计

选择管理员登录并通过系统验证之后,会显示管理员管理界面。通过次界面可完成列车管理、始终站管理、座位管理和车票管理。

管理员页面是用于管理订单、座位和车次等信息的界面。设计要点如下:

管理导航栏:包含管理员功能的链接,如订单管理、座位管理、车次管理等。

img

图5-5 导航栏管理(用户管理)

img

图5-6 导航栏管理(系统管理)

img

图5-7 导航栏管理(票务管理)

订单管理模块:提供订单查询、修改和取消功能,显示订单列表和订单详细信息。

img

图5-8 订单管理

座位管理模块:提供座位状态查询、座位调整和座位信息更新功能。

img

图5-9 座位管理

车次管理模块:提供车次信息的添加、更新和删除功能,包括车次号、出发时间、座位数等。

img

图5-10 车次管理

5.3 用户功能界面设计

通过选择用户登录输入用户的帐号和密码,验证通过后显示用户功能界面,若是第一次登录本系统可进行个人信息的注册。

用户功能界面是用户进行车票查询、订票、订单管理等操作的界面。设计要点如下:

用户导航栏:包含用户相关功能的链接,如个人信息管理、订单查询等。

img

img

图5-12 用户导航栏(票务中心)

车票查询模块:提供车票查询表单,包括始发站、终点站、发车时间等条件输入框和搜索按钮。

img

图5-13 车票查询

车票列表模块:显示符合条件的车票列表,包括车次、出发时间、到达时间和票价等信息。

img

图5-14 车票列表

订票确认模块:显示选定车票的详细信息和座位选择,用户确认后生成订单并进行支付。

img

图5-15 订票确认

订单管理模块:显示用户已预订的订单列表和订单详细信息,提供订单取消功能。

img

图5-16 订单管理(我的订单)

img

图5-17 订单管理(订单详细)

5.4 数据存储方案

在数据存储方面,选择使用关系型数据库(MySQL)

1、表的创建:

使用SQL语句创建上述表结构,并设置主键、外键等约束,以确保数据的完整性和一致性。

2、数据的存储和检索:

根据系统需求,使用数据库的增删改查操作来实现数据的存储和检索。

用户注册时,将用户信息插入到用户信息表(User)中;当用户进行车次查询时,通过查询相关表(如售票信息表和列车信息表)来获取符合条件的车次信息;当用户进行订票操作时,插入订票信息到订单信息表(Order)中,并更新座位信息表(Seat)的座位状态;当用户需要管理订单时,通过查询订单信息表(Order)来获取用户的订单列表。

第6章 系统实现

6.1 开发工具与技术栈

技术栈:

后端:Spring、SpringMVC、MyBatis

前端:JSP、jQuery、EasyUI

开发工具:

JDK1.8 + IDEA + MySQL5.7

6.1.1 开发环境配置

安装JDK1.8:下载并安装Java Development Kit (JDK) 1.8版本,确保您的开发环境中具有Java编译和运行的能力。

安装开发工具:选择合适的集成开发环境(IDE),例如IntelliJ IDEA或Eclipse。安装并配置您选择的开发工具,以便进行项目的开发和管理。

安装MySQL数据库:下载并安装MySQL数据库,建议使用版本5.7。设置数据库的用户名和密码,并确保数据库服务正在运行。

搭建SSM框架:创建一个基于SSM(Spring、SpringMVC、MyBatis)框架的项目。可以使用Maven构建工具来创建项目结构和管理依赖项。

配置项目依赖:在项目配置文件中(如pom.xml),添加相关的依赖项,包括Spring、SpringMVC、MyBatis等框架和数据库驱动。

配置数据库连接:在项目的配置文件中,设置数据库连接的相关信息,包括数据库的URL、用户名和密码,以及数据库连接池的配置。

编写JSP网页:使用JSP技术编写前端网页,包括登录界面、车票查询与预订界面、订单管理界面等。可以使用HTML、CSS和JavaScript等技术增强用户界面的交互性和美观性。

实现后端逻辑:使用SpringMVC框架编写控制器(Controller)来处理用户请求,调用相应的服务层(Service)处理业务逻辑,最终与数据库交互通过MyBatis实现数据的持久化。

部署和调试:将项目部署到Web服务器中(例如Tomcat),启动服务器并进行调试,确保系统能够正常运行。

6.1.2 技术栈选择与理由

Spring框架:Spring框架是一个轻量级的开发框架,提供了丰富的功能和模块,如依赖注入、AOP、事务管理等。选择Spring框架的主要理由是它的松耦合特性和便于测试的设计,能够提高代码的可维护性和可测试性。

SpringMVC框架:SpringMVC是基于MVC设计模式的Web框架,它提供了强大的处理请求和响应的功能。选择SpringMVC的原因是它的灵活性和可扩展性,可以方便地处理用户请求并将数据传递给视图层。

MyBatis框架:MyBatis是一个优秀的持久层框架,它提供了强大的数据库访问能力和灵活的SQL映射配置。选择MyBatis的理由是它的高性能、易于集成和可读性强的SQL映射配置文件,使开发人员能够更好地管理和优化数据库访问。

JSP和jQuery:JSP作为前端视图层技术,可以与后端Java代码无缝集成,便于动态生成HTML内容。选择JSP的原因是它的易用性和熟悉度,使开发人员能够快速构建动态网页。同时,jQuery作为一个流行的JavaScript库,提供了丰富的特性和插件,简化了前端开发的复杂性和跨浏览器兼容性问题。

EasyUI:EasyUI是一款基于jQuery的UI库,提供了丰富的界面组件和易于使用的API。选择EasyUI的主要原因是它的简单性和美观性,使开发人员能够快速构建用户友好的界面。

综上所述,选择Spring、SpringMVC、MyBatis作为后端框架,以及JSP、jQuery和EasyUI作为前端技术栈,是为了兼顾开发效率、代码可维护性和用户友好性。这些技术在Java开发领域具有广泛的应用和成熟的生态系统,可以提供稳定、高效且易于维护的铁路售票系统。

6.2 前端实现与用户界面设计

6.2.1 前端框架选择与配置

在铁路售票系统的开发中,选择合适的前端框架可以提高开发效率、增强用户体验,并简化界面设计和交互流程的实现。基于SSM框架的铁路售票系统,可以考虑使用以下前端框架和工具:

JSP(JavaServer Pages):作为Java的服务器端视图技术,JSP可以与后端代码无缝集成,方便动态生成HTML内容。通过JSP,开发者可以将Java代码嵌入到HTML页面中,实现动态数据的展示和交互操作。

jQuery:jQuery是一个流行的JavaScript库,提供了丰富的特性和插件,简化了前端开发的复杂性和跨浏览器兼容性问题。它提供了强大的DOM操作、事件处理、Ajax请求等功能,可以简化前端交互的实现。

EasyUI:EasyUI是一个基于jQuery的UI库,提供了各种界面组件和易于使用的API,能够快速构建用户友好的界面。通过使用EasyUI,开发者可以轻松实现表格、表单、对话框等常见的界面元素,提升用户体验。

配置这些前端框架时,需要将相应的资源文件(如CSS、JavaScript文件)引入到项目中,并按需配置和调用相应的组件和功能。

6.2.2 用户界面设计与交互流程

用户界面设计是铁路售票系统开发中的重要环节,合理的界面设计和良好的交互流程能够提升用户体验并简化操作。以下是一些设计原则和建议

界面布局:设计简洁明了的布局,使用户能够清晰地理解和操作界面。考虑使用网格布局或栅格系统来实现页面的整齐排列,并合理安放不同功能模块和操作按钮。

导航和菜单:提供清晰的导航栏和菜单,使用户能够快速切换和访问不同的功能模块。考虑使用导航栏、侧边栏或下拉菜单等形式,提供直观的导航和访问路径。

表单和输入验证:对于需要用户输入的内容,设计合适的表单元素,并实施输入验证,确保数据的准确性和完整性。使用合适的错误提示和验证规则,帮助用户正确填写表单信息。

反馈和提示:及时提供操作反馈和提示信息,让用户了解操作结果和状态。使用合适的提示框、加载动画或弹出窗口等方式,向用户展示信息,并确保信息的清晰易懂。

交互流程:设计直观且易于理解的交互流程,使用户能够顺利完成操作。考虑使用流程图或状态转换图等方式,明确展示不同功能模块之间的关系和操作流程。

在设计用户界面和交互流程时,要充分考虑用户的需求和使用习惯,尽量简化操作步骤,提供直观的视觉反馈,以提升用户的满意度和系统的易用性。

6.3 后端实现与数据库设计

6.3.1 服务器端架构设计

服务器端架构设计主要涉及整体的软件架构和模块划分,以实现系统的稳定性、扩展性和性能优化。在基于SSM框架的铁路售票系统中,可以采用以下架构设计:

MVC架构:使用Spring MVC作为控制器层,实现请求的路由和处理。

业务逻辑层:使用Spring框架作为业务逻辑层的容器,处理具体的业务逻辑和服务调用。

数据访问层:使用MyBatis作为数据访问层的ORM框架,通过Mapper接口与数据库进行交互。

数据库连接池:配置数据库连接池,如使用开源的Druid连接池,以提高数据库连接的效率和性能。

6.3.2 数据库设计与连接池配置

在铁路售票系统中,数据库设计是基于系统需求的重要一环。根据提供的信息,可以考虑以下表的设计:

用户表(User):存储用户的注册信息和个人信息。

车票表(Ticket):存储车次和座位的信息。

订单表(Order):存储用户的订单信息。

座位表(Seat):存储座位的状态和位置信息。

列车表(Train):存储车次的信息。

站点表(Station):存储站点的信息。

针对以上数据库表的设计,可以使用MySQL作为数据库管理系统,通过navicat15等工具进行数据库建表和数据维护。同时,需要进行数据库连接池的配置,例如使用Druid连接池。连接池的配置包括连接池大小、最大连接数、连接超时等参数的设置,以满足系统的并发访问和高性能要求。

6.3.3 后端业务逻辑实现与接口设计

后端业务逻辑实现和接口设计是系统功能的核心部分。根据系统功能需求,可以分析每个功能模块的具体业务逻辑和接口设计,例如:

用户管理功能:实现用户注册、登录、个人信息修改等接口。

车次查询与订票功能:实现车次查询、座位选择、订票确认等接口。

退票功能:实现退票申请、退票审核、退款处理等接口。

票务管理功能:实现订单管理、座位管理、车次管理等接口。

在实现这些功能时,可以遵循面向对象的设计原则,将不同功能模块封装为相应的服务类,实现业务逻辑的复用和模块间的解耦。同时,需要定义清晰的接口规范,包括请求参数的定义、响应数据的格式和错误处理机制,以便前端和其他系统能够准确调用和使用这些接口。

6.4 Docker容器部署

基于SSM实现的云端购票系统采用Docker容器进行部署,经分析,需要部署两个容器(Tomcat容器、MySQL容器),由于只需两个容器,故选择直接拉取镜像,创建容器,而非选择使用docker compose进行编排。

6.4.1 环境准备

服务器:腾讯云服务器(IP:58.87.71.4)

Docker容器

MySQL镜像

Tomcat镜像

6.4.2 Tomcat容器

使用以下命令拉取tomcat9.0.43镜像

docker pull tomcat:9.0.43

使用以下命令创建tomcat容器(容器名:mytomcat9,端口映射:容器8080映射服务器8080)

docker run -d -p 8080:8080 --name mytomcat9 tomcat:9.0.43

6.4.3 MySQL容器

使用以下命令拉取MySQL8.0.22镜像

docker pull mysql:8.0.22

使用以下命令创建MySQL容器(容器名mysql,端口映射:容器3306映射服务器3307,设置MySQL密码12345678)

挂载数据卷:/root/mysql/log:/var/log/mysql;/root/mysql/data:/var/lib/mysql;/root/mysql/conf:/etc/mysql/conf.d

docker run -d -p 3307:3306 --privileged=true -v /root/mysql/log:/var/log/mysql -v /root/mysql/data:/var/lib/mysql -v /root/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=12345678 --name mysql mysql:8.0.22

下附容器运行情况:

img

图6-1 容器运行情况

6.4.4 本地数据库连接云端数据库

Navicat连接云端数据库:

连接名:&&&&

IP:&&&&

端口:3307

密码:

img

图6-2 Navicat连接图

img

图6-3 云端数据库

6.4.5 公网访问

IP+端口+项目名:登录

第7章 测试报告

7.1 测试目的和范围

7.1.1 测试目的

⑴ 测试在线高铁售票系统的功能是否符合需求分析环节产生的需求,是否能够正常运行,是否存在缺陷或错误。

⑵ 测试在线高铁售票系统的性能是否满足用户的期望,是否能够承受高并发的访问压力,是否具有良好的响应速度和稳定性。

⑶ 测试在线高铁售票系统的安全性是否能够保护用户的隐私和数据,是否能够防止恶意攻击和篡改,是否具有合理的权限控制和异常处理机制。

7.1.2测试范围

⑴ 测试对象为在线高铁售票系统,包括前台用户模块和后台管理员模块。

⑵ 测试内容包括功能测试、性能测试、安全测试、兼容性测试、易用性测试等。

⑶ 使用Fiddler进行弱网测试,前端性能测试

⑷ 测试方法为黑盒测试和白盒测试相结合,采用等价类划分、边界值分析、场景分析等技术设计测试用例,在时间充足的情况下使用JUnit框架执行单元测试,使用Selenium框架执行自动化测试等(若时间紧张则采取冒烟测试)。

7.2 测试环境和工具

7.2.1 测试环境

⑴ 测试环境为基于centos7的腾讯云轻量应用服务器,Java 8开发语言,MySQL 8数据库,Tomcat 9服务器,Docker容器。

⑵ 测试环境需要保证网络通畅,数据库连接正常,服务器运行稳定,浏览器兼容性良好。

⑶ 测试环境需要与开发环境和生产环境保持一致,避免因环境差异导致的测试结果不准确。

7.2.2 测试工具

⑴ 测试工具包括Selenium框架、JMeter压力测试工具、Chrome浏览器,Firefox浏览器,Edge浏览器等,Fiddler抓包工具。

⑵ Selenium框架用于执行自动化测试,模拟用户的操作行为和界面交互。

⑶ JMeter压力测试工具用于执行性能测试,模拟高并发的访问压力和响应速度。

⑷ Chrome浏览器,Firefox浏览器,Edge浏览器用于展示和检查系统的前端页面和功能并测试系统兼容性。

7.3 测试方法和执行结果

7.3.1 功能测试

7.3.1.1 测试用例

⑴ 登录注册模块

img

图7-1 登录用例图

img

图7-2 注册用例图

img

图7-3注册用例图

img

图7-4注册用例图

img

图7-5 注册用例图

⑵ 管理员公告管理功能

img

图7-6 管理员公告管理用例图

⑶ 管理员始终站管理功能

img

图7-7 管理员始终站管理用例图

img

图7-8 管理员始终站管理用例图

⑷ 管理员列车管理功能

img

图7-9 管理员列车管理用例图

⑸ 管理员座位管理功能

img

图7-10 管理员座位管理用例图

⑹ 管理员票务管理功能

img

图7-11 管理员票务管理用例图

img

图7-12 管理员票务管理用例图

⑺ 普通用户个人信息修改功能

img

图7-13 普通用户个人信息修改用例图

⑻ 普通用户售票大厅功能

img

图7-14 普通用户售票大厅用例图

⑼ 普通用户我的订单功能

img

图7-15 普通用户我的订单用例图

7.3.1.2 测试用例执行

共执行测试用例132例,通过120例,未通能过12例,通过率越91%,未出现S0级别错误,视作可接受版本。测试未通过用例(缺陷列表)见下图

img

图7-16 未通过用例图

7.3.2 兼容性测试

7.3.2.1 测试用例

img

图7-17 兼容性测试用例图

7.3.2.2 测试执行

鉴于时间紧张,系统的兼容性测试采取分别对使用Chrome浏览器,Firefox浏览器,Edge浏览器对系统进行冒烟测试的方式进行。共执行业务9项(登陆注册,公告管理,始终站管理,列车管理,座位管理,票务管理, 个人信息管理,售票大厅,我的订单),总计27次冒烟测试,均未发现兼容性错误。

7.3.3 弱网测试

7.3.3.1 测试用例

img

图7-18 弱网测试用例图

7.3.3.2 测试执行

通过Fiddler对购票系统的九大业务(登陆注册,公告管理,始终站管理,列车管理,座位管理,票务管理, 个人信息管理,售票大厅,我的订单)分别在各种网络环境(2G,3G,4G,WiFi,带宽有限环境)下进行弱网测试,共执行用例45例,在上行下行受限的情况下,响应相对受阻,功能均不受影响,弱网测试通过。下附2G环境下请求获得大量座位的响应截图,在图中可以看到响应开始到结束时间用时14s,在可接受范围。

img

图7-19 2G环境下座位功能管理功能弱网测试图

7.3.4 前端性能测试

使用Fiddler对基本业务执行过程中页面响应进行前端页面性能分析,如图7-20,7-21。可以发现该系统访问期间html占据了大量的消耗时间,有待优化。

img

图7-20 前端性能统计图

img

图7-21 前端性能Timeline图

7.4 测试结果和分析

测试过程中共执行功能测试用例132例,通过120例,未通能过12例,通过率越91%;兼容性测试用例27例全部通过;弱网测试用例45例全部通过。其中功能测试未通过用例主要是管理员的修改功能出现缺陷,即修改过程中不能进行规则检测,性能测试过程中关于html响应时间过长主要是由于未合理对jsp文件进行有效拆分,选择使用权限控制实现对同一jsp的访问,最终导致往往需要获取一些无用html元素。

7.5 测试结论和建议

系统总体满足测试放行要求,在业务逻辑层面没有明显错误,可以实现系统预定任务目标。但在一些方面有待优化,比如管理员的修改功能出现缺陷(不能进行规则检测),在新增过程中相应规则检测准确无误,这就意味着相关js可以实现复用,进而快速修复缺陷;此外关于前端性能的优化可以通过合理分析功能进而实现对jsp相关元素的划分,使得文件有选择地被请求,降低相应消耗时间。

结 论

经过十天的设计与开发工作,本系统实现了以下功能:通过站点登录访问系统主页、用户身份的识别、登录;管理员对车次的添加、修改、删除,车票的添加、修改,始终站点的添加、删除、修改;普通用户个人信息的注册、修改、对车次的查询、订票、付款、退票功能。

所设计的铁路售票系统,能实现火车票网上的售票、退票、订票、付款等操作,能够实现管理员对车次、车票、途径站点的管理更新操作。系统功能全面、易于日后程序更新、数据库管理容易、界面友好、操作方便、效率高。

本系统共有六个功能模块:登录功能模块、个人主页模块、查询功能模块、火车票预定模块、车次管理功能模块及火车票管理功能模块。系统采用B/S架构,MVC开发模式,以IDEA作为前台软件开发工具,后台数据库选用MySQL数据库进行支持,采用Navicat 提供数据库可视化设计、模型建立、以及管理功能,利用目前比较流行的Tomcat9.X搭建Web 应用服务器,提供通过网页访问功能。为了进一步提升系统灵活性、可移植性、一致性和安全性同时简化了依赖管理和部署过程,系统使用Docker部署到腾讯云服务器。经过高覆盖系统功能测试得出结论:系统操作简单,功能完善;是按照软件工程的理论、方法和规范;遵循实用性、系统性、逐步完善、逐步发展的原则进行的开发。

由于对铁路售票系统的整个流程不够熟悉,在需求分析时没有考虑同时大量的用户对数据库同时进行操作的情况,导致系统在面临大量数据访问时会出现的瓶颈问题,这些都需要在数据库设计和数据更新时加以完善。火车票网上订票是面向全国用户,要求有安全稳定的数据库设计与操作,由于数据库选择的不妥,系统还不能满足大流量的数据操作,这也是本系统不尽人意的地方那个,这将在以后的修改中进一步的补充完善。

在本次的开发实践中,我们小组将掌握的专业理论知识很好地运用到了铁路售票系统的开发过程中,在对Java面向Web方向的设计中查阅到了大量的资料,做到了理论和实践相结合,在实践中加深了对专业理论知识的理解,并提升了对理论知识的运用能力,获得了许多宝贵的经验。学会了B/S的系统架构和软件的MVC开发模式,以及与同学们之间相互帮助的精神,重视软件开发中的易使用性、可操作性和可移植性等。

参 考 文 献

1 [美]莎丽·劳伦斯·弗里格 [加]乔安妮·M·阿特利.软件工程[M].杨卫东译.北京:人民邮电出版社,2019.

2 宁静_致远76. 用例图的三种关系包含、扩展、泛化[EB/OL].

http://t.csdn.cn/okKR4,2014-10-21.

3 K I S. UML(用例图,类图,对象图,包图)[EB/OL].

http://t.csdn.cn/QYOQ7,2021-11-02

4 evandeng2009. 详解数据模型:概念模型、逻辑模型、物理模型[EB/OL].

http://t.csdn.cn/DPbUJ,2021-12-30

5 铁路售票现状和网络售票的优势分析[J]. 《交通节能与环保》, 2019(3).

铁路售票现状和网络售票的优势分析-黄文政-中文期刊【掌桥科研】

6 铁路售票发展现状与优化措施[J]. 《科技风》, 2019(16).

铁路售票发展现状与优化措施-黄文政-中文期刊【掌桥科研】

7 张玉树.SQL Serve数据库程序设计[M].北京:人民邮电出版社,2008:35-105

8 贾洪峰.精通SQL 2008程序设计[M].北京:清华大学出版社,2008:43-85

9 [美] 乔特温,克瑞尔瑞.关系数据库和SQL编程[M].北京:清华大学出版社,2006:28-74

10 [美] Dennis kafura Java面向对象程序教程Simulink Component of MatLab[M]. Anesthesiology, 2007:83-97

11 舒尔茨.深入浅出HTML.[M].北京:人民邮电出版社,2008:45-84

12 古乐,史九林.软件测试技术概论[M] .北京:清华大学出版社.2004:66-78

13 李丽,史运平. 基于Java数据库访问技术[J].山西建筑, 2007.(05)

14 伍俊良. Java编程思想[M].北京:机械工业出版社,2004:89-112

15 仲治国.ASP动态网站:68个典型模块精解[M].北京: 北京希望电子出版社,2009:144-167

16 麦中凡、吕庆中等.计算机软件技术基础[M].北京:高等教育出版社 , 1999:33-76

17 朱少民.软件质量保证和管理[M] .北京:清华大学出版社.2007:34-38

18 赵燕燕 .ASP技术在Web数据库开发中的使用[J].河南职工医学院学报 ,2009:143-17

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当然可以!下面是一个简单的C++代码示例,实现了一个基本的铁路订票系统: ```cpp #include <iostream> #include <string> #include <vector> using namespace std; // 定义车票类 class Ticket { public: string trainName; string departure; string destination; string date; int seatNum; Ticket(string train, string depart, string dest, string d, int seat) { trainName = train; departure = depart; destination = dest; date = d; seatNum = seat; } void displayTicket() { cout << "Train: " << trainName << endl; cout << "Departure: " << departure << endl; cout << "Destination: " << destination << endl; cout << "Date: " << date << endl; cout << "Seat Number: " << seatNum << endl; } }; // 定义订票系统类 class TicketSystem { private: vector<Ticket> tickets; public: void bookTicket(string train, string depart, string dest, string date, int seat) { Ticket ticket(train, depart, dest, date, seat); tickets.push_back(ticket); cout << "Ticket booked successfully!" << endl; } void displayAllTickets() { for (int i = 0; i < tickets.size(); i++) { tickets[i].displayTicket(); cout << endl; } } }; int main() { TicketSystem system; system.bookTicket("G123", "Beijing", "Shanghai", "2022-01-01", 10); system.bookTicket("G456", "Shanghai", "Beijing", "2022-01-02", 15); system.displayAllTickets(); return 0; } ``` 这个代码示例中,我们定义了一个`Ticket`类来表示车票,包含了车次、出发地、目的地、日期和座位号等信息。然后,我们定义了一个`TicketSystem`类来管理订票系统,其中包括了订票和展示所有车票的功能。 在`main`函数中,我们创建了一个`TicketSystem`对象`system`,然后使用`bookTicket`方法来订购两张车票,并使用`displayAllTickets`方法展示所有的车票信息。 这只是一个简单的示例,实际的铁路订票系统可能需要更复杂的功能和数据结构来支持更多的操作和信息管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Antidote 

欢迎打赏,给点动力呀大佬们

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值