栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/839731.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号