Redian新闻
>
用 Python 写了一个电子考勤系统!

用 Python 写了一个电子考勤系统!

公众号新闻

来源丨网络

今天给大家分享一个比较有意思的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 = []

加载数据

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 FalseNone

考勤记录写入

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

主函数main.py

from student.stu_attendance import *
if __name__ == '__main__':
    load_stu_info()
    success, stu_no = login()
    print(stu_no)
    if success:
        print('登录成功!')
        add(stu_no)
        q=int(input("你想要查询出勤数据吗?\tyes(1)--no(0)"))
        if q==1:
            select()
        else:
            print("欢迎下次登录电子考勤系统")
    else:
        print('登录失败')

看看运行效果哟!

来源:blog.csdn.net/weixin_47723732

万水千山总是情,点个 👍 行不行
·················END·················

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
Julia 和 Python,哪一个更快? | Linux 中国Python 3.11 正式版发布,比 3.10 快 10-60%,官方:这或许是最好的版本涨知识!Python 的异常信息还能这样展现Python程序化套利实战班字节大佬编写的这本《Python背记手册》,带我横扫互联网大厂秋招!4 步打包一个新的 Python 模块 | Linux 中国判例译析 | 保护生物识别数据:雇员没有义务使用指纹考勤系统生命的哀歌MNE/Python-fNIRS近红外数据处理中文手册硬核观察 #739 Python 虽然是最受欢迎的编程语言,但是找工作还是要会点 SQL60 个重要的 Python 小示例胡渊鸣:import 一个“太极”库,让 Python 代码提速100倍!火爆北美的少儿Python编程课免费领!藤校师资,竞赛AP两手抓!Python 3.11 正式版来了,比 3.10 快 10-60%硬核观察 #800 Python 3.11 发布:性能大幅提升Python之谜:四舍五入round(4.5)等于4?将你的 Python 脚本转换为命令行程序 | Linux 中国今后的法院, 法官穿不穿法袍? 敲不敲法槌?10个 Python 脚本来自动化你的日常任务如何在 Ubuntu 和其他相关 Linux 中安装 Python 3.10 | Linux 中国这几年学 Python 的感悟10 个 Python 脚本来自动化你的日常任务"叔叔建议我远离 Python,从汇编语言学起......"浣溪沙:云行捎信报安宁关于 Python 的文件操作详解由Sagnac效应看相对论卫道士们的混乱逻辑10个Python脚本来自动化你的日常任务Gunicorn 与 Python GIL如何为 Python 应用选择最好的 Docker 镜像?官方发布!最适合留学生快速上手的python教程来了【开源了】撸了一个电子文件签字+合同系统,爽!Python环境搭建手把手图文教程33 个 "不得不看" 的 Python 关键字总结!周作亿先生Python 3.11 终于发布了,性能大提升!
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。