Python GUI图形界面 MySql保存数据 学生管理系统

主要实验 学生的添加删除和修改,并将每次添加删除或修改的数据保存到数据库中,并通过遍历数据库将信息显示出来

 源码在这里

import tkinter as tk
from tkinter import scrolledtext
import pymysql
import tkinter.messagebox
from tkinter import END

conn = pymysql.connect(host='127.0.0.1', user='root', password='123456', database='mysql', charset='UTF8MB4')
cur = conn.cursor()


# 定义执行函数
def doSQL(sql):
    cur.execute(sql)
    conn.commit()


sql2 = 'create database if not exists student;'
doSQL(sql2)
sql3 = 'use student;'
doSQL(sql3)

# 创建表
sql1 = ''' create table if not exists student(
id char(100) primary key,
name char(20) not null,
sex char(2) not null,
tel char(100) not null,
address char(100))engine=innodb default charset=UTF8MB4;'''
doSQL(sql1)


# 定义添加函数
def insert_105():
    # 定义一个弹窗
    a = tk.messagebox.askquestion(title='提示窗', message='你确定要添加么?')
    if a == 'yes':
        try:
            sql2 = 'insert into student(id,name,sex,tel,address) values(%s,%s,%s,%s,%s)'
            cur.execute(sql2, (id.get(), name.get(), sex.get(), tel.get(), address.get()))
            conn.commit()
            tk.messagebox.showinfo(title='提示窗', message='添加成功')
            print('添加成功')
            '''t.insert('end', ' ' + id.get() + '')
            t.insert('end', '    ' + name.get() + '   ')
            t.insert('end', '    ' + sex.get() + '   ')
            t.insert('end', '   ' + tel.get() + '   ')
            t.insert('end', '   ' + address.get())
            t.insert('end', '\n')
            t.insert('end', '_' * 76)'''
        except Exception as e:
            # 回滚
            conn.rollback()
            print('添加失败,已经有该学生存在')
            tk.messagebox.showinfo(title='提示窗', message='添加失败,已经有该学生存在')
        clear_105()
        show_105()


# 定义删除函数
def delete_105():
    a = tk.messagebox.askquestion(title='提示窗', message='你确定要删除么?')
    if a == 'yes':
        sql1 = 'delete from student where id=%s'
        # 判断学生是否存在
        sql2 = 'select id from student'
        cur.execute(sql2)
        select_id = cur.fetchall()
        for i in select_id:
            if int(id.get()) == int(i[0]):
                cur.execute(sql1, (id.get(),))
                conn.commit()
                tk.messagebox.showinfo(title='提示窗', message='删除成功')
                break
        else:
            conn.rollback()
            tk.messagebox.showinfo(title='提示窗', message='删除的学生不存在')
        clear_105()
        show_105()


# 定义修改函数
def update_105():
    a = tk.messagebox.askquestion(title='提示窗', message='你确定要修改么?')
    if a == 'yes':
        sql1 = 'update student set name=%s where id=%s'

        sql3 = 'update student set sex=%s where id=%s'

        sql4 = 'update student set tel=%s where id=%s'

        sql5 = 'update student set address=%s where id=%s'
        sql2 = 'select id from student'
        # 判断学生是否存在
        cur.execute(sql2)
        select_id = cur.fetchall()
        for i in select_id:
            if int(id.get()) == int(i[0]):
                cur.execute(sql1, (name.get(), id.get()))
                conn.commit()
                cur.execute(sql3, (sex.get(), id.get()))
                conn.commit()
                cur.execute(sql4, (tel.get(), id.get()))
                conn.commit()
                cur.execute(sql5, (address.get(), id.get()))
                conn.commit()
                # print('修改成功')
                tk.messagebox.showinfo(title='提示窗', message='修改成功')
                break
        else:
            conn.rollback()
            print('修改的学生不存在')
            tk.messagebox.showinfo(title='提示窗', message='修改的学生不存在')
    clear_105()
    show_105()


# 定义清空text的函数
def clear_105():
    t.delete(1.0, END)


# 定义显示函数
def show_105():
    t.insert('end', '\n')
    t.insert('end', '   学号      |')
    t.insert('end', '   姓名   |')
    t.insert('end', '   性别   |')
    t.insert('end', '   电话   |')
    t.insert('end', '            地址   ')
    t.insert('end', '\n')
    t.insert('end', '_' * 76)
    sql = 'select * from student'
    cur.execute(sql)
    for all in cur.fetchall():
        # print(all[0],all[1],all[2],all[3],all[4])
        a = str(all[0])
        b = str(all[1])
        c = str(all[2])
        d = str(all[3])
        e = str(all[4])
        t.insert('end', ' ' + a + '')
        t.insert('end', '    ' + b + '   ')
        t.insert('end', '    ' + c + '   ')
        t.insert('end', '   ' + d + '   ')
        t.insert('end', '   ' + e)
        t.insert('end', '\n')
        t.insert('end', '_' * 76)


# 定义退出函数
def exit_105():
    a = tk.messagebox.askquestion(title='提示窗', message='你真的要退出么?')
    if a == 'yes':
        window.quit()


# 定义关于弹窗
def about_105():
    tk.messagebox.showinfo(title='关于', message='姓名:刘文超,学号:20080902105,班级:软工三班')


# 创建窗口
window = tk.Tk()
window.title('学生管理系统 V2.0')
window.geometry('600x380+480+135')
# 菜单栏
menubar = tk.Menu(window)
# 第一列
filemenu = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label='文件', menu=filemenu)
filemenu.add_command(label='打开', )
filemenu.add_command(label='保存', )
filemenu.add_command(label='退出', command=exit_105)
# 第二列
filemenu2 = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label='功能', menu=filemenu2)
filemenu2.add_command(label='添加', command=insert_105)
# 三级菜单
filemenu3 = tk.Menu(filemenu2, tearoff=0)
filemenu2.add_cascade(label='修改', menu=filemenu3)
filemenu3.add_command(label='修改一个学生', command=update_105)
filemenu3.add_command(label='批量修改学生', )
filemenu2.add_command(label='删除', command=delete_105)
# 第三列
menubar.add_cascade(label='关于', command=about_105)
window.config(menu=menubar)
# 主界面
# 学号
tk.Label(window, text='学号:', font=("微软雅黑", 10, "bold", "italic")).place(x=25, y=25)
id = tk.Entry(window, width=20, borderwidth=3)
id.place(x=75, y=25)
# 姓名
tk.Label(window, text='姓名:', font=("微软雅黑", 10, "bold", "italic")).place(x=230, y=25)
name = tk.Entry(window, width=20, borderwidth=3)
name.place(x=280, y=25)
# 性别
tk.Label(window, text='性别:', font=("微软雅黑", 10, "bold", "italic")).place(x=435, y=25)
sex = tk.Entry(window, width=10, borderwidth=3)
sex.place(x=485, y=25)
# 电话
tk.Label(window, text='电话:', font=("微软雅黑", 10, "bold", "italic")).place(x=25, y=75)
tel = tk.Entry(window, width=20, borderwidth=3)
tel.place(x=75, y=75)
# 地址
tk.Label(window, text='地址:', font=("微软雅黑", 10, "bold", "italic")).place(x=230, y=75)
address = tk.Entry(window, width=39, borderwidth=3)
address.place(x=280, y=75)
# 添加按钮
tk.Button(window, text='添加', bd=5, width=5, height=1, command=insert_105).place(x=50, y=130)
tk.Button(window, text='删除', bd=5, width=5, height=1, command=delete_105).place(x=200, y=130)
tk.Button(window, text='修改', bd=5, width=5, height=1, command=update_105).place(x=350, y=130)
tk.Button(window, text='退出', bd=5, width=5, height=1, command=exit_105).place(x=500, y=130)
# 添加滚动多行文本框
t = scrolledtext.ScrolledText(window, width=76, height=10)
t.place(x=25, y=200)
show_105()
tk.mainloop()
cur.close()
conn.close()

  • 10
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值