如何用python做考勤_用Python编写一个电子考勤系统

实验项目简介

学校现在需要实现一个电子考勤系统,考虑到你们班已经学过大数据应用开发语言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文件,定义了数据加载、登录等函数。

答题要求:

(1) 在stu_info.csv文件末尾添加一行自己的信息,密码随意写,名字和学号必须是自己

(2) 查看两个Python文件中的todo注释,添加合适代码,最终提供添加的代码。

(3) 测试程序功能,提供程序运行截图。进行登录验证的时候使用自己的学号进行登录验证,并且需要测试如下2个分支:3次都登录失败的情况、登录成功后成功添加考勤数据。

附加功能

添加一个查询功能,输入一个学生的姓名就可以获取他的出勤数据信息

导入模块

import csv

import time

student_infos = []1

2

3

加载数据

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)1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

登录

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, None1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

考勤记录写入

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))1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

查询考勤记录

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("无此人!!!") break1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

主函数我就不给出了,有需要的可以自己编写一下,如果需要可以私信我或者在这里下载数据集和源码哟!!!

看看运行效果哟!

每文一语

创作的思路来源于生活中细微的品味,勿骄勿躁,才是王道

文章来源: blog.csdn.net,作者:王小王-123,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_47723732/article/details/111712325

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的考勤系统Python代码: ```python import datetime class Student: def __init__(self, name, id): self.name = name self.id = id self.attendance = {} def mark_attendance(self): date = datetime.date.today() self.attendance[date] = True class AttendanceSystem: def __init__(self): self.students = [] def add_student(self, student): self.students.append(student) def mark_attendance(self, student_id): for student in self.students: if student.id == student_id: student.mark_attendance() print(f"{student.name} has been marked present on {datetime.date.today()}") break if __name__ == "__main__": attendance_system = AttendanceSystem() s1 = Student("John", 1) s2 = Student("Jane", 2) attendance_system.add_student(s1) attendance_system.add_student(s2) attendance_system.mark_attendance(1) attendance_system.mark_attendance(2) ``` 这段代码定义了两个类:`Student` 和 `AttendanceSystem`。`Student` 类代表一个学生,包含学生的姓名、ID 号和考勤记录。`AttendanceSystem` 类代表整个考勤系统,包含学生列表和标记考勤的方法。 在 `Student` 类中,定义了一个 `mark_attendance()` 方法,用于将学生的考勤记录标记为出席。在 `AttendanceSystem` 类中,定义了一个 `mark_attendance()` 方法,用于根据学生 ID 查找学生,并调用其 `mark_attendance()` 方法标记出席。 在主函数中,创建了一个 `AttendanceSystem` 对象,并添加了两个学生对象。然后调用 `mark_attendance()` 方法标记这两个学生的出席记录。 当你运行这段代码时,输出会是这样的: ``` John has been marked present on 2021-06-15 Jane has been marked present on 2021-06-15 ``` 这代表着这两个学生已经被成功标记为出席。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值