【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("系统消息", "文件读取出现异常!")

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


相关文章
|
1天前
|
人工智能 机器人 测试技术
【Python】Python房屋销售系统(源码)【独一无二】(课程设计)
【Python】Python房屋销售系统(源码)【独一无二】(课程设计)
|
1天前
|
数据采集 小程序 前端开发
Python 制作天眼查小程序
Python 制作天眼查小程序
|
7月前
|
Python Windows
编程小白的自学笔记十六(python办公自动化操作EXCEL表格)
编程小白的自学笔记十六(python办公自动化操作EXCEL表格)
|
7月前
|
存储 API iOS开发
编程小白的自学笔记十五(python办公自动化操作EXCEL表格)
编程小白的自学笔记十五(python办公自动化操作EXCEL表格)
|
1天前
|
存储 人工智能 UED
【Python】Python基于tkinter的飞机订票系统设计(代码+报告)【独一无二】课程设计-毕业设计
【Python】Python基于tkinter的飞机订票系统设计(代码+报告)【独一无二】课程设计-毕业设计
|
1天前
|
数据采集 人工智能 数据库
【Python毕业设计】Python二手房拍卖网抓取工具设计与实现(源码+毕业论文)【独一无二】
【Python毕业设计】Python二手房拍卖网抓取工具设计与实现(源码+毕业论文)【独一无二】
|
1天前
|
编解码 人工智能 IDE
【python毕业设计】Python基于Pygame的跑酷游戏设计与实现(源码+毕业论文)【独一无二】
【python毕业设计】Python基于Pygame的跑酷游戏设计与实现(源码+毕业论文)【独一无二】
|
1天前
|
前端开发 算法 数据库
【python毕业设计】python基于pygame桥牌游戏设计与实现(源码+数据库+毕业论文)
【python毕业设计】python基于pygame桥牌游戏设计与实现(源码+数据库+毕业论文)
|
1天前
|
存储 人工智能 机器人
【python毕业设计】基于Python的医院信息管理系统的设计与实现(源码+数据库+毕业论文)【独一无二】
【python毕业设计】基于Python的医院信息管理系统的设计与实现(源码+数据库+毕业论文)【独一无二】
|
1天前
|
存储 定位技术 数据库
【python毕业设计】python基于Pygame的吃金币游戏设计与实现(源码+毕业论文)【独一无二】
【python毕业设计】python基于Pygame的吃金币游戏设计与实现(源码+毕业论文)【独一无二】