基于Python飞机票销售系统
摘要
随着社会生活水平的提高和出行方式的多样化,飞机作为重要的交通工具之一,在人们生活中扮演着关键角色。飞机票销售系统成为航空公司和旅行社必备的工具之一,其重要性日益凸显。本研究旨在针对飞机票销售系统的需求和挑战,基于Python语言和Django框架进行系统设计与开发,以满足信息化社会对便捷高效机票销售服务的需求。
飞机票销售系统作为航空和旅游行业重要组成部分,提供了用户便捷获取机票信息和高效购票的平台。系统设计需考虑用户信息和支付数据的安全保护,确保用户隐私和数据安全。基于Python和Django框架的设计将提供简单、快速、安全的机票信息查询和销售服务,用户可通过友好界面轻松预订机票、查询航班信息,节省时间和精力。
关键词:Python;Django;飞机票销售系统。
With the improvement of social living standards and the diversification of travel modes, airplanes, as one of the important means of transportation, play a crucial role in people's lives. The air ticket sales system has become one of the essential tools for airlines and travel agencies, and its importance is increasingly prominent. The aim of this study is to meet the needs and challenges of air ticket sales systems, and to design and develop a system based on Python language and Django framework to meet the needs of the information society for convenient and efficient air ticket sales services.
The air ticket sales system, as an important component of the aviation and tourism industry, provides users with a convenient platform to obtain ticket information and efficiently purchase tickets. The system design needs to consider the security protection of user information and payment data, ensuring user privacy and data security. The design based on Python and Django framework will provide simple, fast, and secure ticket information query and sales services. Users can easily book tickets and query flight information through a friendly interface, saving time and effort.
Keywords: Python; Django; Air ticket sales system.
当今社会,随着人们生活水平的不断提高和出行方式的多样化,出游、远行以及出差需求逐渐增加。飞机作为重要的出行交通工具之一,飞机票的销售成为人们出行前不可或缺的关键环节。随着航空业的蓬勃发展和互联网技术的不断进步,机票销售系统已经成为航空公司和旅行社必备的核心工具。因此,针对机票销售系统的需求和挑战,进行研究分析,设计和开发基于Python的飞机票销售系统成为顺应时代潮流的必然选择。
信息化社会对于个性化、高效的信息获取渠道需求日益增加,机票销售系统作为航空业务发展和旅游行业重要组成部分,为用户提供了便捷、高效的机票销售服务。同时,由于涉及用户信息和支付数据,系统必须具备强大的安全机制,以保护用户隐私并防止数据泄露。基于Python的飞机票销售系统采用面向对象的开发模式,通过软件开发和硬件架构相结合,满足实际需求,完善了软件架构和程序编码工作。利用MySQL作为后台数据的主要存储单元,结合Python语言和Django框架的开发技术,实现了系统的全部功能,为用户提供便捷高效的机票购买体验。
通过研究背景的明确,可以更好地指导后续的研究工作,并为飞机票销售系统的进一步发展提供有益的参考。本研究旨在对飞机票销售系统的功能进行深入分析和探讨,通过了解用户需求和市场趋势,结合最新的技术和设计理念,提出可行的功能优化方案,以满足用户的需求并提升平台的竞争力。基于Python飞机票销售系统的设计与实现对于航空公司和用户来说具有重要的意义。机票销售系统的设计与实现提供一个简单、快速、安全的获取航班信息和机票销售的平台等,提供友好的界面和流畅的操作,以满足用户的需求。用户可以通过该系统轻松、便捷地查询航班信息、机票预订、行帮类型、城市名称等业务,大大节省了时间和精力。对于管理者而言,可以提升机票销售管理的效率,通过系统实现自动化订票、提供更多销售渠道,节省人力成本。
(1)系统需求分析:对目标用户群体进行调查和研究,了解用户需求和习惯。通过需求分析,确定系统的功能和特性。
(2)系统设计与实现:基于Web平台,设计并实现一个用户友好的界面,使用户能够轻松地搜索、浏览和选择好物推荐信息。考虑到用户需求,系统还可以提供个性化推荐功能。
(3)航班信息管理:研究如何有效地收集、整理和管理大量的航班信息数据。讨论不同的数据源和采集方法,并评估其准确性和可靠性。
(4)用户评价与反馈:通过用户调查和评价,评估用户对系统的满意度和使用体验。收集用户反馈,并根据反馈改进和优化系统功能。
(5)效果评估与推广策略:通过实验或问卷调查等方法,评估系统对用户行为的影响。提出有效的推广策略,增加用户数量并提高系统的使用率。
飞机票销售系统采用MySQL数据库进行数据存储,开发过程中使用了Python编程语言和Django框架,搭配IDEA和Tomcat等开发工具,为编写工作带来了诸多便利。使用Python和Django进行开发,简化了编程代码,提高了系统的可维护性和扩展性。Python和Django的组合在Web开发领域也备受青睐,为开发人员提供了强大的工具和资源支持。因此,基于Python的机票销售系统开发是可行的选择,能够充分发挥它们在开发过程中的优势,满足系统的需求并提升开发效率。
由于本课题中设计的飞机票销售系统的主要目的是为了实现更加便捷、快速的信息查询和管理服务,以提供直接投入使用的信息化软件。在开发机票销售系统时,使用的Python编程语言和Django框架具有开源免费的特点。开发工具如IDEA、Tomcat服务器、MySQL数据库以及图片处理软件Photoshop等在学校已经进行了系统的学习,熟悉操作,无需额外费用。这些开发工具可以直接从网上下载,经济上具有可行性。使用Python和Django进行系统开发,不仅能够满足项目需求,而且能够在经济上提供节约成本的优势。
此次项目设计的时候我参考了很多类似系统的成功案例,对它们的操作界面以及功能都进行了系统的分析,将众多案例结合在一起,突出以人为本简化操作,所以具有基本计算机知识的人都会操作本项目。因此操作可行性也没有问题。
通过对机票销售系统的需求分析,该系统主要分为注册用户和管理员两大功能模块,具体如下:
注册用户功能:
- 注册登录:游客可以通过注册成为系统用户,使用账号密码可进行登录,使用系统功能
- 注册用户在前台的功能详情如下:
- 首页:注册用户可轻松浏览轮播图及航班资讯,快速掌握最新信息。右上角的全网搜索功能,让用户能够输入关键词查找所需内容。
- 公告栏:用户可查看系统公告,了解最新动态和通知。
- 航班资讯:用户能够浏览最新的航班资讯,并通过局部搜索、筛选和排序功能,快速找到心仪的航班。同时,还可以对喜欢的航班进行点赞、收藏和评论。
- 航班信息:用户可以详细查看航班列表信息,包括航班类型、出发与到达城市、价格、机票类型及出发日期等。通过关键字搜索和排序功能,轻松找到适合的航班,并进行收藏、点赞、机票预订和评论。
- 我的账户:用户可以在此处进行个人信息的修改与更新。
- 个人中心与个人首页:进入个人首页,用户可以便捷地管理我的票务和收藏。
- 我的票务:用户可以查看已预订的机票详情,进行费用支付操作,并通过查询条件筛选查看不同的预订记录。
- 收藏:用户可查看之前收藏的航班资讯和航班信息,并随时删除不再需要的收藏项。
管理员功能:
- 登录:管理员的账号是在数据列表中直接设置生成的,不需要进行注册,可直接输入账号密码登录,同时可对管理员资料进行修改等。
- 后台首页:管理员可以查看票务统计统计图,直观了解票务销售情况。
- 系统用户:管理员可以管理用户账号,包括增删改查用户信息,通过用户姓名、性别和审核状态进行搜索,并审核用户的账号状态。
- 航班类型管理:管理员可以维护航班类型列表,添加新的航班类型,查看航班类型详情,通过航班类型进行查询,删除不需要的航班类型,或进行重置操作。
- 城市名称管理:管理员负责城市名称的管理,可以列出所有城市,添加新的城市名称,查看城市详情,通过城市名称进行查询,进行删除或重置操作。
- 航班信息管理:管理员可以查看航班信息的列表,添加新的航班信息,查看各类航班详情及用户评论,通过航班类型和出发城市进行查询,重置查询条件,删除不再需要的航班信息。
- 我的票务管理:管理员可以查看用户预订的机票票务详情,进行支付等相关操作,通过航班类型、预订数量、审核状态和支付状态进行查询,重置查询条件,删除票务信息,并对用户的票务信息进行审核和回复。
- 系统管理:管理员可以进行轮播图的管理,包括查看详情、通过标题进行查询、删除和添加轮播图。
- 公告栏管理:管理员负责公告栏的管理,发布、查看和编辑公告详情,通过标题进行增删改查操作。
- 资源管理:管理员可以管理航班资讯,包括查看资讯详情、处理用户评论,通过标题、标签和分类进行增删改查操作,同时维护资讯分类。
- 权限管理:管理员负责权限列表的管理,查看权限详情,修改前台列表信息详情,通过权限名和用户组进行查询,添加、修改和删除权限,重置查询条件,并可以修改用户组的权限。
机票销售系统的非功能性需求比如机票销售系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下3-1表格中:
表2.1 机票销售系统非功能需求表
安全性 | 主要指机票销售系统数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
可靠性 | 可靠性是指机票销售系统能够安装用户的指示进行操作,经过测试,可靠性90%以上。 |
性能 | 性能是影响机票销售系统占据市场的必要条件,所以性能最好要佳才好。 |
可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
易用性 | 用户只要跟着机票销售系统的页面展示内容进行操作,就可以了。 |
可维护性 | 机票销售系统开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
机票销售系统中注册用户角色用例图如图2.1所示:
![](https://i-blog.csdnimg.cn/direct/a0ef68714a6e491aab7ae837468892c8.png)
图2.1注册用户角色用例图
飞机票销售系统中管理员用例图如图2.2所示:
![](https://i-blog.csdnimg.cn/direct/84a808dd9d6941e1aae6db35265d8e78.png)
图2.2 管理员用例图
2.4 系统流程分析
2.4.1 数据流程
飞机票销售系统主要的目的之一就是实现用户线上预订机票,图2-3就是系统的数据流图。
![](https://i-blog.csdnimg.cn/direct/2f436a66b10343ec8a640b146bfc5173.png)
图2-3 线上预订机票操作展开图
2.4.2 业务流程
分析完系统的数据流,接下来我们来看系统的业务流程,图2-4就是业务流程图:
![](https://i-blog.csdnimg.cn/direct/cb2250da986849819423170bf7b19bd3.png)
图2-5业务流程图
2.4.3 数据增加流程
用户成功登入系统后就能够实现增加数据的操作,增加数据的编号是特定的,系统生成,用户不能随意填写,除了编号以外,其他增加信息用户自己填写,填写后的信息经过系统验证,验证合法通过就显示增加数据成功了,相反的话,就没有增加成功,图2-6显示的就是在增加数据时的流程。
![](https://i-blog.csdnimg.cn/direct/4779f8202f2f48c5a7a6197a248e9410.png)
图2-6 数据增加流程图
2.4.4 数据修改流程
数据修改时的流程和上面介绍的数据增加时的流程差不多,如图2-7所示。
![](https://i-blog.csdnimg.cn/direct/d1aa219c000b4236afb3885a22811bb0.png)
图2-7 数据修改流程图
2.4.5 数据删除流程
如果系统里面存在一些没有用的数据的话,相关的管理人员还可以对这些数据进行删除,图2-8就是数据删除时的流程图。
![](https://i-blog.csdnimg.cn/direct/6a941edc5abb45b2bc3839cfde784390.png)
图2-8 数据删除流程图
本章主要通过对飞机票销售系统的可行性分析、需求分析、系统用例分析、系统流程分析,确定整个系统要实现的功能。同时也为系统的代码实现和测试提供了标准。
系功能模块分成了管理员及注册用户两个模块,每个模块登录进去对应相应的功能,具体的功能模块图如图3.1所示。
![](https://i-blog.csdnimg.cn/direct/c9fac63681f14531912128120a6d7f22.png)
图3.1 飞机票销售系统功能模块图
数据库的设计承载者系统的各种数据,在建立数据库的时候,主要是数据库模型的设计以及各个数据库表的设计两部分。
下面是整个机票销售系统中主要的数据库表总E-R实体关系图。
![](https://i-blog.csdnimg.cn/direct/f5cf9f2ad7204eb480877d024c4b1e3a.png)
图3.2 飞机票销售系统总E-R关系图
通过前面E-R关系图可以看到项目需要创建很多个数据表。以下是项目中的主要数据库表的关系模型:
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | token_id | int | 10 | 0 | N | Y | 临时访问牌ID | |
2 | token | varchar | 64 | 0 | Y | N | 临时访问牌 | |
3 | info | text | 65535 | 0 | Y | N | ||
4 | maxage | int | 10 | 0 | N | N | 2 | 最大寿命:默认2小时 |
5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户编号: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | article_id | mediumint | 8 | 0 | N | Y | 文章id:[0,8388607] | |
2 | title | varchar | 125 | 0 | N | Y | 标题:[0,125]用于文章和html的title标签中 | |
3 | type | varchar | 64 | 0 | N | N | 0 | 文章分类:[0,1000]用来搜索指定类型的文章 |
4 | hits | int | 10 | 0 | N | N | 0 | 点击数:[0,1000000000]访问这篇文章的人次 |
5 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
6 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
8 | source | varchar | 255 | 0 | Y | N | 来源:[0,255]文章的出处 | |
9 | url | varchar | 255 | 0 | Y | N | 来源地址:[0,255]用于跳转到发布该文章的网站 | |
10 | tag | varchar | 255 | 0 | Y | N | 标签:[0,255]用于标注文章所属相关内容,多个标签用空格隔开 | |
11 | content | longtext | 2147483647 | 0 | Y | N | 正文:文章的主体内容 | |
12 | img | varchar | 255 | 0 | Y | N | 封面图 | |
13 | description | text | 65535 | 0 | Y | N | 文章描述 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | type_id | smallint | 5 | 0 | N | Y | 分类ID:[0,10000] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000]决定分类显示的先后顺序 |
3 | name | varchar | 16 | 0 | N | N | 分类名称:[2,16] | |
4 | father_id | smallint | 5 | 0 | N | N | 0 | 上级分类ID:[0,32767] |
5 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该分类的作用 | |
6 | icon | text | 65535 | 0 | Y | N | 分类图标: | |
7 | url | varchar | 255 | 0 | Y | N | 外链地址:[0,255]如果该分类是跳转到其他网站的情况下,就在该URL上设置 | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | auth_id | int | 10 | 0 | N | Y | 授权ID: | |
2 | user_group | varchar | 64 | 0 | Y | N | 用户组: | |
3 | mod_name | varchar | 64 | 0 | Y | N | 模块名: | |
4 | table_name | varchar | 64 | 0 | Y | N | 表名: | |
5 | page_title | varchar | 255 | 0 | Y | N | 页面标题: | |
6 | path | varchar | 255 | 0 | Y | N | 路由路径: | |
7 | position | varchar | 32 | 0 | Y | N | 位置: | |
8 | mode | varchar | 32 | 0 | N | N | _blank | 跳转方式: |
9 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
10 | del | tinyint | 3 | 0 | N | N | 1 | 是否可删除: |
11 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
12 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
13 | field_add | text | 65535 | 0 | Y | N | 添加字段: | |
14 | field_set | text | 65535 | 0 | Y | N | 修改字段: | |
15 | field_get | text | 65535 | 0 | Y | N | 查询字段: | |
16 | table_nav_name | varchar | 500 | 0 | Y | N | 跨表导航名称: | |
17 | table_nav | varchar | 500 | 0 | Y | N | 跨表导航: | |
18 | option | text | 65535 | 0 | Y | N | 配置: | |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | city_name_id | int | 10 | 0 | N | Y | 城市名称ID | |
2 | city_name | varchar | 64 | 0 | Y | N | 城市名称 | |
3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | collect_id | int | 10 | 0 | N | Y | 收藏ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 收藏人ID: |
3 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
4 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
5 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
6 | title | varchar | 255 | 0 | Y | N | 标题: | |
7 | img | varchar | 255 | 0 | Y | N | 封面: | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | comment_id | int | 10 | 0 | N | Y | 评论ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 评论人ID: |
3 | reply_to_id | int | 10 | 0 | N | N | 0 | 回复评论ID:空为0 |
4 | content | longtext | 2147483647 | 0 | Y | N | 内容: | |
5 | nickname | varchar | 255 | 0 | Y | N | 昵称: | |
6 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
9 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
10 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
11 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | flight_information_id | int | 10 | 0 | N | Y | 航班信息ID | |
2 | airlines | varchar | 64 | 0 | Y | N | 航空公司 | |
3 | flight_number | varchar | 64 | 0 | Y | N | 航班号码 | |
4 | flight_type | varchar | 64 | 0 | Y | N | 航班类型 | |
5 | departure_city | varchar | 64 | 0 | Y | N | 出发城市 | |
6 | arriving_in_the_city | varchar | 64 | 0 | Y | N | 到达城市 | |
7 | flight_prices | varchar | 64 | 0 | Y | N | 航班价格 | |
8 | flight_images | varchar | 255 | 0 | Y | N | 航班图片 | |
9 | ticket_type | varchar | 64 | 0 | Y | N | 机票类型 | |
10 | departure_date | date | 10 | 0 | Y | N | 出发日期 | |
11 | return_date | date | 10 | 0 | Y | N | 返回日期 | |
12 | stopping_stations | text | 65535 | 0 | Y | N | 经停站点 | |
13 | change_of_signature_rules | text | 65535 | 0 | Y | N | 改签规则 | |
14 | flight_information | text | 65535 | 0 | Y | N | 航班信息 | |
15 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
16 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
17 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
18 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | flight_type_id | int | 10 | 0 | N | Y | 航班类型ID | |
2 | flight_type | varchar | 64 | 0 | Y | N | 航班类型 | |
3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | hits_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | my_ticketing_id | int | 10 | 0 | N | Y | 我的票务ID | |
2 | booking_number | varchar | 64 | 0 | Y | N | 预订单号 | |
3 | airlines | varchar | 64 | 0 | Y | N | 航空公司 | |
4 | flight_number | varchar | 64 | 0 | Y | N | 航班号码 | |
5 | flight_type | varchar | 64 | 0 | Y | N | 航班类型 | |
6 | departure_city | varchar | 64 | 0 | Y | N | 出发城市 | |
7 | arriving_in_the_city | varchar | 64 | 0 | Y | N | 到达城市 | |
8 | flight_prices | varchar | 64 | 0 | Y | N | 航班价格 | |
9 | ticket_type | varchar | 64 | 0 | Y | N | 机票类型 | |
10 | departure_date | date | 10 | 0 | Y | N | 出发日期 | |
11 | return_date | date | 10 | 0 | Y | N | 返回日期 | |
12 | booking_users | int | 10 | 0 | Y | N | 0 | 预订用户 |
13 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
14 | users_mobile_phone | varchar | 64 | 0 | N | N | 用户手机 | |
15 | booking_quantity | varchar | 64 | 0 | Y | N | 预订数量 | |
16 | total_airfare_price | varchar | 64 | 0 | Y | N | 机票总价 | |
17 | booking_remarks | text | 65535 | 0 | Y | N | 预订备注 | |
18 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
19 | examine_reply | varchar | 16 | 0 | Y | N | 审核回复 | |
20 | pay_state | varchar | 16 | 0 | N | N | 未支付 | 支付状态 |
21 | pay_type | varchar | 16 | 0 | Y | N | 支付类型: 微信、支付宝、网银 | |
22 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
23 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | notice_id | mediumint | 8 | 0 | N | Y | 公告id: | |
2 | title | varchar | 125 | 0 | N | N | 标题: | |
3 | content | longtext | 2147483647 | 0 | Y | N | 正文: | |
4 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
5 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | praise_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
8 | status | bit | 1 | 0 | N | N | 1 | 点赞状态:1为点赞,0已取消 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | registered_users_id | int | 10 | 0 | N | Y | 注册用户ID | |
2 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
3 | user_gender | varchar | 64 | 0 | Y | N | 用户性别 | |
4 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
5 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
6 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | slides_id | int | 10 | 0 | N | Y | 轮播图ID: | |
2 | title | varchar | 64 | 0 | Y | N | 标题: | |
3 | content | varchar | 255 | 0 | Y | N | 内容: | |
4 | url | varchar | 255 | 0 | Y | N | 链接: | |
5 | img | varchar | 255 | 0 | Y | N | 轮播图: | |
6 | hits | int | 10 | 0 | N | N | 0 | 点击量: |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | upload_id | int | 10 | 0 | N | Y | 上传ID | |
2 | name | varchar | 64 | 0 | Y | N | 文件名 | |
3 | path | varchar | 255 | 0 | Y | N | 访问路径 | |
4 | file | varchar | 255 | 0 | Y | N | 文件路径 | |
5 | display | varchar | 255 | 0 | Y | N | 显示顺序 | |
6 | father_id | int | 10 | 0 | Y | N | 0 | 父级ID |
7 | dir | varchar | 255 | 0 | Y | N | 文件夹 | |
8 | type | varchar | 32 | 0 | Y | N | 文件类型 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | user_id | mediumint | 8 | 0 | N | Y | 用户ID:[0,8388607]用户获取其他与用户相关的数据 | |
2 | state | smallint | 5 | 0 | N | N | 1 | 账户状态:[0,10](1可用|2异常|3已冻结|4已注销) |
3 | user_group | varchar | 32 | 0 | Y | N | 所在用户组:[0,32767]决定用户身份和权限 | |
4 | login_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 上次登录时间: |
5 | phone | varchar | 11 | 0 | Y | N | 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时 | |
6 | phone_state | smallint | 5 | 0 | N | N | 0 | 手机认证:[0,1](0未认证|1审核中|2已认证) |
7 | username | varchar | 16 | 0 | N | N | 用户名:[0,16]用户登录时所用的账户名称 | |
8 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
9 | password | varchar | 64 | 0 | N | N | 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成 | |
10 | | varchar | 64 | 0 | Y | N | 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时 | |
11 | email_state | smallint | 5 | 0 | N | N | 0 | 邮箱认证:[0,1](0未认证|1审核中|2已认证) |
12 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
13 | open_id | varchar | 255 | 0 | Y | N | 针对获取用户信息字段 | |
14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
15 | vip_level | varchar | 255 | 0 | Y | N | 会员等级 | |
16 | vip_discount | double | 11 | 2 | Y | N | 0.00 | 会员折扣 |
表user_group (用户组:用于用户前端身份和鉴权)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | group_id | mediumint | 8 | 0 | N | Y | 用户组ID:[0,8388607] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000] |
3 | name | varchar | 16 | 0 | N | N | 名称:[0,16] | |
4 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该用户组的特点或权限范围 | |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
8 | register | smallint | 5 | 0 | Y | N | 0 | 注册位置: |
9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
用户在登录界面输入账号+密码,点击“登录”按钮,系统在用户数据库表中会对管理员、用户的账号进行匹配,账号+密码正确的话,就会登录到系统中各个用户的主管理界面,否则提示对应的信息,返回到登录的界面,其主界面展示如下图4.1所示。
![](https://i-blog.csdnimg.cn/direct/577d8daa948b488c8f092e0c2c69e0bd.png)
图4.1 登录界面图
登录代码如下:
print("===================登录=====================")
ret = {
"error": {
"code": 70000,
"message": "账户不存在",
}
}
body = ctx.body
password = md5hash(body["password"]) or ""
obj = service_select("user").Get_obj(
{"username": body["username"]}, {"like": False}
)
if obj:
user_group = service_select("user_group").Get_obj({'name': obj['user_group']}, {"like": False})
if user_group and user_group['source_table'] != '':
user_obj = service_select(user_group['source_table']).Get_obj({"user_id": obj['user_id']}, {"like": False})
if user_obj['examine_state'] == '未通过':
ret = {
"error": {
"code": 70000,
"message": "账户未通过审核",
}
}
return ret
if user_obj['examine_state'] == '未审核':
ret = {
"error": {
"code": 70000,
"message": "账户未审核",
}
}
return ret
if obj["state"] == 1:
if obj["password"] == password:
timeout = timezone.now()
timestamp = int(time.mktime(timeout.timetuple())) * 1000
token = md5hash(str(obj["user_id"]) + "_" + str(timestamp))
ctx.request.session[token] = obj["user_id"]
service_select("access_token").Add(
{"token": token, "user_id": obj["user_id"]}
)
obj["token"] = token
ret = {
"result": {"obj": obj}
}
else:
ret = {
"error": {
"code": 70000,
"message": "密码错误",
}
}
else:
ret = {
"error": {
"code": 70000,
"message": "用户账户不可用,请联系管理员",
}
}
return ctx.response(json.dumps(ret, ensure_ascii=False))
游客可以通过注册成为系统用户,使用账号密码可进行登录,使用系统功能。当用户想要查询、管理相关信息,就必须进行登录,如果没有账号的话,在登录界面,点击“注册”按钮就会跳转到注册的界面,根据提示填写好注册信息,添加提交,注册的信息在数据库中就添加完成了,然后再输入填写好的账号和密码进行登录,其主界面展示如下图4.2所示。
![](https://i-blog.csdnimg.cn/direct/f61d63916bf8477eb8ed7f6f34b12f66.png)
图4.2 注册界面图
注册代码如下:
def Register(self, ctx):
print("===================注册=====================")
userService = service_select("user")
body = ctx.body
if "username" not in body and body["username"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户名不能为空",
}
}, ensure_ascii=False))
if "user_group" not in body and body["user_group"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户组不能为空",
}
}, ensure_ascii=False))
if "password" not in body and body["password"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "密码不能为空",
}
}, ensure_ascii=False))
post_param = body
post_param['nickname'] = body["nickname"] or ""
post_param['password'] = md5hash(body["password"])
obj = userService.Get_obj({"username": post_param['username']}, {"like": False})
if obj:
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户名已存在",
}
}, ensure_ascii=False))
ret = {
"error": {
"code": 70000,
"message": "注册失败",
}
}
bl = userService.Add(post_param)
if bl:
ret = {
"result": {
"bl": True,
"message": "注册成功"
}
}
return ctx.response(json.dumps(ret, ensure_ascii=False))
可查看轮播图和使用系统其他功能。界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/12bf662256b14a87a925463c9fa0eafc.png)
图4.3 首页界面图
用户能够浏览最新的航班资讯,并通过局部搜索、筛选和排序功能,快速找到心仪的航班。同时,还可以对喜欢的航班进行点赞、收藏和评论。界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/3fa7ee6d9f754926afae7b097dc617ac.png)
图4.4 航班资讯界面图
用户可以详细查看航班列表信息,包括航班类型、出发与到达城市、价格、机票类型及出发日期等。通过关键字搜索和排序功能,轻松找到适合的航班,并进行收藏、点赞、机票预订和评论。界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/e8afe23af6fe47df8d05fe07d9c9e939.png)
图4.5航班信息界面图
可对个人首页、我的票务和收藏等信息进行管控。用户可以查看已预订的机票详情,进行费用支付操作,并通过查询条件筛选查看不同的预订记录。界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/8bd7703aef8e459a8bc7cd859610aaf7.png)
图4.6 个人中心-我的票务界面图
管理员可以管理用户账号,包括增删改查用户信息,通过用户姓名、性别和审核状态进行搜索,并审核用户的账号状态。界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/f0256835858a46e9a51d889f67e79411.png)
图4.7系统用户界面图
管理员可以维护航班类型列表,添加新的航班类型,查看航班类型详情,通过航班类型进行查询,删除不需要的航班类型,或进行重置操作。界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/f1eca00e00d74ffc9bee47fb3b3b1870.png)
图4.8航班类型管理界面图
管理员可以查看航班信息的列表,添加新的航班信息,查看各类航班详情及用户评论,通过航班类型和出发城市进行查询,重置查询条件,删除不再需要的航班信息。界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/e4e7a4df4f2b46f993b34c56eb7a4f57.png)
图4.9航班信息管理界面图
管理员可以查看用户预订的机票票务详情,进行支付等相关操作,通过航班类型、预订数量、审核状态和支付状态进行查询,重置查询条件,删除票务信息,并对用户的票务信息进行审核和回复。界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/035c128a57744044b5f0dd4d40ae7078.png)
图4.10我的票务理界面图
管理员可以管理航班资讯,包括查看资讯详情、处理用户评论,通过标题、标签和分类进行增删改查操作,同时维护资讯分类。界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/b7fd9d68fb53472da0e292c6e6a06712.png)
图4.11资源管理界面图
管理员负责权限列表的管理,查看权限详情,修改前台列表信息详情,通过权限名和用户组进行查询,添加、修改和删除权限,重置查询条件,并可以修改用户组的权限。界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/fcb10d2426df4c968035f4dff97561c4.png)
图4.12权限管理界面图
管理员负责城市名称的管理,可以列出所有城市,添加新的城市名称,查看城市详情,通过城市名称进行查询,进行删除或重置操作。界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/6f0d31fbce80422698c091260a50e412.png)
图4.13城市名称管理界面图
管理员负责公告栏的管理,发布、查看和编辑公告详情,通过标题进行增删改查操作。界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/836f7efa91b447e7ac0eb082ff39eee3.png)
图4.14 公告栏管理界面图
通过前面章节的介绍,我们可以看到机票销售系统已经完成了,但是能不能投入使用还是未知,因为在每个项目正式使用之前必须对开发的项目进行测试,如果不进行测试一旦投入使用可能会出现很多未可知的问题,比如使用人数太多导致系统瘫痪,比如某一功能存在bug信息填写错误等,这些错误将给使用者带来很多的困扰,甚至造成更大的损失,因此测试是项目投入使用的最后一步,为用户提供一个运行顺畅、完美的项目也就是我们进行最后测试的目的。
用户登录功能测试:
表5.1 用户登录功能测试表
测试名称 | 测试功能 | 操作过程 | 预期结果 | 测试结果 |
用户登录模块测试 | 用户登录成功的情况 | 点击前登录界面输入账号和密码分别输入admin和admin后点击“登录”按钮。 | 登录成功并调整到用户界面 | 正确 |
航班信息添加功能测试:
表5.2 航班信息添加功能测试表
测试名称 | 测试功能 | 操作过程 | 预期结果 | 测试结果 |
航班信息添加模块测试 | 航班信息添加成功的情况 | 在航班信息管理的页面中将点击添加,输入航班信息,输入正确的信息后然后点击“提交”按钮。 | 提示添加成功 | 正确 |
航班信息添加模块测试 | 航班信息添加失败的情况 | 在航班信息页面中不填写的航班类型标题,其他信息正常输入“提交”按钮。 | 提示“添加失败,信息不能为空” | 正确 |
航班资讯展示功能模块测试:
表5.3 航班资讯展示功能测试表
测试名称 | 测试功能 | 操作过程 | 预期结果 | 测试结果 |
航班资讯展示功能测试 | 展示成功的情况 | 点击航班资讯,可查看所有发布的航班资讯 | 展示成功 | 正确 |
城市名称添加功能测试:
表5.4 城市名称添加功能测试表
测试名称 | 测试功能 | 操作过程 | 预期结果 | 测试结果 |
城市名称添加模块测试 | 城市名称添加成功的情况 | 在城市名称添加管理的页面中,输入航班类型,输入正确的信息后然后点击“提交”按钮。 | 提示添加成功 | 正确 |
城市名称添加模块测试 | 城市名称添加失败的情况 | 在城市名称页面中不填写的航班类型,其他信息正常输入“提交”按钮。 | 提示“添加失败,信息不能为空” | 正确 |
通过编写机票销售系统的测试用例,已经检测完毕用户登录功能测试、航班信息添加功能测试、航班资讯展示功能模块测试、城市名称添加功能测试,在对以上功能得测试过程中,发现了系统中的很多漏送并进行了完善,经过多人在线进行测试,系统完全可以正常运行,当然在后期的维护中系统将不断完善。
在开发飞机票销售系统之前我信心满满,认为这个任务很简单。然而,在实际的开发过程中,我意识到自身存在许多问题。我发现自己对诸多编程思想和技术方法尚未掌握牢固,比如Bootstrap、jQuery、AJAX以及Django等Python开发技术。通过开发这个飞机票销售系统,我获得了很多成长,领悟到了脚踏实地的重要性,意识到在任何事情上都不能心浮气躁,必须踏实学习,不可急功近利。在这个项目的开发过程中,我逐渐掌握了并熟悉了这些技术。
与此同时,在这个项目中我也暴露了许多问题。我对Python编程知识的掌握还不够扎实,遇到了许多环境配置和算法方面的困难,经常导致项目出现错误或者目标实现不符预期。有时在实现想法时,算法未经优化,导致代码冗长,程序运行效率不高。通过不断面对问题和解决挑战,我逐渐提升了自己的技术水平和解决问题的能力。
[1]Adesanya A M ,Obasekore H ,Rabiu A , et al. Deep reinforcement learning for PID parameter tuning in greenhouse HVAC system energy Optimization: A TRNSYS-Python cosimulation approach [J]. Expert Systems With Applications, 2024, 252 (PA): 124126-.
[2]张春花,贾小军. Python程序设计课程思政案例设计——基于中华优秀传统文化的视角 [J/OL]. 嘉兴学院学报, 1-8[2024-05-16].
[3]贤英杰. 核心素养导向下初中信息技术Python编程教学方法探究 [J]. 考试周刊, 2024, (19): 15-18.
[4]陈姗姗. “五一”民航旅客出行创新高 机票却比去年便宜了[N]. 第一财经日报, 2024-05-07 (A04).
[5]刘倩. “五一”假期出行国内航线机票预订量已超147万张[N]. 南方日报, 2024-04-13 (007).
[6]刘元. 全国人大代表郑月明:优化火车票、飞机票退改签规则[N]. 消费日报, 2024-03-11 (A04).
[7]Online Job Portal using Django [J]. International Journal of Innovative Science and Modern Engineering (IJISME), 2024, 12 (1/):
[8]Xiao Z ,Ali Y ,Xin W , et al. Sports Work Strategy of College Counselors Based on MySQL Database Big Data Analysis [J]. International Journal of Information Technology and Web Engineering (IJITWE), 2023, 18 (1): 1-14.
[9]曹晨. 暑期旅游火热开启 机票预订已超2019年同期七成[N]. 证券时报, 2023-07-07 (A06).
[10]吴其芸. 海南防疫政策调整首日:机票、酒店搜索预订量成倍上涨[N]. 北京商报, 2022-12-07 (004).
[11]陈姗姗,乐琰. 多地放宽跨省流动限制 航班火车预订量倍增[N]. 第一财经日报, 2022-12-07 (A04).
[12]赵徐婷. 智绘“生长树” 巧设“飞机票” [J]. 新班主任, 2022, (12): 14-15.
[13]胥曼. 小飞机,大梦想 [J]. 幼儿教育, 2022, (16): 28-31.
[14]熊春艳,龚元明. 基于Django的机票预订信息系统设计 [J]. 智能计算机与应用, 2020, 10 (12): 174-176+181.
[15]邓博予. 一张特别的飞机票 [J]. 小学生优秀作文, 2020, (36): 10-11.
[16]孔峰. 飞机票 [J]. 少年月刊, 2020, (23): 29-31.
[17]方兴林. 线上机票预订业务中利益主体博弈关系及管理策略分析 [J]. 中国民航飞行学院学报, 2020, 31 (04): 71-75+80.
[18]宣子妍. OTA在线预订顾客忠诚度的影响因素研究[D]. 南京师范大学, 2020.
[19]吕航,侯昶. 如何进一步增强经济担保在OTA平台机票销售中的应用浅析 [J]. 空运商务, 2020, (01): 38-41.
[20]隋红. 参考价格对采纳互联网机票预订平台买方定价模式的影响研究[D]. 北京外国语大学, 2019.
结束语
至此论文结束,感谢您的阅读。在此我要特别的感谢我的导师,虽然我在实习期间很忙,论文撰写的时候经常是停停改改,但是我的导师依旧十分的负责,时不时的询问我的任务进展情况,跟进我的论文进度,在指导老师的帮助下,我逐步完成了自己的论文和程序,从导师身上也学习到很多知识和经验,这些知识和经验令我受益匪浅。同时我也从导师身上看到了自己的不足,不论是在技术层面上还是在对待工作的态度上,导师如同明镜一般照出了我的缺点我的不足。此外,我还要感谢在我实习期间在论文和程序上帮助过我的同学和社会人士,此前我对于Python方面的一些知识还不了解,是他们在我编写程序过程中给了我很多的启发和感想,也帮助了我对于程序的调试和检测。没有他们我是不能顺利完成本次毕业设计的。至此,我的毕业设计就花上了一个圆满的句号了。
请关注点赞+私信博主,免费领取项目源码