社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Java编程精选 • 2 年前 • 443 次点击  
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇


来源丨网络

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

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/151442
 
443 次点击