效果展示图
郑重说明:此代码需要安装tkinter包
关于储存数据的json文件的命名与路径可能需要修改
py文件的名字已经放到代码快的开头
#文件名:“学生管理系统.py”
import tkinter as tk
from tkinter import messagebox
from db import db
from Mianpage06 import Mianpage
from register import registion
class LoginPage:
def __init__(self,mainpage):
# root=tk.Tk()
self.root=mainpage
self.root.geometry('400x280+100+100')
self.root.title('登录')
self.username=tk.StringVar()
self.password=tk.StringVar()
#登录页方法
def login():
name=self.username.get()
pwd=self.password.get()
flag,message1=db.check_login(name,pwd)
if flag:#用来接收正负
# print("登录成功")
self.page.destroy()
Mianpage(self.root)
else:
messagebox.showwarning(title='警告',message=message1)
pass
def rigistion():
self.page.destroy()
registion(self.root)
self.page=tk.Frame(root)
self.page.pack()
tk.Label(self.page).grid(row=0,column=0)
#构建账户与密码
tk.Label(self.page,text='账户:').grid(row=6,column=1,pady=20)
tk.Entry(self.page,textvariable=self.username).grid(row=6,column=2)
tk.Label(self.page,text='密码:').grid(row=8,column=1,pady=5)
tk.Entry(self.page,textvariable=self.password,show='*').grid(row=8,column=2)
#构建登录与退出
tk.Button(self.page,text='登录',command=login).grid(row=10,column=1)
tk.Button(self.page,text='注册',command=rigistion).grid(row=10,column=3)
#显示窗口
# root.mainloop()
pass
pass
if __name__=='__main__':
root=tk.Tk()
LoginPage(mainpage=root)
root.mainloop()
#文件名:“Mianpage06.py”
from cgitb import text
import tkinter as tk
from views import AboutFrame,ChangeFrame,InsertFrame,SerchFrame,DeleteFrame
class Mianpage:
def __init__(self,mianpage):
# import tkinter as tk
self.root=mianpage
self.root.title('学生信息管理系统')
self.root.geometry('600x400')
self.create_page()#执行这个函数
def create_page(self):
#创建关于界面
self.about_frame=AboutFrame(self.root)
#创建修改界面
self.change_frame=ChangeFrame(self.root)
# def show_change(self):
# self.change_frame.pack()
#创建插入界面
self.insert_frame=InsertFrame(self.root)
#创建查询界面
self.serch_frame=SerchFrame(self.root)
#创建删除界面
self.delete_frame=DeleteFrame(self.root)
#创造菜界面
menubar=tk.Menu(self.root)
menubar.add_command(label="录入",command=self.show_insert)
menubar.add_command(label="查阅",command=self.show_serch)
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.about_frame.pack()
self.insert_frame.forget()
self.delete_frame.forget()
self.serch_frame.forget()
self.change_frame.forget()
def show_change(self):
self.change_frame.pack()
self.about_frame.forget()
self.insert_frame.forget()
self.delete_frame.forget()
self.serch_frame.forget()
def show_delete(self):
self.delete_frame.pack()
self.about_frame.forget()
self.change_frame.forget()
self.insert_frame.forget()
self.serch_frame.forget()
def show_serch(self):
self.serch_frame.pack()
self.about_frame.forget()
self.change_frame.forget()
self.insert_frame.forget()
self.delete_frame.forget()
def show_insert(self):
self.insert_frame.pack()
self.about_frame.forget()
self.change_frame.forget()
self.delete_frame.forget()
self.serch_frame.forget()
if __name__=='__main__':
root=tk.Tk()
Mianpage(root)
root.mainloop()
#文件名:“register.py”
import tkinter as tk
from views import register1
class registion:
def __init__(self,master):
self.root=master
self.root.title('用户注册界面')
self.root.geometry('400x400')
self.register_frame=register1(self.root)
self.register_frame.pack()
if __name__=='__main__':
win=tk.Tk()
registion(win)
win.mainloop()
#文件名字:“views.py”
from email import message
import tkinter as tk
import tkinter
from turtle import title
from db import db
from tkinter import ttk
from tkinter import messagebox
class AboutFrame(tk.Frame):
def __init__(self,root):
super().__init__(root)
tk.Label(self,text='关于作品').pack()
# tk.Label(self,text="小霍同学").pack()
tk.Label(self,text="使用tkinter编写页面").pack()
tk.Label(self,text='用户数据使用json进行储存').pack()
class ChangeFrame(tk.Frame):
def __init__(self,root):
super().__init__(root)
# tk.Label(self,text='关于作品')
tk.Label(self,text="修改页面").grid(row=0,column=2)
self.name=tk.StringVar()
self.math=tk.StringVar()
self.Chinese=tk.StringVar()
self.English=tk.StringVar()
self.status=tk.StringVar()
self.create_page1()
def create_page1(self):#查询界面
tk.Label(self).grid(row=0,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.change_user).grid(row=5,column=3,pady=10)
tk.Button(self,text='查询',command=self.search_user).grid(row=5,column=1,pady=10)
tk.Label(self,textvariable=self.status).grid(row=6,column=2,pady=10,stick=tk.E)
def search_user(self):
flag,info=db.SearchByName(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'])
pass
else:
self.status.set(info)
pass
# pass
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('')
db.update(stu)
self.status.set('数据修改成功')
pass
class InsertFrame(tk.Frame):
def __init__(self,root):
super().__init__(root)
# tk.Label(self,text='关于作品')
tk.Label(self,text="录入页面").grid(row=0,column=2)
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)
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)
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()}
print(stu)
db.insert(stu)
self.status.set('获取数据成功')
self.name.set('')
self.math.set('')
self.Chinese.set('')
self.English.set('')
# self.status.set("提交数计成功")
class SerchFrame(tk.Frame):
def __init__(self,root):
super().__init__(root)
# tk.Label(self,text='关于作品')
# tk.Label(self,text="查询页面").pack()
self.table_view=tk.Frame()
self.table_view.pack()
self.creat_page()
def creat_page(self):
columns=("name","Chinese","math","English")
columns_valuse=("姓名","语文","数学","英语")
self.tree_view=ttk.Treeview(self,show='headings',columns=columns)
self.tree_view.column("name",width=100,anchor='center')
self.tree_view.column("Chinese",width=100,anchor='center')
self.tree_view.column("math",width=100,anchor='center')
self.tree_view.column("English",width=100,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,padx=1,pady=1)
self.show_data_fram()
tk.Button(self,text='刷新数据',command=self.show_data_fram).pack(anchor=tk.E)
tk.Button(self,text='排序',command=self.show_dateSort_fram).pack(anchor=tk.W)
def show_data_fram(self):#编写刷新数据函数
for _ in map(self.tree_view.delete,self.tree_view.get_children('')):
pass
students=db.all()
index=-1
for stu in students:
print(stu)
self.tree_view.insert("",index=index+1,values=(stu['name'],stu['math'],
stu['chinese'],stu['English'],))
def show_dateSort_fram(self):
for _ in map(self.tree_view.delete,self.tree_view.get_children('')):
pass
students1=db.allSort()
index=-1
for stu in students1:
print(stu)
self.tree_view.insert("",index=index+1,values=(stu['name'],stu['math'],
stu['chinese'],stu['English'],))
class DeleteFrame(tk.Frame):
def __init__(self,root):
super().__init__(root)
# tk.Label(self,text='关于作品')
tk.Label(self,text="根据名字删除数据:").pack()
self.username=tk.StringVar()
self.status=tk.StringVar()
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.DeleteByName(username)
self.status.set(message)
self.username.set('')
pass
class register1(tk.Frame):
def __init__(self,master):
# import tkinter as tk
super().__init__(master)
self.admin=tk.StringVar()
self.password1=tk.StringVar()
self.password2=tk.StringVar()
self.register2()
def register2(self):
tk.Label(self).grid(row=0,pady=10)
tk.Label(self,text='新用户注册').grid(row=0,column=5,pady=10)
tk.Label(self,text='用户名').grid(row=2,column=4,pady=10)
tk.Entry(self,textvariable=self.admin).grid(row=2,column=5,pady=10)
tk.Label(self,text='密码').grid(row=4,column=4,pady=10)
tk.Entry(self,textvariable=self.password1,show='*').grid(row=4,column=5,pady=10)
tk.Label(self,text='再次确认密码').grid(row=6,column=4,pady=10)
tk.Entry(self,textvariable=self.password2,show='*').grid(row=6,column=5,pady=10)
#设置"注册"按钮
tk.Button(self,text='注册',command=self.witteuser).grid(row=7,column=6)
def witteuser(self):
admin__password={"username":self.admin.get(),"password":self.password1.get()}
if self.password1!=self.password2:
tk.Label(self,text='注册失败,两次输入的\n密码不一直').grid(row=8,column=7)
self.admin.set('')
self.password1.set('')
self.password2.set('')
else:
db.wirte(admin__password)
self.admin.set('')
self.password1.set('')
self.password2.set('')
tk.Label(self,text='注册失败').grid(row=8,column=7)
#文件名:"db.py"
import json
class MysqlDatabase:#使用json文件充当数据库
def __init__(self):
# with open(r'视频\06users.json',mode='r',encoding='utf-8') as f:#这个路径要搞正确
# text=f.read()
# pass
# self.users=json.loads(text)#文件可以简写为
#注意路径要与自己电脑的实际路径要相等
self.users=json.loads(open(r'06users.json',mode='r',encoding='utf-8').read())
self.students=json.loads(open(r'06student.json',mode='r',encoding='utf-8').read())
pass
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,'登录失败'
# pass
def all(self):
return self.students
def allSort(self):
self.students.sort(key=lambda a :(int(a['math'])+int(a['chinese'])+int(a['English'])))
return self.students
def insert(self,student):
print(student)
self.students.append(student)
# pass
def DeleteByName(self,name):
for student in self.students:
print(student)
if student['name']==name:
self.students.remove(student)
return True,'{}用户删除成功'.format(name)
return False,'{}用户不存在'.format(name)
def SearchByName(self,name):
for student in self.students:
print(student)
if student['name']==name:
print(student)
return True,student
return False,'{}用户不存在'.format(name)
def update(self,stu):
for student in self.students:
if student['name']==stu['name']:
student.update(stu)
print(type(student))
return True,"{}用户信息修改成功".format(stu['name'])
return False, "{}用户不存在".format(stu['name'])
# info={"username":"zhengxin","password":"1234567"}
# with open("users.json",'w') as f:
# f.write(json.dumps(info,ensure_ascii=False))
def wirte(self,admin):
self.users.append(admin)
with open(r'视频\06users.json','w') as f:
f.write(json.dumps(self.users,ensure_ascii=False))
return self.users
db=MysqlDatabase()
if __name__=='__main__':
# print(db.check_login('admin','password'))
# print(db.all())
# print(type(db.students))
# print(db.DeleteByName("huoxiaoyang"))
# admin={"username":"jinzhezhe","password":"123456"}
# print(db.SearchByName('张三'))
# print(db.wirte(admin))
print(db.allSort())
print(type(db.all()))
print(type(db.allSort()))
数据文件
文件名:“06student.json”
[{"name":"小乐","math":"74","chinese":"66","English":"87"},{"name":"小坤","math":"100","chinese":"100","English":"100"},{"name":"小达","math":"65","chinese":"75","English":"85"}
,{"name":"小杨","math":"65","chinese":"75","English":"85"},{"name":"小琦","math":"65","chinese":"75","English":"85"},{"name":"小池","math":"65","chinese":"75","English":"85"}
,{"name":"小阔","math":"65","chinese":"75","English":"85"}]
文件名:“06users.json”
[{"username": "admin", "password": "123456"}]