作者主页:[编程指南针]
作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云优质创作者、51CTO优质创作者、多年架构师设计经验、腾讯课堂常驻讲师
主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助
收藏点赞不迷路 关注作者有好处
文末获取源码
项目编号:KS-Python-001
一,环境介绍
语言环境:Python3.7
数据库:Mysql: mysql5.7
开发工具:IDEA
二,项目简介
主要作为作业使用,基于Python的UI实现一个学生的信息增删改查的管理系统。完成了Python和数据库的连接,并进行了学生信息的添加、条件查询、修改和删除操作。
三,系统展示
编辑
四,核心代码展示
# -*- encoding:utf-8 -*-
"""
@文件名:MyUi.py
@文档说明:
"""
# 导入 tkinter 库
from tkinter import *
# 导入tkinter库中的ttk
from tkinter import ttk
# 导入com.zs.dao下的BaseDao模块
from com.zs.dao import BaseDao as bd
# 导入com.zs.entity下的Student实体类
import com.zs.entity.Student as s
# 导入tkinter的对话框
from tkinter import messagebox
# 实例化学生实体类
stu=s.Student()
# 底部容器的右边按钮绑定的方法
# 添加
def insert():
# 获取输入框的值
snameValue=snameEntry.get()
ssexValue=ssexEntry.get()
sageValue=sageEntry.get()
if(snameValue=="" or ssexValue=="" or sageValue==""):
messagebox.showwarning("警告","学生的姓名、性别、年龄不能为空!")
else:
print("添加中......")
sageValue = int(sageEntry.get())
stu.setSage(sageValue)
stu.setSname(snameValue)
stu.setSsex(ssexValue)
bd.addStudent(stu)
# 添加之后重新加载表格数据
fresh()
clearEntry()
print("添加成功!")
# 删除
def delete():
sidValue=sidEntry.get()
if(sidValue!=""):
print("删除中......")
sidValue=int(sidEntry.get())
stu.setSid(sidValue)
bd.delStudent(stu)
# 删除之后刷新数据
fresh()
# 清空输入框
clearEntry()
print("删除成功!")
elif(sidValue==""):
# 用户没有选择任何学生进行删除
messagebox.showwarning("警告","请选择需要删除的学生")
# 修改
def update():
sidValue=sidEntry.get()
if(sidValue!=""):
print("修改中......")
sidValue=int(sidEntry.get())
snameValue = snameEntry.get()
ssexValue = ssexEntry.get()
sageValue = int(sageEntry.get())
stu.setSid(sidValue)
stu.setSname(snameValue)
stu.setSsex(ssexValue)
stu.setSage(sageValue)
bd.updStudent(stu)
fresh()
clearEntry()
print("修改成功!")
elif(sidValue==""):
# 用户没有选择任何学生进行修改
messagebox.showwarning("警告", "请选择需要修改的学生")
# 查询
def select():
print("查询中......")
sidValue= sidEntry.get()
if(sidValue!=""):
sidValue = int(sidEntry.get())
snameValue = snameEntry.get()
ssexValue = ssexEntry.get()
sageValue=sageEntry.get()
if (sageValue!= ""):
sageValue = int(sageEntry.get())
stu.setSid(sidValue)
stu.setSname(snameValue)
stu.setSsex(ssexValue)
stu.setSage(sageValue)
for i in treeView.get_children():
treeView.delete(i)
for i in bd.selectStu(stu):
treeView.insert("", 0, values=(i[0], i[1], i[2], i[3]))
print("查询成功......")
# 刷新数据的方法
def fresh():
for i in treeView.get_children():
treeView.delete(i)
for i in bd.getAll():
treeView.insert("", 0, values=(i[0], i[1], i[2], i[3]))
# 表格选中某列的方法
def treeViewSelect(event):
item = treeView.selection()
itemValues = treeView.item(item, "values")
sidValue=itemValues[0]
snameValue = itemValues[1]
ssexValue = itemValues[2]
sageValue = itemValues[3]
# 默认清空
clearEntry()
# 赋值
sidEntry.insert(0, sidValue)
snameEntry.insert(0, snameValue)
ssexEntry.insert(0, ssexValue)
sageEntry.insert(0, sageValue)
# 清空输入框的值
def clearEntry():
sidEntry.delete(0, END)
snameEntry.delete(0, END)
ssexEntry.delete(0, END)
sageEntry.delete(0, END)
# 实例化一个新窗口
tk=Tk()
# 设置窗口大小
tk.geometry("600x380")
# 设置窗口的标题
tk.title("学生管理系统\n@znz")
# 在窗口中添加标签
label=Label(tk,text="欢迎使用学生管理系统!",bg="#0078D7",fg="black",font=("宋体",18))
# 标签出现在窗口的位置
label.pack(side=TOP,fill="x")
#在窗口中添加数据展示
# 设置show属性为 headings 即可隐藏首列
treeView=ttk.Treeview(tk,show="headings",column=("sid","sname","ssex","sage"))
#数据列表设置属性
treeView.column("sid",width=150,anchor="center")
treeView.column("sname",width=150,anchor="center")
treeView.column("ssex",width=150,anchor="center")
treeView.column("sage",width=150,anchor="center")
#设置表头
treeView.heading("sid",text="编号")
treeView.heading("sname",text="姓名")
treeView.heading("ssex",text="性别")
treeView.heading("sage",text="年龄")
# 初始化加载表格的数据
fresh()
#实例化底部大容器
bottomFrame=Frame(tk)
#实例化底部大容器中的左右两个容器
leftFrame=Frame(bottomFrame)
rightFrame=Frame(bottomFrame)
# 左边容器
sidLadel=Label(leftFrame,text="编号:")
sidEntry=Entry(leftFrame)
snameLadel=Label(leftFrame,text="姓名:")
snameEntry=Entry(leftFrame)
ssexLadel=Label(leftFrame,text="性别:")
ssexEntry=Entry(leftFrame)
sageLadel=Label(leftFrame,text="年龄:")
sageEntry=Entry(leftFrame)
sidLadel.grid(row=0,column=0)
sidEntry.grid(row=0,column=1)
snameLadel.grid(row=0,column=2)
snameEntry.grid(row=0,column=3)
ssexLadel.grid(row=1,column=0)
ssexEntry.grid(row=1,column=1)
sageLadel.grid(row=1,column=2)
sageEntry.grid(row=1,column=3)
# 右边容器
insertBtn=Button(rightFrame,text="添加",command=insert)
deleteBtn=Button(rightFrame,text="删除",command=delete)
updateBtn=Button(rightFrame,text="修改",command=update)
selectBtn=Button(rightFrame,text="查询",command=select)
insertBtn.grid(row=0,column=0)
deleteBtn.grid(row=0,column=1)
updateBtn.grid(row=1,column=0)
selectBtn.grid(row=1,column=1)
# 底部的【一键清空】按钮
clearButton=Button(text="一键清空",command=clearEntry)
#给TreeView添加点击事件
treeView.bind("<<TreeviewSelect>>",treeViewSelect)
# 显示表的信息
treeView.pack()
# 显示左右容器
leftFrame.pack(side=LEFT)
rightFrame.pack(side=RIGHT)
# 显示底部大容器
bottomFrame.pack()
# 显示底部的【一键清空】按钮
clearButton.pack()
# 获取电脑屏幕的宽度和高度
winWidth=tk.winfo_screenwidth()
winHeight=tk.winfo_screenheight()
# 窗口的宽度
tkWidth = 600
tkHeight = 380
# 居中的px
x = (winWidth-tkWidth) / 2
y = (winHeight-tkHeight) / 2
tk.geometry("%dx%d+%d+%d" %(tkWidth,tkHeight,x,y))
# 进入消息循环
tk.mainloop()
# -*- encoding:utf-8 -*-
"""
@文件名:BaseDao.py
@文档说明:连接数据库和关闭数据库的方法
"""
import pymysql
import com.zs.entity.Student as student
s = student.Student()
# 1.查询所有学生信息
def getAll():
connect = pymysql.connect(host="localhost", user="root", passwd="root", db="zs")
cursor = connect.cursor()
cursor.execute("select * from Student")
data = cursor.fetchall()
connect.close()
return data
# 根据学生姓名查询学生信息
def getStudentBySname(s):
connect = pymysql.connect(host="localhost", user="root", passwd="root", db="zs")
cursor = connect.cursor()
sql = "select * from Student where sname='%s'" % (s.getSname())
cursor.execute(sql)
data = cursor.fetchall()
connect.close()
return data
# 根据sid查询单个学生信息
def getStudentBySid(s):
connect = pymysql.connect(host="localhost", user="root", passwd="root", db="zs")
cursor = connect.cursor()
sql = "select * from Student where sid=%d" % (s.getSid())
cursor.execute(sql)
data = cursor.fetchone()
connect.close()
return data
# 添加学生信息
def addStudent(s):
connect = pymysql.connect(host="localhost", user="root", passwd="root", db="zs")
cursor = connect.cursor()
sql = "insert into Student values(null,'%s','%s','%d')" % (s.getSname(), s.getSsex(), s.getSage())
cursor.execute(sql)
connect.commit()
connect.close()
# 删除学生信息
def delStudent(s):
connect = pymysql.connect(host="localhost", user="root", passwd="root", db="zs")
cursor = connect.cursor()
sql = "delete from Student where sid=%d" % (s.getSid())
cursor.execute(sql)
connect.commit()
connect.close()
# 修改学生信息
def updStudent(s):
connect = pymysql.connect(host="localhost", user="root", passwd="root", db="zs")
cursor = connect.cursor()
sql = "update Student set sname='%s',ssex='%s',sage=%d where sid=%d" % (
s.getSname(), s.getSsex(), s.getSage(), s.getSid())
cursor.execute(sql)
connect.commit()
connect.close()
# 根据查询条件查询学生信息
def selectStu(s):
connect = pymysql.connect(host="localhost", user="root", passwd="root", db="zs")
cursor = connect.cursor()
sql = "select * from Student where 1=1"
if(s.getSid()!=""):
sql=sql+" and sid=%d"%(s.getSid())
if(s.getSname()!=""):
sql=sql+" and sname like '%%%s%%'"%(s.getSname())
if(s.getSsex()!=""):
sql=sql+" and ssex='%s'"%(s.getSsex())
if(s.getSage()!=""):
sql=sql+" and sage=%d"%(s.getSage())
cursor.execute(sql)
data = cursor.fetchall()
connect.close()
return data
# 测试查询所有学生信息
# d=getAll()
# print(d)
# 测试查询单个学生信息
# stu = student.Student()
# stu.setSname("小明")
# sd = getStudentBySname(stu)
# print(sd)
# 测试添加学生信息
# s= student.Student()
# s.setSname("小明")
# s.setSsex("男")
# s.setSage(19)
# addStudent(s)
# 测试删除学生信息
# stu = student.Student()
# stu.setSid(9)
# delStudent(stu)
# 测试修改
# s= student.Student()
# s.setSid(15)
# s.setSname("小d")
# s.setSsex("男")
# s.setSage(19)
# updStudent(s)
# 测试根据查询条件查询学生信息
# stu = student.Student()
# stu.setSname("s")
# print(stu.getSname()!="")
五,项目总结