Tkinter项目之学生管理系统

首先说一下设计思路,我们是要实现一个学生管理信息管理系统 ,那么开始得有一个登陆界面窗口,我们输入系统内保存的账号密码信息之后,点击登陆按钮后便可以成功进入学生信息管理系统主窗口,那么我们还要再创建一个学生信息管理主窗口,在主窗口里面写我们要想要实现的功能。

from tkinter import *
from tkinter import ttk
from tkinter import messagebox
import random
from PIL import Image,ImageTk


#创建主窗口
def MainTest():
    root=Tk()
    root.title("学生管理系统")
    root.geometry("700x500")
    LoginSystem(master=root)
    root.mainloop()

#创建学生管理系统窗口
def MainTest2():
    root2=Tk()
    root2.title("学生管理系统")
    root2.geometry("700x500")
    MainSystem(master1=root2)
    root2.mainloop()

#添加学生信息窗口
def MainTest3():
    root3=Tk()
    root3.title("添加学生信息")
    root3.geometry("700x400")
    ADdName(master2=root3)
    root3.mainloop()

#查看学生信息窗口
def MainTest4():
    root4=Tk()
    root4.title("查看学生信息")
    root4.geometry("700x400")
    searchName(master3=root4)
    root4.mainloop()

#显示学生信息窗口
def MainTest5():
    root5=Tk()
    root5.title("查看学生信息")
    root5.geometry("700x500")
    ShowName(master4=root5)
    root5.mainloop()

#登陆主窗口
class LoginSystem(Frame):
    def __init__(self,master=None):
        super().__init__(master)
        #用于接收enter输入的数据变量,相当于存储器
        self.username=StringVar()
        self.password=StringVar()
        self.pack()
        self.creatwidget()
    def creatwidget(self):
        #创建画布
        self.canvas=Canvas(self.master,height=500,width=700)
        #im_root=self.get_image("tk图片.jpg",1202,676)
        #self.canvas.create_image(1202,676,im_root)
        self.canvas.pack()
        #注意在程序代码中,grid和place可用共用,但是前2则不可与pack在同一代码中共存出现。
        #创建3个Label控件,并设置标题,字体和位置 font也可以用汉字形式设置,bold是加粗的意思
        self.label1=Label(self.master,text="学生管理系统登陆界面",font=('宋体 16 bold'))
        self.label1.place(x=220,y=20)
        self.label2=Label(self.master,text="用户名",font=('宋体 10 bold'))
        self.label2.place(x=230,y=190)
        self.entry1=Entry(self.master,textvariable=self.username)
        self.entry1.place(x=320,y=190)
        self.label3=Label(self.master,text="密码",font=('宋体 10 bold'))
        self.label3.place(x=230,y=250)
        self.entry2=Entry(self.master,textvariable=self.password,show="*")
        self.entry2.place(x=320,y=250)
        #创建两个Button按钮,并绑定对应的函数事件,登陆函数和退出函数
        self.button1=Button(self.master,text="确认",font=('宋体 10 bold'),command=self.login)
        self.button1.place(x=270,y=400)
        self.button2=Button(self.master,text="退出",font=('宋体 10 bold'),command=self.exit)
        self.button2.place(x=380,y=400)

    #登陆函数,如果用户名和密码正确,则进入下一个窗口,如果用户名和密码错误,则做出相对提示
    def login(self):
        if self.entry1.get() == "1" and self.entry2.get() == "1":
            self.mainSystem()
        elif self.entry1.get() != "1":
            messagebox.showwarning("错误提示","用户名错误")
        else:
            messagebox.showwarning("错误提示","密码错误")
    #退出函数
    def exit(self):
        self.master.destroy()

    def mainSystem(self):
        self.master.destroy()
        MainTest2()
    '''
    #打开指定的图片文件,缩放至指定尺寸
    def get_image(self,filename,width,height):
        im=Image.open(filename).resize((width,height))
        return ImageTk.PhotoImage(im)
    '''
#学生管理主界面
class MainSystem(Frame):
    def __init__(self,master1=None):
        super().__init__(master1)
        self.master=master1
        self.pack()
        self.creatwidget()

    def creatwidget(self):
        self.lable1=Label(self.master,text="欢迎使用学生管理系统",font=('宋体 20 bold'))
        self.lable1.place(x=200,y=20)
        #点击添加学生信息控件,绑定到添加信息的函数
        self.button1=Button(self.master,text="添加学生信息",font=('宋体 14 bold'),command=self.addName)
        self.button1.place(x=260,y=100)
        self.button2=Button(self.master,text="查看学生信息",font=('宋体 14 bold'),command=self.searchName)
        self.button2.place(x=260,y=150)
        self.button3=Button(self.master,text="显示学生信息",font=('宋体 14 bold'),command=self.showName)
        self.button3.place(x=260,y=200)
        #点击退出当前系统并销毁当前界面,返回登陆界面
        self.button4=Button(self.master,text="退出当前系统",font=('宋体 14 bold'),command=lambda :[self.master.destroy(),MainTest2()])
        self.button4.place(x=260,y=250)
        #显示版本信息
        self.label2=Label(self.master,text="ZSL      V1.0版本",font=('宋体 16 bold'))
        self.label2.place(x=200,y=400)

    def addName(self):
        self.master.destroy()
        MainTest3()

    def searchName(self):
        self.master.destroy()
        MainTest4()

    def showName(self):
        self.master.destroy()
        MainTest5()

class ADdName(Frame):
    def __init__(self,master2=None):
        super().__init__(master2)
        self.master=master2
        self.addnum=StringVar()
        self.addname=StringVar()
        self.addphone=StringVar()
        self.pack()
        global lists
        self.creatwidget()

    def creatwidget(self):
        self.canves=Canvas(self.master,width=500,height=300)
        self.canves.pack()
        self.label1=Label(self.master,text="添加学号",font=('宋体 18 bold'))
        self.label1.place(x=8,y=20)
        self.entry1=Entry(self.master,textvariable=self.addnum,width=20)
        self.entry1.place(x=200,y=20)
        self.label2=Label(self.master,text="添加姓名",font=('宋体 18 bold'))
        self.label2.place(x=8,y=80)
        self.entry2=Entry(self.master,textvariable=self.addname,width=20)
        self.entry2.place(x=200,y=80)
        self.label3=Label(self.master,text="添加电话",font=('宋体 18 bold'))
        self.label3.place(x=8,y=140)
        self.entry3=Entry(self.master,textvariable=self.addphone,width=20)
        self.entry3.place(x=200,y=140)
        #绑定事件,保存输入学生的信息
        self.button=Button(self.master,text="保存",font=('宋体 14 bold'),command=self.saveName)
        self.button.place(x=80,y=220)
        #绑定事件,返回上一级菜单并且销毁当前界面
        self.button1=Button(self.master,text="返回",font=('宋体 14 bold'),command=lambda :[self.master.destroy(),MainTest2()])
        self.button1.place(x=200,y=220)
        #绑定事件退出系统
        self.button2=Button(self.master,text="退出",font=('宋体 14 bold'),command=self.exitsystem)
        self.button2.place(x=320,y=220)

    #保存学生信息事件函数
    def saveName(self):
        number=self.entry1.get()
        name=self.entry2.get()
        phone=self.entry3.get()
        lists= []
        xinxi = {}
        xinxi={'学号':number,'姓名':name,'电话':phone}
        lists.append(xinxi)
        '''
        with open("学生信息.txt","r",encoding="utf-8") as f:
            lst=f.readlines()
            for i in lst:
                b=eval(i)
                if number ==b["学号"]:
                    messagebox.showerror("信息存在","学生信息已存在,请重新添加")
                    return
        '''
        for datas in lists:
            xy = str(datas)+ "\n"
            f = open('学生信息.txt','a',encoding="utf-8")
            f.write(xy)
            f.close()
        messagebox.showinfo("保存成功","已成功保存学生信息")
        #当数据保存成功,把输入框内的数据清除。
        self.entry1.delete(0,END)
        self.entry2.delete(0,END)
        self.entry3.delete(0,END)

    def exitsystem(self):
        self.master.destroy()

#创建窗口学生信息窗口
class searchName(Frame):
    def __init__(self,master3=None):
        super().__init__(master3)
        self.master=master3
        self.inpunmber=StringVar()
        self.shownum=StringVar()
        self.showname=StringVar()
        self.showphone=StringVar()
        self.pack()
        global lists
        self.creatwiget()

    def creatwiget(self):
        self.label1=Label(self.master,text="查找信息",font=('宋体 18 bold'))
        self.label1.place(x=8,y=20)
        self.entry1=Entry(self.master,textvariable=self.inpunmber,width=20)
        self.entry1.place(x=200,y=20)
        self.label2=Label(self.master,text="学生学号",font=('宋体 18 bold'))
        self.label2.place(x=8,y=80)
        self.entry2=Entry(self.master,textvariable=self.shownum,width=20)
        self.entry2.place(x=200,y=80)
        self.label3=Label(self.master,text="学生姓名",font=('宋体 18 bold'))
        self.label3.place(x=8,y=140)
        self.entry3=Entry(self.master,textvariable=self.showname,width=20)
        self.entry3.place(x=200,y=140)
        self.label4=Label(self.master,text="学生电话",font=('宋体 18 bold'))
        self.label4.place(x=8,y=200)
        self.entry4=Entry(self.master,textvariable=self.showphone,width=20)
        self.entry4.place(x=200,y=200)
        self.button1=Button(self.master,text="确定",command=self.searchDate,font=('宋体 14 bold'))
        self.button1.place(x=100,y=280)
        self.button2=Button(self.master,text="修改",command=self.moveDate,font=('宋体 14 bold'))
        self.button2.place(x=180,y=280)
        self.button3=Button(self.master,text="删除",command=self.removeDate,font=('宋体 14 bold'))
        self.button3.place(x=260,y=280)
        self.button4=Button(self.master,text="返回",command=lambda :[self.master.destroy(),MainTest2()],font=('宋体 14 bold'))
        self.button4.place(x=340,y=280)
        self.button5=Button(self.master,text="退出",command=self.exit,font=('宋体 14 bold'))
        self.button5.place(x=420,y=280)

#查询信息,根据enter1 中输入的信息,判断数据是否在列表当中,如果在则返回对应数据
    def searchDate(self):
        data = self.entry1.get()
        with open("学生信息.txt","r",encoding="utf-8") as f:
            lst = f.readlines()
            for i in lst:
                b = eval(i)  #将列表转换为字典
                if data == b["学号"] or data == b["姓名"] or data == b["电话"]:
                    a = b["学号"]
                    c = b["姓名"]
                    d = b["电话"]
                    self.entry2.delete(0,END)
                    #将数据返回到entry里,显示出来
                    self.entry2.insert(20,a)
                    self.entry3.delete(0,END)
                    self.entry3.insert(20,c)
                    self.entry4.delete(0,END)
                    self.entry4.insert(20,d)

    def moveDate(self):
        pass

    def removeDate(self):
        pass

    def exit(self):
        self.master.destroy()


class ShowName(Frame):
    def __init__(self,master4=None):
        super().__init__(master4)
        self.master=master4
        self.pack()
        self.creatwidget()

    def creatwidget(self):
        self.button1=Button(self.master,text="返回",font=('宋体 14 bold'),command=lambda :[self.master.destroy(),MainTest2()])
        self.button1.place(x=200,y=450)
        self.button2=Button(self.master,text="退出",font=('宋体 14 bold'),command=self.exit)
        self.button2.place(x=400,y=450)
        #显示学生数据
        colunms = ("学号","姓名","电话")
        treeview = ttk.Treeview(self.master,height=18,show="headings",columns=colunms)
        #表示列,不显示
        treeview.column("学号",width=100,anchor='center')
        treeview.column("姓名",width=300,anchor='center')
        treeview.column("电话",width=300,anchor='center')
        #显示表头
        treeview.heading("学号",text="学号")
        treeview.heading("姓名",text="姓名")
        treeview.heading("电话",text="电话")
        treeview.pack(side=LEFT,fill=BOTH)
        number = []
        namedata = []
        phone = []
        with open("学生信息.txt", "r",encoding="utf-8") as f:
            lst = f.readlines()
            for i in range(len(lst)):
                j = eval(lst[i])
                num = j["学号"]
                name = j["姓名"]
                phn = j["电话"]
                number.append(num)
                namedata.append(name)
                phone.append(phn)

        for i in range(len(lst)):
            treeview.insert('',i,values=(number[i],namedata[i],phone[i]))

    def exit(self):
        self.master.destroy()














if __name__ == "__main__":
    MainTest()
    #MainTest2()
    #MainTest3()
    #MainTest4()
    #MainTest5()
    #MainSystem()
    LoginSystem()
    #ADdName()

使用str()函数,可以将非字符串类型转换成字符串;

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值