diff --git a/train ticket/man.txt b/train ticket/man.txt new file mode 100644 index 0000000..a22fd0f --- /dev/null +++ b/train ticket/man.txt @@ -0,0 +1 @@ +234689931 С K213 2024.6.1 1 diff --git a/train ticket/train.txt b/train ticket/train.txt new file mode 100644 index 0000000..78aa48d --- /dev/null +++ b/train ticket/train.txt @@ -0,0 +1,2 @@ +35839 ¦ 2024.6.1 20 500 +K213 2024.6.1 1501 499 diff --git a/train ticket/订票系统.py b/train ticket/订票系统.py new file mode 100644 index 0000000..383d18a --- /dev/null +++ b/train ticket/订票系统.py @@ -0,0 +1,579 @@ +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()