python建立简单的人事管理系统(三)

该代码示例演示了一个使用Tkinter创建的GUI应用,用于在没有实际数据库连接的情况下展示和修改员工信息。用户输入工号进行查询,然后在文本框中显示和修改姓名、性别、出生日期和职位。信息验证功能检查性别和职位的有效性。当连接到数据库时,代码能查询rs表,更新员工记录,并处理可能出现的错误。
摘要由CSDN通过智能技术生成

修改信息

没有连接数据库的做法

设立初始列表

array1 = ['1', '许佳琪', '男', '19990824', "IS"]

array2 = ['2', 'c', '女', '19980615', 'CX']

array3 = ['3', '张鹏辉', '男', '19990621', 'II']

ayy = [array1, array2, array3]

修改框的窗口,设置位置,用那个位置函数都不要紧,主要是提交的数据,A2框的位置控件可以参考连接数据库的位置布局,是一样的。【主要获取信息和打印信息,会了这些基本就能完成这个项目】

暂时做不到动态查询信息,只能添加查询按钮,在输入工号后查询出来的基础上进行修改

将工号对应的其他四项信息反到窗口控件Entry上,

  def xcxg():  # 查询,将输入的工号
        tgh = bc.get()#得到工号
        for i in ayy:#循环初始化数据
            if tgh  == i[0] :#看每个人的信息的工号是否与tgh相符,相符执行以下操作
                e1['text'] = i[0]#e1设置的是Label,不可更改,每次查询覆盖上次数据
                e2.delete(0, END)#每次查询均会清空e2,e3,e4,e5的数据
                e3.delete(0, END)
                e4.delete(0, END)
                e5.delete(0, END)

                e2.insert(0, i[1])#插入信息到Entry控件
                e3.insert(0, i[2])
                e4.insert(0, i[3])
                e5.insert(0, i[4])

然后提交更改后的数据,判断条件和添加新人的判断条件一样,弹框信息与添加那里的一样,工号因为是获取的所以不用判断

def xiugai():
        tgh = bc.get()
        for i in ayy:
            if tgh == i[0] :
                txb, tcs, tzw = 1, 1, 1
                xm = e2.get()
                xb = e3.get()
                cs = e4.get()
                zw = e5.get()
                if xb not in ['男', '女']:
                    txb = 0
                    messagebox.showinfo('提示', '性别错误')
                if not a.search(cs[:8]):
                    tcs = 0
                    messagebox.showinfo('issue', '出生错误')
                if zw not in ['AI', 'CX', 'II', 'HR', 'HQ', 'CW', 'IS']:
                    tzw = 0
                    messagebox.showinfo('提示', '职位错误')
                if txb and tcs and tzw:
                    i[1] = xm
                    i[2] = xb
                    i[3] = cs
                    i[4] = zw
        print(ayy)#打印修改后的数据

输入1 ,点击查询,修改下面的四项,比如修改职位为CW,点击修改

可以看到输出的列表许佳琪的职位变成了CW

连接到数据库的代码【rggldb数据库->rs表,[127.0.0.1]本地连接】

import re  # 导入正则表达式模块
import pyodbc  # 导入数据库模块
from tkinter import *  # 窗口模块
from tkinter import messagebox  # 消息框模块
# 工号为主键不可进行更改,公司的部门有['AI','CX','II','HR','HQ','CW','IS']
list_zw=['AI','CX','II','HR','HQ','CW','IS']
def A2():  # 修改
    a = re.compile(r'''((19[0-9]{2}|20[01][0-9]|202[012])     #1900-2022
                      ((0[13578]|1[02]) (0[1-9]|[12][0-9]|3[01])|
                     (0[469] | 11)  (0[1-9]|[12][0-9]|30)|
                     (02(0[1-9]|1[0-9]|2[0-8]))))|
                     (((19|20)(0[48]|[2468][048]|[13579][26])|
                     ((0[48]|[2468][048]|[3579][26])00))0229)
        ''', re.VERBOSE)
    def xcxg():  # 查询,将要修改的工号人的信息查询并显示
        ghxm = bc.get()
        co = pyodbc.connect('DRIVER={sql server};SERVER=127.0.0.1;DATABASE=rsgldb')
        yb = co.cursor()
        s = "select * from rs"
        yb.execute(s)
        arr = yb.fetchone()
        while arr:
            if ghxm == arr[0]:
                e1['text'] = arr[0]  # 显示工号,不可更改
                e2.delete(0, END)  # 删除输入框的内容
                e3.delete(0, END)
                e4.delete(0, END)
                e5.delete(0, END)

                e2.insert(0, arr[1])  # 向输入框插入修改后的内容
                e3.insert(0, arr[2])
                e4.insert(0, arr[3])
                e5.insert(0, arr[4])
            arr = yb.fetchone()
        yb.close()
        co.close()

    def xiugai():
        ghxm = bc.get()
        co = pyodbc.connect('DRIVER={sql server};SERVER=127.0.0.1;DATABASE=rsgldb')
        yb = co.cursor()
        txb, tcs, tzw = 1, 1, 1
        xm = e2.get()
        xb = e3.get()
        cs = e4.get()
        zw = e5.get()
        if xb not in ['男', '女']:
            txb = 0
            messagebox.showinfo('提示', '性别错误')
        if not a.search(cs[:8]):
            tcs = 0
            messagebox.showinfo('issue', '出生错误')
        if zw not in list_zw:
            tzw = 0
            messagebox.showinfo('提示', '职位错误')
        if txb and tcs and tzw:  # 性别,出生,职位均为真为执行sql的修改语句
            sql = "update rs set 姓名='{0}',性别='{1}',出生日期='{2}',职位='{3}' where 工号='{4}'".format(xm, xb, cs, zw, ghxm)
            yb.execute(sql)
            co.commit()
            yb.close()
            co.close()
            messagebox.showinfo('提示','修改成功')

    r2 = Tk()
    r2.title('修改')
    r2.geometry('370x320+300+100')
    b = Label(r2, text='输入你的工号')
    b.place(x=60, y=20)
    bc = Entry(r2)
    bc.place(x=200, y=20, width=120, height=20)
    button = Button(r2, text="查询", bg='#f00000', command=lambda: xcxg())  # 设置查询功能,并标红此按钮
    button.place(x=60, y=50)
    l1 = Label(r2, text='更改数据')
    l1.place(x=220, y=50)
    b1 = Label(r2, text='工号')
    b1.place(x=60, y=80)
    e1 = Label(r2, )
    e1.place(x=200, y=80)
    b2 = Label(r2, text='姓名')
    b2.place(x=60, y=110)
    e2 = Entry(r2)
    e2.place(x=200, y=110, width=120, height=20)
    b3 = Label(r2, text='性别')
    b3.place(x=60, y=140)
    e3 = Entry(r2)
    e3.place(x=200, y=140, width=120, height=20)
    b4 = Label(r2, text='出生日期')
    b4.place(x=60, y=170)
    e4 = Entry(r2)
    e4.place(x=200, y=170, width=120, height=20)
    b5 = Label(r2, text='职位')
    b5.place(x=60, y=200)
    e5 = Entry(r2)
    e5.place(x=200, y=200, width=120, height=20)
    button1 = Button(r2, text='  修改  ', command=lambda: xiugai())
    button1.place(x=60, y=240, width=120, height=50)
    button2 = Button(r2, text='  返回  ', command=r2.destroy)
    button2.place(x=200, y=240, width=120, height=50)
    r2.mainloop()
A2()
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值