用python并使用库实现操作界面写一个学生成绩管理系统设计 学生成绩信息包括:学期,学号,班别,姓名,四门课程成绩(语文、数学、英语和计算机)等。主要功能: (1)能按学期、按班级完成对学⽣成绩的录⼊、修改 (2)能按班级统计学⽣的成绩,求学⽣的总分及平均分 (3)能查询学⽣成绩,不及格科⽬及学⽣名单 (4)能按班级输出学⽣的成绩单 要求:使⽤⽂件⽅式存储数据。
时间: 2023-12-22 17:06:20 浏览: 158
好的,我可以为您提供一个简单的学生成绩管理系统的Python代码,使用tkinter和pandas库来实现操作界面和数据存储。
首先,您需要安装pandas库,您可以使用以下命令在命令行中安装:
```
pip install pandas
```
接下来,您可以使用以下代码来实现学生成绩管理系统:
```python
import tkinter as tk
import pandas as pd
# 创建一个空DataFrame
df = pd.DataFrame(columns=['学期', '学号', '班别', '姓名', '语文', '数学', '英语', '计算机'])
# 创建主界面
root = tk.Tk()
root.title('学生成绩管理系统')
# 定义添加学生信息函数
def add_student():
# 获取输入框中的数据
semester = semester_entry.get()
student_id = student_id_entry.get()
class_name = class_entry.get()
name = name_entry.get()
chinese = chinese_entry.get()
math = math_entry.get()
english = english_entry.get()
computer = computer_entry.get()
# 将数据添加到DataFrame中
df.loc[df.shape[0]] = [semester, student_id, class_name, name, chinese, math, english, computer]
# 清空输入框
semester_entry.delete(0, tk.END)
student_id_entry.delete(0, tk.END)
class_entry.delete(0, tk.END)
name_entry.delete(0, tk.END)
chinese_entry.delete(0, tk.END)
math_entry.delete(0, tk.END)
english_entry.delete(0, tk.END)
computer_entry.delete(0, tk.END)
# 提示信息
info_label.config(text='添加成功!')
# 定义查询学生信息函数
def search_student():
# 获取输入框中的数据
student_id = search_entry.get()
# 在DataFrame中查询学生信息
result_df = df[df['学号'] == student_id]
# 如果查询结果为空,则提示信息
if result_df.empty:
result_label.config(text='未查询到该学生信息!')
return
# 将查询结果显示在标签中
result_label.config(text=result_df.to_string(index=False, header=False))
# 定义统计班级信息函数
def stat_class():
# 获取输入框中的数据
class_name = stat_entry.get()
# 在DataFrame中筛选出班级信息
class_df = df[df['班别'] == class_name]
# 如果查询结果为空,则提示信息
if class_df.empty:
stat_label.config(text='未查询到该班级信息!')
return
# 计算总分和平均分
total_score = class_df[['语文', '数学', '英语', '计算机']].sum().sum()
avg_score = total_score / (class_df.shape[0] * 4)
# 将统计结果显示在标签中
stat_label.config(text=f'总分:{total_score:.2f},平均分:{avg_score:.2f}')
# 定义输出班级成绩单函数
def output_class():
# 获取输入框中的数据
class_name = output_entry.get()
# 在DataFrame中筛选出班级信息
class_df = df[df['班别'] == class_name]
# 如果查询结果为空,则提示信息
if class_df.empty:
output_label.config(text='未查询到该班级信息!')
return
# 将成绩单保存到文件中
class_df.to_csv(f'{class_name}.csv', index=False, encoding='utf-8')
# 提示信息
output_label.config(text=f'成绩单已保存到{class_name}.csv文件中!')
# 创建添加学生信息界面
add_frame = tk.Frame(root)
add_frame.pack(padx=10, pady=10)
semester_label = tk.Label(add_frame, text='学期:')
semester_label.grid(row=0, column=0, padx=5, pady=5)
semester_entry = tk.Entry(add_frame)
semester_entry.grid(row=0, column=1, padx=5, pady=5)
student_id_label = tk.Label(add_frame, text='学号:')
student_id_label.grid(row=1, column=0, padx=5, pady=5)
student_id_entry = tk.Entry(add_frame)
student_id_entry.grid(row=1, column=1, padx=5, pady=5)
class_label = tk.Label(add_frame, text='班别:')
class_label.grid(row=2, column=0, padx=5, pady=5)
class_entry = tk.Entry(add_frame)
class_entry.grid(row=2, column=1, padx=5, pady=5)
name_label = tk.Label(add_frame, text='姓名:')
name_label.grid(row=3, column=0, padx=5, pady=5)
name_entry = tk.Entry(add_frame)
name_entry.grid(row=3, column=1, padx=5, pady=5)
chinese_label = tk.Label(add_frame, text='语文:')
chinese_label.grid(row=4, column=0, padx=5, pady=5)
chinese_entry = tk.Entry(add_frame)
chinese_entry.grid(row=4, column=1, padx=5, pady=5)
math_label = tk.Label(add_frame, text='数学:')
math_label.grid(row=5, column=0, padx=5, pady=5)
math_entry = tk.Entry(add_frame)
math_entry.grid(row=5, column=1, padx=5, pady=5)
english_label = tk.Label(add_frame, text='英语:')
english_label.grid(row=6, column=0, padx=5, pady=5)
english_entry = tk.Entry(add_frame)
english_entry.grid(row=6, column=1, padx=5, pady=5)
computer_label = tk.Label(add_frame, text='计算机:')
computer_label.grid(row=7, column=0, padx=5, pady=5)
computer_entry = tk.Entry(add_frame)
computer_entry.grid(row=7, column=1, padx=5, pady=5)
add_button = tk.Button(add_frame, text='添加', command=add_student)
add_button.grid(row=8, column=0, columnspan=2, padx=5, pady=5)
info_label = tk.Label(add_frame, fg='green')
info_label.grid(row=9, column=0, columnspan=2, padx=5, pady=5)
# 创建查询学生信息界面
search_frame = tk.Frame(root)
search_frame.pack(padx=10, pady=10)
search_label = tk.Label(search_frame, text='请输入学号:')
search_label.grid(row=0, column=0, padx=5, pady=5)
search_entry = tk.Entry(search_frame)
search_entry.grid(row=0, column=1, padx=5, pady=5)
search_button = tk.Button(search_frame, text='查询', command=search_student)
search_button.grid(row=0, column=2, padx=5, pady=5)
result_label = tk.Label(search_frame, justify='left')
result_label.grid(row=1, column=0, columnspan=3, padx=5, pady=5)
# 创建统计班级信息界面
stat_frame = tk.Frame(root)
stat_frame.pack(padx=10, pady=10)
stat_label = tk.Label(stat_frame, justify='left')
stat_label.grid(row=0, column=0, columnspan=3, padx=5, pady=5)
stat_label = tk.Label(stat_frame, text='请输入班级:')
stat_label.grid(row=1, column=0, padx=5, pady=5)
stat_entry = tk.Entry(stat_frame)
stat_entry.grid(row=1, column=1, padx=5, pady=5)
stat_button = tk.Button(stat_frame, text='统计', command=stat_class)
stat_button.grid(row=1, column=2, padx=5, pady=5)
# 创建输出班级成绩单界面
output_frame = tk.Frame(root)
output_frame.pack(padx=10, pady=10)
output_label = tk.Label(output_frame, justify='left')
output_label.grid(row=0, column=0, columnspan=3, padx=5, pady=5)
output_label = tk.Label(output_frame, text='请输入班级:')
output_label.grid(row=1, column=0, padx=5, pady=5)
output_entry = tk.Entry(output_frame)
output_entry.grid(row=1, column=1, padx=5, pady=5)
output_button = tk.Button(output_frame, text='输出', command=output_class)
output_button.grid(row=1, column=2, padx=5, pady=5)
root.mainloop()
```
该代码创建了一个包含四个界面的主界面,分别是添加学生信息、查询学生信息、统计班级信息和输出班级成绩单。每个界面都包含相应的输入框、按钮和标签,用于输入数据、执行操作和显示结果。
在代码中,我们使用pandas库中的DataFrame来存储学生信息,并使用to_csv()方法将班级成绩单保存到文件中。此外,我们还使用了tkinter库来实现操作界面。
阅读全文