用python写出一段代码实现学生信息管理系统,可实现可视化操作,包括添加数据,修改数据,删除数据,查询数据,包括数学,语文,英语等学科,对输入数据制图,并分析是否偏科,给出学习建议,每一次添加完数据都清除输入的数据,输入数据按照示例来填写,错误填写会报错,可以在可视化界面上实现数据的删除修改,代码加上注释。
时间: 2023-12-10 09:06:30 浏览: 90
大数据相关知识、数据集、项目源码及面试习题
好的,我会尝试回答你的问题,首先需要说明的是,这个问题需要写的代码比较多,因此我会尽可能详细的给出代码,并附上注释,以帮助你更好地理解。另外,由于这个问题需要用到可视化界面,我会选择使用Tkinter库实现。下面是代码实现:
```python
# 导入Tkinter库
import tkinter as tk
from tkinter import messagebox
import matplotlib.pyplot as plt
# 创建主窗口
root = tk.Tk()
root.title('学生信息管理系统')
root.geometry('600x400')
# 存储学生信息的列表,每个元素为一个字典
students = []
# 创建标签控件
label_name = tk.Label(root, text='姓名:', font=('Arial', 14))
label_name.place(x=50, y=50)
label_math = tk.Label(root, text='数学:', font=('Arial', 14))
label_math.place(x=50, y=100)
label_chinese = tk.Label(root, text='语文:', font=('Arial', 14))
label_chinese.place(x=50, y=150)
label_english = tk.Label(root, text='英语:', font=('Arial', 14))
label_english.place(x=50, y=200)
# 创建输入框控件
entry_name = tk.Entry(root, font=('Arial', 14))
entry_name.place(x=120, y=50)
entry_math = tk.Entry(root, font=('Arial', 14))
entry_math.place(x=120, y=100)
entry_chinese = tk.Entry(root, font=('Arial', 14))
entry_chinese.place(x=120, y=150)
entry_english = tk.Entry(root, font=('Arial', 14))
entry_english.place(x=120, y=200)
# 创建按钮控件
def add_student():
"""
添加学生信息的函数
"""
# 获取输入框中的内容
name = entry_name.get()
math = entry_math.get()
chinese = entry_chinese.get()
english = entry_english.get()
# 检查输入的内容是否合法
if name == '':
messagebox.showerror('错误', '姓名不能为空!')
return
if not math.isdigit() or not chinese.isdigit() or not english.isdigit():
messagebox.showerror('错误', '成绩必须为数字!')
return
math = int(math)
chinese = int(chinese)
english = int(english)
# 将学生信息添加到列表中
student = {'name': name, 'math': math, 'chinese': chinese, 'english': english}
students.append(student)
# 清空输入框中的内容
entry_name.delete(0, tk.END)
entry_math.delete(0, tk.END)
entry_chinese.delete(0, tk.END)
entry_english.delete(0, tk.END)
messagebox.showinfo('提示', '添加成功!')
button_add = tk.Button(root, text='添加', font=('Arial', 14), command=add_student)
button_add.place(x=50, y=250)
def delete_student():
"""
删除学生信息的函数
"""
# 获取输入框中的内容
name = entry_name.get()
# 检查输入的内容是否合法
if name == '':
messagebox.showerror('错误', '姓名不能为空!')
return
# 查找要删除的学生信息
for student in students:
if student['name'] == name:
students.remove(student)
messagebox.showinfo('提示', '删除成功!')
break
else:
messagebox.showerror('错误', '没有找到该学生!')
# 清空输入框中的内容
entry_name.delete(0, tk.END)
entry_math.delete(0, tk.END)
entry_chinese.delete(0, tk.END)
entry_english.delete(0, tk.END)
button_delete = tk.Button(root, text='删除', font=('Arial', 14), command=delete_student)
button_delete.place(x=150, y=250)
def modify_student():
"""
修改学生信息的函数
"""
# 获取输入框中的内容
name = entry_name.get()
math = entry_math.get()
chinese = entry_chinese.get()
english = entry_english.get()
# 检查输入的内容是否合法
if name == '':
messagebox.showerror('错误', '姓名不能为空!')
return
if not math.isdigit() or not chinese.isdigit() or not english.isdigit():
messagebox.showerror('错误', '成绩必须为数字!')
return
math = int(math)
chinese = int(chinese)
english = int(english)
# 查找要修改的学生信息
for student in students:
if student['name'] == name:
student['math'] = math
student['chinese'] = chinese
student['english'] = english
messagebox.showinfo('提示', '修改成功!')
break
else:
messagebox.showerror('错误', '没有找到该学生!')
# 清空输入框中的内容
entry_name.delete(0, tk.END)
entry_math.delete(0, tk.END)
entry_chinese.delete(0, tk.END)
entry_english.delete(0, tk.END)
button_modify = tk.Button(root, text='修改', font=('Arial', 14), command=modify_student)
button_modify.place(x=250, y=250)
def query_student():
"""
查询学生信息的函数
"""
# 获取输入框中的内容
name = entry_name.get()
# 检查输入的内容是否合法
if name == '':
messagebox.showerror('错误', '姓名不能为空!')
return
# 查找要查询的学生信息
for student in students:
if student['name'] == name:
math = student['math']
chinese = student['chinese']
english = student['english']
messagebox.showinfo('提示', f'姓名:{name}\n数学:{math}\n语文:{chinese}\n英语:{english}')
break
else:
messagebox.showerror('错误', '没有找到该学生!')
# 清空输入框中的内容
entry_name.delete(0, tk.END)
entry_math.delete(0, tk.END)
entry_chinese.delete(0, tk.END)
entry_english.delete(0, tk.END)
button_query = tk.Button(root, text='查询', font=('Arial', 14), command=query_student)
button_query.place(x=350, y=250)
def analyze_student():
"""
分析学生成绩的函数
"""
# 获取输入框中的内容
name = entry_name.get()
# 检查输入的内容是否合法
if name == '':
messagebox.showerror('错误', '姓名不能为空!')
return
# 查找要分析的学生信息
for student in students:
if student['name'] == name:
math = student['math']
chinese = student['chinese']
english = student['english']
# 绘制柱状图
subjects = ['数学', '语文', '英语']
scores = [math, chinese, english]
plt.bar(subjects, scores)
plt.title('成绩分析')
plt.xlabel('科目')
plt.ylabel('成绩')
plt.show()
# 分析是否偏科
if abs(math - chinese) > 10 and abs(math - english) > 10:
messagebox.showinfo('提示', '您的成绩偏科,请注意调整学习方向!')
else:
messagebox.showinfo('提示', '您的成绩很不错,继续保持哦!')
break
else:
messagebox.showerror('错误', '没有找到该学生!')
# 清空输入框中的内容
entry_name.delete(0, tk.END)
entry_math.delete(0, tk.END)
entry_chinese.delete(0, tk.END)
entry_english.delete(0, tk.END)
button_analyze = tk.Button(root, text='分析', font=('Arial', 14), command=analyze_student)
button_analyze.place(x=450, y=250)
# 进入消息循环
root.mainloop()
```
上面的代码中,我们创建了一个主窗口,并在窗口中添加了标签、输入框和按钮等控件,用于实现添加数据、修改数据、删除数据、查询数据等功能。同时,我们还编写了一些函数,用于实现具体的功能,例如添加学生信息、删除学生信息、修改学生信息、查询学生信息、分析学生成绩等。最后,我们通过调用`mainloop`函数进入消息循环,以等待用户的操作。
需要注意的是,上面的代码中仅实现了基本的功能,你可以根据自己的需求进行修改和扩展。另外,由于这个问题需要用到可视化界面,因此你需要安装matplotlib和tkinter这两个库。
阅读全文