您好,登錄后才能下訂單哦!
這篇文章主要介紹了怎么用Python編寫(xiě)一個(gè)電子考勤系統(tǒng),具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
學(xué)?,F(xiàn)在需要實(shí)現(xiàn)一個(gè)電子考勤系統(tǒng),考慮到你們班已經(jīng)學(xué)過(guò)大數(shù)據(jù)應(yīng)用開(kāi)發(fā)語(yǔ)言Python,準(zhǔn)備讓你們實(shí)現(xiàn)部分學(xué)生端考勤功能。經(jīng)過(guò)和老師的溝通,你了解到:
(1) 目前該系統(tǒng)已經(jīng)被學(xué)長(zhǎng)實(shí)現(xiàn)了部分功能,你們只需要完成剩余功能即可,需要你們完成的功能會(huì)使用
#todo的形式進(jìn)行標(biāo)注, todo后面會(huì)列出這個(gè)地方的功能,形式如下。
(2) 學(xué)生信息存儲(chǔ)在stu_infos.csv文件中,第一行是列名行,后面每一行都是一個(gè)學(xué)生的信息,包含學(xué)號(hào),姓名,密碼。內(nèi)容形式如下:
(3) 考勤記錄最終會(huì)被保存到attendance.csv文件中,第一行是列名行,后面每一行代表一個(gè)學(xué)生的考勤信息,包含學(xué)號(hào),姓名,時(shí)間,考勤狀態(tài)(只有出勤、遲到、請(qǐng)假、缺勤四種狀態(tài))。內(nèi)容格式如下:
(4) 學(xué)生信息需要首先被加載到student_infos列表中,student_info中的每個(gè)元素都是一個(gè)字典,字典中的鍵都是各自列名,而值則是每一行內(nèi)容,按照示例數(shù)據(jù)構(gòu)造出來(lái)的student_infos列表如下。
(5) 考勤系統(tǒng)老師端總共有兩個(gè)Python文件,一個(gè)main.py文件,該文件作為入口程序文件,實(shí)現(xiàn)主體框架,主體流程就是:加載數(shù)據(jù) 登錄 添加考勤數(shù)據(jù);一個(gè)stu_attendance.py文件,定義了數(shù)據(jù)加載、登錄等函數(shù)。
答題要求:
(1) 在stu_info.csv文件末尾添加一行自己的信息,密碼隨意寫(xiě),名字和學(xué)號(hào)必須是自己
(2) 查看兩個(gè)Python文件中的todo注釋?zhuān)砑雍线m代碼,最終提供添加的代碼。
(3) 測(cè)試程序功能,提供程序運(yùn)行截圖。進(jìn)行登錄驗(yàn)證的時(shí)候使用自己的學(xué)號(hào)進(jìn)行登錄驗(yàn)證,并且需要測(cè)試如下2個(gè)分支:3次都登錄失敗的情況、登錄成功后成功添加考勤數(shù)據(jù)。
附加功能
添加一個(gè)查詢(xún)功能,輸入一個(gè)學(xué)生的姓名就可以獲取他的出勤數(shù)據(jù)信息
導(dǎo)入模塊
import csv import time student_infos = []
加載數(shù)據(jù)
def load_stu_info(): """ 加載學(xué)生信息 從stu_infos.csv文件中加載數(shù)據(jù) :return: 無(wú) """ with open(r"stu_infos.csv", encoding='utf-8-sig') as file: f_csv = csv.reader(file) header = next(f_csv) for row in f_csv: student_info = {} for index in range(3): student_info[header[index]] = row[index] student_infos.append(student_info)
登錄
def login(): """ 用戶(hù)使用學(xué)號(hào)和密碼進(jìn)行登錄 最多讓用戶(hù)登錄三次,如果連續(xù)三次都登錄失?。ㄓ脩?hù)名或者密碼錯(cuò)誤),只要密碼和用戶(hù)都正確表示登錄成功 :return:登錄成功返回True和學(xué)號(hào),三次都登錄失敗返回False和None """ retry_time = 0 while retry_time < 3: user_no = input('請(qǐng)輸入登錄賬號(hào):') password = input('請(qǐng)輸入密碼:') for i in student_infos: if i['no']==user_no and i['password']==password: return True,user_no print('用戶(hù)名或者密碼錯(cuò)誤?。?!請(qǐng)重新輸入。') retry_time += 1 else: return False, None
考勤記錄寫(xiě)入
def add(user_no): for x in student_infos: if user_no==x['no']: name=x['name'] break times=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) choices=['出勤','遲到','請(qǐng)假','缺勤'] a=int(input("\t該學(xué)生出勤情況:1-出勤\t2-遲到\t3-請(qǐng)假\t4-缺勤:")) if a==1: data=choices[0] elif a==2: data=choices[1] elif a==3: data=choices[2] else: data=choices[3] with open(r"attendance.csv",'a+',newline='', encoding='utf-8') as f: wf = csv.writer(f) wf.writerow([user_no,name,times,data])#寫(xiě)入一行數(shù)據(jù) print("{}同學(xué){}數(shù)據(jù)已經(jīng)寫(xiě)入成功!操作時(shí)間是{}".format(name,data,times))
查詢(xún)考勤記錄
def select(): student = [] with open(r"attendance.csv", encoding='utf-8-sig') as file: f_csv = csv.reader(file) header = next(f_csv) for row in f_csv: students = {} for index in range(4): students[header[index]] = row[index] student.append(students) name=input("請(qǐng)輸入你需要查找的姓名:") print(" 學(xué)號(hào)\t\t姓名\t\t操作時(shí)間\t\t出勤狀態(tài)") for a in student: if a['name']==name: print(a['no']+'\t'+a['name']+'\t'+a['time']+'\t\t'+a['state']) else: print("無(wú)此人?。?!") break
主函數(shù)我就不給出了,有需要的可以自己編寫(xiě)一下,如果需要可以私信我或者在這里下載數(shù)據(jù)集和源碼喲?。?!
點(diǎn)擊下載!
看看運(yùn)行效果喲!
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“怎么用Python編寫(xiě)一個(gè)電子考勤系統(tǒng)”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。