python基于Tkinter实现学生信息管理系统

这篇具有很好参考价值的文章主要介绍了python基于Tkinter实现学生信息管理系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、功能点介绍(毕设设计)

1.添加学生成绩:管理员可以在系统中添加学生的成绩信息,包括学生姓名、学号、课程名称、成绩等。
2.删除学生成绩:管理员可以根据学生的学号或者姓名删除学生的成绩信息。
3.修改学生成绩:管理员可以修改学生的成绩信息,包括学生姓名、学号、课程名称、成绩等。
4.查询学生成绩:管理员可以根据学生的学号或者姓名查询学生的成绩信息,包括学生姓名、学号、课程名称、成绩等。
该系统可以帮助学校管理学生成绩信息,方便教师和学生查询自己的成绩情况,也可以帮助学校更加科学地进行教学管理。

二、登录页面代码介绍

新建一个Loginpage.py文件

#!/usr/bin/env python
# encoding: utf-8
"""
@author: 拾壹
@software: PyCharm
@file: LoginPage.py
@time: 2023/3/7 13:20
"""
import tkinter as tk
from tkinter import messagebox
from db import db
from MinaPage import MianPage


class LoginPage(object):
    def __init__(self, master):
        self.root = master
        self.root.geometry('300x180')
        self.root.title('登录页面')

        self.username = tk.StringVar()
        self.password = tk.StringVar()

        self.page = tk.Frame(root)
        self.page.pack()
        tk.Label(self.page).grid(row=0, column=0)

        tk.Label(self.page, text='账号:').grid(row=1, column=1, pady=10)
        tk.Entry(self.page, textvariable=self.username).grid(row=1, column=2)

        tk.Label(self.page, text='密码:').grid(row=2, column=1, pady=10)
        tk.Entry(self.page, textvariable=self.password).grid(row=2, column=2)
        tk.Button(self.page, text='登录', command=self.login).grid(row=3, column=1, pady=10)
        tk.Button(self.page, text='退出', command=self.page.quit).grid(row=3, column=2, pady=10)

    def login(self):
        name = self.username.get()
        pwd = self.password.get()
        flag, message = db.check_login(name, pwd)
        if flag:
            # 銷毀當前頁面
            self.page.destroy()
            MianPage(self.root)
        else:
            messagebox.showwarning(title='警告', message=message)


if __name__ == '__main__':
    root = tk.Tk()
    LoginPage(master=root)
    root.mainloop()

三、增删改查页面设计

新建一个MinaPage.py文件

#!/usr/bin/env python
# encoding: utf-8
"""
@author: 拾壹
@software: PyCharm
@file: MinaPage.py
@time: 2023/3/7 22:08
"""
import tkinter as tk

from views import AboutFrame, ChangeFrame, DeleteFrame, SearchFrame, InsertFrame


class MianPage:
    def __init__(self, master: tk.Tk):
        self.root = master
        self.root.title('學生信息管理系統')
        self.root.geometry('600x400')
        self.create_page()

    def create_page(self):
        self.about_frame = AboutFrame(self.root)
        self.chang_frame = ChangeFrame(self.root)
        self.insert_frame = InsertFrame(self.root)
        self.search_frame = SearchFrame(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_select)
        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.insert_frame.pack_forget()
        self.search_frame.pack_forget()
        self.delete_frame.pack_forget()
        self.chang_frame.pack_forget()
        self.about_frame.pack()

    def show_change(self):
        self.insert_frame.pack_forget()
        self.search_frame.pack_forget()
        self.delete_frame.pack_forget()
        self.chang_frame.pack()
        self.about_frame.pack_forget()

    def show_select(self):
        self.insert_frame.pack_forget()
        self.search_frame.pack()
        self.delete_frame.pack_forget()
        self.chang_frame.pack_forget()
        self.about_frame.pack_forget()

    def show_delete(self):
        self.insert_frame.pack_forget()
        self.search_frame.pack_forget()
        self.delete_frame.pack()
        self.chang_frame.pack_forget()
        self.about_frame.pack_forget()

    def show_insert(self):
        self.insert_frame.pack()
        self.search_frame.pack_forget()
        self.delete_frame.pack_forget()
        self.chang_frame.pack_forget()
        self.about_frame.pack_forget()


if __name__ == '__main__':
    root = tk.Tk()
    MianPage(root)
    root.mainloop()

四、视图逻辑管理

新建一个views.py文件

#!/usr/bin/env python
# encoding: utf-8
"""
@author: 拾壹
@software: PyCharm
@file: views.py
@time: 2023/3/8 13:57
"""
import tkinter as tk
from tkinter import ttk

from db import db


class AboutFrame(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        tk.Label(self, text='关于作品:tkinter制作').pack()
        tk.Label(self, text='关于作者:拾壹').pack()
        tk.Label(self, text='关于版权:开源').pack()


class ChangeFrame(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        self.name = tk.StringVar()
        self.math = tk.StringVar()
        self.chinese = tk.StringVar()
        self.english = tk.StringVar()
        self.status = tk.StringVar()
        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.search_user).grid(row=5,column=1,pady=10)
        tk.Button(self, text='修改', command=self.change_user).grid(row=5, column=2, pady=10)


    def search_user(self):
        flag, info = db.search_by_useranme(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'])
            self.status.set('数据查询成功')
        else:
            self.status.set(info)

    def change_user(self):
        stu = {"name": self.name.get(),
               "math": self.math.get(),
               "chinese": self.chinese.get(),
               "english": self.english.get()}
        self.name.set('')  # 把名字重置为空
        db.update(stu)
        self.status.set('修改数据成功')

class InsertFrame(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        # tk.Label(self, text='插入').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).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()}
        self.name.set('')  # 把名字重置为空
        db.insert(stu)
        self.status.set('数据录入成功')


class SearchFrame(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        tk.Label(self, text='查询').pack()


class DeleteFrame(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        self.username = tk.StringVar()
        self.status = tk.StringVar()
        tk.Label(self, text='根据名字删除数据').pack()
        tk.Entry(self, textvariable=self.username).pack()
        tk.Button(self, text='删除', command=self.delete).pack()
        # tk.Label(self, text=self.status).pack()

    def delete(self):
        username = self.username.get()
        flag,message = db.delete_by_useranme(username)
        self.status.set(message)


class SearchFrame(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        self.table_view = tk.Frame()
        self.table_view.pack()
        self.create_page()

    def create_page(self):
        columns = ('name', 'chinese', 'math', 'english')
        columns_values = ('姓名', '语文', '数学', '英语')
        self.tree_view = ttk.Treeview(self, show='headings', columns=columns)
        # self.table_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(fill=tk.BOTH, expand=True)
        self.show_data_frame()

        tk.Button(self, text='刷新数据',command=self.show_data_frame).pack(anchor=tk.E,
                                                                       pady=5)

    def show_data_frame(self):
        # 删除旧的数据
        for _ in map(self.tree_view.delete,self.tree_view.get_children('')):
            pass
        student = db.all()
        index = 0
        for stu in student:
            self.tree_view.insert('', index+1, values=(
                stu['name'],stu['math'],stu['chinese'],stu['english'],
            ))

五、数据库逻辑处理

新建一个db.py文件

#!/usr/bin/env python
# encoding: utf-8
"""
@author: 拾壹
@software: PyCharm
@file: db.py
@time: 2023/3/7 14:39
"""
import json


class MysqlDatabases:
    def __init__(self):
        self.users = json.loads(open('user.json', mode='r', encoding='utf-8').read())
        self.students = json.loads(open('students.json', mode='r', encoding='utf-8').read())

    def check_login(self, username, password):
        for user in self.users:
            if username == user['username']:
                if password == user['password']:
                    return True, '登錄成功'
                else:
                    return False, '密碼錯誤'
            else:
                return False,'賬號錯誤'
        return False, '登錄失敗'

    def all(self):
        return self.students

    def insert(self,student):
        self.students.append(student)

    def delete_by_useranme(self, name):
        for student in self.students:
            if student['name'] == name:
                self.students.remove(student)
                return True, f'{name}用户删除成功'
        return False, f'{name}用户不存在'

    def search_by_useranme(self, name):
        for student in self.students:
            if student['name'] == name:

                return True, student
        return False, f'{name}用户不存在'

    def update(self, stu):
        for student in self.students:
            if student['name'] == stu['name']:
                student.update(stu)
                return True, f'{stu["name"]}用户数据修改成功'
        return False, f'{stu["name"]}用户不存在'


db = MysqlDatabases()


if __name__ == '__main__':
    print(db.check_login('admin', '123456'))

六、准备学生数据,建立一个json文件

新建一个students.json文件

[
  {"name": "张三", "math": "65", "chinese": "75","english": 100},
  {"name": "李四", "math": "65", "chinese": "75","english": 100},
  {"name": "王五", "math": "65", "chinese": "75","english": 100}
]

七、准备用户数据,建立一个json文件

新建一个user.json文件

[
  {"username": "admin", "password": "123456"},
  {"username": "admin1", "password": "123456"}
]

八、系统展示文章来源地址https://www.toymoban.com/news/detail-479993.html

  1. 登录页

python基于Tkinter实现学生信息管理系统
  1. 增删改查页面

python基于Tkinter实现学生信息管理系统

八、优缺点:

优点:
1.提高工作效率:学生成绩管理系统可以使管理员更快捷、准确地管理学生成绩信息,提高工作效率。
2.管理方便:学生成绩管理系统可以将学生成绩信息集中管理,方便管理员进行数据统计和分析,从而更好地了解学生成绩情况。
3.信息准确:学生成绩管理系统可以确保学生的成绩信息准确无误,并且可以及时更新和维护学生成绩信息。
4.易于操作:学生成绩管理系统的操作简单易懂,管理员可以快速上手,不需要花费大量的时间和精力学习。
缺点:
1.安全性问题:学生成绩管理系统中包含学生的个人信息,如姓名、学号等,如果系统存在安全漏洞或被黑客攻击,可能会导致学生信息泄露。
2.技术要求高:学生成绩管理系统需要一定的技术支持,如果管理员技术水平低,可能会导致系统出现故障或者数据丢失等问题。
3.费用较高:学生成绩管理系统需要购买软件并进行维护和更新,如果学校没有足够的预算,可能会造成经济压力。

九、备注

增删改查成绩学生成绩管理系统是一个比较实用的软件,也是很多学校和教师必备的工具之一,因此,作为毕设的话是一个不错的选择。但是,如果只是简单地完成一个增删改查的功能可能会比较简单,需要在实现基本功能的基础上,增加一些创新的设计和实现,才能够使毕设更具有研究和实践价值。同时,需要考虑到该系统的安全性、性能、可扩展性等问题,尽可能地完善和优化系统的各项功能和性能,从而提高该系统的实用性和可靠性。

到了这里,关于python基于Tkinter实现学生信息管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于C++实现的学生信息管理系统

    点击获取(源码+课程设计报告文档+截图) 学生信息管理系统是针对学校人事处的大量业务处理工作而开发的管理软件,主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、科学化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理,如

    2024年02月04日
    浏览(41)
  • 基于SSM架构实现学生信息管理系统

    本项目是一个基于SSM(Spring+SpringMVC+MyBatis)框架搭建的学生信息管理系统,实现了对学生、用户等信息的增删改查功能,以及登录、分页等功能。本项目采用了三层架构,分为entity层、service层、dao层和controller层,使用了Maven进行项目管理,使用了MySQL作为数据库。 本项目主要

    2024年02月03日
    浏览(49)
  • 数据库实战:基于Tkinter+MySQL的学生成绩管理系统

    用Python和数据库一起实现了一个简单的学生成绩管理系统,一起来看看吧! 本篇博客主要分为两大部分,数据库部分和Python程序设计部分,先将数据导入到数据库中,随后通过python程序设计连接到数据库,实现一系列的操作。 代码下载地址:https://download.csdn.net/download/m0_68

    2024年02月03日
    浏览(55)
  • 学生信息管理系统(Python实现)

    目录 1.功能介绍 2.代码模块 3.全局代码 摘剑!!! 采用列表+类的组合来实现对信息的增删改查,整体代码比较简单,只用了100余行 1)添加学生信息 2)查询学生信息 3)删除学生信息 4)修改学生信息 5)遍历学生信息 1)学生类 2)菜单menu 3)添加insert  4)查询search 5)删

    2024年02月13日
    浏览(58)
  • java毕业设计——基于JSP+sqlserver的学生信息管理系统设计与实现(毕业论文+程序源码)——学生信息管理系统

    大家好,今天给大家介绍基于JSP+sqlserver的学生信息管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦 文章目录: 随着学校规模的

    2024年02月04日
    浏览(60)
  • 【Python毕业设计】基于Python+Flask+MySQL的学生信息管理系统(附完整源码)

    1、项目说明 基于python+Flask+mysql的学生信息管理系统项目实战 项目需要安装pycharm专业版,mysql数据库以及项目所需的所有模块 创建数据库名称db_online_notes,然后执行sql文件生成数据表和数据 项目需要安装 flask,pymysql以及其他的一些模块 安装命令如下: pip install -i https://pypi

    2023年04月18日
    浏览(37)
  • Python实现学生信息管理系统V3.0(GUI界面)

    关于“学生信息管理系统”的基本思路和详细过程,请看V1.0版本: Python实现学生信息管理系统V1.0_︶ㄣ释然的博客-CSDN博客 本文是关于学生信息管理系统的简易版以及具体内容具体思路的详细讲解,简单易理解、纯逻辑实现、没有复杂的第三方库,适合新手小白练手 https:/

    2024年02月09日
    浏览(41)
  • python实现手机通讯录和学生信息管理系统(4种方法)

    1.手机通讯录: 通讯录是记录了联系人姓名和联系方式的名录,手机通讯录是最常见的通讯录之一,人们可以在通讯录中通过姓名查看相关联系人的联系方式、邮箱、地址等信息,也可以在其中新增联系人,或修改、删除联系人信息。下面是一个常见通讯录的功能菜单,如图

    2024年02月09日
    浏览(66)
  • python 实现学生信息管理系统+MySql 数据库,包含源码及相关实现说明~

    1、系统说明 python 编写的学生信息管理系统+MySQL数据库,实现了增删改查的基本功能。 2、数据库说明 本人使用的是 MySQL8.0 版本 数据库端口号为:3306 数据库用户名是:root 数据库名称是:practice 建立的表是:students 3、系统功能 增加学生信息 删除学生信息 修改学生信息 查

    2024年02月11日
    浏览(51)
  • [Python+Django]Web学生信息管理系统数据库设计及系统实现

    本文我们完成数据的设计,并通过Django框架完成数据库构建同时利用Django框架模式实现学生信息管理系统的功能。 简单的包装下毕设应该没问题了。 Python,Mysql,Pycharm的安装本文就不做特别介绍了,有需要的同学请参考如下博文。 Python + Django4 搭建个人博客(二):准备开

    2024年02月03日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包