pythonSJK课设

from tkinter import *
from tkinter import ttk
import tkinter.messagebox
import pymysql
from PIL import Image, ImageTk

# 添加logo为背景图
page = 0  # 全局变量page用于存储当前显示信息的页码
who = 0  # 全局变量who用于区别身份


def button2_clicked():
    global who
    who = 1
    page = 0
    display_current_page()


data_in = None


# 用于显示所有信息
def display(i, data):
    global data_in
    data_in = data
    listbox1.delete(0, END)
    listbox2.delete(0, END)
    listbox3.delete(0, END)
    listbox4.delete(0, END)
    listbox5.delete(0, END)
    listbox6.delete(0, END)
    for d in data:
        if i == 1:
            listbox1.insert(END, '员工')
        else:
            listbox1.insert(END, '经理')
        listbox2.insert(END, d[0])
        listbox3.insert(END, d[1])
        listbox4.insert(END, d[2])
        listbox5.insert(END, d[3])
        listbox6.insert(END, d[4])


# 用于显示下一页的信息
def display_next_page():
    global page, who, mode
    if mode == 1:
        tkinter.messagebox.showwarning(title='warning', message='已经是最后一页!')
        return None
    page += 1
    if who == 1:
        cursor.execute("select * from employee limit %d,%d" % (page * 20, page * 20 + 20))
        data = cursor.fetchall()
        display(who, data)
    else:
        cursor.execute("select * from manager limit %d,%d" % (page * 20, page * 20 + 20))
        data = cursor.fetchall()
        display(who, data)


def button_next_page_clicked():
    display_next_page()


# 用于显示前一页的信息
def display_previous_page():
    global page, who, mode
    if mode == 1:
        tkinter.messagebox.showwarning(title='warning', message='已经是第一页!')
        return None
    page -= 1
    page = max(page, 0)
    if who == 1:
        cursor.execute("select * from employee limit %d,%d" % (page * 20, page * 20 + 20))
        data = cursor.fetchall()
        display(who, data)
    else:
        cursor.execute("select * from manager limit %d,%d" % (page * 20, page * 20 + 20))
        data = cursor.fetchall()
        display(who, data)


# 用于选择显示何种信息(employee/manager)
def display_current_page():
    global page, who, mode, using_name
    page = page
    if mode == 0:
        if who == 1:
            cursor.execute("select * from employee limit %d,%d" % (page * 20, page * 20 + 20))
            data = cursor.fetchall()
            display(who, data)
        else:
            cursor.execute("select * from manager limit %d,%d" % (page * 20, page * 20 + 20))
            data = cursor.fetchall()
            display(who, data)
    elif mode == 1:
        cursor.execute('select dept from manager where id ={}'.format(int(using_name)))
        manager_dept = cursor.fetchall()
        real_dept = str(manager_dept[0][0])
        # print('select * from employee where dept = "%s"'%(real_dept))
        cursor.execute('select * from employee where dept = "%s"' % (real_dept))
        data = cursor.fetchall()
        display(who, data)
    # cursor.execute()


def button_manager_clicked():
    global who, page
    who = 0
    page = 0
    display_current_page()


# listbox为空格数目
# 实现删除功能
def button_delete_clicked():
    indexs1 = listbox1.curselection()
    indexs2 = listbox2.curselection()
    indexs3 = listbox3.curselection()
    indexs4 = listbox4.curselection()
    indexs5 = listbox5.curselection()
    indexs6 = listbox6.curselection()

    index = -1
    if len(indexs1) > 0:
        index = indexs1[0]
    elif len(indexs2) > 0:
        index = indexs2[0]
    elif len(indexs3) > 0:
        index = indexs3[0]
    elif len(indexs4) > 0:
        index = indexs4[0]
    elif len(indexs5) > 0:
        index = indexs5[0]
    elif len(indexs6) > 0:
        index = indexs6[0]

    if index == -1:
        tkinter.messagebox.showerror("Error", "未选择要删除的数据")

    delete_id = listbox2.get(index, index)
    delete_who = listbox1.get(index, index)
    if delete_who[0] == "员工":
        cursor.execute("delete from employee where id = %d" % int(delete_id[0]))
        database.commit()
        display_current_page()
    else:
        cursor.execute("delete from manager where id = %d" % int(delete_id[0]))
        database.commit()
        display_current_page()


# print(delete_id)

# 实现添加信息功能
def button_add_clicked():
    global mode, using_name
    index = combobox_2.current()
    if index < 0:
        tkinter.messagebox.showerror("Error", "请选择身份")
        return None

    add_id = entry4.get().strip()
    if len(add_id) <= 0:
        tkinter.messagebox.showerror("Error", "请输入工号")
        return None
    try:
        add_id = int(add_id)
    except Exception as e:
        tkinter.messagebox.showerror("Error", "输入工号错误")
        return None

    add_name = entry5.get().strip()
    if len(add_name) <= 0:
        tkinter.messagebox.showerror("Error", "请输入名字")
        return None

    add_gender = combobox_3.current()
    if add_gender < 0:
        tkinter.messagebox.showerror("Error", "请选择性别")
        return None

    add_age = entry7.get().strip()
    if len(add_age) <= 0:
        tkinter.messagebox.showerror("Error", "请输入年龄")
        return None
    try:
        add_age = int(add_age)
    except Exception as e:
        tkinter.messagebox.showerror("Error", "年龄输入错误")
        return None

    add_dept = entry8.get().strip()
    if mode == 1:
        cursor.execute('select dept from manager where id ={}'.format(int(using_name)))
        manager_dept = cursor.fetchall()
        real_dept = str(manager_dept[0][0])
        if real_dept != add_dept:
            tkinter.messagebox.showerror("Error", "抱歉,您没有该部门的操作权限!")
            return None
    if len(add_dept) <= 0:
        tkinter.messagebox.showerror("Error", "请输入部门")
        return None
    if index == 0:
        cursor.execute('select * from employee where id = %d' % add_id)
        data = cursor.fetchall()
        if len(data) > 0:
            tkinter.messagebox.showerror("Error", "该id已存在")
            return None
        cursor.execute('insert into employee(id,name,gender,age,dept) values(%d,"%s","%s",%d,"%s")' % (
        add_id, add_name, "男" if add_gender == 0 else "女", add_age, add_dept))
        database.commit()
        display_current_page()
    else:
        cursor.execute('select * from manager where id = %d' % add_id)
        data = cursor.fetchall()
        if len(data) > 0:
            tkinter.messagebox.showerror("Error", "该id已存在")
            return None
        cursor.execute('insert into manager(id,name,gender,age,dept) values(%d,"%s","%s",%d,"%s")' % (
        add_id, add_name, "男" if add_gender == 0 else "女", add_age, add_dept))
        database.commit()
        display_current_page()


'''_____________________________________________________________________________'''

# 连接database,解决编码问题
# 程序执行后在mysql中进行查询会发现中文无法正常显示,这是因为在安装mysql时未选择Mysql Server Instance Config Wizard,而机房电脑可以显示正常
database = pymysql.connect(host='localhost', user='root', password='666666', database='employee_system',
                           charset='gb2312')
cursor = database.cursor()
if database.open == False:
    raise Exception("数据库未连接,请检查数据库服务是否启动")
cursor.execute('use employee_system')

mode = -1
# 实现登录功能
using_name = ""


def button_login_clicked():
    global mode
    global using_name
    index = combobox_login.current()
    username_input = entry1.get().strip()
    using_name = username_input
    password_input = entry2.get().strip()
    print(index, username_input, password_input)
    if index == -1:
        tkinter.messagebox.showerror("错误", "请选择你的登陆身份")
    elif len(username_input) == 0 or len(password_input) == 0:
        tkinter.messagebox.showerror("错误", "请输入用户名和密码")
    else:
        if index == 0:
            cursor.execute(
                'select * from admin where user_name = "%s" and password = "%s"' % (username_input, password_input))
            if (len(cursor.fetchall()) > 0):
                print("已成功登录")
                myWindow.destroy()
                mode = 0

            else:
                tkinter.messagebox.showerror("错误", "用户名或密码错误")
        if index == 1:
            cursor.execute('select * from manager_login where user_name = "%s" and password = "%s"' % (
            username_input, password_input))
            if (len(cursor.fetchall()) > 0):
                print("已成功登录")
                myWindow.destroy()
                mode = 1
            else:
                tkinter.messagebox.showerror("错误", "用户名或密码错误")
        if index == 2:
            cursor.execute('select * from employee_login where user_name = "%s" and password = "%s"' % (
            username_input, password_input))
            if (len(cursor.fetchall()) > 0):
                print("已成功登录")
                myWindow.destroy()
                mode = 2
            else:
                tkinter.messagebox.showerror("错误", "用户名或密码错误")


# 实现修改功能
def button_change_clicked():
    indexs1 = listbox1.curselection()
    indexs2 = listbox2.curselection()
    indexs3 = listbox3.curselection()
    indexs4 = listbox4.curselection()
    indexs5 = listbox5.curselection()
    indexs6 = listbox6.curselection()
    print(indexs1, indexs2, indexs3, indexs4, indexs5, indexs6)
    index = -1
    if len(indexs1) > 0:
        index = indexs1[0]
    elif len(indexs2) > 0:
        index = indexs2[0]
    elif len(indexs3) > 0:
        index = indexs3[0]
    elif len(indexs4) > 0:
        index = indexs4[0]
    elif len(indexs5) > 0:
        index = indexs5[0]
    elif len(indexs6) > 0:
        index = indexs6[0]
    if index == -1:
        tkinter.messagebox.showerror("错误", "请选择要修改的数据")
    change_id = listbox2.get(index, index)[0]
    change_who = listbox1.get(index, index)[0]

    change_name = entry11.get().strip()
    change_age = entry22.get().strip()
    change_grade = entry33.get().strip()
    index = combobox_22.current()

    if len(change_name) > 0:
        if (change_who == "员工"):
            try:
                change_id = int(change_id)
            except Exception as e:
                tkinter.messagebox.showerror("错误", "输入错误")
                return None
            cursor.execute('update employee set name = "%s" where id = %d' % (change_name, change_id))
            database.commit()
            display_current_page()
        else:
            try:
                change_id = int(change_id)
            except Exception as e:
                tkinter.messagebox.showerror("错误", "输入错误")
                return None
            cursor.execute('update manager set name = "%s" where id = %d' % (change_name, change_id))
            database.commit()
            display_current_page()

    if len(change_age) > 0:
        if (change_who == "员工"):
            try:
                change_age = int(change_age)
            except Exception as e:
                tkinter.messagebox.showerror("错误", "输入错误")
                return None
            cursor.execute('update employee set age = "%s" where id = %d' % (int(change_age), int(change_id)))
            database.commit()
            display_current_page()
        else:
            try:
                change_age = int(change_age)
            except Exception as e:
                tkinter.messagebox.showerror("错误", "输入错误")
                return None
            cursor.execute('update manager set age = "%s" where id = %d' % (int(change_age), int(change_id)))
            database.commit()
            display_current_page()
    if len(change_grade) > 0:
        if (change_who == "员工"):
            try:
                change_grade = change_grade
            except Exception as e:
                tkinter.messagebox.showerror("错误", "输入错误")
                return None
            cursor.execute('update employee set dept = "%s" where id = %d' % (change_grade, int(change_id)))
            database.commit()
            display_current_page()
        else:
            try:
                change_grade = change_grade
            except Exception as e:
                tkinter.messagebox.showerror("错误", "输入错误")
                return None

            cursor.execute('update manager set dept = "%s" where id = %d' % (change_grade, int(change_id)))
            database.commit()
            display_current_page()
    if index != -1:
        if (change_who == "员工"):
            cursor.execute(
                'update employee set gender = "%s" where id = %d' % ("男" if index == 0 else "女", int(change_id)))
            database.commit()
            display_current_page()
        else:
            cursor.execute(
                'update manager set gender = "%s" where id = %d' % ("男" if index == 0 else "女", int(change_id)))
            database.commit()
            display_current_page()


# 实现搜索功能
def button_search_clicked():
    global using_name
    index = combobox_1.current()
    content = entry1.get().strip()

    if index == -1:
        tkinter.messagebox.showerror("错误", "请选择搜索依据")
        return None
    if len(content) == 0:
        tkinter.messagebox.showerror("错误", "请输入搜索内容")
        return None
    if index == 0:
        try:
            search_id = int(content)
        except Exception as e:
            tkinter.messagebox.showerror("Error", "请输入正确id")
            return None
        if mode == 0:
            cursor.execute('select * from employee where id = %d' % search_id)
            data1 = cursor.fetchall()
            cursor.execute('select * from manager where id = %d' % search_id)
            data2 = cursor.fetchall()
        else:
            cursor.execute('select dept from manager where id ={}'.format(int(using_name)))
            manager_dept = cursor.fetchall()
            real_dept = str(manager_dept[0][0])
            cursor.execute(
                'select * from (select * from employee where dept = "%s") as new_emp where new_emp.id = %d' % (
                real_dept, search_id))
            data1 = cursor.fetchall()
            data2 = cursor.fetchall()

        listbox1.delete(0, END)
        listbox2.delete(0, END)
        listbox3.delete(0, END)
        listbox4.delete(0, END)
        listbox5.delete(0, END)
        listbox6.delete(0, END)
        for d in data1:
            listbox1.insert(END, '员工')
            listbox2.insert(END, d[0])
            listbox3.insert(END, d[1])
            listbox4.insert(END, d[2])
            listbox5.insert(END, d[3])
            listbox6.insert(END, d[4])

        for d in data2:
            listbox1.insert(END, '经理')
            listbox2.insert(END, d[0])
            listbox3.insert(END, d[1])
            listbox4.insert(END, d[2])
            listbox5.insert(END, d[3])
            listbox6.insert(END, d[4])
    if index == 1:
        if mode == 0:
            cursor.execute('select * from employee where name = "%s"' % content)
            data1 = cursor.fetchall()
            cursor.execute('select * from manager where name = "%s"' % content)
            data2 = cursor.fetchall()
        else:
            cursor.execute('select dept from manager where id ={}'.format(int(using_name)))
            manager_dept = cursor.fetchall()
            real_dept = str(manager_dept[0][0])
            # 必须为嵌套查询的内部表设置别名(as new_emp)
            cursor.execute(
                'select * from (select * from employee where dept = "%s") as new_emp where new_emp.name = "%s"' % (
                real_dept, content))
            data1 = cursor.fetchall()
            data2 = cursor.fetchall()

        listbox1.delete(0, END)
        listbox2.delete(0, END)
        listbox3.delete(0, END)
        listbox4.delete(0, END)
        listbox5.delete(0, END)
        listbox6.delete(0, END)
        for d in data1:
            listbox1.insert(END, '员工')
            listbox2.insert(END, d[0])
            listbox3.insert(END, d[1])
            listbox4.insert(END, d[2])
            listbox5.insert(END, d[3])
            listbox6.insert(END, d[4])

        for d in data2:
            listbox1.insert(END, '经理')
            listbox2.insert(END, d[0])
            listbox3.insert(END, d[1])
            listbox4.insert(END, d[2])
            listbox5.insert(END, d[3])
            listbox6.insert(END, d[4])


def get_image(file_name, width, height):
    im = Image.open(file_name).resize((width, height))
    return ImageTk.PhotoImage(im)


# 界面设置
# 初始化Tk()
myWindow = Tk()
# 设置标题
myWindow.title('公司员工信息管理系统')
myWindow.geometry('1080x600')

# 插入背景图片
canvans_myWindow = Canvas(myWindow, width=720, height=385)
# 此处为设置登录界面背景图片,需替换成自己所需的文件及路径
im_root = get_image('D:\MySQL\Beijin.png', 720, 385)
canvans_myWindow.create_image(400, 200, image=im_root)
canvans_myWindow.pack()

# 创建一个标签,显示文本,定义字体,宽,高,位置
Label(myWindow, text="用户名:", font=('Arial 12 bold'), width=10, height=1).place(relx=0.10, rely=0.75)
Label(myWindow, text="密码:", font=('Arial 12 bold'), width=10, height=1).place(relx=0.10, rely=0.85)
Label(myWindow, text="登陆身份:", font=('Arial 12 bold'), width=10, height=1).place(relx=0.10, rely=0.65)

combobox_login = ttk.Combobox(myWindow, values=['管理员', '经理', '员工'], width=17)
combobox_login.place(relx=0.45, rely=0.65)

button_login = Button(text='登陆', relief='raised', command=button_login_clicked)
button_login.place(relx=0.5, rely=0.92)

entry1 = Entry(myWindow)
entry2 = Entry(myWindow, show='*')
entry1.place(relx=0.45, rely=0.75)
entry2.place(relx=0.45, rely=0.85)
# 进入消息循环
myWindow.mainloop()

"""
# 设置员工操作页面
def employee_click():
    content = entry111.get()
    if len(content) == 0:
        tkinter.messagebox.showerror("Error", "请输入新密码!")

    cursor.execute('update employee_login set password= "%s" where user_name="%s"' % (content, using_name))
    database.commit()
    tkinter.messagebox.showinfo(title='修改密码', message="密码修改完成,请牢记新密码!")


# 设置经理修改密码功能
def manager_click():
    content = entry_update.get()
    if len(content) == 0:
        tkinter.messagebox.showerror("Error", "请输入新密码!")

    cursor.execute('update manager_login set password= "%s" where user_name="%s"' % (content, using_name))
    database.commit()
    tkinter.messagebox.showinfo(title='修改密码', message="密码修改完成,请牢记新密码!")
"""

# 设置管理员操作页面
if mode == 0:
    print("已进入系统")
    page = 0
    who = 1
    # 初始化Tk()
    myWindow = Tk()
    # 设置标题
    myWindow.title('管理员界面')
    myWindow.geometry('1280x640')
    # 创建一个标签,显示文本
    Label(myWindow, text="搜索选项:", font=('Arial 12 bold'), width=10, height=1).grid(column=0, row=0)
    combobox_1 = ttk.Combobox(myWindow, values=['按工号搜索', '按姓名搜索'], width=17)
    combobox_1.grid(column=1, row=0)

    Label(myWindow, text="搜索关键字:", font=('Arial 12 bold'), width=10, height=1).grid(column=2, row=0)
    entry1 = Entry(myWindow)
    entry1.grid(column=3, row=0)
    # 将各功能按键与函数绑定
    button1 = Button(text='搜索', relief='raised', command=button_search_clicked)
    button1.grid(column=4, row=0)

    button2 = Button(text='显示所有员工信息', relief='raised', command=button2_clicked)
    button2.grid(column=5, row=0)

    button3 = Button(text='显示所有经理信息', relief='raised', command=button_manager_clicked)
    button3.grid(column=6, row=0)

    Label(myWindow, text=" ", font=('Arial 12 bold'), width=4, height=1).grid(column=0, row=1)

    Label(myWindow, text="身份", font=('Arial 12 bold'), width=10, height=1).grid(column=0, row=2)
    listbox1 = Listbox(myWindow, height=20, selectmode="browse", font=('Arial 12 bold'))
    listbox1.grid(column=0, row=3)

    Label(myWindow, text="工号", font=('Arial 12 bold'), width=10, height=1).grid(column=1, row=2)
    listbox2 = Listbox(myWindow, height=20, selectmode="browse", font=('Arial 12 bold'))
    listbox2.grid(column=1, row=3)

    Label(myWindow, text="姓名", font=('Arial 12 bold'), width=10, height=1).grid(column=2, row=2)
    listbox3 = Listbox(myWindow, height=20, width=10, selectmode="browse", font=('Arial 12 bold'))
    listbox3.grid(column=2, row=3)

    Label(myWindow, text="性别", font=('Arial 12 bold'), width=10, height=1).grid(column=3, row=2)
    listbox4 = Listbox(myWindow, height=20, width=5, selectmode="browse", font=('Arial 12 bold'))
    listbox4.grid(column=3, row=3)

    Label(myWindow, text="年龄", font=('Arial 12 bold'), width=10, height=1).grid(column=4, row=2)
    listbox5 = Listbox(myWindow, height=20, width=8, selectmode="browse", font=('Arial 12 bold'))
    listbox5.grid(column=4, row=3)

    Label(myWindow, text="部门", font=('Arial 12 bold'), width=10, height=1).grid(column=5, row=2)
    listbox6 = Listbox(myWindow, height=20, width=8, selectmode="browse", font=('Arial 12 bold'))
    listbox6.grid(column=5, row=3)

    Label(myWindow, text='身份无法修改', font=('Arial 12 bold'), width=10, height=1).grid(column=0, row=4)
    Label(myWindow, text='工号无法修改', font=('Arial 12 bold'), width=10, height=1).grid(column=1, row=4)
    entry11 = Entry(myWindow)
    entry11.grid(column=2, row=4)
    combobox_22 = ttk.Combobox(myWindow, values=['男', '女'], width=17)
    combobox_22.grid(column=3, row=4)
    entry22 = Entry(myWindow)
    entry22.grid(column=4, row=4)
    entry33 = Entry(myWindow)
    entry33.grid(column=5, row=4)
    button4 = Button(text='修改', relief='raised', command=button_change_clicked)
    button4.grid(column=6, row=4)

    combobox_2 = ttk.Combobox(myWindow, values=['员工', '经理'], width=17)
    combobox_2.grid(column=0, row=5)

    entry4 = Entry(myWindow)
    entry4.grid(column=1, row=5)
    entry5 = Entry(myWindow)
    entry5.grid(column=2, row=5)
    combobox_3 = ttk.Combobox(myWindow, values=['男', '女'], width=17)
    combobox_3.grid(column=3, row=5)
    entry7 = Entry(myWindow)
    entry7.grid(column=4, row=5)
    entry8 = Entry(myWindow)
    entry8.grid(column=5, row=5)

    button5 = Button(text='添加', relief='raised', command=button_add_clicked)
    button5.grid(column=6, row=5)

    button6 = Button(text='删除', relief='raised', command=button_delete_clicked)
    button6.grid(column=6, row=6)

    button7 = Button(text='上一页', relief='raised', command=display_previous_page)
    button7.grid(column=3, row=7)

    button8 = Button(text='下一页', relief='raised', command=button_next_page_clicked)
    button8.grid(column=4, row=7)

    # 进入消息循环
    myWindow.mainloop()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值