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

建立添加区域A1

检测工号,姓名,性别,出生,职位是否正确。

建立A1窗口

 def A1():
    r1=Tk()
    r1.title('添加')
    r1.geometry('370x270+300+100')
    b1=Label(r1,text='工号')
    b1.place(x=60,y=20)
    e1=Entry(r1)
    e1.place(x=200,y=20,width=120,height=20)
    b2=Label(r1, text='姓名')
    b2.place(x=60,y=50)
    e2=Entry(r1)
    e2.place(x=200,y=50,width=120,height=20)
    b3=Label(r1, text='性别')
    b3.place(x=60,y=80)
    e3=Entry(r1)
    e3.place(x=200,y=80,width=120,height=20)
    b4=Label(r1, text='出生日期')
    b4.place(x=60,y=110)
    e4=Entry(r1)
    e4.place(x=200,y=110,width=120,height=20)
    b5=Label(r1, text='职位')
    b5.place(x=60,y=140)
    e5=Entry(r1)
    e5.place(x=200,y=140,width=120,height=20)
    button1=Button(r1,text='  添加  ',command=lambda :tianjia())
    button1.place(x=60,y=180,width=120,height=50)
    button2=Button(r1, text='  返回  ',command=r1.destroy)
    button2.place(x=200,y=180,width=120,height=50)
    r1.mainloop()
A1()

button1=Button(r1,text=' 添加 ',command=lambda :tianjia())这个匿名函数要做的就是检测与添加。

先用数组代替,最后完整代码连接sql

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

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

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

ayy=[array1,array2,array3]

  1. 获取得到的信息,然后对每个数据进行检测

        gh=e1.get()
        xm=e2.get()
        xb=e3.get()
        cs=e4.get()
        zw=e5.get()
  1. 建立正则表达式处理出生日期

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]|1[01])  (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)
   #正则表达式,匹配出生日期
  1. 匹配每项数据

将待处理的数据放在一个list中【list=[gh,xm,xb,cs,zw]】只是为了数据对齐,可以不设

定义四项初值,检测结束全为真则执行添加否则添加失败重新添加【tgh,txb,tcs,tzw=1,1,1,1

若有相同工号则弹框提示工号重复,工号小于0大于9999则工号错误

        for i in ayy:
            if int(list[0])<0 or int(list[0])>9999:
                tgh=0
                messagebox.showinfo('error','工号错误')
                break
            if i[0]==list[0]:
                tgh=0
                messagebox.showinfo('issue','工号重复')
                break

判断性别是否在男女中,出生是否正确,职位是否在给定的职位中,第四条if则为真执行添加

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 tgh and txb and tcs and tzw:
    ayy.append(list)
#print(ayy)打印出已存在的数据

第四行有个错误发现了吗,输入199708271不仅能通过正则表达式的匹配还能通过这里的if,添加

!len(cs)==8 检测长度错误

添加成功则清框,添加失败则不清框,这个操作就要放在上面的第4个if下执行清框操作

    def clear():
        e1.delete(0,END)
        e2.delete(0,END)
        e3.delete(0,END)
        e4.delete(0,END)
        e5.delete(0,END)

到此添加新人的基本要求就结束了,将数组更换为连接数据库的样子

from tkinter import messagebox  # 消息框模块
import re  # 导入正则表达式模块
import pyodbc  # 导入数据库模块
from tkinter import *  # 窗口模块
list_zw=['AI','CX','II','HR','HQ','CW','IS']
def A1():  # 添加
    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]|1[01])  (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)  # 建立正则表达式用来匹配1900年到2022年的出生日期

    def clear():  # 清空输入框
        e1.delete(0, END)
        e2.delete(0, END)
        e3.delete(0, END)
        e4.delete(0, END)
        e5.delete(0, END)

    def tianjia():
        tgh, txb, tcs, tzw = 1, 1, 1, 1  # 设置初始值为均为真
        co = pyodbc.connect('DRIVER={sql server};SERVER=127.0.0.1;DATABASE=rsgldb')  # 连接数据库
        youbiao = co.cursor()  # 建立数据库的游标
        sql = "select * from rs"  # 数据库的程序语句
        youbiao.execute(sql)  # 执行数据库的语句
        arr = youbiao.fetchone()  # 游标下移
        gh = e1.get()  # 得到输入的工号
        if int(gh)<0:
            messagebox.showinfo('issue', '工号错误')
        while arr:
            if arr[0] == gh:  # 判断输入的工号是否与数据库中的工号相重复,若重复则置为0并跳出该循环
                tgh = 0
                messagebox.showinfo('issue', '工号重复')  # 弹出错误提示框
                break
            arr = youbiao.fetchone()
        # 从输入框得到姓名,性别,出生日期,和职位
        xm = e2.get()
        xb = e3.get()
        cs = e4.get()
        zw = e5.get()
        # list=[gh,xm,xb,cs,zw]
        if xb not in ['男', '女']:  # 判断性别
            txb = 0
            messagebox.showinfo('提示', '性别错误')
        if (not a.search(cs) )or (len(cs)!=8):  # 利用正则式匹配出生
            # 程序需要添加如果输入的不是8位
            tcs = 0
            messagebox.showinfo('issue', '出生错误')
        # if zw not  ['AI', 'CX', 'II', 'HR', 'HQ', 'CW', 'IS']:  # 设定该公司的部门
        if zw not in list_zw:  # 设定该公司的部门
            tzw = 0
            messagebox.showinfo('提示', '职位错误')
        if tgh and txb and tcs and tzw:  # 工号,性别,出生,职位,均没错则执行
            sql2 = "insert rs values('{0}','{1}','{2}','{3}','{4}')".format(gh, xm, xb, cs, zw)  # 向人事管理数据库的人事表中插入此人
            youbiao.execute(sql2)  # 执行sql语句
            co.commit()  # 提交该语句,以达到数据库数据同步
            youbiao.close()  # 关闭游标
            co.close()  # 关闭数据库连接
            messagebox.showinfo('提示', '添加成功')
            clear()#添加失败才会清框
        #clear()  # 点击添加后自动清空输入框,不管添加成功还是失败

    # 添加的布局,其余布局均参照该布局,b1相距此窗口横距(左边框)为60px,相距上距(上边框)为20px,e1横距为200px,上距为20px,
    # 后面的每行横距均与b1行对齐,且每行的高度为20px
    # 每行相距10px
    r1 = Tk()
    r1.title('添加')
    r1.geometry('370x270+300+100')
    b1 = Label(r1, text='工号')
    b1.place(x=60, y=20)
    e1 = Entry(r1)
    e1.place(x=200, y=20, width=120, height=20)
    b2 = Label(r1, text='姓名')
    b2.place(x=60, y=50)
    e2 = Entry(r1)
    e2.place(x=200, y=50, width=120, height=20)
    b3 = Label(r1, text='性别')
    b3.place(x=60, y=80)
    e3 = Entry(r1)
    e3.place(x=200, y=80, width=120, height=20)
    b4 = Label(r1, text='出生日期')
    b4.place(x=60, y=110)
    e4 = Entry(r1)
    e4.place(x=200, y=110, width=120, height=20)
    b5 = Label(r1, text='职位')
    b5.place(x=60, y=140)
    e5 = Entry(r1)
    e5.place(x=200, y=140, width=120, height=20)
    button1 = Button(r1, text='  添加  ', command=lambda: tianjia())
    button1.place(x=60, y=180, width=120, height=50)
    button2 = Button(r1, text='  返回  ', command=r1.destroy)  # 关闭此窗口,返回主窗口
    button2.place(x=200, y=180, width=120, height=50)
    r1.mainloop()
A1()

添加成功会有一个弹窗,然后打开sql->新建查询->

use rsgldb
go
select * from rs

执行【选中要执行的代码】之后就能看到添加进去的成员

数据库学的不好,如果有更快的检测语句,欢迎指出

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值