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