項(xiàng)目簡(jiǎn)介
學(xué)校現(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ù)。
答題要求
在stu_info.csv文件末尾添加一行自己的信息,密碼隨意寫,名字和學(xué)號(hào)必須是自己
查看兩個(gè)Python文件中的todo注釋,添加合適代碼,最終提供添加的代碼。
測(cè)試程序功能,提供程序運(yùn)行截圖。進(jìn)行登錄驗(yàn)證的時(shí)候使用自己的學(xué)號(hào)進(jìn)行登錄驗(yàn)證,并且需要測(cè)試如下2個(gè)分支:3次都登錄失敗的情況、登錄成功后成功添加考勤數(shù)據(jù)。
附加功能
添加一個(gè)查詢功能,輸入一個(gè)學(xué)生的姓名就可以獲取他的出勤數(shù)據(jù)信息
導(dǎo)入模塊
importcsv importtime student_infos=[]
加載數(shù)據(jù)
defload_stu_info(): """ 加載學(xué)生信息 從stu_infos.csv文件中加載數(shù)據(jù) 無(wú) """ withopen(r"stu_infos.csv",encoding='utf-8-sig')asfile: f_csv=csv.reader(file) header=next(f_csv) forrowinf_csv: student_info={} forindexinrange(3): student_info[header[index]]=row[index] student_infos.append(student_info)
登錄
deflogin(): """ 用戶使用學(xué)號(hào)和密碼進(jìn)行登錄 最多讓用戶登錄三次,如果連續(xù)三次都登錄失?。ㄓ脩裘蛘呙艽a錯(cuò)誤),只要密碼和用戶都正確表示登錄成功 登錄成功返回True和學(xué)號(hào),三次都登錄失敗返回False和None """ retry_time=0 whileretry_time3: ????????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('用戶名或者密碼錯(cuò)誤!??!請(qǐng)重新輸入。') ????????retry_time?+=?1 ????else: ????????return?False,?None
考勤記錄寫入
defadd(user_no): forxinstudent_infos: ifuser_no==x['no']: name=x['name'] break times=time.strftime("%Y-%m-%d%H:%M:%S",time.localtime()) choices=['出勤','遲到','請(qǐng)假','缺勤'] a=int(input(" 該學(xué)生出勤情況:1-出勤 2-遲到 3-請(qǐng)假 4-缺勤:")) ifa==1: data=choices[0] elifa==2: data=choices[1] elifa==3: data=choices[2] else: data=choices[3] withopen(r"attendance.csv",'a+',newline='',encoding='utf-8')asf: wf=csv.writer(f) wf.writerow([user_no,name,times,data])#寫入一行數(shù)據(jù) print("{}同學(xué){}數(shù)據(jù)已經(jīng)寫入成功!操作時(shí)間是{}".format(name,data,times))
查詢考勤記錄
defselect(): student=[] withopen(r"attendance.csv",encoding='utf-8-sig')asfile: f_csv=csv.reader(file) header=next(f_csv) forrowinf_csv: students={} forindexinrange(4): students[header[index]]=row[index] student.append(students) name=input("請(qǐng)輸入你需要查找的姓名:") print("學(xué)號(hào) 姓名 操作時(shí)間 出勤狀態(tài)") forainstudent: ifa['name']==name: print(a['no']+' '+a['name']+' '+a['time']+' '+a['state']) else: print("無(wú)此人?。?!") break
主函數(shù)main.py
fromstudent.stu_attendanceimport* if__name__=='__main__': load_stu_info() success,stu_no=login() print(stu_no) ifsuccess: print('登錄成功!') add(stu_no) q=int(input("你想要查詢出勤數(shù)據(jù)嗎? yes(1)--no(0)")) ifq==1: select() else: print("歡迎下次登錄電子考勤系統(tǒng)") else: print('登錄失敗')
看看運(yùn)行效果喲!
審核編輯:湯梓紅
-
python
+關(guān)注
關(guān)注
56文章
4797瀏覽量
84727 -
考勤系統(tǒng)
+關(guān)注
關(guān)注
0文章
40瀏覽量
11215
原文標(biāo)題:用 Python 寫了一個(gè)電子考勤系統(tǒng)
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論