代码生成复杂python tkinter sqlite学生信息管理系统。拥有多张表,学生有三门学科成绩,班级,院系,联系方式和基本信息。系统有增删改查,统计等功能。统计每门科挂科学生,通过柱状图统计每班挂科人数。
时间: 2024-05-04 11:18:50 浏览: 105
学生信息管理系统(tkinter界面带登陆系统,增删改查等)-python
5星 · 资源好评率100%
很好,这是一个非常有挑战性的项目。首先需要安装 Python、Tkinter 和 SQLite,然后可以按照以下步骤进行开发。
1. 创建数据库
首先需要创建一个 SQLite 数据库来存储学生信息和成绩。可以使用 SQLite 的命令行工具或第三方 SQLite 客户端来创建数据库和表。在本例中,我们将创建四个表:学生信息表、班级信息表、成绩表和联系方式表。
以下是创建表的示例代码:
```sql
CREATE TABLE IF NOT EXISTS student_info (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
gender TEXT NOT NULL,
age INTEGER NOT NULL,
department TEXT NOT NULL,
class_id INTEGER NOT NULL,
phone TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS class_info (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
department TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS score (
id INTEGER PRIMARY KEY AUTOINCREMENT,
student_id INTEGER NOT NULL,
subject TEXT NOT NULL,
score REAL NOT NULL,
FOREIGN KEY(student_id) REFERENCES student_info(id)
);
CREATE TABLE IF NOT EXISTS contact_info (
id INTEGER PRIMARY KEY AUTOINCREMENT,
student_id INTEGER NOT NULL,
email TEXT NOT NULL,
address TEXT NOT NULL,
FOREIGN KEY(student_id) REFERENCES student_info(id)
);
```
2. 创建 GUI
使用 Tkinter 创建 GUI,包括菜单栏、文本框、按钮、标签等控件。按照需求布置好各个控件,使界面看起来美观且易于使用。可以使用 grid() 或 pack() 方法来排列控件。以下是示例代码:
```python
import tkinter as tk
class StudentInfoGUI:
def __init__(self, master):
self.master = master
self.master.title("学生信息管理系统")
self.master.geometry("800x600")
self.create_menu()
self.create_widgets()
def create_menu(self):
menubar = tk.Menu(self.master)
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="新建")
filemenu.add_command(label="打开")
filemenu.add_command(label="保存")
filemenu.add_separator()
filemenu.add_command(label="退出", command=self.master.quit)
menubar.add_cascade(label="文件", menu=filemenu)
editmenu = tk.Menu(menubar, tearoff=0)
editmenu.add_command(label="剪切")
editmenu.add_command(label="复制")
editmenu.add_command(label="粘贴")
menubar.add_cascade(label="编辑", menu=editmenu)
helpmenu = tk.Menu(menubar, tearoff=0)
helpmenu.add_command(label="帮助文档")
helpmenu.add_command(label="关于")
menubar.add_cascade(label="帮助", menu=helpmenu)
self.master.config(menu=menubar)
def create_widgets(self):
tk.Label(self.master, text="学生信息管理系统", font=("Helvetica", 24)).grid(row=0, column=0, columnspan=3, padx=10, pady=10)
tk.Label(self.master, text="学生信息", font=("Helvetica", 18)).grid(row=1, column=0, padx=10, pady=10)
tk.Label(self.master, text="班级信息", font=("Helvetica", 18)).grid(row=1, column=1, padx=10, pady=10)
tk.Label(self.master, text="成绩信息", font=("Helvetica", 18)).grid(row=1, column=2, padx=10, pady=10)
# 学生信息控件
tk.Label(self.master, text="姓名").grid(row=2, column=0, padx=10, pady=10)
tk.Entry(self.master).grid(row=2, column=1, padx=10, pady=10)
tk.Label(self.master, text="性别").grid(row=3, column=0, padx=10, pady=10)
tk.Entry(self.master).grid(row=3, column=1, padx=10, pady=10)
tk.Label(self.master, text="年龄").grid(row=4, column=0, padx=10, pady=10)
tk.Entry(self.master).grid(row=4, column=1, padx=10, pady=10)
tk.Label(self.master, text="系别").grid(row=5, column=0, padx=10, pady=10)
tk.Entry(self.master).grid(row=5, column=1, padx=10, pady=10)
tk.Label(self.master, text="班级").grid(row=6, column=0, padx=10, pady=10)
tk.Entry(self.master).grid(row=6, column=1, padx=10, pady=10)
tk.Label(self.master, text="电话").grid(row=7, column=0, padx=10, pady=10)
tk.Entry(self.master).grid(row=7, column=1, padx=10, pady=10)
# 班级信息控件
tk.Label(self.master, text="班级名称").grid(row=2, column=1, padx=10, pady=10)
tk.Entry(self.master).grid(row=2, column=2, padx=10, pady=10)
tk.Label(self.master, text="系别").grid(row=3, column=1, padx=10, pady=10)
tk.Entry(self.master).grid(row=3, column=2, padx=10, pady=10)
# 成绩信息控件
tk.Label(self.master, text="学生姓名").grid(row=2, column=2, padx=10, pady=10)
tk.Entry(self.master).grid(row=2, column=3, padx=10, pady=10)
tk.Label(self.master, text="科目").grid(row=3, column=2, padx=10, pady=10)
tk.Entry(self.master).grid(row=3, column=3, padx=10, pady=10)
tk.Label(self.master, text="成绩").grid(row=4, column=2, padx=10, pady=10)
tk.Entry(self.master).grid(row=4, column=3, padx=10, pady=10)
# 操作按钮
tk.Button(self.master, text="添加", width=10).grid(row=8, column=0, padx=10, pady=10)
tk.Button(self.master, text="修改", width=10).grid(row=8, column=1, padx=10, pady=10)
tk.Button(self.master, text="删除", width=10).grid(row=8, column=2, padx=10, pady=10)
tk.Button(self.master, text="查询", width=10).grid(row=8, column=3, padx=10, pady=10)
```
3. 实现功能
实现增删改查、统计功能,包括读取数据库、执行 SQL 语句、显示结果等。以下是示例代码:
```python
import sqlite3
class StudentInfoGUI:
# ...
def get_conn(self):
conn = None
try:
conn = sqlite3.connect("student_info.db")
except Exception as e:
print(e)
return conn
def add_student(self):
name = self.name_entry.get()
gender = self.gender_entry.get()
age = int(self.age_entry.get())
department = self.department_entry.get()
class_id = int(self.class_entry.get())
phone = self.phone_entry.get()
sql = "INSERT INTO student_info (name, gender, age, department, class_id, phone) VALUES (?, ?, ?, ?, ?, ?)"
conn = self.get_conn()
cursor = conn.cursor()
cursor.execute(sql, (name, gender, age, department, class_id, phone))
conn.commit()
conn.close()
def update_student(self):
pass
def delete_student(self):
pass
def query_student(self):
pass
def count_fail(self):
pass
def show_fail_chart(self):
pass
```
4. 运行程序
最后,在主程序中实例化 GUI 类并运行主循环即可。以下是示例代码:
```python
if __name__ == "__main__":
root = tk.Tk()
app = StudentInfoGUI(root)
root.mainloop()
```
完整代码:
阅读全文