Python+tkinter+mysql实现简单的HR职位管理系统

一、数据表单设计

建立两张表,并录入数据:

hraccount表

Python+tkinter+mysql实现简单的HR职位管理系统_第1张图片

hraccount表中数据初始化:

Python+tkinter+mysql实现简单的HR职位管理系统_第2张图片 job表

Python+tkinter+mysql实现简单的HR职位管理系统_第3张图片

job表数据初始化:

Python+tkinter+mysql实现简单的HR职位管理系统_第4张图片

二、代码设计

import tkinter as tk
import tkinter.messagebox
import pymysql
from tkinter import ttk

def HR_in():
    global win
    win = tk.Tk()
    win.title('HR登陆页面')
    win.geometry('600x300')
    tk.Label(win).place(x=0, y=300)
    tk.Label(win, text='你好,HR!', font=30, bg='green').place(x=250, y=15)
    tk.Label(win, text='账号 :', font=10).place(x=130, y=60)
    tk.Label(win, text='密码 :', font=10).place(x=130, y=100)
    hr_id = tk.Entry(win, width=20, font=10)
    hr_id.place(x=230, y=60)
    hr_pwd = tk.Entry(win, width=20, font=10,show='*')
    hr_pwd.place(x=230, y=100)
    
    def main1():
        get_hrid=hr_id.get()
        get_hrpwd=hr_pwd.get()
        sql = "select HRID,password from hraccount where HRID= %s and password = %s"
        conn = pymysql.connect(host="127.0.0.1",user="root",password="root", database="职位管理系统", charset="utf8")
        cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
        rows = cursor.execute(sql, (get_hrid,get_hrpwd))
        
        if get_hrid == '' or get_hrpwd == '':
            tk.messagebox.showerror('Error', message='用户名或者密码为空')
        else:
            if rows != 0:
                hr_manage_job()
            else:
                tk.messagebox.showerror('Error', message='HR用户名或者密码错误')

    tk.Button(win, text='登陆职位系统', width=28, command=main1).place(x=230, y=160)
   
    win.mainloop()

#hr职位管理界面
def hr_manage_job():
    win_seeJob = tk.Toplevel()#不能二次用tk.Tk(),否则下面的style变不了
    win_seeJob.title('职位管理')
    win_seeJob.geometry('1600x1000')
    tk.Label(win_seeJob, text='职位编号').place(x=45, y=20)
    tk.Label(win_seeJob, text='职位名称').place(x=45, y=55)
    
    #treeview行高,供22行Treeview组件使用
    s = ttk.Style()
    s.configure('MyStyle.Treeview', rowheight=200)
    
    #表格,供22行Treeview组件使用
    frame1 = tk.Frame(win_seeJob)
    frame1.place(x=10,y=100,width=1500,height=700)
    
    #滚动条,供22行Treeview组件使用
    scrollBar = tk.Scrollbar(frame1)
    scrollBar.pack(side=tkinter.RIGHT,fill=tk.Y)
    
    columns = ('Jno','Jname','Jclass','Jaddress','Jsalaryin1month(k)','Salarynoin1Year','HighestEdu','Recruitingno','Deadline','Jdescription')
    treeview = ttk.Treeview(frame1, height=20,show='headings', columns=columns,yscrollcommand = scrollBar.set,style='MyStyle.Treeview')
    
    # 设置表的宽度
    treeview.column('Jno', width=80, anchor='center')
    treeview.column('Jname', width=230, anchor='center')
    treeview.column('Jclass', width=100, anchor='center')
    treeview.column('Jaddress', width=100, anchor='center')
    treeview.column('Jsalaryin1month(k)', width=70, anchor='center')
    treeview.column('Salarynoin1Year', width=70, anchor='center')
    treeview.column('HighestEdu', width=70, anchor='center')
    treeview.column('Recruitingno', width=70, anchor='center')
    treeview.column('Deadline', width=75, anchor='center')
    treeview.column('Jdescription', width=600, anchor='center')
    
    # 显示表头
    treeview.heading('Jno', text='职位编号')
    treeview.heading('Jname', text='职位名称')
    treeview.heading('Jclass', text='职位类别')
    treeview.heading('Jaddress', text='工作地点')
    treeview.heading('Jsalaryin1month(k)', text='月薪(K)')
    treeview.heading('Salarynoin1Year', text='一年几薪')
    treeview.heading('HighestEdu', text='最高学历')
    treeview.heading('Recruitingno', text='招聘人数')    
    treeview.heading('Deadline', text='截至日期') 
    treeview.heading('Jdescription', text='工作描述')
    treeview.pack(side=tk.LEFT,fill=tk.Y)
    scrollBar.config(command=treeview.yview)
       
    def sql_conn(sql):
        conn = pymysql.connect(host="127.0.0.1",user="root",password="root",database="职位管理系统",charset="utf8")
        cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
        cursor.execute(sql)
        ret = cursor.fetchall()
        cursor.close()
        conn.commit()
        conn.close()
        return ret
    
    def delete_tab(treeview):
        items = treeview.get_children()
        [treeview.delete(item) for item in items]

    def Jname_select():
        delete_tab(treeview)
        sql = "select * from job where Jname like '%" + e2.get() + "%' "
        list_job = sql_conn(sql)
        for i in range(len(list_job)):
            treeview.insert('', i, values=(list_job[i]['Jno'],list_job[i]['Jname'],list_job[i]['Jclass'],list_job[i]['Jaddress'],list_job[i]['Jsalaryin1month(k)'],list_job[i]['Salarynoin1Year'],list_job[i]['HighestEdu'],list_job[i]['Recruitingno'],list_job[i]['Deadline'],list_job[i]['Jdescription']))

    def Jno_select():
        delete_tab(treeview)
        sql = "select * from job where Jno = '" + e1.get() + "' "
        list_job = sql_conn(sql)
        for i in range(len(list_job)):
            treeview.insert('', i, values=(list_job[i]['Jno'],list_job[i]['Jname'],list_job[i]['Jclass'],list_job[i]['Jaddress'],list_job[i]['Jsalaryin1month(k)'],list_job[i]['Salarynoin1Year'],list_job[i]['HighestEdu'],list_job[i]['Recruitingno'],list_job[i]['Deadline'],list_job[i]['Jdescription']))
            
    def all_job():
        delete_tab(treeview)
        sql = 'select * from job'
        list_job = sql_conn(sql)           
        for i in range(len(list_job)):
            treeview.insert('', i, values=(list_job[i]['Jno'],list_job[i]['Jname'],list_job[i]['Jclass'],list_job[i]['Jaddress'],list_job[i]['Jsalaryin1month(k)'],list_job[i]['Salarynoin1Year'],list_job[i]['HighestEdu'],list_job[i]['Recruitingno'],list_job[i]['Deadline'],list_job[i]['Jdescription']))
    
    e1 =tk.Entry(win_seeJob, )
    e1.place(x=100, y=20)    
    e2 = tk.Entry(win_seeJob, )
    e2.place(x=100, y=55)
    tk.Button(win_seeJob, text='根据职位编号搜索', width=15, height=1, command=Jno_select).place(x=280, y=20)
    tk.Button(win_seeJob, text='根据职位名搜索', width=15, height=1, command=Jname_select).place(x=280, y=55)
    tk.Button(win_seeJob, text='显示所有', width=15, height=1, command=all_job).place(x=450, y=55)
    tk.Button(win_seeJob, text='职位变更管理', width=15, height=1,bg='green',command=manage_job).place(x=620, y=55)
    
    win_seeJob.mainloop()

#职位变更管理    
def manage_job():
    win_addResume = tk.Tk()
    win_addResume.title('职位变更管理')
    win_addResume.geometry('1200x800')
    tk.Label(win_addResume, text='职位变更管理',font=60).place(x=10, y=10)
    
    tk.Label(win_addResume, text='职位编号').place(x=220, y=70)
    tk.Label(win_addResume, text='职位名称',).place(x=220, y=130)
    tk.Label(win_addResume, text='职位类别',).place(x=220, y=190)
    tk.Label(win_addResume, text='工作地点', ).place(x=220, y=250)
    tk.Label(win_addResume, text='月薪(千)').place(x=220, y=310)
    tk.Label(win_addResume, text='一年几薪',).place(x=220, y=370)
    tk.Label(win_addResume, text='工作描述',).place(x=220, y=430)
    tk.Label(win_addResume, text='最高学历',).place(x=220, y=500)
    tk.Label(win_addResume, text='招聘人数',).place(x=220, y=570)
    tk.Label(win_addResume, text='截止日期',).place(x=220, y=630)
    tk.Label(win_addResume, text='对于工作描述内容,可提前编辑好复制粘贴!',font=30,).place(x=500, y=600)
 
    e1 = tk.Entry(win_addResume)
    e1.place(x=300, y=70)
    e2 = tk.Entry(win_addResume)
    e2.place(x=300, y=130)
    e3 = tk.Entry(win_addResume)
    e3.place(x=300, y=190)
    e4 = tk.Entry(win_addResume)
    e4.place(x=300, y=250)
    e5 = tk.Entry(win_addResume)
    e5.place(x=300, y=310)
    e6 = tk.Entry(win_addResume)
    e6.place(x=300, y=370)
    e7 = tk.Entry(win_addResume)
    e7.place(x=300, y=430)
    e8 = tk.Entry(win_addResume)
    e8.place(x=300, y=500)
    e9 = tk.Entry(win_addResume)
    e9.place(x=300, y=565)
    e10 = tk.Entry(win_addResume)
    e10.place(x=300, y=625)
 
    
    def sql_conn(sql):
        conn = pymysql.connect(host="127.0.0.1",user="root",password="root", database="职位管理系统", charset="utf8")
        cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
        cursor.execute(sql)
        ret = cursor.fetchall()
        cursor.close()
        conn.commit()
        conn.close()
        return ret
    
    #修改职位功能
    def alter():
        if e1.get() == ''or e9.get() == '' or e10.get() == ''   :
            tk.messagebox.showerror('警告', '请填写完整职位编号、招聘人数、截止日期!')
        else:
            sql = "update Job set Recruitingno = '" + e9.get() + "',Deadline = '" + e10.get() + "' where  Jno='" + e1.get() + "';"
            ret = sql_conn(sql)
            tk.messagebox.showinfo('', '修改成功!')
            
    #删除职位功能
    def delete():
        sql = "delete from Job where Jno='" + e1.get() + "';"
        ret = sql_conn(sql)
        tk.messagebox.showinfo('', '删除成功!')
            
    # 插入(增加职位)功能
    def insert():
        if e1.get() == '' or e2.get() == '' or e3.get() == ''or  e4.get() == '' or e5.get() == '' or e6.get() == '' or e7.get() == '' or e8.get() == '' or e9.get() == '' or e10.get() == '':
            tk.messagebox.showerror('警告', '请填写完整!')
        else:
            try:
                sql = "insert into Job values ('" + e1.get() + "','" + e2.get() + "','" + e3.get() + "','" + e4.get() + "','" + e5.get() + "','" + e6.get() + "','" + e7.get() + "','" + e8.get() + "','" + e9.get() + "','" + e10.get() + "')"
                ret = sql_conn(sql)
                tk.messagebox.showinfo('', '增加成功!')
            except:
                tk.messagebox.showerror('警告', '职位号已存在!')
   
    tk.Button(win_addResume, text='增加职位', width=30,font=('KaiTi', 20), height=3,bg='green',command=insert).place(x=600, y=100)
    tk.Button(win_addResume, text='输入职位编号,删除职位', width=30,font=('KaiTi', 20), height=3,command=delete).place(x=600, y=220)
    tk.Button(win_addResume, text='修改招聘人数和截止日期', width=30, font=('KaiTi', 20), height=3,command=alter).place(x=600, y=340)
    win_addResume.mainloop()

#调用
HR_in()

 三、运行测试

Python+tkinter+mysql实现简单的HR职位管理系统_第5张图片

 职位管理界面Python+tkinter+mysql实现简单的HR职位管理系统_第6张图片

 职位变更界面

Python+tkinter+mysql实现简单的HR职位管理系统_第7张图片

 如果HR和职位是一对多的关系呢,任取一个HR,可以管理多个职位,任取一个职位,只能被一个HR管理。这样的话,要在数据库表单多方(职位)设置外键为HRID。然后在程序设计中设置HRID为global变量,贯穿到整个程序的数据库增删查改(增加HRID条件)即可。这个需要实现的可以留言,未来更新。

有什么问题欢迎评论区讨论!!

你可能感兴趣的:(python,mysql,开发语言)