700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python OpenCV开发MR智能人脸识别打卡系统(五 程序入口设计与测试)

Python OpenCV开发MR智能人脸识别打卡系统(五 程序入口设计与测试)

时间:2023-07-12 05:53:27

相关推荐

Python OpenCV开发MR智能人脸识别打卡系统(五 程序入口设计与测试)

需要源码请点赞关注收藏后评论区留言私信~~~

整体系统讲解如下

Python OpenCV开发MR智能人脸识别打卡系统(一、需求分析与系统设计)

Python OpenCV开发MR智能人脸识别打卡系统(二、文件系统、数据实体模块设计)

Python OpenCV开发MR智能人脸识别打卡系统(三、工具模块设计)

Python OpenCV开发MR智能人脸识别打卡系统(四、服务模块设计)

main.py是整个程序的入口文件,负责在控制台中打印菜单界面,用户通过指令可以使用系统中的全部功能,包括打卡、员工管理等等,所以会有大量指令判断逻辑

下面详细介绍里面的代码

1:用户权限管理

系统中处理打卡和退出两项功能可以随意使用,其他菜单都需要管理员权限才能使用,用户选中查看记录,员工管理和考勤报表菜单,系统会验证用户身份,如果不是管理员身份就会弹出管理员登录提示,用户输入正确的账号和密码才可以继续使用这些功能

login为管理员登录方法,该方法弹出输入管理员账号和密码的提示,如果用户输入账号为字符串0,则认为用户取消了登录操作

def login():while True:username = input("请输入管理员账号(输入0取消操作):")if username == "0": # 如果只输入0return # 结束方法passowrd = input("请输入管理员密码:")if hr.valid_user(username.strip(), passowrd.strip()): # 校验账号密码global ADMIN_LOGIN # 读取全局变量ADMIN_LOGIN = True # 设置为管理员已登录状态print(username + "登录成功!请选择重新选择功能菜单")breakelse:print("账号或密码错误,请重新输入!")print("---------------------------")

2:主菜单设计

start方法是程序的启动方法,在初始化方法执行完毕后执行,该方法在控制台中打印程序的主功能菜单,效果如下图所示

此时用户需要先输入菜单对应的数字,再按Enter键进入具体功能菜单中,如果用户输入的数字不再功能菜单中,则提示指令有误,请用户重新输入

用户需登录管理员账号才能使用员工管理功能

start方法具体代码如下

# 启动方法def start():finish = False # 程序结束标志menu = """+--------------------------------------------------+| 主功能菜单 |+--------------------------------------------------+①打卡 ②查看记录 ③员工管理 ④考勤报表 ⑤退出---------------------------------------------------"""while not finish:print(menu) # 打印菜单option = input("请输入菜单序号:")if option == "1": # 如果选择“打卡”face_clock() # 启动人脸打卡elif option == "2": # 如果选择“查看记录”if ADMIN_LOGIN: # 如果管理员已登录check_record() # 进入查看记录方法else:login() # 先让管理员登录elif option == "3": # 如果选择“员工管理”if ADMIN_LOGIN:employee_management() # 进入员工管理方法else:login()elif option == "4": # 如果选择“考勤报表”if ADMIN_LOGIN:check_report() # 进入考勤报表方法else:login()elif option == "5": # 如果选择“退出”finish = True # 确认结束,循环停止else:print("输入的指令有误,请重新输入!")print("Bye Bye !")hr.load_emp_data() # 数据初始化tital = """****************************************************MR智能视频打卡系统****************************************************"""print(tital) # 打印标题start() # 启动程序

3:人脸打卡功能

face_clock是人脸打卡的功能执行方法,该方法调用摄像头工具模块提供的打卡方法,此时只要用户面向摄像头,摄像头即可自动扫描人脸并识别特征,如果镜头中的人脸符合某个员工的特征,则会返回该员工姓名,然后调用人事服务模块为此员工添加打卡记录

打卡者需正向面对镜头

def face_clock():print("请正面对准摄像头进行打卡")name = camera.clock_in() # 开启摄像头,返回打卡员工名称if name is not None: # 如果员工名称有效hr.add_lock_record(name) # 保存打卡记录print(name + " 打卡成功!")

4:为新员工登记人脸照片样本

employee_management方法是员工管理功能的执行方法,该方法在控制台打印员工管理功能菜单,输入菜单对应的数字,再按Enter键进入具体功能菜单中

录入新员工的过程

5:删除员工全部数据

如果用户输入的验证码正确,那么该员工的全部信息都会被删除,验证码错误则不会删除,数据不会丢失

删除员工操作的过程

def employee_management():menu = """+-------------------------------------------------+|员工管理功能菜单 |+-------------------------------------------------+①录入新员工 ②删除员工 ③返回上级菜单---------------------------------------------------"""while True:print(menu) # 打印菜单option = input("请输入菜单序号:")if option == "1": # 如果选择“录入新员工”name = str(input("请输入新员工姓名(输入0取消操作):")).strip()if name != "0": # 只要输入的不是0code = hr.add_new_employee(name) # 人事服务添加新员工,并获得该员工的特征码print("请面对摄像头,敲击三次回车键完成拍照!")camera.register(code) # 打开摄像头为员工照相print("录入成功!")# return # 退出员工管理功能菜单elif option == "2": # 如果选择“删除员工”# show_employee_all() # 展示员工列表print(hr.get_employee_report()) # 打印员工信息报表id = int(input("请输入要删除的员工编号(输入0取消操作):"))if id > 0: # 只要输入的不是0if hr.check_id(id): # 若此编号有对应员工verification = tool.randomNumber(4) # 生成随机4位验证码inputVer = input("[" + str(verification) + "] 请输入验证码:") # 让用户输入验证码if str(verification) == str(inputVer).strip(): # 如果验证码正确hr.remove_employee(id) # 人事服务删除该员工print(str(id) + "号员工已删除!")else: # 无效编号print("验证码有误,操作取消")else:print("无此员工,操作取消")elif option == "3": # 如果选择“返回上级菜单”return # 退出员工管理功能菜单else:print("输入的指令有误,请重新输入!")

6:查询员工打卡记录

该方法在控制台打印查询记录功能菜单

查看员工列表

查看打卡记录

def check_record():menu = """+-------------------------------------------------+| 查看记录功能菜单|+-------------------------------------------------+①查看员工列表 ②查看打卡记录 ③返回上级菜单---------------------------------------------------"""while True:print(menu) # 打印菜单option = input("请输入菜单序号:")if option == "1": # 如果选择“查看员工列表”print(hr.get_employee_report()) # 打印员工信息报表elif option == "2": # 如果选择“查看打卡记录”report = hr.get_record_all()print(report)elif option == "3": # 如果选择“返回上级菜单”return # 退出查看记录功能菜单else:print("输入的指令有误,请重新输入!")

7:生成考勤报表

该方法是考勤报表功能的执行方法,该方法在控制台打印考勤报表功能菜单,效果如下图所示

可以生成考勤日报或者月报

# 考勤报表def check_report():menu = """+-------------------------------------------------+|考勤报表功能菜单 |+-------------------------------------------------+①日报 ②月报 ③报表设置 ④返回上级菜单---------------------------------------------------"""while True:print(menu) # 打印菜单option = input("请输入菜单序号:")if option == "1": # 如果选择“日报”while True:date = input("输入查询日期,格式为(-08-08),输入0则查询今天:")if date == "0": # 如果只输入0hr.get_today_report() # 打印今天的日报break # 打印完之后结束循环elif tool.valid_date(date): # 如果输入的日期格式有效hr.get_day_report(date) # 打印指定日期的日报break # 打印完之后结束循环else: # 如果输入的日期格式无效print("日期格式有误,请重新输入!")elif option == "2": # 如果选择“月报”while True:date = input("输入查询月份,格式为(-08),输入0则查询上个月:")if date == "0": # 如果只输入0hr.get_pre_month_report() # 生成上个月的月报break # 生成完毕之后结束循环elif tool.valid_year_month(date): # 如果输入的月份格式有效hr.get_month_report(date) # 生成指定月份的月报break # 生成完毕之后结束循环else:print("日期格式有误,请重新输入!")elif option == "3": # 如果选择“报表设置”report_config() # 进入“报表设置”菜单elif option == "4": # 如果选择“返回上级菜单”return # 退出查看记录功能菜单else:print("输入的指令有误,请重新输入!")

8:自定义上下班时间

用户在报表设置功能中输入数字1并按Enter键,则分别提示用户输入上班时间和下班时间

# 报表设置def report_config():menu = """+-------------------------------------------------+|报表设置功能菜单 |+-------------------------------------------------+①作息时间设置 ②返回上级菜单---------------------------------------------------"""while True:print(menu) # 打印菜单option = input("请输入菜单序号:")if option == "1": # 如果选择“作息时间设置”while True:work_time = input("请设置上班时间,格式为(08:00:00):")if tool.valid_time(work_time): # 如果时间格式正确break # 结束循环else: # 如果时间格式不对print("上班时间格式错误,请重新输入")while True:close_time = input("请设置下班时间,格式为(23:59:59):")if tool.valid_time(close_time): # 如果时间格式正确breakelse: # 如果时间格式不对print("下班时间格式错误,请重新输入")hr.save_work_time(work_time, close_time) # 保存用户设置的上班时间和下班时间print("设置完成,上班时间:" + work_time + ",下班时间为:" + close_time)elif option == "2": # 如果选择“返回上级菜单”return # 退出查看记录功能菜单else:print("输入的指令有误,请重新输入!")

9:启动程序

main.py定义完所有全局变量和方法之后,代码的最下方就是整个系统的启动脚本,首先执行系统初始化操作,然后启动系统

创作不易 觉得有帮助请点赞关注收藏~~~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。