python如何实现完整学生成绩管理系统
发表于:2024-11-14 作者:千家信息网编辑
千家信息网最后更新 2024年11月14日,这篇文章主要介绍"python如何实现完整学生成绩管理系统",在日常操作中,相信很多人在python如何实现完整学生成绩管理系统问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2024年11月14日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安全错误
数据库的锁怎样保障安全
湖南交易进口软件服务器
云服务器到底能做什么
弱电系统软件开发
好用免费开源数据库
北京拉勾网络技术有限公司培训
软件开发用哪些语言
华安产险软件开发
浦东新区互联网络技术咨询合同
软件开发有哪几种语言
和彩云服务器拒绝执行用户请求
网络安全法对他人造成伤害
数据库查询多列
网络安全第五空间' '
数据库的最新技术发展现状
数据库中分组分群
方舟恐龙新服务器
行业数据库建立
瑜伽app软件开发
银行服务器磁盘阵列
db怎么连接数据库
orcale数据库实例名
泸州软件开发销售电话
网络安全竞品分析
松江区管理软件开发收费套餐
eplan无法打开数据库文件
无域名服务器防护
数据库原理与应用试题
下列属于软件开发方法的
企业网络安全该怎么做
jsp网站的数据库