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'))
新建一个students.json文件
[
{"name": "张三", "math": "65", "chinese": "75","english": 100},
{"name": "李四", "math": "65", "chinese": "75","english": 100},
{"name": "王五", "math": "65", "chinese": "75","english": 100}
]
新建一个user.json文件
[
{"username": "admin", "password": "123456"},
{"username": "admin1", "password": "123456"}
]
八、系统展示
优点:
1.提高工作效率:学生成绩管理系统可以使管理员更快捷、准确地管理学生成绩信息,提高工作效率。
2.管理方便:学生成绩管理系统可以将学生成绩信息集中管理,方便管理员进行数据统计和分析,从而更好地了解学生成绩情况。
3.信息准确:学生成绩管理系统可以确保学生的成绩信息准确无误,并且可以及时更新和维护学生成绩信息。
4.易于操作:学生成绩管理系统的操作简单易懂,管理员可以快速上手,不需要花费大量的时间和精力学习。
缺点:
1.安全性问题:学生成绩管理系统中包含学生的个人信息,如姓名、学号等,如果系统存在安全漏洞或被黑客攻击,可能会导致学生信息泄露。
2.技术要求高:学生成绩管理系统需要一定的技术支持,如果管理员技术水平低,可能会导致系统出现故障或者数据丢失等问题。
3.费用较高:学生成绩管理系统需要购买软件并进行维护和更新,如果学校没有足够的预算,可能会造成经济压力。
增删改查成绩学生成绩管理系统是一个比较实用的软件,也是很多学校和教师必备的工具之一,因此,作为毕设的话是一个不错的选择。但是,如果只是简单地完成一个增删改查的功能可能会比较简单,需要在实现基本功能的基础上,增加一些创新的设计和实现,才能够使毕设更具有研究和实践价值。同时,需要考虑到该系统的安全性、性能、可扩展性等问题,尽可能地完善和优化系统的各项功能和性能,从而提高该系统的实用性和可靠性。