【Python】Python基于tkinter的飞机订票系统设计(代码+报告)【独一无二】课程设计-毕业设计

简介: 【Python】Python基于tkinter的飞机订票系统设计(代码+报告)【独一无二】课程设计-毕业设计


👉博__主👈:米码收割机

👉技__能👈:C++/Python语言

👉公众号👈:测试开发自动化【获取源码+商业合作】

👉荣__誉👈:阿里云博客专家博主、51CTO技术博主

👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。



一、需求分析

飞机订票系统是一种为旅客提供航班信息查询、机票购买和退订等服务的应用程序。该系统旨在简化用户预订航班的流程,提高用户体验,同时为航空公司提供更有效的航班管理和客户服务。

本系统的主要目标是实现以下功能:首先,提供航班信息查询功能,包括航班号、起点、终点、出发时间、到达时间、票价以及剩余座位等信息,使用户能够方便快捷地找到符合其需求的航班。其次,实现机票购买功能,用户可以根据查询到的航班信息进行机票购买操作,选择购买数量并完成支付流程。第三,实现机票退订功能,用户可以在一定期限内对已购买的机票进行退订操作,系统会根据退订数量将相应座位释放出来。

综上所述,飞机订票系统的设计需满足用户对航班信息查询、机票购买和退订等基本需求,同时还需考虑系统的可用性、稳定性和安全性,以提供更优质的服务和更良好的用户体验。

👇👇👇 关注公众号,回复 “飞机订票系统” 获取源码👇👇👇


二、系统设计与实现

2.1 代码设计

2.2.1 登录界面

显示应用程序的图标或标志 (self.start_image):

使用了 tk.PhotoImage 对象加载了一个应用程序的图标或标志,存储在 self.start_image 中。这个图标或标志可以是应用程序的品牌标识,用于增加界面的专业感和识别度。

class LoginWindow:
    def __init__(self):
        self.root_login = tk.Tk()
        self.root_login.title("登入窗口")
        self.root_login.geometry("440x300+420+150")
        self.root_login.iconbitmap(LOGO_PATH)
        self.root_login.resizable(False, False)
        self.root_login["background"] = "white"
        ## widget
        self.style_login = ttk.Style()
        self.style_login.configure("login.TPanedwindow", bg="Azure")
        ## login_label(登入图片)
        self.login_image = tk.PhotoImage(file=IMAGE_PATH_login)
        self.login_label = tk.Label(self.root_login, image=self.login_image)
        self.login_label.place(x=3, y=10)

👇👇👇 关注公众号,回复 “飞机订票系统” 获取源码👇👇👇


2.1.2 主界面显示

显示当前用户的用户名 (self.user_label):使用了 tk.Label 控件创建了一个标签,用于显示当前用户的用户名。标签文本使用了 self.user 变量,该变量可能是在程序运行过程中从登录界面获取的用户信息。

设置了合适的字体、字号、背景色和前景色,以增强用户界面的可读性和美观性。

显示当前日期 (self.date):同样使用了 tk.Label 控件创建了另一个标签,用于显示当前日期。日期信息通过 self.cur.date() 获取,其中 self.cur 可能是一个日期时间对象,用于获取当前日期信息。同样设置了合适的字体、字号、背景色和前景色,以保持界面的统一风格。

def show_image(self):
        image_window = tk.Toplevel(self.root_login)
        image_window.title("显示图片")
        image_window.geometry("400x400")
        # Load and display the image
        image_path = "image.png"  # Update with your image path
        image = Image.open(image_path)
        photo = ImageTk.PhotoImage(image)
        label = tk.Label(image_window, image=photo)
        label.image = photo  # Keep a reference, otherwise image won't display
        label.pack()

使用 ttk.Notebook 创建选项卡布局:通过 ttk.Notebook 控件创建了一个选项卡布局,即 self.notebook 对象。 ttk.Notebook 提供了一个标签页式的容器,可以在其中放置多个子页面,并通过选项卡进行切换。

👇👇👇 关注公众号,回复 “飞机订票系统” 获取源码👇👇👇

包括三个选项卡: 可选余票:通过创建一个 tk.Frame 对象作为选项卡的子页面,命名为 self.frame1。

已选购:通过创建另一个 tk.Frame 对象作为第二个选项卡的子页面,命名为 self.frame2。

客户信息:还可能有一个名为 self.frame3 的子页面,用于显示客户信息,但在提供的代码中未展示具体实现。

self.start_image = tk.PhotoImage(file=IMAGE_PATH)
  self.Lable_image = tk.Label(self.root, image=self.start_image)
  self.Lable_image.pack()
  self.user_label = tk.Label(self.root, text="当前用户:%s" % self.user, font=("华文黑体", 15, "bold"), bg="white",
                             fg="black")
  self.user_label.place(x=650, y=35)
  self.date = tk.Label(self.root, text="当前日期:{}".format(self.cur.date()), font=("华文黑体", 15, "bold"), bg="white",
                       fg="black")
  self.date.place(x=650, y=60)
  # 设定选项卡
  self.notebook = ttk.Notebook(self.root)
  self.frame1 = tk.Frame()
  self.frame2 = tk.Frame()
  self.frame3 = tk.Frame()

通过这种选项卡设计,用户界面得以分为不同的部分,每个选项卡对应不同的功能或信息展示,使得界面结构更加清晰,用户可以方便地切换和访问不同的功能模块。

2.1.3 添加航班信息

在代码中,可选余票界面 (frame1) 和已选购界面 (frame2) 的设计如下:

可选余票界面 (frame1):

按钮设计:

信息添加、修改、删除、选票、导入文件和保存数据等按钮:

Button_add: 添加航班信息的按钮。

Button_alter: 修改航班信息的按钮。

Button_delete: 删除航班信息的按钮。

Button_select: 选票的按钮。

Button_modify: 导入文件的按钮。

Button_save: 保存数据的按钮。


2.1.3 查询航班信息

航班信息查询部分:

提供了航班信息查询的输入框和查询按钮:

Entry_sno: 输入航班号的文本框。

Entry_start: 输入起点的文本框。

Entry_end: 输入终点的文本框。

Button_query: 查询航班信息的按钮。

Button_all: 显示全部航班信息的按钮。

👇👇👇 关注公众号,回复 “飞机订票系统” 获取源码👇👇👇

可选余票的航班信息展示:

使用 Tree 控件显示可选余票的航班信息。

显示航班号、出发时间、到站时间、起点、终点、票价、余额和时长等信息。


2.1.4 航班选票

已选购界面 (frame2):

按钮设计:

退票按钮:用于退订已购航班的按钮。

Button_cancel: 退票的按钮。

# 设定选项卡
 self.notebook = ttk.Notebook(self.root)
 self.frame1 = tk.Frame()
 self.frame2 = tk.Frame()
 self.frame3 = tk.Frame()

已选购航班信息展示:

使用 Tree2 控件显示已选购的航班信息。

显示航班号、出发时间、到站时间、起点、终点、票价、余额和时长等信息。

提供已选购航班信息的查询输入框和查询按钮:

用户可以通过输入航班号等信息来查询已选购航班信息。

👇👇👇 关注公众号,回复 “飞机订票系统” 获取源码👇👇👇

其他界面设计:

使用 PanedWindow 和 LabelFrame 布局组织界面,提供了合适的分割和组织布局的容器。

设定了合适的布局、大小和位置,使界面整洁美观,易于用户操作和理解。

self.Pane_left = tk.PanedWindow(self.frame1, width=162, bg="Azure")
self.Pane_left.pack(fill=tk.Y, side=tk.LEFT, padx=2, pady=2)
self.Button_add = tk.Button(self.Pane_left, text="信息添加", width=13, font=("华文黑体", 12, "bold"),
                            command=self.add_item)
self.Button_add.place(x=5, y=10)
self.Button_alter = tk.Button(self.Pane_left, text="信息修改", width=13, font=("华文黑体", 12, "bold"),
                              command=self.alter_item)
self.Button_alter.place(x=5, y=40)
self.Button_delete = tk.Button(self.Pane_left, text="信息删除", width=13, font=("华文黑体", 12, "bold"),
                               command=self.delete_item)
self.Button_delete.place(x=5, y=70)
self.Button_select = tk.Button(self.Pane_left, text="选票", width=13, font=("华文黑体", 12, "bold"),
                               command=self.select_item)
self.Button_select.place(x=5, y=100)
self.Button_modify = tk.Button(self.Pane_left, text="导入文件", width=13, font=("华文黑体", 12, "bold"),
                               command=self.openfile)
self.Button_modify.place(x=5, y=420)
self.Button_save = tk.Button(self.Pane_left, text="保存数据", width=13, font=("华文黑体", 12, "bold"),
                             command=self.save)
self.Button_save.place(x=5, y=450)

航班操作功能设计

选票 (select_item 方法):

弹出新窗口,提供航班信息选择界面。

用户可以在新窗口中选择需要购买的航班信息。

👇👇👇 关注公众号,回复 “飞机订票系统” 获取源码👇👇👇

def select_item(self):
     self.top_number = tk.Tk()
     self.top_number.title("select")
     label_number = tk.Label(self.top_number, text="请输入票数")
     entry_number = tk.Entry(self.top_number)
     button_number = tk.Button(self.top_number, text="确定", command=lambda: self.select_confirm(entry_number.get()))
     label_number.grid(row=0, column=0)
     entry_number.grid(row=0, column=1)
     button_number.grid(row=0, column=2)

退票 (cancel_selected 方法):

弹出新窗口,要求用户输入退票数量。

根据用户输入的数量进行退票操作。

更新已选购航班信息和待购航班信息的显示。

self.Pane_left_2 = tk.PanedWindow(self.frame2, width=162, bg="Azure")
   self.Pane_left_2.pack(fill=tk.Y, side=tk.LEFT, padx=2, pady=2)
   self.Button_cancel = tk.Button(self.Pane_left_2, text="退票", width=13, font=("华文黑体", 12, "bold"),
                                  command=self.cancel_selected)
   self.Button_cancel.place(x=5, y=10)

航班信息查询 (find_item 和 find_item2 方法):

用户可以根据航班号、起点和终点进行航班信息的查询。

查询结果将在对应的 Treeview 控件中显示。

def find_item(self):
    number = self.find_text()
    if (number == 0):
        return
    else:
        self.all_seek = []
        all_item_cur = []
        for it in self.Tree.get_children():
            all_item_cur.append(self.Tree.item(it, 'values'))
        self.all_seek = all_item_cur
        for index in self.find_texts.keys():
            self.all_seek = find_item1(self.all_seek, int(index), self.find_texts[index])
        # 如果没有查询到结果,进行相应的提示
        if (len(self.all_seek) == 0):
            showinfo(title="提示", message="无查询结果,请适当修改查询条件")
        # 查询到结果,进行数据的显示
        else:
            self.load_treeview(self.all_seek)

👇👇👇 关注公众号,回复 “飞机订票系统” 获取源码👇👇👇

辅助功能设计

数据展示与更新 (load_treeview 和 load_treeview2 方法):

根据提供的航班信息列表,将数据加载到相应的 Treeview 控件中进行展示。

包括航班号、出发时间、到站时间、起点、终点、票价、余额等信息。

self.load_treeview(self.all_fight_list)
  self.load_treeview2(self.all_selected)

异常处理与提示信息:

在文件读取、航班信息加载等过程中,进行异常处理。

当出现异常时,通过消息框 (showinfo) 提示用户相关信息。

def load_info(self):
        try:
            self.all_fight_list = []
            with open(file="待购航班情况.txt", mode="r", encoding="utf-8") as fd:
                # 一次读一行
                current_line = fd.readline()
                while current_line:
                    temp_list = current_line.strip().split(",")  # 长字符串分割层三个
                    self.all_fight_list.append(temp_list)
                    # 读取下一行,读完了循环就结束了
                    current_line = fd.readline()
            self.all_selected = []
            with open(file="已购航班情况.txt", mode="r", encoding="utf-8") as f:
                # 一次读一行
                current_line = f.readline()
                while current_line:
                    temp_list = current_line.strip().split(",")  # 长字符串分割层三个
                    self.all_selected.append(temp_list)
                    # 读取下一行,读完了循环就结束了
                    current_line = f.readline()
        except:
            showinfo("系统消息", "文件读取出现异常!")

👇👇👇 关注公众号,回复 “飞机订票系统” 获取源码👇👇👇


相关文章
|
2天前
|
缓存 监控 测试技术
Python中的装饰器:功能扩展与代码复用的利器###
本文深入探讨了Python中装饰器的概念、实现机制及其在实际开发中的应用价值。通过生动的实例和详尽的解释,文章展示了装饰器如何增强函数功能、提升代码可读性和维护性,并鼓励读者在项目中灵活运用这一强大的语言特性。 ###
|
5天前
|
缓存 开发者 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第35天】装饰器在Python中是一种强大的工具,它允许开发者在不修改原有函数代码的情况下增加额外的功能。本文旨在通过简明的语言和实际的编码示例,带领读者理解装饰器的概念、用法及其在实际编程场景中的应用,从而提升代码的可读性和复用性。
|
2天前
|
Python
探索Python中的装饰器:简化代码,提升效率
【10月更文挑战第39天】在编程的世界中,我们总是在寻找使代码更简洁、更高效的方法。Python的装饰器提供了一种强大的工具,能够让我们做到这一点。本文将深入探讨装饰器的基本概念,展示如何通过它们来增强函数的功能,同时保持代码的整洁性。我们将从基础开始,逐步深入到装饰器的高级用法,让你了解如何利用这一特性来优化你的Python代码。准备好让你的代码变得更加优雅和强大了吗?让我们开始吧!
7 1
|
7天前
|
设计模式 缓存 监控
Python中的装饰器:代码的魔法增强剂
在Python编程中,装饰器是一种强大而灵活的工具,它允许程序员在不修改函数或方法源代码的情况下增加额外的功能。本文将探讨装饰器的定义、工作原理以及如何通过自定义和标准库中的装饰器来优化代码结构和提高开发效率。通过实例演示,我们将深入了解装饰器的应用,包括日志记录、性能测量、事务处理等常见场景。此外,我们还将讨论装饰器的高级用法,如带参数的装饰器和类装饰器,为读者提供全面的装饰器使用指南。
|
2天前
|
存储 缓存 监控
掌握Python装饰器:提升代码复用性与可读性的利器
在本文中,我们将深入探讨Python装饰器的概念、工作原理以及如何有效地应用它们来增强代码的可读性和复用性。不同于传统的函数调用,装饰器提供了一种优雅的方式来修改或扩展函数的行为,而无需直接修改原始函数代码。通过实际示例和应用场景分析,本文旨在帮助读者理解装饰器的实用性,并鼓励在日常编程实践中灵活运用这一强大特性。
|
7天前
|
存储 算法 搜索推荐
Python高手必备!揭秘图(Graph)的N种风骚表示法,让你的代码瞬间高大上
在Python中,图作为重要的数据结构,广泛应用于社交网络分析、路径查找等领域。本文介绍四种图的表示方法:邻接矩阵、邻接表、边列表和邻接集。每种方法都有其特点和适用场景,掌握它们能提升代码效率和可读性,让你在项目中脱颖而出。
18 5
|
5天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
11 2
|
7天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
20 4
|
8天前
|
缓存 开发者 Python
探索Python中的装饰器:简化和增强你的代码
【10月更文挑战第32天】 在编程的世界中,简洁和效率是永恒的追求。Python提供了一种强大工具——装饰器,它允许我们以声明式的方式修改函数的行为。本文将深入探讨装饰器的概念、用法及其在实际应用中的优势。通过实际代码示例,我们不仅理解装饰器的工作方式,还能学会如何自定义装饰器来满足特定需求。无论你是初学者还是有经验的开发者,这篇文章都将为你揭示装饰器的神秘面纱,并展示如何利用它们简化和增强你的代码库。
|
7天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
16 2