实验5.2:综合GUI编程-学生信息管理
题目描述:利用sqlite3、tkinter、tkinter.messagebox库完成2项编程任务。
(1)使用SQLiteStudio.exe工具(见Q群)设计test.db数据库,创建图2-1所示学生数据表student(sid, sname, ssex, sage, sclass),输入如图2-2所示数据。
图2-1 数据表结构
图2-2 数据表内容
(2)设计如图3所示学生管理界面,实现学生“录入”、“删除”、“修改”、“查询”、“查看”和关闭6个子功能。(以下给出单个“查询”和所有“查看”功能图示)
图3
提示:
(1)学生数据表年龄字段设置为smallint类型,其它可全部为varchar类型;
(2)利用tkinter生成窗体、标签、文本框、命令按钮和列表框;
(3)利用grid和place实现窗体布局和控件定位;
(4)利用SQL语句Insert、Delete、Update和Select实现添、删、改、查功能。
import sqlite3
import tkinter as tk
from tkinter import *
from tkinter.messagebox import *
from statistics import variance
# 总体的框架
w = tk.Tk()
w.geometry('800x600')
w.title("学生信息管理")
# 总页面的布局
zhu = tk.Label(w, text="学生管理平台", fg="blue", font=('黑体', 20, "bold"))
zhu.place(x=320, y=15)
hao = tk.Label(w, text="学 号", fg="red", font=('黑体', 14, "bold"))
hao.place(x=100, y=70)
hao1 = tk.Entry(w, width=20)
hao1.place(x=190, y=70)
ming = tk.Label(w, text="姓 名", fg="black", font=('黑体', 14, "bold"))
ming.place(x=100, y=110)
ming1 = tk.Entry(w, width=20)
ming1.place(x=190, y=110)
nian = tk.Label(w, text="年 龄", fg="black", font=('黑体', 14, "bold"))
nian.place(x=100, y=150)
nian1 = tk.Entry(w, width=20)
nian1.place(x=190, y=150)
xing = tk.Label(w, text="性 别", fg="black", font=('黑体', 14, "bold"))
xing.place(x=440, y=110)
xing1 = tk.Entry(w, width=20)
xing1.place(x=530, y=110)
ban = tk.Label(w, text="班 级", fg="black", font=('黑体', 14, "bold"))
ban.place(x=440, y=150)
ban1 = tk.Entry(w, width=20)
ban1.place(x=530, y=150)
# 设置显示框!!最重要的是其中的输出内容一定要保证显示!!
xian = tk.StringVar()
kuang = tk.Listbox(listvariable=xian)
kuang.place(x=100, y=240, width=600, height=300)
# 创建数据库
f = open("student1.db", 'w+')
f.close()
co = sqlite3.connect(r"C:\Users\qssss\PycharmProjects\pythonProject\venv\实验5\student1.db")
cu = co.cursor()
cu.execute('DROP TABLE IF EXISTS student')
cu.execute("CREATE TABLE student (sid char(7) Primary Key,\
sname varchar(8) not null,ssex char(2) not null,\
sage smalint,sclass varchar(8) not null)")
# 录入
def log():
sql = "INSERT INTO student(sid,sname,ssex,sage,sclass) VALUES(?,?,?,?,?)"
cu.execute(sql, (hao1.get(), ming1.get(), xing1.get(), nian1.get(), ban1.get()))
co.commit()
# 删除
def delete():
cu.execute("select sid,sname,sage,ssex,sclass from student where sid='%s'" % hao1.get())
cu.execute("SELECT *FROM student")
temp = cu.fetchall()
if len(temp)!=0:
sql = "DELETE FROM student where sid='%s'" % hao1.get()
cu.execute(sql)
else:
showwarning(title='错误', message="未找到该学生信息,不可删除!")
co.commit()
# 修改
def update():
cu.execute("select sid,sname,sage,ssex,sclass from student where sid='%s'" % hao1.get())
cu.execute("SELECT *FROM student")
temp = cu.fetchall()
if len(temp) != 0:
sql = "UPDATE student SET sname='%s',sage='%s',ssex='%s',sclass='%s' where sid='%s'" % (ming1.get(), nian1.get(), xing1.get(), ban1.get(), hao1.get())
cu.execute(sql)
else:
showwarning(title='错误', message="未找到该学生信息,不可修改!")
co.commit()
# 查询
def select():
cu.execute("select sid,sname,sage,ssex,sclass from student where sid='%s'" % hao1.get())
# cu.execute("SELECT *FROM student")
temp = cu.fetchall()
if len(temp) != 0:
xian.set(temp)
else:
showwarning(title='错误', message="未找到该学生信息!")
# 查看全部
def chakanall():
cu.execute("select sid,sname,sage,ssex,sclass from student where sid='%s'" % hao1.get())
cu.execute("SELECT *FROM student")
temp = cu.fetchall()
if len(temp) != 0:
xian.set(temp)
else:
showwarning(title='错误', message="未找到信息!")
# 关闭
def close():
w.destroy()
# 再进行录入等6个操作的布局加操作
lr = tk.Button(w, text="录入", command=log)
lr.place(x=100, y=190, width=80)
sc = tk.Button(w, text="删除", command=delete)
sc.place(x=200, y=190, width=80)
xg = tk.Button(w, text="修改", command=update)
xg.place(x=300, y=190, width=80)
cx = tk.Button(w, text="查询", command=select)
cx.place(x=400, y=190, width=80)
ck = tk.Button(w, text="查看全部", command=chakanall)
ck.place(x=500, y=190, width=80)
gb = tk.Button(w, text="关闭", command=close)
gb.place(x=600, y=190, width=80)
w.mainloop()
co.close()