项目简介
学校现在需要实现一个电子考勤系统,考虑到你们班已经学过大数据应用开发语言Python,准备让你们实现部分学生端考勤功能。经过和老师的沟通,你了解到:
(1) 目前该系统已经被学长实现了部分功能,你们只需要完成剩余功能即可,需要你们完成的功能会使用
#todo的形式进行标注, todo后面会列出这个地方的功能,形式如下。
(2) 学生信息存储在stu_infos.csv文件中,第一行是列名行,后面每一行都是一个学生的信息,包含学号,姓名,密码。内容形式如下:
(3) 考勤记录最终会被保存到attendance.csv文件中,第一行是列名行,后面每一行代表一个学生的考勤信息,包含学号,姓名,时间,考勤状态(只有出勤、迟到、请假、缺勤四种状态)。内容格式如下:
(4) 学生信息需要首先被加载到student_infos列表中,student_info中的每个元素都是一个字典,字典中的键都是各自列名,而值则是每一行内容,按照示例数据构造出来的student_infos列表如下。
(5) 考勤系统老师端总共有两个Python文件,一个main.py文件,该文件作为入口程序文件,实现主体框架,主体流程就是:加载数据 登录 添加考勤数据;一个stu_attendance.py文件,定义了数据加载、登录等函数。
答题要求
在stu_info.csv文件末尾添加一行自己的信息,密码随意写,名字和学号必须是自己
查看两个Python文件中的todo注释,添加合适代码,最终提供添加的代码。
测试程序功能,提供程序运行截图。进行登录验证的时候使用自己的学号进行登录验证,并且需要测试如下2个分支:3次都登录失败的情况、登录成功后成功添加考勤数据。
附加功能
添加一个查询功能,输入一个学生的姓名就可以获取他的出勤数据信息
导入模块
importcsv importtime student_infos=[]
加载数据
defload_stu_info(): """ 加载学生信息 从stu_infos.csv文件中加载数据 无 """ 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(): """ 用户使用学号和密码进行登录 最多让用户登录三次,如果连续三次都登录失败(用户名或者密码错误),只要密码和用户都正确表示登录成功 登录成功返回True和学号,三次都登录失败返回False和None """ retry_time=0 whileretry_time< 3: user_no = input('请输入登录账号:') password = input('请输入密码:') for i in student_infos: if i['no']==user_no and i['password']==password: return True,user_no print('用户名或者密码错误!!!请重新输入。') 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=['出勤','迟到','请假','缺勤'] a=int(input(" 该学生出勤情况:1-出勤 2-迟到 3-请假 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])#写入一行数据 print("{}同学{}数据已经写入成功!操作时间是{}".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("请输入你需要查找的姓名:") print("学号 姓名 操作时间 出勤状态") forainstudent: ifa['name']==name: print(a['no']+' '+a['name']+' '+a['time']+' '+a['state']) else: print("无此人!!!") break
主函数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("你想要查询出勤数据吗? yes(1)--no(0)")) ifq==1: select() else: print("欢迎下次登录电子考勤系统") else: print('登录失败')
看看运行效果哟!
审核编辑:汤梓红
-
python
+关注
关注
54文章
4763浏览量
84338 -
考勤系统
+关注
关注
0文章
40浏览量
11193
原文标题:用 Python 写了一个电子考勤系统
文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论