Python实现学生电子考勤系统:从数据加载到查询功能详解
本文详细介绍如何使用Python编写一个基于CSV文件的学生电子考勤系统。内容涵盖学生信息的加载、基于学号和密码的登录验证机制(含三次重试逻辑)、考勤数据的写入以及按姓名查询出勤记录的功能实现。通过解析main.py与stu_attendance.py两个核心文件,帮助开发者掌握基础的数据持久化与交互逻辑。
实验项目简介
实验项目简介


系统需求与功能范围
学校计划开发一套电子考勤系统,鉴于班级已掌握大数据应用开发语言Python,现安排学生完成部分学生端考勤功能模块。经与指导教师沟通确认:目前系统已由往届学长实现部分基础功能,本次任务仅需补充剩余功能。需完成的功能点将在代码中以#todo形式标注,并在其后说明具体功能要求。

数据文件结构说明
学生基础数据存储在stu_infos.csv文件中。该文件首行为列名,后续每一行对应一名学生的详细信息,字段包括学号、姓名及密码。具体数据格式示例如下:

考勤记录最终保存至attendance.csv文件。首行为列名,后续各行记录学生的考勤详情,包含学号、姓名、考勤时间及状态。考勤状态仅限四种:出勤、迟到、请假、缺勤。数据格式示例如下:

程序启动时,需将学生信息加载至student_infos列表。该列表中的每个元素为字典,键对应CSV列名,值对应行数据。基于示例数据构建的student_infos列表结构如下:

系统架构与核心文件
考勤系统教师端包含两个Python文件:main.py作为入口程序,负责构建主体框架与流程,核心逻辑包括加载数据、用户登录及添加考勤数据;stu_attendance.py则定义了数据加载、登录验证等关键函数。
开发任务与测试要求
答题具体要求如下: (1)在stu_info.csv文件末尾追加一行个人数据,密码可自定义,但名字和学号必须真实准确。 (2)检查两个Python文件中的todo注释,补充相应代码,并提交最终添加的代码片段。 (3)测试程序功能并提交运行截图。登录验证环节需使用个人学号,且必须测试以下两种分支场景:连续3次登录失败的情况,以及登录成功后成功添加考勤数据的情况。
附加功能:考勤查询
附加功能
新增查询模块,支持输入学生姓名以获取其完整的出勤数据信息。
核心功能代码实现
导入模块
import csv
import time
student_infos = []
加载数据
def load_stu_info():
"""
加载学生信息
从stu_infos.csv文件中加载数据
:return: 无
"""
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():
"""
用户使用学号和密码进行登录
最多让用户登录三次,如果连续三次都登录失败(用户名或者密码错误),只要密码和用户都正确表示登录成功
:return:登录成功返回True和学号,三次都登录失败返回False和None
"""
retry_time = 0
while retry_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
考勤记录写入
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=['出勤','迟到','请假','缺勤']
a=int(input("\t该学生出勤情况:1-出勤\t2-迟到\t3-请假\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])#写入一行数据
print("{}同学{}数据已经写入成功!操作时间是{}".format(name,data,times))
查询考勤记录
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("请输入你需要查找的姓名:")
print(" 学号\t\t姓名\t\t操作时间\t\t出勤状态")
for a in student:
if a['name']==name:
print(a['no']+'\t'+a['name']+'\t'+a['time']+'\t\t'+a['state'])
else:
print("无此人!!!")
break
源码获取与总结
主函数代码未在此列出,读者可自行编写。如需获取完整数据集及源码,可私信联系作者或访问指定链接下载。
点击下载!
看看运行效果哟!




每文一语
创作的思路来源于生活中细微的品味,勿骄勿躁,才是王道
到此这篇关于用Python编写一个电子考勤系统的文章就介绍到这了,更多相关用Python编写一个电子考勤系统内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









