1

好的,所以我最近为我的公司编写了一个基于 python 的打孔时钟程序来替换他们旧的纸和邮票打孔卡系统。
这个想法是每个人都可以在早上进门,因此我们使用连接到门内 Surface Pro 的 RFID 阅读器来打卡。读卡器经过编程,可以读取卡片并发出“返回”事件。当它命中时,它会触发它刚刚输入()的数字,以针对返回相应名称( )EmpID的 SQLite 表()运行。然后,与and一起用作不同 table( ) 的输入。和值也显示在带有命令的输入框下方的文本中。EmpsEmpNameEmpNameSwipestheDatetheTimeEmpNametheTime.Update()

它..主要工作。当不同的卡在读卡器上运行时,它会切换名称,但不会改变时间。当我使用 SQLiteStudio 检查数据库时,我的条目已经完成,但它们都共享相同的时间戳。
这是前端代码的片段:

import pysimplegui as sg
import datetime
import TimeclockBackEnd as be

layout = [[sg.Text('Swipe Your Card')],
          [sg.InputText(size=(6,1), key='IN', focus=True)],
          [sg.Text('', key='theName', size=(45,1))],
          [sg.Text('', key='theTime', size=(45,1))],
          [sg.Button('', key='RETURN', visible=False, bind_return_key=True)],

window = sg.Window('Clock!', layout)
rightNow = datetime.datetime.now()
theTime = rightNow.strftime("%H:%M:%S")
theDate = rightNow.strftime("%Y-%m-%d")

while True :
    event, value = window.Read()
    cardNumber = value['IN']
    if event is None:
        break 
    elif event is 'RETURN':
        nameOfSwiper = be.Swipe(cardNumber)
        be.submitToDB(nameOfSwiper, theDate, theTime)
        window['theName'].Update(nameOfSwiper)
        window['theTime'].Update(theTime)
        window['IN'].Update('')

这是它在后端(be)中调用的代码:

def Swipe(EmpID):
    con = sqlite3.connect('Timeclock.db')
    cur = con.cursor()
    cur.execute("SELECT EmpName FROM Emps WHERE EmpID=?", (EmpID,))
    returnedValue = cur.fetchall()
    con.commit()
    con.close()
    delisted = ''.join(map(str, returnedValue))
    stripped = str(delisted).strip('()')
    strippedAgain = str(stripped).strip(',')
    swiperName = str(strippedAgain).strip("''")
    return swiperName
def submitToDB(EmpName, theDate, theTime):
    con = sqlite3.connect('Timeclock.db')
    cur = con.cursor()
    cur.execute("INSERT INTO Swipes VALUES (?, ?, ?)", (EmpName, theDate, theTime))
    con.commit()
    con.close()

同样,它可以很好地写入数据库,我唯一遇到的问题是如何theTime从初始滑动时设置的值不变。这是代码的主要工作部分,但如果您在这里没有发现任何问题,请随时检查我的 github,我已经得到了完整的内容。
感谢您的帮助!

4

0 回答 0