![image]()
# 1.编写员⼯管理系统进阶版
# 功能全部封装成函数 数据全部来源于⽂件
# ⼤致功能:注册 登录 添加员⼯ 查看员⼯等
# 普通要求:
# 添加 查看等功能每次都必须先登录才可执⾏(认证装饰器)
# 进阶要求:
# ⽤户登录⼀次之后⽆需校验身份(全局校验)
# 升华超越:(后期再说)
# 每个⽤户配备⻆⾊信息
# ⽤户认证过程中只有管理员才可执⾏被装饰函数
# 定义一个认证装饰器
is_login = {'is_login':False} # 全局校验功能
def login_auth(func):
def auth(*args,**kwargs):
# 1.1 先判断用户是否已经登录
if is_login.get('is_login'):
# 3.正常执行函数index
res = func(*args, **kwargs)
return res
# 1.先获取用户的用户名和密码
print('请输入管理员专用用户名和密码')
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 2.校验专属管理员用户名和密码是否正确
if username == 'jia' and password == '123':
# 3.正常执行函数index
res = func(*args,**kwargs)
# 4.将记录用户登录状态的数据修改
is_login['is_login'] = True
return res
else:
print('用户名或密码错误 无法使用管理员权限')
return auth
# 1注册信息
def register():
print('注册功能')
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 4.应该先校验用户编号是否已存在
with open(r'a.txt', 'rt', encoding='utf8') as f:
for i in f:
username1, password1 = i.split('|')
if username1 == username:
print('用户已存在')
break # 结束for循环校验
else:
data = '%s|%s\n'%(username, password)
with open(r'a.txt', 'at', encoding='utf8') as f:
f.write(data)
print('用户%s注册成功'%username)
# 2.登录功能
def login():
print('登录功能')
username = input('username>>>:').strip()
password = input('password>>>:').strip()
with open(r'a.txt', 'rt', encoding='utf8') as f:
# 2.校验用户名和密码是否正确
for i in f:
username1, password1 = i.split('|')
# print(i)
if username1 == username and password1.strip() == password:
print('登陆成功')
break
elif username == 'jia' and password == '123':
is_login['is_login'] = True
print('管理员身份登录成功')
break
else:
print('用户名或密码错误 重新尝试')
# 3.添加员工
@login_auth
def add():
print('输入员工信息>>>:')
username = input('username>>>:').strip()
password = input('password>>>:').strip()
with open(r'a.txt', 'rt', encoding='utf8') as f:
for i in f:
username1, password1 = i.split('|')
if username1 == username:
print('用户已存在')
break # 结束for循环校验
else:
data = '%s|%s\n'%(username, password)
with open(r'a.txt', 'at', encoding='utf8') as f:
f.write(data)
print('用户%s添加成功'%username)
# 4.查看员工信息
@login_auth
def look():
print('查看员工信息')
choice1 = input('输入1查询所有 输入2按个人编号查询:').strip() # 让客户选择查询范围
if choice1 == '1':
with open(r'a.txt', 'rt', encoding='utf8') as f:
for i in f:
print(i)
elif choice1 == '2':
username = input('输入员工姓名:').strip()
with open(r'a.txt', 'rt', encoding='utf8') as f:
for i in f:
username1, password1 = i.split('|')
if username1 == username:
print(i)
else:
print('输入用户信息错误')
while True:
print("""
1.注册功能
2.登录功能
3.添加员工
4.查看员工信息
""")
choice = input('请输入功能编号>>>:').strip()
# 判断用户输入的编号
func_dic = {
'1': register,
'2': login,
'3': add,
'4': look,
}
if choice in func_dic:
# 获取功能字典的值
func_name = func_dic.get(choice)
# 调用相印的函数
func_name()
else:
print('功能不存在')
# 2.编写统计函数执⾏次数装饰器
# 任意定义⼀个函数给其添加装饰器
# 要求:每次执⾏该函数 装饰器⾃动记录次数 记录需保存在⽂件中
# 计算运行次数的功能
def func1(name):
num = 0 # 闭包中外函数中的变量指向的引用不可变
def func2():
name()
nonlocal num # 使用nonlocal 访问修改外部函数变量
num += 1
print("执行次数", num)
res = '%s\n' % num # NoneNoneNoneNone
with open(r'a.txt', 'at', encoding='utf8') as f:
f.write(res)
return func2
# 待计次方法
@func1
def index():
pass
index()
index()
index()
# 执行次数 1
# 执行次数 2
# 执行次数 3
![image]()