对线上飞机订票系统代码实现的分析

目录

声明

问题解释

一、No such file or directory: 'flight.txt'

二、-tkinter.TclError: couldn't recognize data in image file "light.jpg"

代码分析

class ADD里面的def  Add_f(self):

label函数

布局按钮

class ADD里面的def Delete(self):


声明

基于之前一篇文章——线上飞机订票系统python 模拟飞机订票系统_飞机订票系统python_寒酥落北琬的博客-CSDN博客

在此做一下问题解释、代码分析以及系统优化

问题解释

一、No such file or directory: 'flight.txt'

这种情况的原因应该是txt文件和py文件不在一个根目录里面

解决办法:把txt文件和py文件放在一个文件夹里面

二、-tkinter.TclError: couldn't recognize data in image file "light.jpg"

这种情况的原因是tkinter库无法识别.jpg格式的文件

解决办法:把jpg换为gif的文件,或者换一个库使用,如PIL库

代码分析

整个程序定义了10个类,分别是

航班类

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

还有剩下的八个功能模块每个模块都是一个类,在每一个类里面可以定义自己需要写的函数共同实现每个模块的功能。

讲解一个模块

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 ADD里面的def  Add_f(self):

比如在58行的class ADD模块里面,def  Add_f(self): 可以实现添加信息

    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)

label函数

其中下面几行代码 就是通过用label标签函数设置界面上的按钮,具体label函数的使用方法可以查看Python Tkinter详解 (二)Label标签的使用_python里label_创客老师Apple的博客-CSDN博客

        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)

依次类推,下面的按钮都是label函数实现的

布局按钮

lb1.place(relx=0.1, rely=0.1, relwidth=0.5, relheight=0.1)

这行代码是布局按钮的,具体的relwidth之类的可以看Tkinter布局管理器(三种方法详解) (biancheng.net)

class ADD里面的def Delete(self):

    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)

这个用delete函数就好,具体可以看#Python3中tkinter编程中Text.delete_tkinter text delete_微信-支付宝的博客-CSDN博客

其他的以此类推就好

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值