python如何实现完整学生成绩管理系统
发表于:2025-02-19 作者:千家信息网编辑
千家信息网最后更新 2025年02月19日,这篇文章主要介绍"python如何实现完整学生成绩管理系统",在日常操作中,相信很多人在python如何实现完整学生成绩管理系统问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2025年02月19日python如何实现完整学生成绩管理系统
这篇文章主要介绍"python如何实现完整学生成绩管理系统",在日常操作中,相信很多人在python如何实现完整学生成绩管理系统问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"python如何实现完整学生成绩管理系统"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
学生成绩管理系统简介
一个带有登录界面具有增减改查功能的学生成绩管理系统(面向对象思想,利用tkinter库进行制作,利用.txt文件进行存储数据)
源代码
✅仅供学习参考,最好还是自己多敲多练习(实践是检验真理的唯一标准)
students.txt
用于存储数据
main.py
from tkinter import *from Login import *import tkinter as tkroot = tk.Tk()root.title('欢迎进入学生成绩管理系统')LoginPage(root)root.mainloop()
Login.py
from tkinter import *from tkinter.messagebox import *from MenuPage import *class LoginPage(object): def __init__(self, master=None): self.root = master # 定义内部变量root self.root.geometry('%dx%d' % (300, 180)) # 设置窗口大小 self.username = StringVar() self.password = StringVar() self.createPage() def createPage(self): self.page = Frame(self.root) # 创建Frame self.page.pack() Label(self.page).grid(row=0, stick=W) Label(self.page, text='账户: ').grid(row=1, stick=W, pady=10) Entry(self.page, textvariable=self.username).grid(row=1, column=1, stick=E) Label(self.page, text='密码: ').grid(row=2, stick=W, pady=10) Entry(self.page, textvariable=self.password, show='*').grid(row=2, column=1, stick=E) Button(self.page, text='登陆', command=self.loginCheck).grid(row=3, stick=W, pady=10) Button(self.page, text='退出', command=self.page.quit).grid(row=3, column=1, stick=E) def loginCheck(self): name = self.username.get() password = self.password.get() if name == 'hacker707' and password == 'admin': self.page.destroy() MenuPage(self.root) else: showinfo(title='错误', message='账号或密码错误!')
db.py
import jsonclass StudentDB(object): def __init__(self): self.students = [] self._load_students_data() def insert(self, student): self.students.append(student) print(self.students) def all(self): return self.students def delete_by_name(self, name): # 删除数据 for student in self.students: if name == student["name"]: self.students.remove(student) break else: return False return True # 查询 def search_by_name(self, name): for student in self.students: if name == student["name"]: return student # 姓名+成绩 else: return False # 修改 def update(self, stu): # 修改数据 name = stu["name"] for student in self.students: if name == student["name"]: student.update(stu) return True else: return False # 加载文件 def _load_students_data(self): with open("students.txt", "r", encoding="utf-8") as f: text = f.read() if text: self.students = json.loads(text) # 保存数据 def save_data(self): with open("students.txt", 'w', encoding="utf-8") as f: text = json.dumps(self.students, ensure_ascii=False) f.write(text)db = StudentDB()
MenuPage.py
import tkinter as tkfrom view import *class MenuPage(object): def __init__(self, master=None): self.root = master self.root.geometry('%dx%d' % (600, 400)) self.create_page() self.input_page = InputFrame(self.root) self.query_page = QuerryFrame(self.root) self.delete_page = DeleteFrame(self.root) self.update_page = UpdateFrame(self.root) self.about_page = AboutFrame(self.root) self.input_page.pack() def create_page(self): # 创建菜单对象 menubar = tk.Menu(self.root) # add_command 添加 menubar.add_command(label="录入", command=self.input_data) # label menubar.add_command(label="查询", command=self.query_data) # label menubar.add_command(label="删除", command=self.delete_data) # label menubar.add_command(label="修改", command=self.update_data) # label menubar.add_command(label="关于", command=self.about_data) # label # 设置菜单栏 self.root.config(menu=menubar) # 切换界面 def input_data(self): self.input_page.pack() self.update_page.pack_forget() self.delete_page.pack_forget() self.about_page.pack_forget() self.query_page.pack_forget() def query_data(self): self.input_page.pack_forget() self.query_page.pack() self.update_page.pack_forget() self.delete_page.pack_forget() self.about_page.pack_forget() def update_data(self): self.input_page.pack_forget() self.update_page.pack() self.delete_page.pack_forget() self.about_page.pack_forget() self.query_page.pack_forget() def delete_data(self): self.input_page.pack_forget() self.update_page.pack_forget() self.delete_page.pack() self.about_page.pack_forget() self.query_page.pack_forget() def about_data(self): self.input_page.pack_forget() self.update_page.pack_forget() self.delete_page.pack_forget() self.about_page.pack() self.query_page.pack_forget()
view.py
import tkinter as tkfrom db import dbfrom tkinter import ttk# 录入类class InputFrame(tk.Frame): def __init__(self, master=None): super().__init__(master) self.root = master 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, stick=tk.W, pady=10) tk.Label(self, text="姓名:").grid(row=1, stick=tk.W, pady=10) # 单行文本框 entry,textvariable绑定变量 tk.Entry(self, textvariable=self.name).grid(row=1, column=1, stick=tk.E) tk.Label(self, text="数学:").grid(row=2, stick=tk.W, pady=10) # 单行文本框 entry,textvariable绑定变量 tk.Entry(self, textvariable=self.math).grid(row=2, column=1, stick=tk.E) tk.Label(self, text="语文:").grid(row=3, stick=tk.W, pady=10) # 单行文本框 entry,textvariable绑定变量 tk.Entry(self, textvariable=self.chinese).grid(row=3, column=1, stick=tk.E) tk.Label(self, text="英语:").grid(row=4, stick=tk.W, pady=10) # 单行文本框 entry,textvariable绑定变量 tk.Entry(self, textvariable=self.english).grid(row=4, column=1, stick=tk.E) tk.Button(self, text="录入", command=self.recode_student).grid(row=5, column=1, stick=tk.E, pady=10) tk.Label(self, textvariable=self.status).grid(row=6, column=1, stick=tk.E, pady=10) # 录入成绩 def recode_student(self): student = { "name": self.name.get(), "math": self.math.get(), "chinese": self.chinese.get(), "english": self.english.get(), } # 一个学生的成绩 db.insert(student) # get()得到值 # set()设置值 self.status.set("插入数据成功!") self._clear_data() db.save_data() # 清空文本数据 def _clear_data(self): self.name.set("") self.math.set("") self.chinese.set("") self.english.set("")# 查询类class QuerryFrame(tk.Frame): def __init__(self, master=None): super().__init__(master) self.root = master self.create_page() # 创建查询界面 def create_page(self): self.create_tree_view() self.show_data_frame() # grid() tk.Button(self, text="刷新数据", command=self.show_data_frame).pack(anchor=tk.E, pady=5) # Treeview def create_tree_view(self): # 表头 columns = ("name", "chinese", "math", "english") 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() # 显示数据 def show_data_frame(self): # 删除原节点 map(int,值) for i in map(self.tree_view.delete, self.tree_view.get_children("")): pass # 拿到列表里面所有值、students[] students = db.all() # 同时拿到索引跟value值 for index, stu in enumerate(students): self.tree_view.insert('', index, values=(stu["name"], stu["chinese"], stu ["math"], stu["english"]))class DeleteFrame(tk.Frame): def __init__(self, master=None): super().__init__(master) tk.Label(self, text='删除数据').pack() self.status = tk.StringVar() self.de_name = tk.StringVar() # 获取删除学生的姓名 self.create_page() # 创建界面 def create_page(self): tk.Label(self, text="根据姓名删除信息").pack(anchor=tk.W, padx=20) e1 = tk.Entry(self, textvariable=self.de_name) e1.pack(side=tk.LEFT, padx=20, pady=5) tk.Button(self, text='删除', command=self._delete).pack(side=tk.RIGHT) tk.Label(self, textvariable=self.status).pack() # 删除 def _delete(self): name = self.de_name.get() print(name) result = db.delete_by_name(name) if result: self.status.set(f'{name}已经被删') self.de_name.set("") else: self.status.set(f'{name}不存在')class UpdateFrame(tk.Frame): def __init__(self, master=None): super().__init__(master) self.root = master tk.Label(self, text='修改界面').pack() self.change_frame = tk.Frame(self) self.change_frame.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.change_frame).grid(row=0, stick=tk.W, pady=10) tk.Label(self.change_frame, text="姓名:").grid(row=1, stick=tk.W, pady=10) # 单行文本框 entry,textvariable绑定变量 tk.Entry(self.change_frame, textvariable=self.name).grid(row=1, column=1, stick=tk.E) tk.Label(self.change_frame, text="数学:").grid(row=2, stick=tk.W, pady=10) # 单行文本框 entry,textvariable绑定变量 tk.Entry(self.change_frame, textvariable=self.math).grid(row=2, column=1, stick=tk.E) tk.Label(self.change_frame, text="语文:").grid(row=3, stick=tk.W, pady=10) # 单行文本框 entry,textvariable绑定变量 tk.Entry(self.change_frame, textvariable=self.chinese).grid(row=3, column=1, stick=tk.E) tk.Label(self.change_frame, text="英语:").grid(row=4, stick=tk.W, pady=10) # 单行文本框 entry,textvariable绑定变量 tk.Entry(self.change_frame, textvariable=self.english).grid(row=4, column=1, stick=tk.E) # 按钮 tk.Button(self.change_frame, text='查询', command=self._search).grid(row=6, column=0, stick=tk.W, pady=10) tk.Button(self.change_frame, text='修改', command=self._change).grid(row=6, column=1, stick=tk.E, pady=10) tk.Label(self.change_frame, textvariable=self.status).grid(row=7, column=1, stick=tk.E, pady=10) # 查询 def _search(self): name = self.name.get() student = db.search_by_name(name) if student: self.math.set(student["math"]) self.chinese.set(student["chinese"]) self.english.set(student["english"]) self.status.set(f'查询到{name}同学的信息') else: self.status.set(f'没有查询到{name}同学的信息') # 更改成绩 def _change(self): name = self.name.get() math = self.math.get() chinese = self.chinese.get() english = self.english.get() stu = { "name": name, "math": math, "chinese": chinese, "english": english, } r = db.update(stu) if r: self.status.set(f"{name}同学的信息更新完毕") else: self.status.set(f"{name}同学的信息更新失败")class AboutFrame(tk.Frame): def __init__(self, master=None): super().__init__(master) self.root = master self.create_page() def create_page(self): tk.Label(self, text="关于本作品(人生苦短,我用python)").pack(anchor=tk.W)
到此,关于"python如何实现完整学生成绩管理系统"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
成绩
数据
学生
变量
文本
查询
管理系统
系统
管理
姓名
信息
界面
学习
同学
数学
语文
英语
密码
对象
文件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
长城网际 网络安全
软件数据网络安全
mac硬件配置数据库
工控网络安全产业
汉中浪潮招聘软件开发吗
安徽常见软件开发销售价格
mc开服务器和联机的区别
中外文电子数据库都有哪些
嵌入式软件开发越老
编程软件开发指法
宣化网络安全视频
用SQL实现控制数据库安全
股票公司用什么软件开发
spss无法与服务器通信
中山财务机器人rpa软件开发
洛阳软件开发定制
如何加入网络安全联盟
壹新互联网科技
云南信息网络安全协会待遇
数据库开发的主要技术
数据库两个表匹配
暴雪服务器爆满邀请码
深圳数据库怎么样
查询多少信息违反网络安全法
网络安全建设落实三同步原则
服务器如何获取权限
nfc饭卡数据库丢失
企业网络安全架构实验
数据库系统体系结构映像
方舟服务器暂停维护多长时间