【Python】【项目模拟】模拟火车订票系统

目录

前言:

主页面:

用户订票界面:

退票界面: 

完整代码


前言:

本项目代码基于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 # 弹出黑色对话框

好~向着星辰大海更进步一迈进吧! 

  • 8
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸢想睡觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值