员工管理系统函数封装版与装饰器的常见使用

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

posted @ 2021-11-20 21:00  Deity_JGX  阅读(112)  评论(0)    收藏  举报