目录
该文章已有解析版——
对线上飞机订票系统代码实现的分析_寒酥落北琬的博客-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库