python学生成绩管理系统源码

  • 欢迎进入python世界
    • 第一部分:系统介绍
    • 第二部分:源代码
    • 第三部分:代码展示&分析

欢迎进入python世界

你好!通过仔细阅读本文,你可以认识到通过python语言开发学生成绩管理系统的原貌。

第一部分:系统介绍

一个带有登录功能的学生管理系统,具备增删改查的功能。
要点1:面对对象思想
要点2:利用tkinter库进行制作,利用.txt文件进行存储

第二部分:源代码

students.txt main.py Login.py db.py MenuPage.py view.py

第三部分:代码展示&分析

1.students.txt:存储数据
2.main.py:主文件

"""
Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。
"""
from tkinter import *
# from Tkinter的意思就是导入Tkinter,它是一个库,也可以简单称之为类;import *的意思是导入库中所有的类,函数,变量等等信息,这样在调用相关函数或者变量的时候,就不用加Tkinter前缀了。
from Login import *   #从登录导入
import tkinter as tk  # 在代码里面导入库,起一个别名,以后代码里面就用这个别名root = tk.Tk() # 这个库里面有Tk()这个方法,这个方法的作用就是创建一个窗口
root.title('欢迎进入python学生成绩管理系统')
LoginPage(root)
root.mainloop()# 加上这一句,就可以看见窗口了

3.Login.py:登录界面代码

from tkinter import *
from tkinter.messagebox import *
from MenuPage import *class LoginPage(object):def __init__(self, master=None):self.root = master  # 定义内部变量rootself.root.geometry('%dx%d' % (600, 360))  # 设置窗口大小self.username = StringVar()self.password = StringVar()self.createPage()def createPage(self):self.page = Frame(self.root)  # 创建Frameself.page.pack()Label(self.page).grid(row=0, stick=W)Label(self.page, text='账户: ').grid(row=1, stick=W, pady=50)Entry(self.page, textvariable=self.username).grid(row=1, column=1, stick=E)Label(self.page, text='密码: ').grid(row=2, stick=W, pady=50)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=50)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 == '123' and password == '123':self.page.destroy()MenuPage(self.root)else:showinfo(title='错误', message='账号或密码错误!')

4.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.studentsdef delete_by_name(self, name):  # 删除数据for student in self.students:if name == student["name"]:self.students.remove(student)breakelse:return Falsereturn 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 Trueelse: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()

5.MenuPage.py

import tkinter as tk
from view import *class MenuPage(object):def __init__(self, master=None):self.root = masterself.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)  # labelmenubar.add_command(label="查询", command=self.query_data)  # labelmenubar.add_command(label="删除", command=self.delete_data)  # labelmenubar.add_command(label="修改", command=self.update_data)  # labelmenubar.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()

6.view.py

import tkinter as tk
from db import db
from tkinter import ttk# 录入类
class InputFrame(tk.Frame):def __init__(self, master=None):super().__init__(master)self.root = masterself.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 = masterself.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)# Treeviewdef 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 = mastertk.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 = masterself.create_page()def create_page(self):tk.Label(self, text="hello,world").pack(anchor=tk.W)

你好,恭喜你完成了学生成绩管理系统编程,请继续加油!!!
程序发布在这里,可直接使用!!!

python编程源码相关推荐

  1. UNIX环境高级编程源码

    UNIX环境高级编程源码 一.下载源码 利用wget命令下载源码,源码地址http://apuebook.com/src.3e.tar.gz 可以在服务器的根目录下创建文件夹,mkdir 1.mkdi ...

  2. 优秀网站源码、编程源码下载网站大集中

    原文:https://blog.lmlyz.online 优秀网站源码.编程源码下载网站大集中 1.51源码:http://www.51aspx.com/ 2.源码之家:http://www.code ...

  3. winform停车场收费管理系统VS开发sqlserver数据库CS结构c#编程源码程序

    一.源码特点        winform停车场收费管理系统是一套完善的桌面程序,设计管理系统,系统具有完整的代码数据库,系统主要采用B/S模式开发. 应用技术:winform c#+sqlserve ...

  4. matlab dll 通达信,【通达信】通达信插件(dll)编程源码及讲解

    [通达信]通达信插件(dll)编程源码及讲解 2018-11-29 通达信DLL插件编程示例(源码).rar (829.39 KB) 通达信提供了DLL插件接口和DLL指标接口标准(见"插件 ...

  5. vb.net图书管理系统VS开发sqlserver数据库web结构vb编程源码网页

    一.源码特点         vb.net 图书管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发. 下载地址: vb.net图书管理系统VS开发sql ...

  6. 优秀网站源码、编程源码下载网站大集中(转载)

    摘自http://topic.csdn.net/u/20080501/12/0a9bc720-0bb1-42b0-98bc-da9783782d09.html 优秀网站源码.编程源码下载网站大集中 1 ...

  7. 优秀网站源码、编程源码

    优秀网站源码.编程源码下载网站大集中 1.51源码: http://www.51aspx.com/ 2.源码之家: http://www.codejia.com/ 3.源码网: http://www. ...

  8. COST231_hata模型信道仿真matlab编程源码程序

    1.问题描述: COST231_hata模型信道仿真matlab编程源码程序 2.部分程序: %%%%%%%%%%%%%%%hata传播模型%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ...

  9. 优秀网站源码、编程源码下载网站大集中(http://topic.csdn.net/u/20080501/12/45ab4636-6566-4ffe-8ec0-b99da747ea5b.html)

    优秀网站源码.编程源码下载网站大集中 1.51源码:http://www.51aspx.com/ 2.源码之家:http://www.codejia.com/ 3.源码网:http://www.cod ...

最新文章

  1. 显示windows电脑上已连接过的wifi密码
  2. CDN服务品质协议1
  3. 北京活动:4月20号《科技媒体、SEO与PM》主题活动
  4. 笔记-知识产权与标准化知识-计算机软件可靠性和可维护性管理的评审要求
  5. barrier linux,LinuxBarrierI/O的介绍有哪些呢? 爱问知识人
  6. c语言现代方法15章答案(自己做的,更新中)
  7. Apache Ivy
  8. mysql复制的工作原理及主从复制的实现
  9. Ethercat解析(十一)之分布时钟
  10. 【sklearn第十八讲】神经网络模型
  11. 2015年,我们一起经历的IT安全事件
  12. 深度学习入门 基于python的理论和实践 第一章
  13. android xposed安装教程,Android 10机型安装Xposed框架教程
  14. 外卖小程序对接飞鹅小票打印的实现
  15. Python实战:利用正则表达式(requests模块)获取电影排行榜
  16. java游戏服务器面试_服务器 面试
  17. apollo(阿波罗) 分布式部署指南
  18. 去健身房健身戴什么耳机好、最适合运动健身的健身房耳机推荐
  19. StarUML for Mac(UML软件建模器)
  20. 图示机构受力f作用_工程力学试题以及答案

热门文章

  1. Oracle enterprise manager 13C 安装无法正常进行
  2. Ubuntu安装软件包网络不可达问题
  3. 光纤的损耗机理 散射损耗 吸收损耗 弯曲损耗
  4. 如何自学Python,需要多久?【建议收藏】
  5. 简单的android游戏框架——zgf
  6. 竞争-冒险现象及其消除方法
  7. 生信笔记:E值究竟是什么?!!!
  8. ubuntu系统20.4搭建c语言环境,ubuntu 20.04 中文环境和英文环境切换
  9. 企业微信机器人发送消息
  10. linux分区方案6,linux (centos 6.4)安装自定义分区方案(转载)