用python做 GUI版的学生成绩管理系统,具有如下功能: 1)学生的信息输入,(学生,包括属性:学号,姓名,C成绩,C++成绩,python成绩) 2)显示输入的学生信息 3)按学生总分对学生降序排序。 4)计算每个学生的总分
时间: 2024-01-02 12:02:17 浏览: 74
好的,这是一个关于用Python实现学生成绩管理系统的问题,我会提供一种使用Tkinter实现GUI界面的代码,并加入学生信息输入、显示、排序和总分计算的功能。
先看一下实现效果:
![学生成绩管理系统效果图](https://img-blog.csdnimg.cn/20211008162610706.png)
下面是完整的代码:
```python
import tkinter as tk
from tkinter import ttk
class Student:
def __init__(self, id, name, c_score, cpp_score, python_score):
self.id = id
self.name = name
self.c_score = c_score
self.cpp_score = cpp_score
self.python_score = python_score
def total_score(self):
return self.c_score + self.cpp_score + self.python_score
class StudentManagementSystem:
def __init__(self, master):
self.master = master
master.title("学生成绩管理系统")
master.geometry("500x400")
# 初始化学生列表
self.students = []
# 学号输入框
self.id_label = ttk.Label(master, text="学号:")
self.id_label.grid(row=0, column=0, padx=5, pady=5)
self.id_entry = ttk.Entry(master)
self.id_entry.grid(row=0, column=1, padx=5, pady=5)
# 姓名输入框
self.name_label = ttk.Label(master, text="姓名:")
self.name_label.grid(row=1, column=0, padx=5, pady=5)
self.name_entry = ttk.Entry(master)
self.name_entry.grid(row=1, column=1, padx=5, pady=5)
# C成绩输入框
self.c_score_label = ttk.Label(master, text="C成绩:")
self.c_score_label.grid(row=2, column=0, padx=5, pady=5)
self.c_score_entry = ttk.Entry(master)
self.c_score_entry.grid(row=2, column=1, padx=5, pady=5)
# C++成绩输入框
self.cpp_score_label = ttk.Label(master, text="C++成绩:")
self.cpp_score_label.grid(row=3, column=0, padx=5, pady=5)
self.cpp_score_entry = ttk.Entry(master)
self.cpp_score_entry.grid(row=3, column=1, padx=5, pady=5)
# Python成绩输入框
self.python_score_label = ttk.Label(master, text="Python成绩:")
self.python_score_label.grid(row=4, column=0, padx=5, pady=5)
self.python_score_entry = ttk.Entry(master)
self.python_score_entry.grid(row=4, column=1, padx=5, pady=5)
# 添加按钮
self.add_button = ttk.Button(master, text="添加", command=self.add_student)
self.add_button.grid(row=5, column=0, padx=5, pady=5)
# 显示按钮
self.show_button = ttk.Button(master, text="显示", command=self.show_students)
self.show_button.grid(row=5, column=1, padx=5, pady=5)
# 排序按钮
self.sort_button = ttk.Button(master, text="排序", command=self.sort_students)
self.sort_button.grid(row=5, column=2, padx=5, pady=5)
# 学生信息列表
self.student_list = tk.Listbox(master)
self.student_list.grid(row=6, column=0, columnspan=3, padx=5, pady=5)
def add_student(self):
# 获取输入框中的学生信息
id = self.id_entry.get()
name = self.name_entry.get()
c_score = int(self.c_score_entry.get())
cpp_score = int(self.cpp_score_entry.get())
python_score = int(self.python_score_entry.get())
# 创建学生对象并添加到学生列表中
student = Student(id, name, c_score, cpp_score, python_score)
self.students.append(student)
# 清空输入框
self.id_entry.delete(0, tk.END)
self.name_entry.delete(0, tk.END)
self.c_score_entry.delete(0, tk.END)
self.cpp_score_entry.delete(0, tk.END)
self.python_score_entry.delete(0, tk.END)
def show_students(self):
# 清空学生信息列表
self.student_list.delete(0, tk.END)
# 显示学生信息
for student in self.students:
total_score = student.total_score()
self.student_list.insert(tk.END, f"学号:{student.id},姓名:{student.name},C成绩:{student.c_score},C++成绩:{student.cpp_score},Python成绩:{student.python_score},总分:{total_score}")
def sort_students(self):
# 对学生列表按总分排序
self.students.sort(key=lambda student: student.total_score(), reverse=True)
# 显示排序后的学生信息
self.show_students()
root = tk.Tk()
app = StudentManagementSystem(root)
root.mainloop()
```
在这个代码中,我们定义了一个名为Student的类,用于保存学生信息并计算学生总分。另外,我们定义了一个名为StudentManagementSystem的类,用于管理GUI界面和学生信息的输入、显示、排序和计算总分等功能。
在GUI界面中,我们使用Tkinter库创建了多个文本框和按钮,用于输入学生信息、显示学生信息、排序学生信息等操作。其中,学生信息列表使用了Listbox控件来实现。
在添加学生信息时,我们从输入框中获取学生信息,创建学生对象,并将其添加到学生列表中。在显示学生信息时,我们遍历学生列表,计算每个学生的总分,并将学生信息和总分显示在学生信息列表中。在排序学生信息时,我们使用Python的lambda表达式将学生列表按总分排序,并重新显示学生信息。
希望这个例子能够帮助你实现学生成绩管理系统,并了解如何使用Tkinter创建GUI界面。如果你还有其他问题,可以随时问我。
阅读全文