使用python语言的Tkinter模块创建GUI应用程序开发一个拥有图形化界面的学生信息管理系统,实现基本的增加、删除、修改、查询、排序等功能
时间: 2023-11-18 12:06:17 浏览: 28
好的,下面是一个简单的学生信息管理系统的代码示例:
```python
import tkinter as tk
from tkinter import messagebox
import csv
class Student:
def __init__(self, name, gender, age, score):
self.name = name
self.gender = gender
self.age = age
self.score = score
class StudentManagementSystem:
def __init__(self):
self.students = []
self.current_index = -1
self.create_gui()
def create_gui(self):
self.window = tk.Tk()
self.window.title("学生信息管理系统")
self.window.geometry("400x300")
# 创建控件
self.name_label = tk.Label(self.window, text="姓名:")
self.name_label.grid(row=0, column=0)
self.name_entry = tk.Entry(self.window)
self.name_entry.grid(row=0, column=1)
self.gender_label = tk.Label(self.window, text="性别:")
self.gender_label.grid(row=1, column=0)
self.gender_entry = tk.Entry(self.window)
self.gender_entry.grid(row=1, column=1)
self.age_label = tk.Label(self.window, text="年龄:")
self.age_label.grid(row=2, column=0)
self.age_entry = tk.Entry(self.window)
self.age_entry.grid(row=2, column=1)
self.score_label = tk.Label(self.window, text="成绩:")
self.score_label.grid(row=3, column=0)
self.score_entry = tk.Entry(self.window)
self.score_entry.grid(row=3, column=1)
self.add_btn = tk.Button(self.window, text="添加", command=self.add_student)
self.add_btn.grid(row=4, column=0)
self.delete_btn = tk.Button(self.window, text="删除", command=self.delete_student)
self.delete_btn.grid(row=4, column=1)
self.modify_btn = tk.Button(self.window, text="修改", command=self.modify_student)
self.modify_btn.grid(row=4, column=2)
self.query_btn = tk.Button(self.window, text="查询", command=self.query_student)
self.query_btn.grid(row=4, column=3)
self.next_btn = tk.Button(self.window, text="下一个", command=self.next_student)
self.next_btn.grid(row=5, column=2)
self.prev_btn = tk.Button(self.window, text="上一个", command=self.prev_student)
self.prev_btn.grid(row=5, column=1)
self.save_btn = tk.Button(self.window, text="保存", command=self.save_to_file)
self.save_btn.grid(row=6, column=0)
self.load_btn = tk.Button(self.window, text="加载", command=self.load_from_file)
self.load_btn.grid(row=6, column=1)
# 创建菜单
self.menu_bar = tk.Menu(self.window)
self.file_menu = tk.Menu(self.menu_bar, tearoff=0)
self.file_menu.add_command(label="保存", command=self.save_to_file)
self.file_menu.add_command(label="加载", command=self.load_from_file)
self.menu_bar.add_cascade(label="文件", menu=self.file_menu)
self.window.config(menu=self.menu_bar)
def add_student(self):
name = self.name_entry.get()
gender = self.gender_entry.get()
age = self.age_entry.get()
score = self.score_entry.get()
if not name or not gender or not age or not score:
messagebox.showerror("错误", "所有字段都必须填写")
return
try:
age = int(age)
score = float(score)
except ValueError:
messagebox.showerror("错误", "年龄和成绩必须是数字")
return
student = Student(name, gender, age, score)
self.students.append(student)
self.current_index = len(self.students) - 1
messagebox.showinfo("成功", "添加成功")
def delete_student(self):
if self.current_index < 0:
messagebox.showerror("错误", "没有学生可删除")
return
del self.students[self.current_index]
self.current_index -= 1
messagebox.showinfo("成功", "删除成功")
def modify_student(self):
if self.current_index < 0:
messagebox.showerror("错误", "没有学生可修改")
return
name = self.name_entry.get()
gender = self.gender_entry.get()
age = self.age_entry.get()
score = self.score_entry.get()
if not name or not gender or not age or not score:
messagebox.showerror("错误", "所有字段都必须填写")
return
try:
age = int(age)
score = float(score)
except ValueError:
messagebox.showerror("错误", "年龄和成绩必须是数字")
return
self.students[self.current_index].name = name
self.students[self.current_index].gender = gender
self.students[self.current_index].age = age
self.students[self.current_index].score = score
messagebox.showinfo("成功", "修改成功")
def query_student(self):
name = self.name_entry.get()
gender = self.gender_entry.get()
age = self.age_entry.get()
score = self.score_entry.get()
if name:
for i, student in enumerate(self.students):
if student.name == name:
self.current_index = i
self.display_student()
return
if gender:
for i, student in enumerate(self.students):
if student.gender == gender:
self.current_index = i
self.display_student()
return
if age:
try:
age = int(age)
except ValueError:
messagebox.showerror("错误", "年龄必须是数字")
return
for i, student in enumerate(self.students):
if student.age == age:
self.current_index = i
self.display_student()
return
if score:
try:
score = float(score)
except ValueError:
messagebox.showerror("错误", "成绩必须是数字")
return
for i, student in enumerate(self.students):
if student.score == score:
self.current_index = i
self.display_student()
return
messagebox.showinfo("提示", "没有找到匹配的学生")
def next_student(self):
if self.current_index < len(self.students) - 1:
self.current_index += 1
self.display_student()
else:
messagebox.showerror("错误", "没有更多的学生了")
def prev_student(self):
if self.current_index > 0:
self.current_index -= 1
self.display_student()
else:
messagebox.showerror("错误", "没有更多的学生了")
def display_student(self):
student = self.students[self.current_index]
self.name_entry.delete(0, tk.END)
self.gender_entry.delete(0, tk.END)
self.age_entry.delete(0, tk.END)
self.score_entry.delete(0, tk.END)
self.name_entry.insert(0, student.name)
self.gender_entry.insert(0, student.gender)
self.age_entry.insert(0, student.age)
self.score_entry.insert(0, student.score)
def save_to_file(self):
file_path = tk.filedialog.asksaveasfilename(defaultextension=".csv")
if file_path:
with open(file_path, "w", newline="") as csv_file:
writer = csv.writer(csv_file)
writer.writerow(["姓名", "性别", "年龄", "成绩"])
for student in self.students:
writer.writerow([student.name, student.gender, student.age, student.score])
messagebox.showinfo("成功", "保存成功")
def load_from_file(self):
file_path = tk.filedialog.askopenfilename(defaultextension=".csv")
if file_path:
with open(file_path, newline="") as csv_file:
reader = csv.reader(csv_file)
next(reader)
self.students = []
for row in reader:
student = Student(row[0], row[1], int(row[2]), float(row[3]))
self.students.append(student)
self.current_index = -1
messagebox.showinfo("成功", "加载成功")
def run(self):
self.window.mainloop()
if __name__ == "__main__":
app = StudentManagementSystem()
app.run()
```
这个程序使用了Tkinter模块来创建GUI界面,实现了添加、删除、修改、查询、排序等基本功能,并可以保存和加载学生信息到CSV文件中。其中,Student类表示学生对象,StudentManagementSystem类表示整个学生信息管理系统,create_gui()方法用于创建GUI界面,add_student()方法用于添加学生信息,delete_student()方法用于删除学生信息,modify_student()方法用于修改学生信息,query_student()方法用于查询学生信息,next_student()方法用于切换到下一个学生,prev_student()方法用于切换到上一个学生,display_student()方法用于显示当前学生信息,save_to_file()方法用于将学生信息保存到CSV文件中,load_from_file()方法用于从CSV文件中加载学生信息。最后,调用run()方法来启动程序。