main.py

'''
目标:做一个电子考勤系统,实现学生登录信息的增删改查、学生考勤信息的增删改查
结构:
-mian.py
-func.py
-stu_infos.csv  #学生登录信息,(id,name,code)   3元组为一行记录
-attendance.csv #考勤信息  (id,name,state, time) 4元组为一行记录
'''from func import *def login():info_dics = get_info('stu_infos')print("[School Attendance] 输入用户名和密码,你有3次机会!")for ii in range(3):id = input('[School Attendance] User ID:')code = input('[School Attendance] Code:')#print(id,code)if id in info_dics.keys():if info_dics[id][2] == code:return Trueprint("[School Attendance] 输入用户名和密码,你还有%d次机会!"%(3 - 1 - ii))return Falsedef load_stu_info():"""样例操作,正式可以改为root管理员登录,然后批量输入、更新、删除、查询等!:return:"""# 添加3个、删除1个、更改1个if 'stu_infos.csv' in os.listdir():os.remove('stu_infos.csv')add_info(['2020030303', 'yaoyao', '123456'], ['2020040404', '邓大飞', 'abcdef'], ['2020050505', '洛小小', '379379'])get_info('stu_infos')# 删除print(10 * '<<' + 'After deleting' + 10 * '>>')del_info(id=['2020030303'])get_info('stu_infos')# 更新print(10 * '<<' + 'After update' + 10 * '>>')update_info('stu_infos', id='2020030303', name='瑶瑶')update_info('stu_infos', id='2020040404', code='ABCDEF')get_info('stu_infos')if __name__ == '__main__':# todo 1 调用加载学生信息函数load_stu_info()# 登录成功,添加考勤记录success = login()if success :# todo 2 考勤数据添加功能while True:opr = input('[School Attendance] "新增、删除、查询、修改考勤或退出?输入add,del,get,update,quit"')if opr == 'add':in_ls = input('[School Attendance] 输入id,name,state,注意以,间隔')in_ls = in_ls.split(',')in_ls.append(fmt)add_info(in_ls, file = 'attendance', mode = 'a')get_info(file='attendance')elif opr =='del':in_ls = input('[School Attendance] 输入想要删除的记录id:')del_info('attendance', id = [in_ls])get_info('attendance')elif opr == 'get':get_info('attendance')elif opr == 'update':in_ls = input('[School Attendance] 输入想要更新的记录id, property [id, name or state],new value:')in_ls = in_ls.split(',')fd = in_ls[1]update_info('attendance', id_k=in_ls[0], **{in_ls[1]: in_ls[2]})get_info('attendance')elif opr == 'quit':print('[School Attendance] 成功退出,再见!')breakelse:print("[School Attendance] 登录失败,再见!")

func.py

import time
import csv
import os
import numpy as np
#import orderdictfmt = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime())
field_dic = {'stu_infos': ['id','name','code'],'attendance': ['id','name','state', 'time'],}def add_info( *record, file = 'stu_infos', mode = 'a',):"""增加csv的记录:param record: 可变记录参数,每个参数为一个列表,遵从field_dic格式:param file: 添加stu_infos或者attendance信息:param mode: 模式,'a'追加读写、'w','r'读写,‘x'新建:return: 无"""# csv的读写with open(file + '.csv', mode, newline='', encoding='utf-8') as f: #stu_infoswf = csv.writer(f)for rec in record:wf.writerow(rec)def get_info(file = 'stu_infos'):"""获取csv数据信息:param file: 选取文件:return: 数据字典,以学生id为key,3元祖或4元组为value"""print("\n" + file + " 包含:")#fields = field_dic[file]info_dic = {}with open(file + '.csv', newline='', encoding = 'utf-8') as fr:csvreader = csv.reader(fr)for row in csvreader:print(row) #调试用打印出来info_dic[row[0]] = row#print(info_dic)return info_dicdef del_info(file = 'stu_infos', id = [], ):"""以id号列表,制定删除列表中某记录:param file: csv文件:param id: 以id号制定删除的记录:return:"""info_dics = get_info(file)for ii in id:if ii in info_dics.keys():del info_dics[ii]else:print("[School Attendance] 查无此人!")#重新存储进去add_info(*list(info_dics.values()), file = file, mode = 'w')def update_info(file = 'stu_infos', id_k = '', **kwargs):'''逐条修改记录:param file::param id_k: 需要修改的id号,id_k和kwargs的id区分开:param kwargs: 需要修改的参数:return:'''info_dics = get_info(file)fields = field_dic[file]#print(info_dics, kwargs, id_k)if id_k in info_dics.keys():for (k,v) in kwargs.items():#print(fields, k)ind = np.argwhere(np.array(fields)==k)[0,0]ls = info_dics[id_k]ls[ind] = vinfo_dics[id_k] = ls#重新存储进去add_info(*list(info_dics.values()), file = file, mode = 'a')

登录输出

stu_infos 包含:
[‘2020030303’, ‘yaoyao’, ‘123456’]
[‘2020040404’, ‘邓大飞’, ‘abcdef’]
[‘2020050505’, ‘洛小小’, ‘379379’]
<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>
stu_infos 包含:
[‘2020030303’, ‘yaoyao’, ‘123456’]
[‘2020040404’, ‘邓大飞’, ‘abcdef’]
[‘2020050505’, ‘洛小小’, ‘379379’]
stu_infos 包含:
[‘2020040404’, ‘邓大飞’, ‘abcdef’]
[‘2020050505’, ‘洛小小’, ‘379379’]
<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>
stu_infos 包含:
[‘2020040404’, ‘邓大飞’, ‘abcdef’]
[‘2020050505’, ‘洛小小’, ‘379379’]
{‘2020040404’: [‘2020040404’, ‘邓大飞’, ‘abcdef’], ‘2020050505’: [‘2020050505’, ‘洛小小’, ‘379379’]} {‘name’: ‘瑶瑶’} 2020030303
stu_infos 包含:
[‘2020040404’, ‘邓大飞’, ‘abcdef’]
[‘2020050505’, ‘洛小小’, ‘379379’]
{‘2020040404’: [‘2020040404’, ‘邓大飞’, ‘abcdef’], ‘2020050505’: [‘2020050505’, ‘洛小小’, ‘379379’]} {‘code’: ‘ABCDEF’} 2020040404
[‘id’, ‘name’, ‘code’] code
stu_infos 包含:
[‘2020040404’, ‘邓大飞’, ‘ABCDEF’]
[‘2020050505’, ‘洛小小’, ‘379379’]
stu_infos 包含:
[‘2020040404’, ‘邓大飞’, ‘ABCDEF’]
[‘2020050505’, ‘洛小小’, ‘379379’]
[School Attendance] 输入用户名和密码,你有3次机会!
[School Attendance] User ID:>? 20200505
[School Attendance] Code:>? 379379
[School Attendance] 输入用户名和密码,你还有2次机会!
[School Attendance] User ID:>? 202020050505
[School Attendance] Code:>? 379379
[School Attendance] 输入用户名和密码,你还有1次机会!
[School Attendance] User ID:>? 2020050505
[School Attendance] Code:>? 3
[School Attendance] 输入用户名和密码,你还有0次机会!
[School Attendance] 登录失败,再见!

正常进行增、删、改、查,退出

stu_infos 包含:
[‘2020030303’, ‘yaoyao’, ‘123456’]
[‘2020040404’, ‘邓大飞’, ‘abcdef’]
[‘2020050505’, ‘洛小小’, ‘379379’]
<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>
stu_infos 包含:
[‘2020030303’, ‘yaoyao’, ‘123456’]
[‘2020040404’, ‘邓大飞’, ‘abcdef’]
[‘2020050505’, ‘洛小小’, ‘379379’]
stu_infos 包含:
[‘2020040404’, ‘邓大飞’, ‘abcdef’]
[‘2020050505’, ‘洛小小’, ‘379379’]
<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>
stu_infos 包含:
[‘2020040404’, ‘邓大飞’, ‘abcdef’]
[‘2020050505’, ‘洛小小’, ‘379379’]
{‘2020040404’: [‘2020040404’, ‘邓大飞’, ‘abcdef’], ‘2020050505’: [‘2020050505’, ‘洛小小’, ‘379379’]} {‘name’: ‘瑶瑶’} 2020030303
stu_infos 包含:
[‘2020040404’, ‘邓大飞’, ‘abcdef’]
[‘2020050505’, ‘洛小小’, ‘379379’]
[‘2020040404’, ‘邓大飞’, ‘abcdef’]
[‘2020050505’, ‘洛小小’, ‘379379’]
{‘2020040404’: [‘2020040404’, ‘邓大飞’, ‘abcdef’], ‘2020050505’: [‘2020050505’, ‘洛小小’, ‘379379’]} {‘code’: ‘ABCDEF’} 2020040404
stu_infos 包含:
[‘2020040404’, ‘邓大飞’, ‘abcdef’]
[‘2020050505’, ‘洛小小’, ‘379379’]
[‘2020040404’, ‘邓大飞’, ‘abcdef’]
[‘2020050505’, ‘洛小小’, ‘379379’]
[‘2020040404’, ‘邓大飞’, ‘ABCDEF’]
[‘2020050505’, ‘洛小小’, ‘379379’]
stu_infos 包含:
[‘2020040404’, ‘邓大飞’, ‘abcdef’]
[‘2020050505’, ‘洛小小’, ‘379379’]
[‘2020040404’, ‘邓大飞’, ‘abcdef’]
[‘2020050505’, ‘洛小小’, ‘379379’]
[‘2020040404’, ‘邓大飞’, ‘ABCDEF’]
[‘2020050505’, ‘洛小小’, ‘379379’]
[School Attendance] 输入用户名和密码,你有3次机会!
[School Attendance] User ID:>? 2020050505
[School Attendance] Code:>? 379379
[School Attendance] “新增、删除、查询、修改考勤或退出?输入add,del,get,update,quit”>? update
[School Attendance] 输入想要更新的记录id, property [id, name or state],new value:>? 2020050505,state,缺席
attendance 包含:
[‘2020040404’, ‘邓大力’, ’ 出勤’, ‘2020-12-30-14:57:31’]
{‘2020040404’: [‘2020040404’, ‘邓大力’, ’ 出勤’, ‘2020-12-30-14:57:31’]} {‘state’: ‘缺席’} 2020050505
attendance 包含:
[‘2020040404’, ‘邓大力’, ’ 出勤’, ‘2020-12-30-14:57:31’]
[‘2020040404’, ‘邓大力’, ’ 出勤’, ‘2020-12-30-14:57:31’]
[School Attendance] “新增、删除、查询、修改考勤或退出?输入add,del,get,update,quit”>? get
attendance 包含:
[‘2020040404’, ‘邓大力’, ’ 出勤’, ‘2020-12-30-14:57:31’]
[‘2020040404’, ‘邓大力’, ’ 出勤’, ‘2020-12-30-14:57:31’]
[School Attendance] “新增、删除、查询、修改考勤或退出?输入add,del,get,update,quit”>? del
[School Attendance] 输入想要删除的记录id:>? 2020040404
attendance 包含:
[‘2020040404’, ‘邓大力’, ’ 出勤’, ‘2020-12-30-14:57:31’]
[‘2020040404’, ‘邓大力’, ’ 出勤’, ‘2020-12-30-14:57:31’]
attendance 包含:
[School Attendance] “新增、删除、查询、修改考勤或退出?输入add,del,get,update,quit”>? get
attendance 包含:
[School Attendance] “新增、删除、查询、修改考勤或退出?输入add,del,get,update,quit”>? add
[School Attendance] 输入id,name,state,注意以,间隔>? 2020050505,dengdali,出勤
attendance 包含:
[‘2020050505’, ‘dengdali’, ‘出勤’, ‘2020-12-30-15:13:08’]
[School Attendance] “新增、删除、查询、修改考勤或退出?输入add,del,get,update,quit”>? update
[School Attendance] 输入想要更新的记录id, property [id, name or state],new value:>? 2020050505,name,邓大力
attendance 包含:
[‘2020050505’, ‘dengdali’, ‘出勤’, ‘2020-12-30-15:13:08’]
{‘2020050505’: [‘2020050505’, ‘dengdali’, ‘出勤’, ‘2020-12-30-15:13:08’]} {‘name’: ‘邓大力’} 2020050505
attendance 包含:
[‘2020050505’, ‘dengdali’, ‘出勤’, ‘2020-12-30-15:13:08’]
[‘2020050505’, ‘邓大力’, ‘出勤’, ‘2020-12-30-15:13:08’]
[School Attendance] “新增、删除、查询、修改考勤或退出?输入add,del,get,update,quit”>? quit
[School Attendance] 成功退出,再见!

summary

  • 简单的出勤系统,包括登录csv表,出勤attendance.csv表做“数据库”
  • 考察简单csv读写能力,csv.reader, .writer(), .writerow();注意newline,code定参数
  • 输入结构的组织,此处没有做鲁棒性、防卫性措施,比如update更新输入错误,如何检查和重输入;
  • 还欠缺logging和root登录,读者有兴趣可以自己添加

python程序:学校考勤系统相关推荐

  1. 计算机毕业设计Python+uniapp学生考勤系统小程序(小程序+源码+LW)

    计算机毕业设计Python+uniapp学生考勤系统小程序(小程序+源码+LW) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ pyth ...

  2. python登录教务系统_记python登陆学校教务系统踩过的坑

    最近开发关于学校服务类小程序,小程序后台需要从学校的系统获取到各同学的信息,所以语言优先选择了python,并用了Django框架.之前也有写过一些爬虫,但都是用其他语言写的.对python并不熟悉, ...

  3. python人脸识别考勤系统 dlib+OpenCV和Pyqt5、数据库sqlite 人脸识别系统 计算机 毕业设计 源码

    一.项目介绍 Python语言.dlib.OpenCV.Pyqt5界面设计.sqlite3数据库 本系统使用dlib作为人脸识别工具,dlib提供一个方法可将人脸图片数据映射到128维度的空间向量,如 ...

  4. python程序设置_Windows系统中设置Python程序定时运行方法

    Windows系统中设置Python程序定时运行方法 一.环境 win7 + Python3.6 二.步骤 1,在Windows开始菜单中搜索"计划任务",并且点击打开" ...

  5. 在云服务器上执行C程序和python程序(centos系统)

    一.所需工具 1.PuTTY 下载链接:PuTTY PuTTY是一个串行接口连接软件,多用于远程登录控制功能.PuTTY现在已从Windows系统版本发展到多系统通用版本,并且还能在某些手机上使用,让 ...

  6. 小白的第一个Python程序——成绩查询系统(一)

    作为一个刚学习Python不久的小白,成长之路上的坑坑坎坎沟沟壑壑必不可少,在我完成我的第一个程序之后(或许并不能称为程序,因为它实在是漏洞百出),通过我的自我总结我发现,学习前人的经验是一个少走弯路 ...

  7. 以python程序调用的系统_python 系统调用的实例详解

    python 系统调用的实例详解 本文将通过两种方法对python 系统调用进行讲解,包括python使用CreateProcess函数运行其他程序和ctypes模块的实例, 一 python使用Cr ...

  8. ubuntu20.10(Linux)在wine下用pyinstaller打包python程序在window系统运行 交叉编译

    1.安装wine 在终端中输入: sudo apt-get install wine 2.安装pip 在https://pypi.org/project/pip/#files下载pip-21.0.ta ...

  9. 基于python人脸识别考勤系统(语音播报)

    介绍: 本项目是大二寒假在家没事写的,一直没有时间讲本项目分享出来,现在有时间了哈.那就让我简单的将项目介绍一下吧.好了废话不多说了,直接上图 初始化界面: 可以看到所有的功能都展现在了左边的功能栏中 ...

最新文章

  1. 2020年电大c语言程序设计作业1答案,2019年最新电大C语言程序设计作业答案.doc
  2. html 列表循环_python web开发:内置标签与过滤器/循环/条件判断
  3. 开箱即用 - jwt 无状态分布式授权
  4. python如何引用txt_如何使用pip requirements.txt文件安装python模块附加组件
  5. cloudfoundry_在Cloudfoundry上部署RESTful服务
  6. linux服务器加入windows域时报错Ticket expired
  7. 高性能 php api 开发,ThinkPHP 3.2 性能优化,实现高性能API开发
  8. dubbo+rabbitmq+hystrix实现服务的高可用
  9. 11. CSS 文本属性
  10. 将Excel列表数据转换成html代码
  11. linux wav 转mp3,linux下wav转换为mp3
  12. 计算机表格计算公式加法,加法公式excel,excel表格如何用公式计算加减乘除混合运算?...
  13. ERP : 服装行业解决方案
  14. duilib入门教程
  15. 关于Pyrene-PEG2/PEG3/PEG4/PEG5-azide化学式,分子量等相关对比总结
  16. DM368串口通信调试
  17. 【科研记录】如何判断(你自己的)研究工作的价值
  18. odoo13 学习 Actions 动作的定义
  19. gz rar zip 7z bz2 tgz压缩率比较,以及做一些简单的关于压缩包介绍
  20. k8s数据持久化之statefulset的数据持久化,并自动创建PV与PVC

热门文章

  1. UE5 VR模板打包运行,Quit Game崩溃
  2. processing rotate
  3. 一个文艺的在线生成漂亮的二维码工具网站
  4. linux 显示系统空间不足,Linux系统boot空间不足解决办法
  5. C# 使用微软自带控件导出excel
  6. 玻色量子荣登《麻省理工科技评论》2021“50家聪明公司”榜单
  7. 多路访问链路和协议的简介
  8. gcc生成反汇编 linux_linux反汇编调试
  9. 小程序开发调用微信支付以及微信回调地址配置
  10. call、apply、bind的区别?(面试题-JavaScript部分)