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


Posted in Python onFebruary 08, 2021

实验项目简介

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

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

学校现在需要实现一个电子考勤系统,考虑到你们班已经学过大数据应用开发语言Python,准备让你们实现部分学生端考勤功能。经过和老师的沟通,你了解到:
(1) 目前该系统已经被学长实现了部分功能,你们只需要完成剩余功能即可,需要你们完成的功能会使用
#todo的形式进行标注, todo后面会列出这个地方的功能,形式如下。

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

(2) 学生信息存储在stu_infos.csv文件中,第一行是列名行,后面每一行都是一个学生的信息,包含学号,姓名,密码。内容形式如下:

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

(3) 考勤记录最终会被保存到attendance.csv文件中,第一行是列名行,后面每一行代表一个学生的考勤信息,包含学号,姓名,时间,考勤状态(只有出勤、迟到、请假、缺勤四种状态)。内容格式如下:

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

(4) 学生信息需要首先被加载到student_infos列表中,student_info中的每个元素都是一个字典,字典中的键都是各自列名,而值则是每一行内容,按照示例数据构造出来的student_infos列表如下。

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

(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 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编写一个电子考勤系统

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

每文一语

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

到此这篇关于用Python编写一个电子考勤系统的文章就介绍到这了,更多相关用Python编写一个电子考勤系统内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python中的内置函数getattr()介绍及示例
Jul 20 Python
Python实现单词拼写检查
Apr 25 Python
python中requests使用代理proxies方法介绍
Oct 25 Python
python操作xlsx文件的包openpyxl实例
May 03 Python
对dataframe进行列相加,行相加的实例
Jun 08 Python
Python中numpy模块常见用法demo实例小结
Mar 16 Python
Xadmin+rules实现多选行权限方式(级联效果)
Apr 07 Python
Jupyter notebook 启动闪退问题的解决
Apr 13 Python
150行python代码实现贪吃蛇游戏
Apr 24 Python
python实现音乐播放和下载小程序功能
Apr 26 Python
Python基于字典实现switch case函数调用
Jul 22 Python
详解Python中的进程和线程
Jun 23 Python
python编程的核心知识点总结
Feb 08 #Python
python上下文管理器异常问题解决方法
Feb 07 #Python
python中@contextmanager实例用法
Feb 07 #Python
python tkinter实现下载进度条及抖音视频去水印原理
Feb 07 #Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 #Python
Python中全局变量和局部变量的理解与区别
Feb 07 #Python
Python抖音快手代码舞(字符舞)的实现方法
Feb 07 #Python
You might like
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
ajax请求get与post的区别总结
2013/11/04 Javascript
jQuery实现跨域
2015/02/03 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
2015/07/18 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
Vue实现一个返回顶部backToTop组件
2017/07/25 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
Bootstrap table表格初始化表格数据的方法
2018/07/25 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
python 处理dataframe中的时间字段方法
2018/04/10 Python
解读python logging模块的使用方法
2018/04/17 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
2020/03/10 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
大学生社会实践自我鉴定
2014/03/24 职场文书
优秀员工演讲稿
2014/05/19 职场文书
大一新生检讨书
2014/10/29 职场文书
小型婚礼主持词
2015/06/30 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书