python学籍管理系统

1,创建登陆的首页面,且封装起来。LoginPage.py

import tkinter as tk#导入tk模块
from tkinter import messagebox#导入消息提示模块
from tkinter import messagebox
from db import db  #导入数据库db
class LoginPage:#把整个登陆页面创建一个class类进行封装
    def __init__(self,master):#创建登陆页面函数
        self.root = master #创建登陆页面
        self.root.geometry('300x180')#登陆页面的大小是300*180
        self.root.title('登陆页')#登陆页的标签名字是
        self.username = tk.StringVar()#定义输入账户
        self.password = tk.StringVar()#定义输入密码
        self.page = tk.Frame(root)#page是第二页的变量
        self.page.pack()#第二页
        tk.Label(self.page).grid(row=0,columnspan=1)
        tk.Label(self.page,text='账户:').grid(row=1,column=1)
        tk.Entry(self.page,textvariable=self.username).grid(row=1,column=2)#第二行第二列.把账户输入绑定textvariable=username
        tk.Label(self.page,text='密码:').grid(row=1,column=1,pady=10)#第一行第一列,间隔10
        tk.Entry(self.page,textvariable=self.password).grid(row=2,column=2)#第二行第二列。把密码输入绑定textvariable=password

        tk.Button(self.page,text='登陆',command=self.login).grid(row=3,column=1,pady=10)#第三行第一列,间隔10.登陆事件绑定command=login
        tk.Button(self.page,text='退出',command=self.page.quit).grid(row=3,column=2)#第三行第二列。退出事件绑定command=page.quit

    def login(self):#登陆函数的方法
        name = self.username.get()#输入账号
        pwd = self.password.get()#输入密码
        flag, message = db.check_login(name, pwd)  # 标志位flag,比对db.py数据库里的用户名和密码
        if flag:  # 使用flag:替代了name == 'admin' and pwd== '123456'
            print('登陆成功')
        else:
            messagebox.showwarning(title='警告', message=message)  # message替代登陆失败,请检查账号是否正确
if __name__ == '__main__':
    root = tk.Tk()
    LoginPage(master=root)
    root.mainloop()#

python学籍管理系统_第1张图片python学籍管理系统_第2张图片

2.创建管理员账号数据库db.py

import json#导入json模块
class MysqlDatabases:#创建MysqlDatabases数据库类
    def __init__(self):
        with open('users.json',mode='r',encoding='utf-8') as f:#读取同目录下的数据库文件users.json的账户和密码
            text = f.read()
            self.users = json.loads(text)
    def check_login(self,username,password):#创建账户和密码登陆检测方法

        for user in self.users:
            if username ==user['username']:
                if password ==user['password']:
                    return True,'登陆成功'
                else:
                    return False,'登陆失败'
        return False, '登陆失败,用户不存在'
db = MysqlDatabases()
if __name__ == '__main__':
    print(db.check_login('admin','123456'))

python学籍管理系统_第3张图片

3.创建数据库文件users.json

python学籍管理系统_第4张图片

4.创建主程序页面MianPage.py

import tkinter as tk#导入tk模块
class MianPage:#定义主页面类Mianpage
    def __init__(self,master: tk.Tk):#tk.Tk没有实际意义主要是为了root.geometry输入时自动跳出补全
        self.root = master#设置类属性
        self.root.title('学生信息管理系统v0.001')#设置类属性标题
        self.root.geometry('600x400')#设置类属性屏幕大小
if __name__ == '__main__':
    root = tk.Tk()
    MianPage(root)
    root.mainloop()


python学籍管理系统_第5张图片

5.由登陆页面跳转到主页面在2.登陆页面修改3个地方

1.

import tkinter as tk#导入tk模块
from tkinter import messagebox#导入消息提示模块
from tkinter import messagebox
from db import db
from MinaPage import MianPage#导入Minapage页面
class LoginPage:#把整个登陆页面创建一个class类进行封装
    def __init__(self,master):#创建登陆页面函数
        self.root = master #创建登陆页面
        self.root.geometry('300x180')#登陆页面的大小是300*180
        self.root.title('登陆页')#登陆页的标签名字是
        self.username = tk.StringVar()#定义输入账户
        self.password = tk.StringVar()#定义输入密码
        self.page = tk.Frame(root)#page是第二页的变量
        self.page.pack()#第二页
        tk.Label(self.page).grid(row=0,columnspan=1)
        tk.Label(self.page,text='账户:').grid(row=1,column=1)
        tk.Entry(self.page,textvariable=self.username).grid(row=1,column=2)#第二行第二列.把账户输入绑定textvariable=username
        tk.Label(self.page,text='密码:').grid(row=2,column=1,pady=10)#第一行第一列,间隔10
        tk.Entry(self.page,textvariable=self.password).grid(row=2,column=2)#第二行第二列。把密码输入绑定textvariable=password

        tk.Button(self.page,text='登陆',command=self.login).grid(row=3,column=1,pady=10)#第三行第一列,间隔10.登陆事件绑定command=login
        tk.Button(self.page,text='退出',command=self.page.quit).grid(row=3,column=2)#第三行第二列。退出事件绑定command=page.quit

    def login(self):#登陆函数的方法
        name = self.username.get()#输入账号
        pwd = self.password.get()#输入密码
        flag, message = db.check_login(name, pwd)  # 标志位flag,比对db.py数据库里的用户名和密码
        if flag:  # 使用flag:替代了name == 'admin' and pwd== '123456'
            self.page.destroy()#destroy意思摧毁当前页面。把print('登陆成功')替换为self.page.destroy()
            MianPage(self.root)#跳转到主页面MianPage页面
        else:
            messagebox.showwarning(title='警告', message=message)  # message替代登陆失败,请检查账号是否正确
if __name__ == '__main__':
    root = tk.Tk()
    LoginPage(master=root)
    root.mainloop()#

python学籍管理系统_第6张图片

2.3.

python学籍管理系统_第7张图片

6.显示菜单下的子菜单

import tkinter as tk#导入tk模块
class MianPage:#定义主页面类Mianpage
    def __init__(self,master: tk.Tk):#tk.Tk没有实际意义主要是为了root.geometry输入时自动跳出补全
        self.root = master#设置类属性
        self.root.title('学生信息管理系统v0.001')#设置类属性标题
        self.root.geometry('600x400')#设置类属性屏幕大小
        self.create_page()  # 把定义的creagte_page方法加入到类属性
    def create_page(self):

        self.about_frame = tk.Frame(self.root)
        tk.Label(self.about_frame,text='关于作品:本作品由tk出品').pack()
        tk.Label(self.about_frame,text='关于作者:萌新').pack()
        tk.Label(self.about_frame,text='B站号:tk出品').pack()
        # self.change_frame = tk.Frame(self.root)
        # tk.Label(self.change_frame, text='修改页面')
        # tk.Label(self.about_frame,text='关于作品:本作品由tk出品').pack()
        menubar = tk.Menu(self.root)
        menubar.add_command(label='录入')
        menubar.add_command(label='查询')
        menubar.add_command(label='删除')
        menubar.add_command(label='修改')
        menubar.add_command(label='关于', command=self.show_about)
        self.root['menu'] = menubar
    def show_about(self):
        self.about_frame.pack()
if __name__ == '__main__':
    root = tk.Tk()
    MianPage(root)
    root.mainloop()


python学籍管理系统_第8张图片

7.子菜单下面再显示的第一个子菜单。

import tkinter as tk#导入tk模块
from views import AboutFrame,InsertFrame,SearchFrame,ChangeFrame,DeleteFrame
class MianPage:#定义主页面类Mianpage
    def __init__(self,master: tk.Tk):#tk.Tk没有实际意义主要是为了root.geometry输入时自动跳出补全
        self.root = master#设置类属性
        self.root.title('学生信息管理系统v0.001')#设置类属性标题
        self.root.geometry('600x400')#设置类属性屏幕大小
        self.create_page()  # 把定义的creagte_page方法加入到类属性
    def create_page(self):#定义子菜单关于,修改,插入,删除,改变

        self.about_frame = AboutFrame(self.root)#把tk.Frame(self.root)替换为函数
        # tk.Label(self.about_frame,text='关于作品:本作品由tk出品').pack()#使用AboutFrame函数后注释掉
        # tk.Label(self.about_frame,text='关于作者:萌新').pack()#使用AboutFrame函数后注释掉
        # tk.Label(self.about_frame,text='B站号:tk出品').pack()#使用AboutFrame函数后注释掉
        self.change_frame = ChangeFrame(self.root)#把tk.Frame(self.root)替换为ChangeFrame
        #tk.Label(self.change_frame, text='修改页面').pack()#使用ChangeFrame函数后注释掉
        # tk.Label(self.about_frame,text='关于作品:本作品由tk出品').pack()
        self.insert_frame = InsertFrame(self.root)#传递InsertFrame函数
        self.search_frame = SearchFrame(self.root)#传递SearchFrame函数
        self.delete_frame = DeleteFrame(self.root)#传递DeletelFrame函数
        menubar = tk.Menu(self.root)
        menubar.add_command(label='录入',command=self.show_insert)
        menubar.add_command(label='查询',command=self.show_search)
        menubar.add_command(label='删除',command=self.show_delete)
        menubar.add_command(label='修改',command=self.show_change)
        menubar.add_command(label='关于', command=self.show_about)
        self.root['menu'] = menubar#相应点击事件
    def show_about(self):
        self.insert_frame.pack_forget()#隐藏
        self.search_frame.pack_forget()#隐藏
        self.delete_frame.pack_forget()#隐藏
        self.about_frame.pack()#显示关于菜单
        self.change_frame.pack_forget()#多重显示菜单,隐藏change的菜单只显示关于的

    def show_change(self):
        self.insert_frame.pack_forget()#隐藏
        self.search_frame.pack_forget()#隐藏
        self.delete_frame.pack_forget()#隐藏
        self.change_frame.pack()#显示修改菜单
        self.about_frame.pack_forget()#多重显示菜单,隐藏关于的的菜单只显示
    def show_insert(self):
        self.insert_frame.pack()#显示插入菜单
        self.search_frame.pack_forget()#隐藏
        self.delete_frame.pack_forget()#隐藏
        self.about_frame.pack_forget()#隐藏
        self.change_frame.pack_forget()#多重显示菜单,隐藏change的菜单只显示关
    def show_search(self):
        self.insert_frame.pack_forget()#隐藏
        self.search_frame.pack()#显示寻找菜单
        self.delete_frame.pack_forget()#隐藏
        self.about_frame.pack_forget()#隐藏
        self.change_frame.pack_forget()#多重显示菜单,隐藏change的菜单只显示关
    def show_delete(self):
        self.insert_frame.pack_forget()#隐藏
        self.search_frame.pack_forget()#隐藏
        self.delete_frame.pack()#显示删除菜单
        self.about_frame.pack_forget()#隐藏
        self.change_frame.pack_forget()##隐藏
if __name__ == '__main__':
    root = tk.Tk()
    MianPage(root)
    root.mainloop()


python学籍管理系统_第9张图片

 python学籍管理系统_第10张图片

8.查询页面wiwes.py的页面布局,事件响应,数据刷新按钮,

import tkinter as tk
from tkinter import ttk
from db import db
class AboutFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        tk.Label(self, text='关于作品:本作品由tk出品').pack()
        tk.Label(self, text='关于作者:萌新').pack()
        tk.Label(self, text='版权所有:tk出品').pack()
class InsertFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        tk.Label(self,text='插入页面').pack()
class SearchFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        tk.Label(self,text='查询页面').pack()
        self.table_view = tk.Frame()#使用tk的框架新建页面
        self.table_view.pack()#使用tk的框架新建页面
        self.create_page()#使用tk的框架新建页面
    def create_page(self):#使用tk的框架新建页面函数
        columns = ("name","chinese","math","english")#使用tk的框架的表头
        columns_values = ("姓名","语文","数学","英语")#使用tk的框架的表头
        self.tree_view = ttk.Treeview(self,show='headings',columns=columns)
        self.tree_view.column('name',width=80,anchor='center')
        self.tree_view.column('chinese',width=80,anchor='center')
        self.tree_view.column('math',width=80,anchor='center')
        self.tree_view.column('english',width=80,anchor='center')
        self.tree_view.heading('name',text='姓名')
        self.tree_view.heading('chinese',text='语文')
        self.tree_view.heading('math',text='数学')
        self.tree_view.heading('english',text='英语')
        self.tree_view.pack(fill=tk.BOTH,expand=True)#页面布局
        self.show_data_frame()#数据展示函数加入属性
        tk.Button(self,text='刷新数据',command=self.show_data_frame).pack(anchor=tk.E,pady=5)#创建刷新按钮,且给5个像素,位于右下角
    def show_data_frame(self):#创建数据展示函数
        #删除旧的数据,刷新,更新数据
        for _ in map(self.tree_view.delete,self.tree_view.get_children('')):
            pass
        students = db.all()
        index = 0
        for stu in students:#for循环遍历数据库库student
            print(stu)#打印出数据库student,且以字典的形式展示出来
            self.tree_view.insert('',index + 1,values=(
                stu['name'],stu['math'],stu['chinese'],stu['english']
            ))
class ChangeFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        tk.Label(self,text='修改页面').pack()
class DeleteFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        tk.Label(self,text='删除页面').pack()

python学籍管理系统_第11张图片

9.录入数据函数的建立,页面的布局,

import tkinter as tk
from tkinter import ttk
from db import db
class AboutFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        tk.Label(self, text='关于作品:本作品由tk出品').pack()
        tk.Label(self, text='关于作者:萌新').pack()
        tk.Label(self, text='版权所有:tk出品').pack()
class InsertFrame(tk.Frame):#创建录入的类
    def __init__(self,root):
        super().__init__(root)
        #tk.Label(self,text='插入页面').pack()
        self.name = tk.StringVar()#输入名字
        self.math = tk.StringVar()#输入数学
        self.chinese = tk.StringVar()#输入中文
        self.english = tk.StringVar()#输入英语
        self.status = tk.StringVar()
        self.create_page()#新页面属性加入类
    def create_page(self):#创建录入页面的方法即是函数
        tk.Label(self).grid(row=0,pady=10)#pady上下间隔10像素
        tk.Label(self,text='姓名:').grid(row=1,column=1,pady=10)
        tk.Entry(self,textvariable=self.name).grid(row=1,column=2,pady=10)
        tk.Label(self, text='数学:').grid(row=2, column=1, pady=10)
        tk.Entry(self, textvariable=self.math).grid(row=2, column=2, pady=10)
        tk.Label(self, text='语文:').grid(row=3, column=1, pady=10)
        tk.Entry(self, textvariable=self.chinese).grid(row=3, column=2, pady=10)
        tk.Label(self, text='英语:').grid(row=4, column=1, pady=10)
        tk.Entry(self, textvariable=self.english).grid(row=4, column=2, pady=10)
        tk.Button(self,text='录入',command=self.recode_info).grid(row=5,column=2,pady=10)#cmand点击事件
        tk.Label(self,textvariable=self.status).grid(row=6,column=2,pady=10,stick=tk.E)#文本录入状态
    def recode_info(self):#创建录入信息的方法即函数
        stu = {"name":self.name.get(),"math":self.math.get(),
               "chinese":self.chinese.get(),"english":self.english.get()}
        self.name.set('')#数据录入完成后清空菜单栏
        self.math.set('')#数据录入完成后清空菜单栏
        self.chinese.set('')#数据录入完成后清空菜单栏
        self.english.set('')#数据录入完成后清空菜单栏
        print(stu)
        db.insert(stu)#导入db.py里的函数insert来更新db数据库,刷新可以看到新的成绩列表
        self.status.set('录入数据成功')
class SearchFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        tk.Label(self,text='查询页面').pack()
        self.table_view = tk.Frame()#使用tk的框架新建页面
        self.table_view.pack()#使用tk的框架新建页面
        self.create_page()#使用tk的框架新建页面
    def create_page(self):#使用tk的框架新建页面函数
        columns = ("name","chinese","math","english")#使用tk的框架的表头
        columns_values = ("姓名","语文","数学","英语")#使用tk的框架的表头
        self.tree_view = ttk.Treeview(self,show='headings',columns=columns)
        self.tree_view.column('name',width=80,anchor='center')
        self.tree_view.column('chinese',width=80,anchor='center')
        self.tree_view.column('math',width=80,anchor='center')
        self.tree_view.column('english',width=80,anchor='center')
        self.tree_view.heading('name',text='姓名')
        self.tree_view.heading('chinese',text='语文')
        self.tree_view.heading('math',text='数学')
        self.tree_view.heading('english',text='英语')
        self.tree_view.pack(fill=tk.BOTH,expand=True)#页面布局
        self.show_data_frame()#数据展示函数加入属性
        tk.Button(self,text='刷新数据',command=self.show_data_frame).pack(anchor=tk.E,pady=5)#创建刷新按钮,且给5个像素,位于右下角
    def show_data_frame(self):#创建数据展示函数
        #删除旧的数据,刷新,更新数据
        for _ in map(self.tree_view.delete,self.tree_view.get_children('')):
            pass
        students = db.all()
        index = 0
        for stu in students:#for循环遍历数据库库student
            print(stu)#打印出数据库student,且以字典的形式展示出来
            self.tree_view.insert('',index + 1,values=(
                stu['name'],stu['math'],stu['chinese'],stu['english']
            ))
class ChangeFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        tk.Label(self,text='修改页面').pack()
class DeleteFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        tk.Label(self,text='删除页面').pack()

10.录入页面的展示

python学籍管理系统_第12张图片

python学籍管理系统_第13张图片

python学籍管理系统_第14张图片

python学籍管理系统_第15张图片

11.删除数据

import tkinter as tk
from tkinter import ttk
from db import db
class AboutFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        tk.Label(self, text='关于作品:本作品由tk出品').pack()
        tk.Label(self, text='关于作者:萌新').pack()
        tk.Label(self, text='版权所有:tk出品').pack()
class InsertFrame(tk.Frame):#创建录入的类
    def __init__(self,root):
        super().__init__(root)
        #tk.Label(self,text='插入页面').pack()
        self.name = tk.StringVar()#输入名字
        self.math = tk.StringVar()#输入数学
        self.chinese = tk.StringVar()#输入中文
        self.english = tk.StringVar()#输入英语
        self.status = tk.StringVar()
        self.create_page()#新页面属性加入类
    def create_page(self):#创建录入页面的方法即是函数
        tk.Label(self).grid(row=0,pady=10)#pady上下间隔10像素
        tk.Label(self,text='姓名:').grid(row=1,column=1,pady=10)
        tk.Entry(self,textvariable=self.name).grid(row=1,column=2,pady=10)
        tk.Label(self, text='数学:').grid(row=2, column=1, pady=10)
        tk.Entry(self, textvariable=self.math).grid(row=2, column=2, pady=10)
        tk.Label(self, text='语文:').grid(row=3, column=1, pady=10)
        tk.Entry(self, textvariable=self.chinese).grid(row=3, column=2, pady=10)
        tk.Label(self, text='英语:').grid(row=4, column=1, pady=10)
        tk.Entry(self, textvariable=self.english).grid(row=4, column=2, pady=10)
        tk.Button(self,text='录入',command=self.recode_info).grid(row=5,column=2,pady=10)#cmand点击事件
        tk.Label(self,textvariable=self.status).grid(row=6,column=2,pady=10,stick=tk.E)#文本录入状态
    def recode_info(self):#创建录入信息的方法即函数
        stu = {"name":self.name.get(),"math":self.math.get(),
               "chinese":self.chinese.get(),"english":self.english.get()}
        self.name.set('')#数据录入完成后清空菜单栏
        self.math.set('')#数据录入完成后清空菜单栏
        self.chinese.set('')#数据录入完成后清空菜单栏
        self.english.set('')#数据录入完成后清空菜单栏
        print(stu)
        db.insert(stu)#导入db.py里的函数insert来更新db数据库,刷新可以看到新的成绩列表
        self.status.set('录入数据成功')
class SearchFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        tk.Label(self,text='查询页面').pack()
        self.table_view = tk.Frame()#使用tk的框架新建页面
        self.table_view.pack()#使用tk的框架新建页面
        self.create_page()#使用tk的框架新建页面
    def create_page(self):#使用tk的框架新建页面函数
        columns = ("name","chinese","math","english")#使用tk的框架的表头
        columns_values = ("姓名","语文","数学","英语")#使用tk的框架的表头
        self.tree_view = ttk.Treeview(self,show='headings',columns=columns)
        self.tree_view.column('name',width=80,anchor='center')
        self.tree_view.column('chinese',width=80,anchor='center')
        self.tree_view.column('math',width=80,anchor='center')
        self.tree_view.column('english',width=80,anchor='center')
        self.tree_view.heading('name',text='姓名')
        self.tree_view.heading('chinese',text='语文')
        self.tree_view.heading('math',text='数学')
        self.tree_view.heading('english',text='英语')
        self.tree_view.pack(fill=tk.BOTH,expand=True)#页面布局
        self.show_data_frame()#数据展示函数加入属性
        tk.Button(self,text='刷新数据',command=self.show_data_frame).pack(anchor=tk.E,pady=5)#创建刷新按钮,且给5个像素,位于右下角
    def show_data_frame(self):#创建数据展示函数
        #删除旧的数据,刷新,更新数据
        for _ in map(self.tree_view.delete,self.tree_view.get_children('')):
            pass
        students = db.all()
        index = 0
        for stu in students:#for循环遍历数据库库student
            print(stu)#打印出数据库student,且以字典的形式展示出来
            self.tree_view.insert('',index + 1,values=(
                stu['name'],stu['math'],stu['chinese'],stu['english']
            ))
class ChangeFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        tk.Label(self,text='修改页面').pack()
class DeleteFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        #tk.Label(self,text='删除页面').pack()
        self.username = tk.StringVar()
        self.status = tk.StringVar()
        tk.Label(self,text='根据名字删除').pack()
        tk.Entry(self,textvariable=self.username).pack()
        tk.Button(self,text='删除',command=self.delete).pack()
        tk.Label(self,textvariable=self.status).pack()
    def delete(self):
        username = self.username.get()#获取输入用户名字
        flag,message = db.delete_by_username(username)#添加标签,弹出消息提示
        self.status.set(message)

db.py

import json#导入json模块
class MysqlDatabases:#创建MysqlDatabases数据库类
    def __init__(self):
        with open('users.json',mode='r',encoding='utf-8') as f:#读取同目录下的数据库文件users.json的账户和密码
            text = f.read()
            self.users = json.loads(text)
        #self.users = json.loads(open('users.json', mode='r', encoding='utf-8').read())
        self.students = json.loads(open('students.json',mode='r',encoding='utf-8').read())
    def check_login(self,username,password):#创建账户和密码登陆检测方法

        for user in self.users:
            if username ==user['username']:
                if password ==user['password']:
                    return True,'登陆成功'
                else:
                    return False,'登陆失败'
        return False, '登陆失败,用户不存在'
    def all(self):
        return self.students
    def insert(self,student):#创建insert函数把录入的studen信息添加进来数据库
        self.students.append(student)#把录入的studen信息添加进来数据库
    def delete_by_username(self,name):#创建根据学籍用户名删除函数
        for student in self.students:#遍历数据库
            print(student)
            if student['name'] == name:
                self.students.remove(student)#清除删除的用户数据
                return True,f'{name}删除用户成功'
        return False,f'{name}用户不存在'
db = MysqlDatabases()
if __name__ == '__main__':
    # print(db.check_login('admin','123456'))
    # print(db.all())
    print(db.delete_by_username('张三疯'))

删除数据用户名是1 的数据信息

python学籍管理系统_第16张图片

12.数据的修改,在db.py函数里面创建update函数和search函数

import json#导入json模块
class MysqlDatabases:#创建MysqlDatabases数据库类
    def __init__(self):
        with open('users.json',mode='r',encoding='utf-8') as f:#读取同目录下的数据库文件users.json的账户和密码
            text = f.read()
            self.users = json.loads(text)
        #self.users = json.loads(open('users.json', mode='r', encoding='utf-8').read())
        self.students = json.loads(open('students.json',mode='r',encoding='utf-8').read())
    def check_login(self,username,password):#创建账户和密码登陆检测方法

        for user in self.users:
            if username ==user['username']:
                if password ==user['password']:
                    return True,'登陆成功'
                else:
                    return False,'登陆失败'
        return False, '登陆失败,用户不存在'
    def all(self):
        return self.students
    def insert(self,student):#创建insert函数把录入的studen信息添加进来数据库
        self.students.append(student)#把录入的studen信息添加进来数据库
    def delete_by_username(self,name):#创建根据学籍用户名删除函数
        for student in self.students:#遍历数据库
            print(student)
            if student['name'] == name:
                self.students.remove(student)#清除删除的用户数据
                return True,f'{name}删除用户成功'
        return False,f'{name}用户不存在'
    def search_by_username(self,name):#创建根据学籍用户名删除函数
        for student in self.students:#遍历数据库
            #print(student)
            if student['name'] == name:
                return True,student
        return False,f'{name}用户不存在'
    def update(self,stu):#创建根据学籍用户名删除函数
        for student in self.students:#遍历数据库
            #print(student)
            if student['name'] == stu['name']:
                student.update(stu)
                return True,f'{stu["name"]}用户数据修改成功'
        return False,f'{stu["name"]}用户不存在'
db = MysqlDatabases()
if __name__ == '__main__':
    # print(db.check_login('admin','123456'))
    # print(db.all())
    #print(db.delete_by_username('张三疯'))
    print(db.search_by_username('张三'))

在wiews.py里面创建change_user函数

import tkinter as tk
from tkinter import ttk
from db import db
class AboutFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        tk.Label(self, text='关于作品:本作品由tk出品').pack()
        tk.Label(self, text='关于作者:萌新').pack()
        tk.Label(self, text='版权所有:tk出品').pack()
class InsertFrame(tk.Frame):#创建录入的类
    def __init__(self,root):
        super().__init__(root)
        #tk.Label(self,text='插入页面').pack()
        self.name = tk.StringVar()#输入名字
        self.math = tk.StringVar()#输入数学
        self.chinese = tk.StringVar()#输入中文
        self.english = tk.StringVar()#输入英语
        self.status = tk.StringVar()
        self.create_page()#新页面属性加入类
    def create_page(self):#创建录入页面的方法即是函数
        tk.Label(self).grid(row=0,pady=10)#pady上下间隔10像素
        tk.Label(self,text='姓名:').grid(row=1,column=1,pady=10)
        tk.Entry(self,textvariable=self.name).grid(row=1,column=2,pady=10)
        tk.Label(self, text='数学:').grid(row=2, column=1, pady=10)
        tk.Entry(self, textvariable=self.math).grid(row=2, column=2, pady=10)
        tk.Label(self, text='语文:').grid(row=3, column=1, pady=10)
        tk.Entry(self, textvariable=self.chinese).grid(row=3, column=2, pady=10)
        tk.Label(self, text='英语:').grid(row=4, column=1, pady=10)
        tk.Entry(self, textvariable=self.english).grid(row=4, column=2, pady=10)
        tk.Button(self,text='录入',command=self.recode_info).grid(row=5,column=2,pady=10)#cmand点击事件
        tk.Label(self,textvariable=self.status).grid(row=6,column=2,pady=10,stick=tk.E)#文本录入状态
    def recode_info(self):#创建录入信息的方法即函数
        stu = {"name":self.name.get(),"math":self.math.get(),
               "chinese":self.chinese.get(),"english":self.english.get()}
        self.name.set('')#数据录入完成后清空菜单栏
        self.math.set('')#数据录入完成后清空菜单栏
        self.chinese.set('')#数据录入完成后清空菜单栏
        self.english.set('')#数据录入完成后清空菜单栏
        print(stu)
        db.insert(stu)#导入db.py里的函数insert来更新db数据库,刷新可以看到新的成绩列表
        self.status.set('录入数据成功')
class SearchFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        tk.Label(self,text='查询页面').pack()
        self.table_view = tk.Frame()#使用tk的框架新建页面
        self.table_view.pack()#使用tk的框架新建页面
        self.create_page()#使用tk的框架新建页面
    def create_page(self):#使用tk的框架新建页面函数
        columns = ("name","chinese","math","english")#使用tk的框架的表头
        columns_values = ("姓名","语文","数学","英语")#使用tk的框架的表头
        self.tree_view = ttk.Treeview(self,show='headings',columns=columns)
        self.tree_view.column('name',width=80,anchor='center')
        self.tree_view.column('chinese',width=80,anchor='center')
        self.tree_view.column('math',width=80,anchor='center')
        self.tree_view.column('english',width=80,anchor='center')
        self.tree_view.heading('name',text='姓名')
        self.tree_view.heading('chinese',text='语文')
        self.tree_view.heading('math',text='数学')
        self.tree_view.heading('english',text='英语')
        self.tree_view.pack(fill=tk.BOTH,expand=True)#页面布局
        self.show_data_frame()#数据展示函数加入属性
        tk.Button(self,text='刷新数据',command=self.show_data_frame).pack(anchor=tk.E,pady=5)#创建刷新按钮,且给5个像素,位于右下角
    def show_data_frame(self):#创建数据展示函数
        #删除旧的数据,刷新,更新数据
        for _ in map(self.tree_view.delete,self.tree_view.get_children('')):
            pass
        students = db.all()
        index = 0
        for stu in students:#for循环遍历数据库库student
            print(stu)#打印出数据库student,且以字典的形式展示出来
            self.tree_view.insert('',index + 1,values=(
                stu['name'],stu['math'],stu['chinese'],stu['english']
            ))
class ChangeFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        #tk.Label(self,text='修改页面').pack()
        #下面的,页面布局和前面的插入是一样的,直接复制过来了
        self.name = tk.StringVar()  # 输入名字
        self.math = tk.StringVar()  # 输入数学
        self.chinese = tk.StringVar()  # 输入中文
        self.english = tk.StringVar()  # 输入英语
        self.status = tk.StringVar()
        self.create_page()  # 新页面属性加入类
        # 下面的,页面布局和前面的插入是一样的,直接复制过来了
    def create_page(self):  # 创建录入页面的方法即是函数
        tk.Label(self).grid(row=0, pady=10)  # pady上下间隔10像素
        tk.Label(self, text='姓名:').grid(row=1, column=1, pady=10)
        tk.Entry(self, textvariable=self.name).grid(row=1, column=2, pady=10)
        tk.Label(self, text='数学:').grid(row=2, column=1, pady=10)
        tk.Entry(self, textvariable=self.math).grid(row=2, column=2, pady=10)
        tk.Label(self, text='语文:').grid(row=3, column=1, pady=10)
        tk.Entry(self, textvariable=self.chinese).grid(row=3, column=2, pady=10)
        tk.Label(self, text='英语:').grid(row=4, column=1, pady=10)
        tk.Entry(self, textvariable=self.english).grid(row=4, column=2, pady=10)
        tk.Button(self, text='查询', command=self.search_user).grid(row=5, column=1, pady=10)  # 查询command点击事件
        tk.Button(self, text='修改', command=self.change_user).grid(row=5, column=2, pady=10)  # 修改command点击事件
        tk.Label(self, textvariable=self.status).grid(row=6, column=2, pady=10, stick=tk.E)  # 文本录入

    def search_user(self):
        flag,info = db.search_by_username(self.name.get())
        if flag:
            self.name.set(info['name'])
            self.math.set(info['math'])
            self.chinese.set(info['chinese'])
            self.english.set(info['english'])
            self.status.set('数据查询成功')
        else:
            self.status.set(info)
    def change_user(self):
        stu = {"name": self.name.get(), "math": self.math.get(),
               "chinese": self.chinese.get(), "english": self.english.get()}
        self.name.set('')  # 数据录入完成后清空菜单栏
        self.math.set('')  # 数据录入完成后清空菜单栏
        self.chinese.set('')  # 数据录入完成后清空菜单栏
        self.english.set('')  # 数据录入完成后清空菜单栏
        #print(stu)
        db.update(stu)  # 导入db.py里的函数来更新db数据库update,刷新可以看到新的成绩列表
        self.status.set('修改数据成功')
class DeleteFrame(tk.Frame):
    def __init__(self,root):
        super().__init__(root)
        #tk.Label(self,text='删除页面').pack()
        self.username = tk.StringVar()
        self.status = tk.StringVar()
        tk.Label(self,text='根据名字删除').pack()
        tk.Entry(self,textvariable=self.username).pack()
        tk.Button(self,text='删除',command=self.delete).pack()
        tk.Label(self,textvariable=self.status).pack()
    def delete(self):
        username = self.username.get()#获取输入用户名字
        flag,message = db.delete_by_username(username)#添加标签,弹出消息提示
        self.status.set(message)

python学籍管理系统_第17张图片

python学籍管理系统_第18张图片

 

 

你可能感兴趣的:(python,开发语言)