python 模拟飞机订票系统

目录

模拟订票系统需要有以下几个部分组成

运行效果截图

注意事项:(可能会出现的错误)


该文章已有解析版——

对线上飞机订票系统代码实现的分析_寒酥落北琬的博客-CSDN博客

模拟订票系统需要有以下几个部分组成

一、添加飞机信息

二、删除飞机信息

三、航班信息查询

四、航班信息显示

五、修改飞机数据

六、个人订票

七、个人退票

八、个人订票查询

九、退出系统

以上功能是通过python里面tkinter库实现用户界面和控制按钮的

先定义一个航班类

class Train:  # 定义一个航班类
    def __init__(self):
        self.ID = ''
        self.firstname = ''
        self.lastname = ''
        self.time = ''
        self.price = 0
        self.seating = 0

再定义一个用户类

class Users:
    def __init__(self):
        self.personID = ''
        self.name = ''
        self.ID = ''
        self.time = ''
        self.seating = 0

打开提前写好的txt文件,里面包含所有的航班信息,按照航班号、起点、终点、起飞时间、票价和剩余票数罗列而得,也可以后期通过“添加飞机信息”模块进行航班信息录入

def Init(trainlist):  # 初始化函数
    print("初始化......")
    file_object = open("flight.txt", 'r')
    for line in file_object:
        tra = Train()
        line = line.strip("\n")
        s = line.split(" ")
        tra.ID = s[0]#k268
        tra.firstname = s[1]#起点
        tra.lastname = s[2]#终点
        tra.time = s[3]#起飞时间
        tra.price = s[4]#票价
        tra.seating = s[5]#剩余票数
        trainlist.append(tra)
    file_object.close()
    man_object = open('man.txt', 'r')
    for line in man_object:
        user = Users()
        line = line.strip("\n")
        m = line.split(" ")
        user.personID = m[0]
        user.name = m[1]
        user.ID = m[2]
        user.time = m[3]
        user.seating = m[4]
        people.append(user)
    man_object.close()
    print("初始化成功!")

下面进入信息管理模块,其中包含添加、删除、查询模块

class ADD:  # 信息录入
    def Add_f(self):#“添加飞机信息”模块
        roob = Toplevel(win)
        roob.title('飞机信息输入')
        roob.geometry('500x240')
 
        lb1 = Label(roob, text='请输入航班号')
        lb1.place(relx=0.1, rely=0.1, relwidth=0.5, relheight=0.1)
        a_text = StringVar()
        a_text.set("")
        self.inp1 = Entry(roob, textvariable=a_text)
        self.inp1.place(relx=0.6, rely=0.1, relwidth=0.3, relheight=0.1)
 
        lb2 = Label(roob, text='请输入起点')
        lb2.place(relx=0.1, rely=0.2, relwidth=0.5, relheight=0.1)
        b_text = StringVar()
        b_text.set("")
        self.inp2 = Entry(roob, textvariable=b_text)
        self.inp2.place(relx=0.6, rely=0.2, relwidth=0.3, relheight=0.1)
 
        lb3 = Label(roob, text='请输入终点')
        lb3.place(relx=0.1, rely=0.3, relwidth=0.5, relheight=0.1)
        c_text = StringVar()
        c_text.set("")
        self.inp3 = Entry(roob, textvariable=c_text)
        self.inp3.place(relx=0.6, rely=0.3, relwidth=0.3, relheight=0.1)
 
        lb4 = Label(roob, text='请输入飞机起飞时间')
        lb4.place(relx=0.1, rely=0.4, relwidth=0.5, relheight=0.1)
        d_text = StringVar()
        d_text.set("")
        self.inp4 = Entry(roob, textvariable=d_text)
        self.inp4.place(relx=0.6, rely=0.4, relwidth=0.3, relheight=0.1)
 
        lb5 = Label(roob, text='请输入飞机的票价')
        lb5.place(relx=0.1, rely=0.5, relwidth=0.5, relheight=0.1)
        e_text = StringVar()
        e_text.set("")
        self.inp5 = Entry(roob, textvariable=e_text)
        self.inp5.place(relx=0.6, rely=0.5, relwidth=0.3, relheight=0.1)
 
        lb6 = Label(roob, text='请输入飞机的票数')
        lb6.place(relx=0.1, rely=0.6, relwidth=0.5, relheight=0.1)
        f_text = StringVar()
        f_text.set("")
        self.inp6 = Entry(roob, textvariable=f_text)
        self.inp6.place(relx=0.6, rely=0.6, relwidth=0.3, relheight=0.1)
 
        self.bt1 = Button(roob, text="清空数据", command=self.Delete)
        self.bt1.place(relx=0.1, rely=0.9, relwidth=0.1, relheight=0.1)
 
        self.bt = Button(roob, text="添加", command=lambda: self.Add(a_text, b_text, c_text, d_text, e_text, f_text))
        self.bt.place(relx=0.7, rely=0.8, relwidth=0.2, relheight=0.1)
 
        self.btClose = Button(roob, text='关闭', command=roob.destroy)
        self.btClose.place(relx=0.7, rely=0.9, relwidth=0.2, relheight=0.1)
 
        self.txt = Text(roob)
        self.txt.place(relx=0.1, rely=0.8, relwidth=0.4, relheight=0.1)
 
    def Delete(self):#“删除飞机信息”模块
        self.inp1.delete(0, END)
        self.inp2.delete(0, END)
        self.inp3.delete(0, END)
        self.inp4.delete(0, END)
        self.inp5.delete(0, END)
        self.inp6.delete(0, END)
 
    def Add(self, ID, firstname, lastname, time, price, seating):
        tra = Train()
        tra.ID = str(ID.get())
        tra.firstname = str(firstname.get())
        tra.lastname = str(lastname.get())
        tra.time = str(time.get())
        tra.price = str(price.get())
        tra.seating = str(seating.get())
        print(tra.ID, tra.firstname, tra.lastname, tra.time, tra.price, tra.seating)
        if self.searchByID(trainlist, tra.ID) == True:
            self.txt.delete(1.0, END)
            self.txt.insert(END, '航班重复,保存失败')
            return
        trainlist.append(tra)
        file_object = open("train.txt", "a")
        file_object.write(tra.ID)
        file_object.write(" ")
        file_object.write(tra.firstname)
        file_object.write(" ")
        file_object.write(tra.lastname)
        file_object.write(" ")
        file_object.write(tra.time)
        file_object.write(" ")
        file_object.write(tra.price)
        file_object.write(" ")
        file_object.write(tra.seating)
        file_object.write("\n")
        file_object.close()
        self.txt.delete(1.0, END)
        self.txt.insert(END, '保存成功')
 
        return
 
    def searchByID(self, trainlist, ID):#“航班信息查询”
        for item in trainlist:
            if item.ID == ID:
                return True
        return False
 

其他模块就不再一一罗列,具体功能写在代码的注释里面,整体功能的实现代码如下:

from tkinter import *
import os
 
win = Tk()
win.title('飞机订票系统')
win.geometry('700x400+280+150')
trainlist = []
people = []
m = ''
s = ''
 
class Train:  # 定义一个航班类
    def __init__(self):
        self.ID = ''
        self.firstname = ''
        self.lastname = ''
        self.time = ''
        self.price = 0
        self.seating = 0
 
class Users:
    def __init__(self):
        self.personID = ''
        self.name = ''
        self.ID = ''
        self.time = ''
        self.seating = 0

def Init(trainlist):  # 初始化函数
    print("初始化......")
    file_object = open("flight.txt", 'r',encoding='utf-8')
    for line in file_object:
        tra = Train()
        line = line.strip("\n")
        s = line.split(" ")
        tra.ID = s[0]#航班号
        tra.firstname = s[1]#起点
        tra.lastname = s[2]#终点
        tra.time = s[3]#起飞时间
        tra.price = s[4]#票价
        tra.seating = s[5]#剩余票数
        trainlist.append(tra)
    file_object.close()
    man_object = open('man.txt', 'r')
    for line in man_object:
        user = Users()
        line = line.strip("\n")
        m = line.split(" ")
        user.personID = m[0]#
        user.name = m[1]#
        user.ID = m[2]#
        user.time = m[3]#
        user.seating = m[4]#
        people.append(user)
    man_object.close()
    print("初始化成功!")
 
class ADD:  # 信息录入
    def Add_f(self):
        roob = Toplevel(win)
        roob.title('飞机信息输入')
        roob.geometry('500x240')
 
        lb1 = Label(roob, text='请输入航班号')
        lb1.place(relx=0.1, rely=0.1, relwidth=0.5, relheight=0.1)
        a_text = StringVar()
        a_text.set("")
        self.inp1 = Entry(roob, textvariable=a_text)
        self.inp1.place(relx=0.6, rely=0.1, relwidth=0.3, relheight=0.1)
 
        lb2 = Label(roob, text='请输入起点')
        lb2.place(relx=0.1, rely=0.2, relwidth=0.5, relheight=0.1)
        b_text = StringVar()
        b_text.set("")
        self.inp2 = Entry(roob, textvariable=b_text)
        self.inp2.place(relx=0.6, rely=0.2, relwidth=0.3, relheight=0.1)
 
        lb3 = Label(roob, text='请输入终点')
        lb3.place(relx=0.1, rely=0.3, relwidth=0.5, relheight=0.1)
        c_text = StringVar()
        c_text.set("")
        self.inp3 = Entry(roob, textvariable=c_text)
        self.inp3.place(relx=0.6, rely=0.3, relwidth=0.3, relheight=0.1)
 
        lb4 = Label(roob, text='请输入飞机起飞时间')
        lb4.place(relx=0.1, rely=0.4, relwidth=0.5, relheight=0.1)
        d_text = StringVar()
        d_text.set("")
        self.inp4 = Entry(roob, textvariable=d_text)
        self.inp4.place(relx=0.6, rely=0.4, relwidth=0.3, relheight=0.1)
 
        lb5 = Label(roob, text='请输入飞机的票价')
        lb5.place(relx=0.1, rely=0.5, relwidth=0.5, relheight=0.1)
        e_text = StringVar()
        e_text.set("")
        self.inp5 = Entry(roob, textvariable=e_text)
        self.inp5.place(relx=0.6, rely=0.5, relwidth=0.3, relheight=0.1)
 
        lb6 = Label(roob, text='请输入飞机的票数')
        lb6.place(relx=0.1, rely=0.6, relwidth=0.5, relheight=0.1)
        f_text = StringVar()
        f_text.set("")
        self.inp6 = Entry(roob, textvariable=f_text)
        self.inp6.place(relx=0.6, rely=0.6, relwidth=0.3, relheight=0.1)
 
        self.bt1 = Button(roob, text="清空数据", command=self.Delete)
        self.bt1.place(relx=0.1, rely=0.9, relwidth=0.1, relheight=0.1)
 
        self.bt = Button(roob, text="添加", command=lambda: self.Add(a_text, b_text, c_text, d_text, e_text, f_text))
        self.bt.place(relx=0.7, rely=0.8, relwidth=0.2, relheight=0.1)
 
        self.btClose = Button(roob, text='关闭', command=roob.destroy)
        self.btClose.place(relx=0.7, rely=0.9, relwidth=0.2, relheight=0.1)
 
        self.txt = Text(roob)
        self.txt.place(relx=0.1, rely=0.8, relwidth=0.4, relheight=0.1)
 
    def Delete(self):
        self.inp1.delete(0, END)
        self.inp2.delete(0, END)
        self.inp3.delete(0, END)
        self.inp4.delete(0, END)
        self.inp5.delete(0, END)
        self.inp6.delete(0, END)
 
    def Add(self, ID, firstname, lastname, time, price, seating):
        tra = Train()
        tra.ID = str(ID.get())
        tra.firstname = str(firstname.get())
        tra.lastname = str(lastname.get())
        tra.time = str(time.get())
        tra.price = str(price.get())
        tra.seating = str(seating.get())
        print(tra.ID, tra.firstname, tra.lastname, tra.time, tra.price, tra.seating)
        if self.searchByID(trainlist, tra.ID) == True:
            self.txt.delete(1.0, END)
            self.txt.insert(END, '航班重复,保存失败')
            return
        trainlist.append(tra)
        file_object = open("train.txt", "a")
        file_object.write(tra.ID)
        file_object.write(" ")
        file_object.write(tra.firstname)
        file_object.write(" ")
        file_object.write(tra.lastname)
        file_object.write(" ")
        file_object.write(tra.time)
        file_object.write(" ")
        file_object.write(tra.price)
        file_object.write(" ")
        file_object.write(tra.seating)
        file_object.write("\n")
        file_object.close()
        self.txt.delete(1.0, END)
        self.txt.insert(END, '保存成功')
 
        return
 
    def searchByID(self, trainlist, ID):
        for item in trainlist:
            if item.ID == ID:
                return True
        return False
 
 
class BTT:  # 订票模块
    def Btt_f(self):
        win_2 = Toplevel(win)
        win_2.title('用户订票')
        win_2.geometry('600x400')
 
        lb1 = Label(win_2, text='请输入出发地:')
        lb1.place(relx=0, rely=0, relwidth=0.2, relheight=0.1)
        a_text = StringVar()
        a_text.set("")
        self.inp1 = Entry(win_2, textvariable=a_text)
        self.inp1.place(relx=0.2, rely=0, relwidth=0.3, relheight=0.1)
 
        lb2 = Label(win_2, text='请输入目的地:')
        lb2.place(relx=0, rely=0.1, relwidth=0.2, relheight=0.1)
        b_text = StringVar()
        b_text.set("")
        self.inp2 = Entry(win_2, textvariable=b_text)
        self.inp2.place(relx=0.2, rely=0.1, relwidth=0.3, relheight=0.1)
 
        lb3 = Label(win_2, text='请输入您的姓名:')
        lb3.place(relx=0, rely=0.65, relwidth=0.2, relheight=0.1)
        c_text = StringVar()
        c_text.set("")
        self.inp3 = Entry(win_2, textvariable=c_text)
        self.inp3.place(relx=0.2, rely=0.66, relwidth=0.3, relheight=0.07)
 
        lb4 = Label(win_2, text='请输入您的ID: ')
        lb4.place(relx=0, rely=0.75, relwidth=0.2, relheight=0.1)
        d_text = StringVar()
        d_text.set("")
        self.inp4 = Entry(win_2, textvariable=d_text)
        self.inp4.place(relx=0.2, rely=0.76, relwidth=0.3, relheight=0.07)
 
        lb5 = Label(win_2, text='请输入航班号:')
        lb5.place(relx=0, rely=0.85, relwidth=0.2, relheight=0.1)
        e_text = StringVar()
        e_text.set("")
        self.inp5 = Entry(win_2, textvariable=e_text)
        self.inp5.place(relx=0.2, rely=0.86, relwidth=0.3, relheight=0.07)
 
        lb6 = Label(win_2, text='请输入所需票数:')
        lb6.place(relx=0.6, rely=0.65, relwidth=0.2, relheight=0.1)
        f_text = StringVar()
        f_text.set("")
        self.inp6 = Entry(win_2, textvariable=f_text)
        self.inp6.place(relx=0.8, rely=0.66, relwidth=0.1, relheight=0.07)
 
        self.bt1 = Button(win_2, text="清空数据", command=self.Delete)
        self.bt1.place(relx=0.6, rely=0.05, relwidth=0.15, relheight=0.1)
 
        self.btClose = Button(win_2, text='关闭', command=win_2.destroy)
        self.btClose.place(relx=0.8, rely=0.05, relwidth=0.15, relheight=0.1)
 
        self.bt = Button(win_2, text="查询", command=self.Search)
        self.bt.place(relx=0.27, rely=0.25, relwidth=0.15, relheight=0.1)
 
        self.bt2 = Button(win_2, text="确认", command=lambda: self.Btt(c_text, d_text, e_text, f_text))
        self.bt2.place(relx=0.7, rely=0.75, relwidth=0.15, relheight=0.1)
 
        self.txt = Text(win_2)
        self.txt.place(relx=0.05, rely=0.4, relwidth=0.85, relheight=0.2)
 
        self.txt_2 = Text(win_2)
        self.txt_2.place(relx=0.6, rely=0.9, relwidth=0.3, relheight=0.05)
 
    def Delete(self):
        self.inp1.delete(0, END)
        self.inp2.delete(0, END)
        self.inp3.delete(0, END)
        self.inp4.delete(0, END)
        self.inp5.delete(0, END)
        self.inp6.delete(0, END)
        self.txt.delete(1.0, END)
 
    def Search(self):
        firstname = self.inp1.get()
        lastname = self.inp2.get()
        if self.searchByID(trainlist, firstname) == False and self.searchByID2(trainlist, lastname) == False:
            self.txt.delete(1.0, END)
            self.txt.insert(END, '没有符合条件的航班!')
            self.inp1.delete(0, END)
            self.inp2.delete(0, END)
            return
 
        self.txt.delete(1.0, END)
        self.txt.insert(END,
                        "{0:^6}\t{1:{6}^6}\t{2:{6}^6}\t{3:{6}^6}\t{4:{6}^6}\t{5:{6}^6}\n".format("航班", "起点", "终点", "时间",
                                                                                                 "票价", "剩余票数",
                                                                                                 chr(12288)))
        for item in trainlist:
            if item.firstname == firstname or item.lastname == lastname:
                self.txt.insert(END,
                                "{0:^8}\t{1:{6}^6}\t{2:{6}^6}\t{3:^12}\t{4:^12}\t{5:^8}\n".format(item.ID,
                                                                                                  item.firstname,
                                                                                                  item.lastname,
                                                                                                  item.time, item.price,
                                                                                                  item.seating,
                                                                                                  chr(12288)))
                self.inp1.delete(0, END)
                self.inp2.delete(0, END)
                # break
 
    def searchByID(self, trainlist, firstname):
        for item in trainlist:
            if item.firstname == firstname:
                return True
        return False
 
    def searchByID2(self, trainlist, lastname):
        for item in trainlist:
            if item.lastname == lastname:
                return True
        return False
 
    def searchByID3(self, trainlist, ID):
        for item in trainlist:
            if item.ID == ID:
                return True
        return False
 
    def searchByID4(self, trainlist, ID, seating):
        for item in trainlist:
            if item.ID == ID:
                if int(item.seating) - int(seating) < 0:
                    return True
                else:
                    item.seating = str(int(item.seating) - int(seating))
        return False
 
    def Btt(self, name, personID, ID, seating):
        man = Users()
        man.personID = str(personID.get())
        man.name = str(name.get())
        man.ID = str(ID.get())
        for item in trainlist:
            if item.ID == ID.get():
                man.time = str(item.time)
        man.seating = str(seating.get())
 
        print(man.personID, man.name, man.ID, man.time, man.seating)
        if self.searchByID3(trainlist, man.ID) == False:
            self.txt_2.delete(1.0, END)
            self.txt_2.insert(END, '未找到对应航班! ')
            return
        if self.searchByID4(trainlist, man.ID, man.seating):
            self.txt_2.insert(END, '余票不足!')
            return
 
        people.append(man)
        man_object = open("man.txt", "a")
        man_object.write(man.personID)
        man_object.write(" ")
        man_object.write(man.name)
        man_object.write(" ")
        man_object.write(man.ID)
        man_object.write(" ")
        man_object.write(man.time)
        man_object.write(" ")
        man_object.write(man.seating)
        man_object.write("\n")
        man_object.close()
        self.txt_2.delete(1.0, END)
        self.txt_2.insert(END, '订票成功')
 
        changeID = str(ID.get())
        for item in trainlist:
            if item.ID == changeID:
                # trainlist.remove(item)
                file_object = open("train.txt", "w")
                for tra in trainlist:
                    file_object.write(tra.ID)
                    file_object.write(" ")
                    file_object.write(tra.firstname)
                    file_object.write(" ")
                    file_object.write(tra.lastname)
                    file_object.write(" ")
                    file_object.write(str(tra.time))
                    file_object.write(" ")
                    file_object.write(str(tra.price))
                    file_object.write(" ")
                    file_object.write(str(tra.seating))
                    file_object.write("\n")
                file_object.close()
        return
 
 
class DEL:  # 飞机信息删除
    def Del_f(self):
        roob = Toplevel(win)
        roob.title('飞机信息删除')
        roob.geometry('500x240')
 
        lb4 = Label(roob, text='请输入航班号:')
        lb4.place(relx=0, rely=0.2, relwidth=0.3, relheight=0.1)
        d_text = StringVar()
        d_text.set("")
        self.inp4 = Entry(roob, textvariable=d_text)
        self.inp4.place(relx=0.3, rely=0.2, relwidth=0.2, relheight=0.1)
 
        self.bt = Button(roob, text="删除", command=self.Del)
        self.bt.place(relx=0.7, rely=0.2, relwidth=0.2, relheight=0.2)
 
        self.btClose = Button(roob, text='关闭', command=roob.destroy)
        self.btClose.place(relx=0.7, rely=0.4, relwidth=0.2, relheight=0.2)
 
        self.txt = Text(roob)
        self.txt.place(relx=0.05, rely=0.4, relwidth=0.5, relheight=0.2)
 
    def searchByID(self, trainlist, ID):
        for item in trainlist:
            if item.ID == ID:
                return True
        return False
 
    def Del(self):
        ID = self.inp4.get()
        if self.searchByID(trainlist, ID) == False:
            self.txt.delete(1.0, END)
            self.txt.insert(END, '没有该航班信息!')
            self.inp4.delete(0, END)
            return
 
        for item in trainlist:
            if item.ID == ID:
                trainlist.remove(item)
                self.txt.delete(1.0, END)
                self.txt.insert(END, '删除成功!')
                self.inp4.delete(0, END)
                break
 
        file_object = open("train.txt", "w")
        for tra in trainlist:
            file_object.write(tra.ID)
            file_object.write(" ")
            file_object.write(tra.firstname)
            file_object.write(" ")
            file_object.write(tra.lastname)
            file_object.write(" ")
            file_object.write(str(tra.time))
            file_object.write(" ")
            file_object.write(str(tra.price))
            file_object.write(" ")
            file_object.write(str(tra.seating))
            file_object.write("\n")
        file_object.close()
 
 
class SEA:  # 飞机信息查询
    def Search_f(self):
        roob = Toplevel(win)
        roob.title('飞机信息查询')
        roob.geometry('650x150')
 
        lb4 = Label(roob, text='请输入航班号')
        lb4.place(relx=0.2, rely=0.1, relwidth=0.4, relheight=0.2)
        d_text = StringVar()
        d_text.set("")
        self.inp4 = Entry(roob, textvariable=d_text)
        self.inp4.place(relx=0.6, rely=0.1, relwidth=0.2, relheight=0.2)
 
        self.bt = Button(roob, text="查询", command=self.Search)
        self.bt.place(relx=0.1, rely=0.3, relwidth=0.2, relheight=0.2)
 
        self.btClose = Button(roob, text='关闭', command=roob.destroy)
        self.btClose.place(relx=0.5, rely=0.3, relwidth=0.2, relheight=0.2)
 
        self.txt = Text(roob)
        self.txt.place(relx=0.1, rely=0.6, relwidth=0.8, relheight=0.2)
 
    def Search(self):
        ID = self.inp4.get()
        if self.searchByID(trainlist, ID) == False:
            self.txt.delete(1.0, END)
            self.txt.insert(END, '没有该航班信息!')
            self.inp4.delete(0, END)
            return
 
        self.txt.delete(1.0, END)
        self.txt.insert(END,
                        "{0:^6}\t{1:{6}^6}\t{2:{6}^6}\t{3:{6}^6}\t{4:{6}^6}\t{5:{6}^6}".format("航班", "起点", "终点", "时间",
                                                                                               "票价", "剩余票数",
                                                                                               chr(12288)))
        for item in trainlist:
            if item.ID == ID:
                self.txt.insert(END,
                                "{0:^8}\t{1:{6}^6}\t{2:{6}^6}\t{3:^12}\t{4:^12}\t{5:^8}".format(item.ID, item.firstname,
                                                                                                item.lastname,
                                                                                                item.time, item.price,
                                                                                                item.seating,
                                                                                                chr(12288)))
                self.inp4.delete(0, END)
                break
 
    def searchByID(self, trainlist, ID):
        for item in trainlist:
            if item.ID == ID:
                return True
        return False
 
 
class DIS:  # 飞机信息显示
    def display(self):
        roob = Toplevel(win)
        roob.title('飞机信息显示')
        roob.geometry('510x240')
 
        self.txt = Text(roob)
        self.txt.place(relwidth=1, relheight=1)
 
        self.txt.insert(END,
                        "{0:^6}\t{1:{6}^6}\t{2:{6}^6}\t{3:{6}^6}\t{4:{6}^6}\t{5:{6}^6}\n".format("航班", "起点", "终点", "时间",
                                                                                                 "票价", "剩余票数",
                                                                                                 chr(12288)))
        size = os.path.getsize('flight.txt')
        if size == 0:
            self.txt.insert(END, '没有车次信息')
            return
        self.Sort(trainlist)
        for item in trainlist:
            self.txt.insert(END,
                            "{0:^8}\t{1:{6}^6}\t{2:{6}^6}\t{3:^12}\t{4:^12}\t{5:^8}\n".format(item.ID, item.firstname,
                                                                                              item.lastname, item.time,
                                                                                              item.price, item.seating,
                                                                                              chr(12288)))
 
    def Sort(self, trainlist):
        tra = []
        time_count = []
        for li in trainlist:
            temp = []
            temp.append(li.ID)
            temp.append(li.firstname)
            temp.append(li.lastname)
            temp.append(str(li.time))
            temp.append(int(li.price))
            temp.append(int(li.seating))
            time_count.append(li.ID)
            tra.append(temp)
 
        self.insertSort(time_count, trainlist)
 
    def insertSort(self, a, trainlist):
        for i in range(len(a) - 1):
            for j in range(i + 1, len(a)):
                if a[i] > a[j]:
                    temp = trainlist[i]
                    trainlist[i] = trainlist[j]
                    trainlist[j] = temp
 
 
class CHA:  # 信息修改
    def Change_f(self):
        roob = Toplevel(win)
        roob.title('飞机信息修改')
        roob.geometry('600x240')
 
        lb = Label(roob, text='请输入航班号:')
        lb.place(relx=0.1, rely=0, relwidth=0.4, relheight=0.1)
        d_text = StringVar()
        d_text.set("")
        self.inp = Entry(roob, textvariable=d_text)
        self.inp.place(relx=0.5, rely=0, relwidth=0.2, relheight=0.1)
 
        self.bt = Button(roob, text="查询", command=self.sal)
        self.bt.place(relx=0.8, rely=0, relwidth=0.2, relheight=0.1)
 
        self.txt = Text(roob)
        self.txt.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.1)
 
        lb1 = Label(roob, text='请输入航班号:')
        lb1.place(relx=0.1, rely=0.2, relwidth=0.5, relheight=0.1)
        a_text = StringVar()
        a_text.set("")
        self.inp1 = Entry(roob, textvariable=a_text)
        self.inp1.place(relx=0.6, rely=0.2, relwidth=0.3, relheight=0.1)
 
        lb2 = Label(roob, text='请输入起点:')
        lb2.place(relx=0.1, rely=0.3, relwidth=0.5, relheight=0.1)
        b_text = StringVar()
        b_text.set("")
        self.inp2 = Entry(roob, textvariable=b_text)
        self.inp2.place(relx=0.6, rely=0.3, relwidth=0.3, relheight=0.1)
 
        lb3 = Label(roob, text='请输入终点:')
        lb3.place(relx=0.1, rely=0.4, relwidth=0.5, relheight=0.1)
        c_text = StringVar()
        c_text.set("")
        self.inp3 = Entry(roob, textvariable=c_text)
        self.inp3.place(relx=0.6, rely=0.4, relwidth=0.3, relheight=0.1)
 
        lb4 = Label(roob, text='请输入起飞时间:')
        lb4.place(relx=0.1, rely=0.5, relwidth=0.5, relheight=0.1)
        d_text = StringVar()
        d_text.set("")
        self.inp4 = Entry(roob, textvariable=d_text)
        self.inp4.place(relx=0.6, rely=0.5, relwidth=0.3, relheight=0.1)
 
        lb5 = Label(roob, text='请输入飞机的票价:')
        lb5.place(relx=0.1, rely=0.6, relwidth=0.5, relheight=0.1)
        e_text = StringVar()
        e_text.set("")
        self.inp5 = Entry(roob, textvariable=e_text)
        self.inp5.place(relx=0.6, rely=0.6, relwidth=0.3, relheight=0.1)
 
        lb6 = Label(roob, text='请输入飞机的票数:')
        lb6.place(relx=0.1, rely=0.7, relwidth=0.5, relheight=0.1)
        f_text = StringVar()
        f_text.set("")
        self.inp6 = Entry(roob, textvariable=f_text)
        self.inp6.place(relx=0.6, rely=0.7, relwidth=0.3, relheight=0.1)
 
        self.bt1 = Button(roob, text="清空数据", command=self.Delete)
        self.bt1.place(relx=0.1, rely=0.9, relwidth=0.1, relheight=0.1)
 
        self.bt2 = Button(roob, text="修改", command=self.Change)
        self.bt2.place(relx=0.7, rely=0.8, relwidth=0.2, relheight=0.1)
 
        self.btClose = Button(roob, text='关闭', command=roob.destroy)
        self.btClose.place(relx=0.7, rely=0.9, relwidth=0.2, relheight=0.1)
 
        self.txt1 = Text(roob)
        self.txt1.place(relx=0.1, rely=0.8, relwidth=0.4, relheight=0.1)
 
    def sal(self):
        ID = self.inp.get()
        if self.searchByID(trainlist, ID) == False:
            self.txt.delete(1.0, END)
            self.txt.insert(END, '没有该航班信息!')
            self.inp.delete(0, END)
            return
        self.txt.delete(1.0, END)
        for item in trainlist:
            if item.ID == ID:
                self.txt.insert(END,
                                "{0:^8}\t{1:{6}^6}\t{2:{6}^6}\t{3:^12}\t{4:^12}\t{5:^8}".format(item.ID, item.firstname,
                                                                                                item.lastname,
                                                                                                item.time, item.price,
                                                                                                item.seating,
                                                                                                chr(12288)))
                break
 
    def searchByID(self, trainlist, ID):
        for item in trainlist:
            if item.ID == ID:
                return True
        return False
 
    def Delete(self):
        self.inp1.delete(0, END)
        self.inp2.delete(0, END)
        self.inp3.delete(0, END)
        self.inp4.delete(0, END)
        self.inp5.delete(0, END)
        self.inp6.delete(0, END)
 
    def Change(self):
        ID = self.inp.get()
        for item in trainlist:
            if item.ID == ID:
                trainlist.remove(item)
                file_object = open("train.txt", "w")
                for tra in trainlist:
                    file_object.write(tra.ID)
                    file_object.write(" ")
                    file_object.write(tra.firstname)
                    file_object.write(" ")
                    file_object.write(tra.lastname)
                    file_object.write(" ")
                    file_object.write(str(tra.time))
                    file_object.write(" ")
                    file_object.write(str(tra.price))
                    file_object.write(" ")
                    file_object.write(str(tra.seating))
                    file_object.write("\n")
                file_object.close()
        tra = Train()
        tra.ID = str(self.inp1.get())
        tra.firstname = str(self.inp2.get())
        tra.lastname = str(self.inp3.get())
        tra.time = str(self.inp4.get())
        tra.price = str(self.inp5.get())
        tra.seating = str(self.inp6.get())
        self.Add(trainlist, tra)
        print(tra.ID)
 
    def Add(self, trainlist, tra):
        if self.searchByID(trainlist, tra.ID) == True:
            self.txt1.delete(1.0, END)
            self.txt1.insert(END, '航班重复,修改失败')
            return
        trainlist.append(tra)
        file_object = open("train.txt", "a")
        file_object.write(tra.ID)
        file_object.write(" ")
        file_object.write(tra.firstname)
        file_object.write(" ")
        file_object.write(tra.lastname)
        file_object.write(" ")
        file_object.write(tra.time)
        file_object.write(" ")
        file_object.write(tra.price)
        file_object.write(" ")
        file_object.write(tra.seating)
        file_object.write("\n")
        file_object.close()
        self.txt1.delete(1.0, END)
        self.txt1.insert(END, '修改成功')
 
        return
 
 
class GRT:
    def Grt_f(self):
        roob = Toplevel(win)
        roob.title('个人退票')
        roob.geometry('400x160')
 
        lb4 = Label(roob, text='请输入您的个人ID: ')
        lb4.place(relx=0, rely=0.05, relwidth=0.4, relheight=0.2)
        d_text = StringVar()
        d_text.set("")
        self.inp4 = Entry(roob, textvariable=d_text)
        self.inp4.place(relx=0.4, rely=0.07, relwidth=0.3, relheight=0.15)
 
        lb5 = Label(roob, text='请输入所退航班号:')
        lb5.place(relx=0, rely=0.25, relwidth=0.4, relheight=0.2)
        e_text = StringVar()
        e_text.set("")
        self.inp5 = Entry(roob, textvariable=e_text)
        self.inp5.place(relx=0.4, rely=0.27, relwidth=0.3, relheight=0.15)
 
        self.bt = Button(roob, text="退票", command=self.Del)
        self.bt.place(relx=0.6, rely=0.5, relwidth=0.3, relheight=0.2)
 
        self.btClose = Button(roob, text='关闭', command=roob.destroy)
        self.btClose.place(relx=0.6, rely=0.7, relwidth=0.3, relheight=0.2)
 
        self.txt = Text(roob)
        self.txt.place(relx=0.1, rely=0.6, relwidth=0.4, relheight=0.2)
 
    def searchByID(self, people, personID, trainID):
        for item in people:
            if item.personID == personID and item.ID == trainID:
                return True
        return False
 
    def searchByID4(self, trainlist, ID, seating):
        for item in trainlist:
            if item.ID == ID:
                item.seating = str(int(item.seating) + int(seating))
 
    def Del(self):
        global changeID_2
        personID = self.inp4.get()
        trainID = self.inp5.get()
        if not self.searchByID(people, personID, trainID):
            self.txt.delete(1.0, END)
            self.txt.insert(END, '没有订票信息!')
            self.inp4.delete(0, END)
            return
 
        for item in people:
            if item.personID == personID and item.ID == trainID:
                changeID_2 = item.ID
                self.searchByID4(trainlist, item.ID, item.seating)
                people.remove(item)
                self.txt.delete(1.0, END)
                self.txt.insert(END, '退票成功!')
                self.inp4.delete(0, END)
                break
        man_object = open("man.txt", "w")
        for man in people:
            man_object.write(man.personID)
            man_object.write(" ")
            man_object.write(man.name)
            man_object.write(" ")
            man_object.write(man.ID)
            man_object.write(" ")
            man_object.write(man.time)
            man_object.write(" ")
            man_object.write(str(man.seating))
            man_object.write("\n")
        man_object.close()
 
        for item in trainlist:
            if item.ID == changeID_2:
                # trainlist.remove(item)
                file_object = open("train.txt", "w")
                for tra in trainlist:
                    file_object.write(tra.ID)
                    file_object.write(" ")
                    file_object.write(tra.firstname)
                    file_object.write(" ")
                    file_object.write(tra.lastname)
                    file_object.write(" ")
                    file_object.write(str(tra.time))
                    file_object.write(" ")
                    file_object.write(str(tra.price))
                    file_object.write(" ")
                    file_object.write(str(tra.seating))
                    file_object.write("\n")
                file_object.close()
        return
 
 
class PBE:
    def Pbe_f(self):
        roob = Toplevel(win)
        roob.title('个人订票查询')
        roob.geometry('650x300')
 
        lb4 = Label(roob, text='请输入您的ID: ')
        lb4.place(relx=0.1, rely=0.1, relwidth=0.2, relheight=0.2)
        d_text = StringVar()
        d_text.set("")
        self.inp4 = Entry(roob, textvariable=d_text)
        self.inp4.place(relx=0.3, rely=0.15, relwidth=0.3, relheight=0.1)
 
        self.bt = Button(roob, text="查询", command=self.Search)
        self.bt.place(relx=0.75, rely=0.1, relwidth=0.15, relheight=0.15)
 
        self.btClose = Button(roob, text='关闭', command=roob.destroy)
        self.btClose.place(relx=0.75, rely=0.3, relwidth=0.15, relheight=0.15)
 
        self.txt = Text(roob)
        self.txt.place(relx=0.1, rely=0.6, relwidth=0.8, relheight=0.2)
 
    def Search(self):
        personID = self.inp4.get()
        if self.searchByID(people, personID) == False:
            self.txt.delete(1.0, END)
            self.txt.insert(END, '没有订票信息!')
            self.inp4.delete(0, END)
            return
        self.txt.delete(1.0, END)
        self.txt.insert(END,
                        "{0:^5}\t{1:{5}^10}\t{2:{5}^5}\t{3:{5}^8}\t{4:{5}^6}\n".format("ID", "姓名", "航班号", "时间",
                                                                                    "票数", chr(12288)))
        for item in people:
            if item.personID == personID:
                self.txt.insert(END,
                                "{0:^5}\t{1:{5}^10}\t{2:{5}^8}\t{3:{5}^8}\t{4:{5}^7}\n".format(item.personID, item.name,
                                                                                       item.ID, item.time,
                                                                                       item.seating, chr(12288)))
                self.inp4.delete(0, END)
                #break
 
    def searchByID(self, people, personID):
        for item in people:
            if item.personID == personID:
                return True
        return False
 
 
def main():  # 主函数 该程序的入口函数
    b.destroy()
    win.title('模拟飞机订票系统')
    win.geometry('700x400+280+150')
    # win.colors = '#d3fbfb'
    add = ADD()
    bt1 = Button(win, text="添加飞机信息", command=add.Add_f)
    bt1.place(relx=0.20, rely=0.05, relwidth=0.3, relheight=0.2)
 
    dela = DEL()
    bt2 = Button(win, text="删除飞机信息", command=dela.Del_f)
    bt2.place(relx=0.50, rely=0.05, relwidth=0.3, relheight=0.2)
 
    sea = SEA()
    bt6 = Button(win, text="航班信息查询", command=sea.Search_f)
    bt6.place(relx=0.20, rely=0.25, relwidth=0.3, relheight=0.2)
 
    dis = DIS()
    bt3 = Button(win, text="航班信息显示", command=dis.display)
    bt3.place(relx=0.50, rely=0.25, relwidth=0.3, relheight=0.2)
 
    cha = CHA()
    bt4 = Button(win, text="修改飞机数据", command=cha.Change_f)
    bt4.place(relx=0.20, rely=0.45, relwidth=0.3, relheight=0.2)
 
    bt5 = Button(win, text="退出系统", command=win.destroy)
    bt5.place(relx=0.35, rely=0.85, relwidth=0.3, relheight=0.1)
 
    btt = BTT()
    bt7 = Button(win, text="个人订票", command=btt.Btt_f)
    bt7.place(relx=0.50, rely=0.45, relwidth=0.3, relheight=0.2)
 
    grt = GRT()
    bt8 = Button(win, text="个人退票", command=grt.Grt_f)
    bt8.place(relx=0.20, rely=0.65, relwidth=0.3, relheight=0.2)
 
    pbe = PBE()
    bt9 = Button(win, text="个人订票查询", command=pbe.Pbe_f)
    bt9.place(relx=0.50, rely=0.65, relwidth=0.3, relheight=0.2)
 
 
Init(trainlist)
b = Button(win, text="欢迎使用航空公司订票系统", bg='#d3fbfb', fg='red', font=('华文新魏', 32), relief=SUNKEN, command=main, width=500,
           height=240)
b.pack()#把组件放到页面上
 
win.mainloop()

运行效果截图

 

 

 

 

注意事项:(可能会出现的错误)

一、No such file or directory: 'flight.txt'

这种情况的原因应该是txt文件和py文件不在一个根目录里面

解决办法:把txt文件和py文件放在一个文件夹里面

二、-tkinter.TclError: couldn't recognize data in image file "light.jpg"

这种情况的原因是tkinter库无法识别.jpg格式的文件

解决办法:把jpg换为gif的文件,或者换一个库使用,如PIL库

猜你喜欢

转载自blog.csdn.net/m0_74776728/article/details/130840059