python + GUI 实现学生管理系统 数据用TXT文档存储 亲测可用

运行登录界面即可自动跳转学生管理界面

先把登录界面代码和学生管理代码放在同一个文件夹,

再在这个文件夹创建两个空的users.txt,students.txt文件

即可正常运行

登录界面代码运行效果

python + GUI 实现学生管理系统 数据用TXT文档存储 亲测可用_第1张图片 

登录界面代码

import tkinter as tk
from student_manager import StudentManager
class Login:
    # 定义初始化方法,用于创建登录窗口和输入框和按钮
    def __init__(self):
        # 创建一个登录窗口
        self.login_window = tk.Tk()
    
        # 设置窗口标题
        self.login_window.title("登录")
        
        # 获取屏幕的宽度和高度
        screen_width = self.login_window.winfo_screenwidth()
        screen_height = self.login_window.winfo_screenheight()
        
        # 计算屏幕的中心坐标
        center_x = screen_width // 2
        center_y = screen_height // 2
        
        # 设置窗口的大小和位置
        self.login_window.geometry(f"300x200+{center_x-150}+{center_y-100}")
   
        # 设置窗口大小
        # self.login_window.geometry("300x200")
    
        # 在登录窗口中创建两个标签,分别显示用户名和密码字段
        tk.Label(self.login_window, text="用户名:").place(x=10, y=10)
        tk.Label(self.login_window, text="密码:").place(x=10, y=50)
    
        # 在登录窗口中创建两个输入框,用于输入用户名和密码
        self.username_var = tk.StringVar()
        self.password_var = tk.StringVar()
        self.username_entry = tk.Entry(self.login_window, textvariable=self.username_var)
        self.password_entry = tk.Entry(self.login_window, textvariable=self.password_var, show="*")
        self.username_entry.place(x=60, y=10)
        self.password_entry.place(x=60, y=50)
    
        # 在登录窗口中创建两个按钮,分别用于注册和登录
        tk.Button(self.login_window, text="登录", command=self.login).place(x=120, y=90)
        tk.Button(self.login_window, text="注册", command=self.register).place(x=60, y=90)
        
    
    
    # 定义一个方法,用于注册新用户,并将其保存到TXT文档中
    def register(self):
        # 获取输入框中的内容
        username = self.username_var.get()
        password = self.password_var.get()
    
        # 判断用户名和密码是否为空
        if username and password:
            # 打开TXT文档
            file = open("users.txt", "a")
    
            # 将用户名和密码保存到TXT文档中
            file.write(",".join([username, password]) + "\n")
            file.close()
    
            # 弹出一个对话框,显示注册成功的信息
            tk.messagebox.showinfo(title="注册成功", message="恭喜你,注册成功!")
    
        else:
            # 弹出一个对话框,显示注册失败的信息
            tk.messagebox.showerror(title="注册失败", message="用户名或密码不能为空!")
    
    # 定义一个方法,用于登录系统,并验证用户名和密码是否正确
    def login(self):
        # 获取输入框中的内容
        username = self.username_var.get()
        password = self.password_var.get()
    
        # 判断用户名和密码是否为空
        if username and password:
            # 打开TXT文档
            file = open("users.txt", "r")
    
            # 逐行读取内容
            for line in file:
                # 将每一行的内容分割成用户名和密码
                user, pwd = line.strip().split(",")
    
                # 判断用户名和密码是否匹配
                if username == user and password == pwd:
                    # 关闭TXT文档
                    file.close()
    
                    # 关闭登录窗口
                    self.login_window.destroy()
    
                    # 创建一个StudentManager对象,进入学生管理系统的界面和功能
                    student_manager = StudentManager()
                    return
            # 关闭TXT文档
            file.close()  
            # 弹出一个对话框,显示登录失败的信息
            tk.messagebox.showerror(title="登录失败", message="用户名或密码错误!")
    
        else:
            # 弹出一个对话框,显示登录失败的信息
            tk.messagebox.showerror(title="登录失败", message="用户名或密码不能为空!")
            
# 创建一个Login对象,进入登录界面的功能
login = Login()
# 进入主循环
login.login_window.mainloop()

学生管理运行效果显示 可增删改查

python + GUI 实现学生管理系统 数据用TXT文档存储 亲测可用_第2张图片 

学生管理模块代码

import tkinter as tk
class StudentManager:
    # 定义初始化方法,用于创建主窗口和菜单栏
    def __init__(self):
        # 创建一个主窗口
        self.window = tk.Tk()
    
        # 设置窗口标题
        self.window.title("学生管理系统")
    
        # 设置窗口大小
        
        # 获取屏幕的宽度和高度
        screen_width = self.window.winfo_screenwidth()
        screen_height = self.window.winfo_screenheight()
        
        # 计算屏幕的中心坐标
        center_x = screen_width // 2
        center_y = screen_height // 2
        
        # 设置窗口的大小和位置
        self.window.geometry(f"450x300+{center_x-150}+{center_y-100}")

        # self.window.geometry("600x400")
    
        # 创建一个菜单栏
        self.menubar = tk.Menu(self.window)
    
        # 创建一个增加菜单,并添加到菜单栏
        self.add_menu = tk.Menu(self.menubar, tearoff=0)
        self.add_menu.add_command(label="添加", command=self.add_student)
        self.menubar.add_cascade(label="添加", menu=self.add_menu)
    
        # 创建一个删除菜单,并添加到菜单栏
        self.delete_menu = tk.Menu(self.menubar, tearoff=0)
        self.delete_menu.add_command(label="删除", command=self.delete_student)
        self.menubar.add_cascade(label="删除", menu=self.delete_menu)
    
        # 创建一个修改菜单,并添加到菜单栏
        self.update_menu = tk.Menu(self.menubar, tearoff=0)
        self.update_menu.add_command(label="修改", command=self.update_student)
        self.menubar.add_cascade(label="修改", menu=self.update_menu)
    
        # 创建一个查询菜单,并添加到菜单栏
        self.query_menu = tk.Menu(self.menubar, tearoff=0)
        self.query_menu.add_command(label="查询", command=self.query_student)
        self.menubar.add_cascade(label="查询", menu=self.query_menu)
    
        # 创建一个退出菜单,并添加到菜单栏
        self.quit_menu = tk.Menu(self.menubar, tearoff=0)
        self.quit_menu.add_command(label="退出", command=self.quit)
        self.menubar.add_cascade(label="退出", menu=self.quit_menu)
    
        # 将菜单栏添加到主窗口
        self.window.config(menu=self.menubar)
    
        # 创建一个文本框
        self.text = tk.Text(self.window)
    
        # 创建一个滚动条
        self.scroll = tk.Scrollbar(self.window)
    
        # 将滚动条绑定到文本框
        self.scroll.config(command=self.text.yview)
        self.text.config(yscrollcommand=self.scroll.set)
    
        # 将文本框和滚动条放置到主窗口中
        self.text.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
        self.scroll.pack(side=tk.RIGHT, fill=tk.Y)
        # 从TXT文档中读取学生的信息,并显示在文本框中
        self.load_data()
    
    # 定义增加学生的方法,用于创建一个新的窗口,用于输入学生的信息
    def add_student(self):
        # 创建一个新的窗口,用于输入学生的信息
        self.add_window = tk.Toplevel(self.window)
    
        # 设置新窗口的标题和大小
        self.add_window.title("增加学生")
        self.add_window.geometry("300x400")
    
        # 在新窗口中创建八个标签,分别显示学号、姓名、年龄、性别、班级等字段和语文、数学、信息等科目的成绩
        tk.Label(self.add_window, text="学号:").place(x=10, y=10)
        tk.Label(self.add_window, text="姓名:").place(x=10, y=50)
        tk.Label(self.add_window, text="年龄:").place(x=10, y=90)
        tk.Label(self.add_window, text="性别:").place(x=10, y=130)
        tk.Label(self.add_window, text="班级:").place(x=10, y=170)
        tk.Label(self.add_window, text="语文:").place(x=10, y=210)
        tk.Label(self.add_window, text="数学:").place(x=10, y=250)
        tk.Label(self.add_window, text="信息:").place(x=10, y=290)
    
        # 在新窗口中创建八个输入框,用于输入学生的信息和语文、数学、信息等科目的成绩
        self.id_var = tk.StringVar()
        self.name_var = tk.StringVar()
        self.age_var = tk.StringVar()
        self.gender_var = tk.StringVar()
        self.class_var = tk.StringVar()
        self.chinese_var = tk.StringVar()
        self.math_var = tk.StringVar()
        self.info_var = tk.StringVar()
    
        self.id_entry = tk.Entry(self.add_window, textvariable=self.id_var)
        self.name_entry = tk.Entry(self.add_window, textvariable=self.name_var)
        self.age_entry = tk.Entry(self.add_window, textvariable=self.age_var)
        self.gender_entry = tk.Entry(self.add_window, textvariable=self.gender_var)
        self.class_entry = tk.Entry(self.add_window, textvariable=self.class_var)
        self.chinese_entry = tk.Entry(self.add_window, textvariable=self.chinese_var)
        self.math_entry = tk.Entry(self.add_window, textvariable=self.math_var)
        self.info_entry = tk.Entry(self.add_window, textvariable=self.info_var)
    
        self.id_entry.place(x=60, y=10)
        self.name_entry.place(x=60, y=50)
        self.age_entry.place(x=60, y=90)
        self.gender_entry.place(x=60, y=130)
        self.class_entry.place(x=60, y=170)
        self.chinese_entry.place(x=60, y=210)
        self.math_entry.place(x=60, y=250)
        self.info_entry.place(x=60, y=290)
    
        # 在新窗口中创建一个按钮,用于提交学生的信息
        tk.Button(self.add_window, text="提交", command=self.submit).place(x=120, y=330)
        
    # 定义一个方法,用于获取输入框中的内容,并将其保存到TXT文档中,并更新文本框中的内容
    def submit(self):
        # 获取输入框中的内容
        id_ = self.id_var.get()
        name = self.name_var.get()
        age = self.age_var.get()
        gender = self.gender_var.get()
        class_ = self.class_var.get()
        chinese = self.chinese_var.get()
        math = self.math_var.get()
        info = self.info_var.get()
    
        # 将输入框中的内容保存到TXT文档中
        file = open("students.txt", "a")
        file.write(",".join([id_, name, age, gender, class_, chinese, math, info]) + "\n")
        file.close()
    
        # 更新文本框中的内容
        self.clear_data()
        self.load_data()
    
    # 定义一个方法,用于从TXT文档中读取学生的信息,并显示在文本框中
    def load_data(self):
        # 打开TXT文档
        file = open("students.txt", "r")
    
        # 逐行读取内容
        for line in file:
            # 将每一行的信息分割成学号、姓名、年龄、性别、班级等字段和语文、数学、信息等科目的成绩
            id_, name, age, gender, class_, chinese, math, info = line.strip().split(",")
    
            # 用制表符连接起来
            data = "\t".join([id_, name, age, gender, class_, chinese, math, info])
    
            # 将每一行的信息插入到文本框中,并换行
            self.text.insert(tk.END, data + "\n")
    
        # 关闭TXT文档
        file.close()
        
    # 定义一个方法,用于修改一个学生的信息,并更新到TXT文档中
    def update_student(self):
        # 创建一个新的窗口,用于输入要修改的学生的学号
        self.update_window = tk.Toplevel(self.window)
    
        # 设置新窗口的标题和大小
        self.update_window.title("修改学生")
        self.update_window.geometry("300x100")
    
        # 在新窗口中创建一个标签,显示学号字段
        tk.Label(self.update_window, text="学号:").place(x=10, y=10)
    
        # 在新窗口中创建一个输入框,用于输入要修改的学生的学号
        self.id_var = tk.StringVar()
        self.id_entry = tk.Entry(self.update_window, textvariable=self.id_var)
        self.id_entry.place(x=60, y=10)
    
        # 在新窗口中创建一个按钮,用于查询要修改的学生的信息
        tk.Button(self.update_window, text="查询", command=self.modify).place(x=120, y=50)
    
    # 定义一个方法,用于获取输入框中的内容,并从TXT文档中查找,并弹出一个窗口,显示要修改的学生的信息
    def modify(self):
        # 获取输入框中的内容
        id_ = self.id_var.get()
    
        # 从TXT文档中查找
        file = open("students.txt", "r")
        lines = file.readlines()
        file.close()
    
        # 创建一个对话框,用于显示要修改的学生的信息
        self.modify_result = tk.Toplevel(self.window)
    
        # 设置对话框的标题和大小
        self.modify_result.title("修改结果")
        self.modify_result.geometry("400x400")
    
        # 在对话框中创建八个标签,分别显示学号、姓名、年龄、性别、班级等字段和语文、数学、信息等科目的成绩
        # tk.Label(self.modify_result, text="学号:").place(x=10, y=10)
        tk.Label(self.modify_result, text="姓名:").place(x=10, y=50)
        tk.Label(self.modify_result, text="年龄:").place(x=10, y=90)
        tk.Label(self.modify_result, text="性别:").place(x=10, y=130)
        tk.Label(self.modify_result, text="班级:").place(x=10, y=170)
        tk.Label(self.modify_result, text="语文:").place(x=10, y=210)
        tk.Label(self.modify_result, text="数学:").place(x=10, y=250)
        tk.Label(self.modify_result, text="信息:").place(x=10, y=290)
        # 在对话框中创建八个输入框,用于显示和修改要修改的学生的信息和语文、数学、信息等科目的成绩
        self.name_var = tk.StringVar()
        self.age_var = tk.StringVar()
        self.gender_var = tk.StringVar()
        self.class_var = tk.StringVar()
        self.chinese_var = tk.StringVar()
        self.math_var = tk.StringVar()
        self.info_var = tk.StringVar()
    
        self.name_entry = tk.Entry(self.modify_result, textvariable=self.name_var)
        self.age_entry = tk.Entry(self.modify_result, textvariable=self.age_var)
        self.gender_entry = tk.Entry(self.modify_result, textvariable=self.gender_var)
        self.class_entry = tk.Entry(self.modify_result, textvariable=self.class_var)
        self.chinese_entry = tk.Entry(self.modify_result, textvariable=self.chinese_var)
        self.math_entry = tk.Entry(self.modify_result, textvariable=self.math_var)
        self.info_entry = tk.Entry(self.modify_result, textvariable=self.info_var)
    
        self.name_entry.place(x=60, y=50)
        self.age_entry.place(x=60, y=90)
        self.gender_entry.place(x=60, y=130)
        self.class_entry.place(x=60, y=170)
        self.chinese_entry.place(x=60, y=210)
        self.math_entry.place(x=60, y=250)
        self.info_entry.place(x=60, y=290)
    
        # 在对话框中创建一个按钮,用于更新要修改的学生的信息
        tk.Button(self.modify_result, text="更新", command=lambda: self.update(id_, self.name_var, self.age_var, self.gender_var, self.class_var, self.chinese_var, self.math_var, self.info_var)).place(x=120, y=330)
    
        # 显示在输入框中
        for line in lines:
            if line.startswith(id_ + ","):
                # 将每一行的信息分割成学号、姓名、年龄、性别、班级等字段和语文、数学、信息等科目的成绩
                id_, name, age, gender, class_, chinese, math, info = line.strip().split(",")
    
                # 将每一行的信息显示在输入框中
                self.name_var.set(name)
                self.age_var.set(age)
                self.gender_var.set(gender)
                self.class_var.set(class_)
                self.chinese_var.set(chinese)
                self.math_var.set(math)
                self.info_var.set(info)
    
    # 定义一个方法,用于获取输入框中的内容,并更新到TXT文档中,并更新文本框中的内容
    def update(self, id_, name_var, age_var, gender_var, class_var, chinese_var, math_var, info_var):
        # 获取输入框中的内容
        name = name_var.get()
        age = age_var.get()
        gender = gender_var.get()
        class_ = class_var.get()
        chinese = chinese_var.get()
        math = math_var.get()
        info = info_var.get()
    
        # 更新到TXT文档中
        file = open("students.txt", "r")
        lines = file.readlines()
        file.close()
    
        file = open("students.txt", "w")
        for line in lines:
            if line.startswith(id_ + ","):
                file.write(",".join([id_, name, age, gender, class_, chinese, math, info]) + "\n")
            else:
                file.write(line)
        file.close()
    
        # 更新文本框中的内容
        self.clear_data()
        self.load_data()
    
     # 定义一个方法,用于删除一个学生的信息,并从TXT文档中移除
    def delete_student(self):
        # 创建一个新的窗口,用于输入要删除的学生的姓名
        self.delete_window = tk.Toplevel(self.window)
    
        # 设置新窗口的标题和大小
        self.delete_window.title("删除学生")
        self.delete_window.geometry("300x100")
    
        # 在新窗口中创建一个标签,显示姓名字段
        tk.Label(self.delete_window, text="学号:").place(x=10, y=10)
    
        # 在新窗口中创建一个输入框,用于输入要删除的学生的姓名
        self.name_var = tk.StringVar()
        self.name_entry = tk.Entry(self.delete_window, textvariable=self.name_var)
        self.name_entry.place(x=60, y=10)
    
        # 在新窗口中创建一个按钮,用于删除学生的信息
        tk.Button(self.delete_window, text="删除", command=self.remove).place(x=120, y=50)
    
    # 定义一个方法,用于获取输入框中的内容,并从TXT文档中移除,并更新文本框中的内容
    def remove(self):
        # 获取输入框中的内容
        name = self.name_var.get()
    
        # 从TXT文档中移除
        file = open("students.txt", "r")
        lines = file.readlines()
        file.close()
    
        file = open("students.txt", "w")
        for line in lines:
            if not line.startswith(name + ","):
                file.write(line)
        file.close()
    
        # 更新文本框中的内容
        self.clear_data()
        self.load_data()
    
     # 定义一个方法,用于查询一个学生的信息,并显示在文本框中
    def query_student(self):
        # 创建一个新的窗口,用于输入要查询的学生的姓名
        self.query_window = tk.Toplevel(self.window)
    
        # 设置新窗口的标题和大小
        self.query_window.title("查询学生")
        self.query_window.geometry("300x100")
    
        # 在新窗口中创建一个标签,显示姓名字段
        tk.Label(self.query_window, text="学号:").place(x=10, y=10)
    
        # 在新窗口中创建一个输入框,用于输入要查询的学生的姓名
        self.name_var = tk.StringVar()
        self.name_entry = tk.Entry(self.query_window, textvariable=self.name_var)
        self.name_entry.place(x=60, y=10)
    
        # 在新窗口中创建一个按钮,用于查询学生的信息    
        tk.Button(self.query_window, text="查询", command=self.search).place(x=120, y=50)
    
    # 定义一个方法,用于获取输入框中的内容,并从TXT文档中查找,并显示在文本框中
    def search(self):
        # 获取输入框中的内容
        name = self.name_var.get()
    
        # 从TXT文档中查找
        file = open("students.txt", "r")
        lines = file.readlines()
        file.close()
    
        # 清空文本框中的内容
        # self.clear_data()
    
        # 创建一个对话框,用于显示查询的结果
        self.query_result = tk.Toplevel(self.window)
    
        # 设置对话框的标题和大小
        self.query_result.title("查询结果")
        self.query_result.geometry("400x300")
    
        # 在对话框中创建一个文本框,用于显示查询的结果
        self.result_text = tk.Text(self.query_result)
    
        # 在对话框中创建一个滚动条,用于滚动文本框
        self.result_scroll = tk.Scrollbar(self.query_result)
    
        # 将滚动条绑定到文本框
        self.result_scroll.config(command=self.result_text.yview)
        self.result_text.config(yscrollcommand=self.result_scroll.set)
    
        # 将文本框和滚动条放置到对话框中
        self.result_text.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
        self.result_scroll.pack(side=tk.RIGHT, fill=tk.Y)
    
        # 插入表头行
        header = "\t".join(["姓名", "年龄", "性别", "班级", "语文", "数学", "信息"])
        self.result_text.insert(tk.END, header + "\n")
    
        # 显示在文本框中
        for line in lines:
            if line.startswith(name + ","):
                # 将每一行的信息分割成姓名、年龄、性别、班级等字段和语文、数学、信息等科目的成绩
                id_, name, age, gender, class_, chinese, math, info = line.strip().split(",")
    
                # 用制表符连接起来
                data = "\t".join([name, age, gender, class_, chinese, math, info])
    
                # 将每一行的信息插入到文本框中,并换行
                self.result_text.insert(tk.END, data + "\n")


    # 定义一个方法,用于退出程序,并关闭所有的窗口
    def quit(self):
        # 调用主窗口的destroy方法,将主窗口和所有的子窗口都关闭
        self.window.destroy()
    
    # 定义一个方法,用于清空文本框中的内容
    def clear_data(self):
        # 调用文本框的delete方法,将文本框中的所有内容删除
        self.text.delete(1.0, tk.END)

#创建一个StudentManager对象
student_manager = StudentManager()

# 进入主循环
student_manager.window.mainloop()

你可能感兴趣的:(python)