python程序:学校考勤系统
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程序:学校考勤系统相关推荐
- 计算机毕业设计Python+uniapp学生考勤系统小程序(小程序+源码+LW)
计算机毕业设计Python+uniapp学生考勤系统小程序(小程序+源码+LW) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ pyth ...
- python登录教务系统_记python登陆学校教务系统踩过的坑
最近开发关于学校服务类小程序,小程序后台需要从学校的系统获取到各同学的信息,所以语言优先选择了python,并用了Django框架.之前也有写过一些爬虫,但都是用其他语言写的.对python并不熟悉, ...
- python人脸识别考勤系统 dlib+OpenCV和Pyqt5、数据库sqlite 人脸识别系统 计算机 毕业设计 源码
一.项目介绍 Python语言.dlib.OpenCV.Pyqt5界面设计.sqlite3数据库 本系统使用dlib作为人脸识别工具,dlib提供一个方法可将人脸图片数据映射到128维度的空间向量,如 ...
- python程序设置_Windows系统中设置Python程序定时运行方法
Windows系统中设置Python程序定时运行方法 一.环境 win7 + Python3.6 二.步骤 1,在Windows开始菜单中搜索"计划任务",并且点击打开" ...
- 在云服务器上执行C程序和python程序(centos系统)
一.所需工具 1.PuTTY 下载链接:PuTTY PuTTY是一个串行接口连接软件,多用于远程登录控制功能.PuTTY现在已从Windows系统版本发展到多系统通用版本,并且还能在某些手机上使用,让 ...
- 小白的第一个Python程序——成绩查询系统(一)
作为一个刚学习Python不久的小白,成长之路上的坑坑坎坎沟沟壑壑必不可少,在我完成我的第一个程序之后(或许并不能称为程序,因为它实在是漏洞百出),通过我的自我总结我发现,学习前人的经验是一个少走弯路 ...
- 以python程序调用的系统_python 系统调用的实例详解
python 系统调用的实例详解 本文将通过两种方法对python 系统调用进行讲解,包括python使用CreateProcess函数运行其他程序和ctypes模块的实例, 一 python使用Cr ...
- 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 ...
- 基于python人脸识别考勤系统(语音播报)
介绍: 本项目是大二寒假在家没事写的,一直没有时间讲本项目分享出来,现在有时间了哈.那就让我简单的将项目介绍一下吧.好了废话不多说了,直接上图 初始化界面: 可以看到所有的功能都展现在了左边的功能栏中 ...
最新文章
- 2020年电大c语言程序设计作业1答案,2019年最新电大C语言程序设计作业答案.doc
- html 列表循环_python web开发:内置标签与过滤器/循环/条件判断
- 开箱即用 - jwt 无状态分布式授权
- python如何引用txt_如何使用pip requirements.txt文件安装python模块附加组件
- cloudfoundry_在Cloudfoundry上部署RESTful服务
- linux服务器加入windows域时报错Ticket expired
- 高性能 php api 开发,ThinkPHP 3.2 性能优化,实现高性能API开发
- dubbo+rabbitmq+hystrix实现服务的高可用
- 11. CSS 文本属性
- 将Excel列表数据转换成html代码
- linux wav 转mp3,linux下wav转换为mp3
- 计算机表格计算公式加法,加法公式excel,excel表格如何用公式计算加减乘除混合运算?...
- ERP : 服装行业解决方案
- duilib入门教程
- 关于Pyrene-PEG2/PEG3/PEG4/PEG5-azide化学式,分子量等相关对比总结
- DM368串口通信调试
- 【科研记录】如何判断(你自己的)研究工作的价值
- odoo13 学习 Actions 动作的定义
- gz rar zip 7z bz2 tgz压缩率比较,以及做一些简单的关于压缩包介绍
- k8s数据持久化之statefulset的数据持久化,并自动创建PV与PVC