亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python超詳細(xì)實現(xiàn)完整學(xué)生成績管理系統(tǒng)

 更新時間:2022年03月17日 11:04:15   作者:hacker707  
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實現(xiàn)一個完整版學(xué)生成績管理系統(tǒng),大家可以在過程中查缺補漏,提升水平

學(xué)生成績管理系統(tǒng)簡介

一個帶有登錄界面具有增減改查功能的學(xué)生成績管理系統(tǒng)(面向?qū)ο笏枷?,利用tkinter庫進(jìn)行制作,利用.txt文件進(jìn)行存儲數(shù)據(jù))

源代碼

?僅供學(xué)習(xí)參考,最好還是自己多敲多練習(xí)(實踐是檢驗真理的唯一標(biāo)準(zhǔn))

students.txt

用于存儲數(shù)據(jù)

main.py

from tkinter import *
from Login import *
import tkinter as tk

root = tk.Tk()
root.title('歡迎進(jìn)入學(xué)生成績管理系統(tǒng)')
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  # 定義內(nèi)部變量root
        self.root.geometry('%dx%d' % (300, 180))  # 設(shè)置窗口大小
        self.username = StringVar()
        self.password = StringVar()
        self.createPage()

    def createPage(self):
        self.page = Frame(self.root)  # 創(chuàng)建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 json


class 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):  # 刪除數(shù)據(jù)
        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):  # 修改數(shù)據(jù)
        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)

    # 保存數(shù)據(jù)
    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 tk
from 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):
        # 創(chuàng)建菜單對象
        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="關(guān)于", command=self.about_data)  # label
        # 設(shè)置菜單欄
        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 tk
from db import db
from 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="數(shù)學(xué):").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(),
        }  # 一個學(xué)生的成績
        db.insert(student)
        # get()得到值
        # set()設(shè)置值
        self.status.set("插入數(shù)據(jù)成功!")
        self._clear_data()
        db.save_data()

    # 清空文本數(shù)據(jù)
    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()

    # 創(chuàng)建查詢界面
    def create_page(self):
        self.create_tree_view()
        self.show_data_frame()
        # grid()
        tk.Button(self, text="刷新數(shù)據(jù)", 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='數(shù)學(xué)')
        self.tree_view.heading("english", text='英語')
        self.tree_view.pack()

    # 顯示數(shù)據(jù)
    def show_data_frame(self):
        # 刪除原節(jié)點 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='刪除數(shù)據(jù)').pack()
        self.status = tk.StringVar()
        self.de_name = tk.StringVar()  # 獲取刪除學(xué)生的姓名
        self.create_page()

    # 創(chuàng)建界面
    def create_page(self):
        tk.Label(self, text="根據(jù)姓名刪除信息").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}已經(jīng)被刪')
            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="數(shù)學(xué):").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}同學(xué)的信息')
        else:
            self.status.set(f'沒有查詢到{name}同學(xué)的信息')

    #  更改成績
    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}同學(xué)的信息更新完畢")
        else:
            self.status.set(f"{name}同學(xué)的信息更新失敗")


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="關(guān)于本作品(人生苦短,我用python)").pack(anchor=tk.W)

??以上就是使用python實現(xiàn)學(xué)生成績管理系統(tǒng),如果有改進(jìn)的建議,歡迎在評論區(qū)留言奧~

這篇文章參加了csdn的活動,還請大家多多三連支持一下博主,你們的支持就是我創(chuàng)作的動力??

到此這篇關(guān)于python超詳細(xì)實現(xiàn)完整學(xué)生成績管理系統(tǒng)的文章就介紹到這了,更多相關(guān)python 學(xué)生成績管理系統(tǒng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于python修改srt字幕的時間軸

    基于python修改srt字幕的時間軸

    這篇文章主要介紹了基于python修改srt字幕的時間軸,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • 使用pandas模塊讀取csv文件和excel表格,并用matplotlib畫圖的方法

    使用pandas模塊讀取csv文件和excel表格,并用matplotlib畫圖的方法

    今天小編就為大家分享一篇使用pandas模塊讀取csv文件和excel表格,并用matplotlib畫圖的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python中l(wèi)ogging日志的四個等級和使用

    Python中l(wèi)ogging日志的四個等級和使用

    這篇文章主要介紹了Python中l(wèi)ogging日志的四個等級和使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python實現(xiàn)中英文全文搜索的示例

    Python實現(xiàn)中英文全文搜索的示例

    這篇文章主要介紹了Python實現(xiàn)中英文全文搜索的示例,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-12-12
  • Python+Turtle實現(xiàn)繪制勾股樹

    Python+Turtle實現(xiàn)繪制勾股樹

    畢達(dá)哥拉斯樹,也叫“勾股樹”,是由畢達(dá)哥拉斯根據(jù)勾股定理所畫出來的一個可以無限重復(fù)的樹形圖形。本文將利用Python中的Turtle庫實現(xiàn)勾股樹的繪制,感興趣的可以了解一下
    2023-01-01
  • 在Django框架中編寫Contact表單的教程

    在Django框架中編寫Contact表單的教程

    這篇文章主要介紹了在Django框架中編寫Contact表單的教程,Django是Python特色各異的框架中最有人氣的一個,需要的朋友可以參考下
    2015-07-07
  • PYQT5 實現(xiàn)給listwidget的滾動條添加滾動信號

    PYQT5 實現(xiàn)給listwidget的滾動條添加滾動信號

    這篇文章主要介紹了PYQT5 實現(xiàn)給listwidget的滾動條添加滾動信號,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python保存字典數(shù)據(jù)到csv文件的完整代碼

    python保存字典數(shù)據(jù)到csv文件的完整代碼

    在實際數(shù)據(jù)分析過程中,我們分析用Python來處理數(shù)據(jù)(海量的數(shù)據(jù)),我們都是把這個數(shù)據(jù)轉(zhuǎn)換為Python的對象的,比如最為常見的字典,下面這篇文章主要給大家介紹了關(guān)于python保存字典數(shù)據(jù)到csv的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Python?selenium?webdriver?基本使用代碼分享

    Python?selenium?webdriver?基本使用代碼分享

    這篇文章主要介紹了Python?selenium?webdriver?基本使用,本文僅僅簡單介紹了selenium的使用常用代碼分享,需要的朋友可以參考下
    2022-11-11
  • python TK庫簡單應(yīng)用(實時顯示子進(jìn)程輸出)

    python TK庫簡單應(yīng)用(實時顯示子進(jìn)程輸出)

    這篇文章主要介紹了python TK庫簡單應(yīng)用(實時顯示子進(jìn)程輸出),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10

最新評論