You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

580 lines
22 KiB

6 months ago
from tkinter import *
import os
import datetime
win = Tk()
win.title('火车订票系统')
win.geometry('600x400+280+150')
win.configure(bg='#f6677f')
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='请输入车次号',bg='#d3fbfb')
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='请输入火车起点',bg='#d3fbfb')
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='请输入火车终点',bg='#d3fbfb')
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='请输入火车出发时间',bg='#d3fbfb')
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='请输入火车的票价',bg='#d3fbfb')
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='请输入火车的票数',bg='#d3fbfb')
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="清空数据",bg='#d3fbfb', command=self.Delete)
self.bt1.place(relx=0.1, rely=0.9, relwidth=0.1, relheight=0.1)
self.bt = Button(roob, text="添加",bg='#d3fbfb', 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='关闭',bg='#d3fbfb', 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('500x240')
lb1 = Label(win_2, text='请输入出发地:',bg='#d3fbfb')
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='请输入目的地:',bg='#d3fbfb')
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='请输入您的姓名:',bg='#d3fbfb')
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',bg='#d3fbfb')
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='请输入车次号:',bg='#d3fbfb')
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='请输入所需票数:',bg='#d3fbfb')
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="清空数据",bg='#d3fbfb', command=self.Delete)
self.bt1.place(relx=0.6, rely=0.05, relwidth=0.15, relheight=0.1)
self.btClose = Button(win_2, text='关闭',bg='#d3fbfb', 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="查询",bg='#d3fbfb', command=self.Search)
self.bt.place(relx=0.27, rely=0.25, relwidth=0.15, relheight=0.1)
self.bt2 = Button(win_2, text="确认",bg='#d3fbfb', 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)
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 PBE:
def Pbe_f(self):
roob = Toplevel(win)
roob.title('个人订票查询')
roob.geometry('500x240')
lb4 = Label(roob, text='请输入您的ID',bg='#d3fbfb')
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="查询",bg='#d3fbfb', command=self.Search)
self.bt.place(relx=0.75, rely=0.1, relwidth=0.15, relheight=0.15)
self.btClose = Button(roob, text='关闭',bg='#d3fbfb', 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)
def searchByID(self, people, personID):
for item in people:
if item.personID == personID:
return True
return False
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:
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
def main():
b.destroy()
win.title('火车订票系统')
win.geometry('600x400+280+150')
add = ADD()
bt1 = Button(win, text="火车信息添加", command=add.Add_f,bg='#ff88ff')
bt1.place(relx=0.35, rely=0.05, relwidth=0.3, relheight=0.15)
dela = DEL()
bt2 = Button(win, text="火车信息删除", command=dela.Del_f,bg='#eb77fa')
bt2.place(relx=0.35, rely=0.20, relwidth=0.3, relheight=0.15)
btt = BTT()
bt3 = Button(win, text="个人订票", command=btt.Btt_f,bg='#fb66ff')
bt3.place(relx=0.35, rely=0.35, relwidth=0.3, relheight=0.15)
pbe = PBE()
bt4 = Button(win, text="订票查询", command=pbe.Pbe_f,bg='#fe55ef')
bt4.place(relx=0.35, rely=0.50, relwidth=0.3, relheight=0.15)
grt = GRT()
bt5 = Button(win, text="个人退票", command=grt.Grt_f,bg='#fe45ff')
bt5.place(relx=0.35, rely=0.65, relwidth=0.3, relheight=0.15)
bt6 = Button(win, text="退出系统", command=win.destroy,bg='#ff22ff')
bt6.place(relx=0.35, rely=0.80, relwidth=0.3, relheight=0.15)
Init(trainlist)
b = Button(win, text="欢迎使用火车订票系统", bg='#f6677f', fg='#d3fbfb', font=('华文新魏', 32), relief=SUNKEN, command=main, width=500,
height=240)
b.pack()
win.mainloop()