目录
前言:
本项目代码基于python大作业——列车管理系统_丿灬慕容笑笑的博客-CSDN博客_python 车票管理系统 的代码,本人对其进行重新加工及充实。项目总体仍较为粗糙,后面还需继续完善。
总体思路为类的应用,还有界面的设计和排版优化、TXT文本的打开与读写。主体框架的搭建值得细读,附属功能为主体锦上添花。(总体难度不大)总体需要更多编写时的耐心和小模块构造时候的细心
同时,建议将各个功能拆分开来分进对应的py文件里,因为本文下面一体式的编写方式在修改bug和增添功能上较困难。以及团队分工上(一个人撸这玩意儿是真的费神),请做好合理分配,以便项目最终尽可能完美复现。后期测试BUG过程中,务必多换几种思路……有些BUG那叫一个****
部分项目界面效果如下:(不太会美化……见谅哈,有做出更好效果的欢迎交流)
主页面:
以九个模块为主构成
用户订票界面:
退票界面:
完整代码
如下:
(希望对诸位有所帮助,有更进一步的项目效果提升,请务必@我参考学习,感谢!!!)
# @Time:2022/5/22 21:43
# @creator: 鸢
# =========================================
from tkinter import *
import os
import datetime
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('train.txt', 'r')
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('train.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.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()
附带打包教程:
打开 cmd
cd <所需打包文件的位置>
pyinstaller -F -w <文件名>.py # 弹出黑色对话框
好~向着星辰大海更进步一迈进吧!