本文包括以下内容

  • 模拟订票系统的各个模块说明
  • 运行截图
  • 可能出现的Bug
  • 解决方案

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

一、添加飞机信息

二、删除飞机信息

三、航班信息查询

四、航班信息显示

五、修改飞机数据

六、个人订票

七、个人退票

八、个人订票查询

九、退出系统

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

先定义一个航班类

class Train:  # 定义一个航班类def __init__(self):self.ID = ''self.firstname = ''self.lastname = ''self.time = ''self.price = 0self.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]#k268tra.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, '航班重复,保存失败')returntrainlist.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, '保存成功')returndef searchByID(self, trainlist, ID):#“航班信息查询”for item in trainlist:if item.ID == ID:return Truereturn False

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

from tkinter import *
import oswin = 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 = 0self.seating = 0class Users:def __init__(self):self.personID = ''self.name = ''self.ID = ''self.time = ''self.seating = 0def 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]#k268tra.firstname = s[1]#新乡tra.lastname = s[2]#北京tra.time = s[3]#8:00tra.price = s[4]#2000tra.seating = s[5]#1trainlist.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, '航班重复,保存失败')returntrainlist.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, '保存成功')returndef searchByID(self, trainlist, ID):for item in trainlist:if item.ID == ID:return Truereturn Falseclass 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)returnself.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)# breakdef searchByID(self, trainlist, firstname):for item in trainlist:if item.firstname == firstname:return Truereturn Falsedef searchByID2(self, trainlist, lastname):for item in trainlist:if item.lastname == lastname:return Truereturn Falsedef searchByID3(self, trainlist, ID):for item in trainlist:if item.ID == ID:return Truereturn Falsedef searchByID4(self, trainlist, ID, seating):for item in trainlist:if item.ID == ID:if int(item.seating) - int(seating) < 0:return Trueelse:item.seating = str(int(item.seating) - int(seating))return Falsedef 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, '未找到对应航班! ')returnif self.searchByID4(trainlist, man.ID, man.seating):self.txt_2.insert(END, '余票不足!')returnpeople.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()returnclass 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 Truereturn Falsedef 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)returnfor 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)breakfile_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)returnself.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)breakdef searchByID(self, trainlist, ID):for item in trainlist:if item.ID == ID:return Truereturn Falseclass 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('train.txt')if size == 0:self.txt.insert(END, '没有车次信息')returnself.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] = tempclass 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)returnself.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)))breakdef searchByID(self, trainlist, ID):for item in trainlist:if item.ID == ID:return Truereturn Falsedef 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, '航班重复,修改失败')returntrainlist.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, '修改成功')returnclass 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 Truereturn Falsedef 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_2personID = 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)returnfor item in people:if item.personID == personID and item.ID == trainID:changeID_2 = item.IDself.searchByID4(trainlist, item.ID, item.seating)people.remove(item)self.txt.delete(1.0, END)self.txt.insert(END, '退票成功!')self.inp4.delete(0, END)breakman_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()returnclass 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)returnself.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)#breakdef searchByID(self, people, personID):for item in people:if item.personID == personID:return Truereturn Falsedef 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.35, rely=0.05, relwidth=0.3, relheight=0.1)dela = DEL()bt2 = Button(win, text="删除飞机信息", command=dela.Del_f)bt2.place(relx=0.35, rely=0.15, relwidth=0.3, relheight=0.1)sea = SEA()bt6 = Button(win, text="航班信息查询", command=sea.Search_f)bt6.place(relx=0.35, rely=0.25, relwidth=0.3, relheight=0.1)dis = DIS()bt3 = Button(win, text="航班信息显示", command=dis.display)bt3.place(relx=0.35, rely=0.35, relwidth=0.3, relheight=0.1)cha = CHA()bt4 = Button(win, text="修改飞机数据", command=cha.Change_f)bt4.place(relx=0.35, rely=0.45, relwidth=0.3, relheight=0.1)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.35, rely=0.55, relwidth=0.3, relheight=0.1)grt = GRT()bt8 = Button(win, text="个人退票", command=grt.Grt_f)bt8.place(relx=0.35, rely=0.65, relwidth=0.3, relheight=0.1)pbe = PBE()bt9 = Button(win, text="个人订票查询", command=pbe.Pbe_f)bt9.place(relx=0.35, rely=0.75, relwidth=0.3, relheight=0.1)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库

PS:有些第三方库是只提供源码,具体下载和使用方法放在下一篇文章。

python 模拟飞机订票系统相关推荐

  1. python模拟火车票订票系统_小时光提醒:2021年元旦火车票今日开售 你抢到了吗?...

    小时光提醒:2020年进入到最后一个月,2021年元旦火车票将于今日开售,有元旦出行计划的市民可通过12306网站.12306手机客户端或拨打95105105订票电话,购买2021年元旦假期当日(20 ...

  2. python模拟火车订票系统代码_Python3.6实现12306火车票自动抢票,附源码

    原标题:Python3.6实现12306火车票自动抢票,附源码 Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已 ...

  3. python模拟火车订票系统_如何用python编写火车抢票助手

    前几天跟朋友说打算写一个抢票助手,最后由于某些原因念头打消了. 可就在昨天晚上,才隐约记起一年前的自己曾经说过:一年后我一定要写一个12306的抢票助手!瞬间激情澎湃,甚至已经是快临近凌晨时便开始动工 ...

  4. python模拟火车票订票系统_pythonCCF 201609-2火车票购买,PythonCCF2016092,购票

    [问题描述] 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到 ...

  5. 利用python模拟火车订票系统

    title = ['车次 ','出发站-到达站 ','出发时间 ','到达时间 ','历时 '] num = ['T40','T298','Z158','Z62'] place = ['长春-北京', ...

  6. 【Python】【项目模拟】模拟火车订票系统

    本项目代码基于python大作业--列车管理系统_丿灬慕容笑笑的博客-CSDN博客_python 车票管理系统 的代码,本人对其进行重新加工及充实.项目总体仍较为粗糙,后面还需继续完善. 部分项目界面 ...

  7. 飞机订票系统 python实现(大二上数据结构课设)

    说明: 本博客是从课设报告中截取的重要部分.这个飞机订票系统是本人大二上的数据结构课设,功能相对完善,界面相对美观.图形界面,本来想用Qt5(python中一个图形界面的类库,风格偏向于win10)去 ...

  8. 模拟火车订票系统(Python)

    模拟火车订票系统,效果显示,输入购买的车次,乘车人,判断车次是否存在,及其行程信息.如下效果图: 程序如下: 输出结果: 总结:难点在于1.使用自建函数判断车次是否存在 2.字符串format方法的使 ...

  9. web类协议脚本-飞机订票系统示例

    以下是LR自带的飞机订票系统的Demo,希望能帮助大家. Action() {int iRand;int iTmp;char *strTmpA;char *strTmpB;char *strTmpC; ...

最新文章

  1. mysql用户权限与安装Linux操作系统
  2. 强弱AI的辩论:关于人工智能意识的奇妙理论
  3. leetcode算法题--最长等差数列★
  4. spring学习(50):延迟加载
  5. 计算机网络 第七版 谢,计算机网络-谢仁-第7版-01章.pptx
  6. mysql的学习笔记(六)
  7. Android SDK 中文 (56) —— ViewFlipper
  8. vscode java settings设置_vscode 搭建java环境
  9. python代码生成_python代码生成 python代码自动生成器
  10. Android 圆形颜色拾取器代码,android 颜色拾取控件 ColorPickerDialog
  11. HTTP略显不足 IPFS/FIL异军突起 未来可期
  12. oms系统应用服务器,OMS、WMS、TMS、ERP之间的关系
  13. 学单片机之前需要做哪些准备?
  14. 20个月股票投资复盘:在被割韭菜中成长
  15. 【无标题】软件工程头歌
  16. 信息学奥赛一本通例题2.8~2.13
  17. 移动 APP 端与服务器端用户身份认证的安全方案
  18. lisp 墙体 天正建筑_天正建筑
  19. 感恩节火鸡PPT模板-优页文档
  20. 理论作业八cqupt,数列计算函数,字母计数, 文件中数据转列表2

热门文章

  1. bottle step by step (一) bottle的简单介绍
  2. 基于SSM的零食小食品商城(零食商城源码)
  3. 遥感影像中,一景等于多少平方公里?
  4. 国学堂—梁冬对话林曦
  5. 玩转openGauss,华为杭州研究所 开源嘉年华火热报名中
  6. 自然顺序假设(The Natural Order Hypothesis)
  7. C语言项目-ATM自助取款机(无图形化界面)
  8. 电子版题库可以在手机答题,微信手机在线考试题库小程序怎么做?
  9. Packet Tracer 思科模拟器入门教程 之十四 路由器综合路由配置
  10. 解决ecplise无法安装