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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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()