pathon学生管理系统(具有GUI界面)

效果展示图

 

 

 

 

郑重说明:此代码需要安装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"}]

 

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值