用python写一个学生成绩管理系统,用sqlite,带GUI界面
时间: 2023-07-18 15:04:47 浏览: 132
基于python制作学生成绩管理系统
5星 · 资源好评率100%
好的,以下是一个简单的学生成绩管理系统,使用Python的Tkinter库来创建GUI界面,使用SQLite数据库来存储和管理学生的成绩信息。
```python
import sqlite3
import tkinter as tk
from tkinter import messagebox
# 创建数据库连接
conn = sqlite3.connect('students.db')
# 创建数据表
conn.execute('''CREATE TABLE IF NOT EXISTS STUDENTS
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
MATH INT NOT NULL,
ENGLISH INT NOT NULL,
PYTHON INT NOT NULL);''')
# 定义GUI界面
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.master.title("学生成绩管理系统")
self.pack()
self.create_widgets()
# 创建GUI控件
def create_widgets(self):
# 学号输入框
self.id_label = tk.Label(self, text="学号")
self.id_label.grid(row=0, column=0)
self.id_entry = tk.Entry(self)
self.id_entry.grid(row=0, column=1)
# 姓名输入框
self.name_label = tk.Label(self, text="姓名")
self.name_label.grid(row=1, column=0)
self.name_entry = tk.Entry(self)
self.name_entry.grid(row=1, column=1)
# 数学成绩输入框
self.math_label = tk.Label(self, text="数学成绩")
self.math_label.grid(row=2, column=0)
self.math_entry = tk.Entry(self)
self.math_entry.grid(row=2, column=1)
# 英语成绩输入框
self.english_label = tk.Label(self, text="英语成绩")
self.english_label.grid(row=3, column=0)
self.english_entry = tk.Entry(self)
self.english_entry.grid(row=3, column=1)
# Python成绩输入框
self.python_label = tk.Label(self, text="Python成绩")
self.python_label.grid(row=4, column=0)
self.python_entry = tk.Entry(self)
self.python_entry.grid(row=4, column=1)
# 添加按钮
self.add_button = tk.Button(self, text="添加", command=self.add_student)
self.add_button.grid(row=5, column=0)
# 查询按钮
self.query_button = tk.Button(self, text="查询", command=self.query_student)
self.query_button.grid(row=5, column=1)
# 显示成绩列表框
self.listbox = tk.Listbox(self)
self.listbox.grid(row=6, columnspan=2)
# 添加学生信息
def add_student(self):
# 获取输入框中的值
id = self.id_entry.get()
name = self.name_entry.get()
math = self.math_entry.get()
english = self.english_entry.get()
python = self.python_entry.get()
# 检查输入框是否为空
if not id or not name or not math or not english or not python:
messagebox.showerror("错误", "请输入完整的信息")
return
# 检查学号是否已存在
cursor = conn.execute("SELECT * FROM STUDENTS WHERE ID=?", (id,))
if cursor.fetchone() is not None:
messagebox.showerror("错误", "学号已存在")
return
# 添加学生信息到数据库
conn.execute("INSERT INTO STUDENTS (ID, NAME, MATH, ENGLISH, PYTHON) VALUES (?, ?, ?, ?, ?)", (id, name, math, english, python))
conn.commit()
# 清空输入框
self.id_entry.delete(0, tk.END)
self.name_entry.delete(0, tk.END)
self.math_entry.delete(0, tk.END)
self.english_entry.delete(0, tk.END)
self.python_entry.delete(0, tk.END)
# 显示成功提示
messagebox.showinfo("成功", "添加成功")
# 查询学生信息
def query_student(self):
# 获取学号输入框中的值
id = self.id_entry.get()
# 检查学号是否为空
if not id:
messagebox.showerror("错误", "请输入学号")
return
# 查询学生信息
cursor = conn.execute("SELECT * FROM STUDENTS WHERE ID=?", (id,))
student = cursor.fetchone()
# 显示查询结果
if student is not None:
self.listbox.delete(0, tk.END)
self.listbox.insert(tk.END, f"学号:{student[0]}")
self.listbox.insert(tk.END, f"姓名:{student[1]}")
self.listbox.insert(tk.END, f"数学成绩:{student[2]}")
self.listbox.insert(tk.END, f"英语成绩:{student[3]}")
self.listbox.insert(tk.END, f"Python成绩:{student[4]}")
else:
messagebox.showerror("错误", "学号不存在")
# 运行GUI应用程序
root = tk.Tk()
app = Application(master=root)
app.mainloop()
# 关闭数据库连接
conn.close()
```
该程序创建了一个名为`STUDENTS`的数据表,用于存储学生的成绩信息。在GUI界面中,用户可以输入学生的学号、姓名和各科成绩,点击“添加”按钮将学生信息添加到数据库中。用户也可以输入学号并点击“查询”按钮,查询指定学号的学生信息,并在列表框中显示查询结果。程序使用`messagebox`模块来显示错误和成功提示。
阅读全文