python自动化-作业4.用户管理程序——A+

作业内容:

  用户管理程序:

    普通用户:登录、注册、修改密码、查看本用户信息

    管理员用户:登录、注册、修改密码、查看本用户信息,

          删除、添加普通用户

          修改普通用户密码

          查看所有普通用户,按照指定关键字搜索用户信息,

          提高普通用户权限

   要求:

    1.用户信息存文件

    2.权限用装饰器

  1.0版完成时间:2108/12/8

FLOG = {'is_login':False,                           # 是否注册标志
        'is_register':False,                        # 是否登录标志
        'user_info':[],                           # 登录用户的性息
        'line_count':0,                           # 所要修改的内容在文件user_data中的行数
        }

temp_file = []

def login(u,p):                                           # 登录
    with open('user_data','r+',encoding='utf-8') as f:
        count = 0
        for i in f:
            count += 1
            username = i.split('|')[0]
            password = i.split('|')[1]
            email = i.split('|')[2]
            phone = i.split('|')[3]
            conservator = i.split('|')[4]
            if u == username and p == password:
                FLOG['is_login'] = True
                FLOG['user_info'] = [username, password, email, phone, conservator]
                FLOG['line_count'] = count
    if not FLOG.get('is_login'):
        print('账号或密码错误,请重新登录'.center(50,'-'))
    else:
        print('恭喜【{}】登录成功!'.format(u))

def register(u,p):                                          # 注册
    with open('user_data','r+',encoding='utf-8') as f:
        for i in f:
            username = i.split('|')[0]
            if u == username:                               # 判断是否有用户名重复注册
                print('该账号已被注册'.center(50,'-'))
                FLOG['is_register'] = True
    with open('user_data', 'a+', encoding='utf-8') as f:
        if not FLOG.get('is_register'):
            in_email = input('请输入您的邮箱:>>>').strip()
            in_phone = input('请输入您的电话号码:>>>').strip()
            in_conservator = input('是否为管理员(1.不是,2.是):>>>').strip()
            str_join = '{}|{}|{}|{}|{}|\n'.format(u,p,in_email,in_phone,in_conservator)
            f.write(str_join)
            print('注册成功'.center(50,'-'))
            FLOG['is_register'] = False

def outer(fun):                                     # 是否登录装饰器
    def inner(*args,**kwargs):
        if FLOG.get('is_login'):
            r = fun(*args,**kwargs)
        else:
            print('请先登录'.center(50,'-'))
            while not FLOG['is_login']:
                in_username = input('请输入你的用户名:>>>').strip()
                in_password = input('请输入您的密码:>>>').strip()
                login(in_username,in_password)
            r = fun(*args,**kwargs)
        return r
    return inner

@outer
def modify_pwd():                                           # 修改密码
    in_password = input('请输入您的新密码:>>>').strip()
    FLOG['user_info'][1] = in_password
    str_join = '|'.join(FLOG['user_info'])+'|\n'
    temp_file = []
    temp_flog = False
    with open('user_data','r+',encoding='utf-8') as f:
        count = 0
        for i in f:
            count += 1
            if FLOG.get('line_count') == count:
                temp_flog = True
                continue
            if temp_flog:
                temp_file.append(i)
    with open('user_data','r+',encoding='utf-8') as f:
        for i in range(FLOG.get('line_count')-1):
            f.readline()
        f.seek(f.tell())
        f.truncate()
        f.write(str_join)                          # 在这一行中添加修改了密码的用户性息
        for i in temp_file:
            f.write(i)
    print('修改成功!'.center(50,'-'))

@outer
def print_userinfo():                               # 查看本用户性息
    print('登录用户性息'.center(100,'-'))
    print('用户名     密码        邮箱                      电话        用户权限')
    print('{: <12}{: <12}{: <24}{: <18}{: <2}'.format(FLOG['user_info'][0],FLOG['user_info'][1],FLOG['user_info'][2],FLOG['user_info'][3],FLOG['user_info'][4]))


def privilege_user(fun):                             # 是否为管理员装饰器
    def inner(*args,**kwargs):
        if FLOG['user_info'][4] == '2':
            r = fun(*args,**kwargs)
        else:
            print('您的权限不够,请以管理员权限登录'.center(50,'-'))
            FLOG['is_login'] = False                    # 退出登录状态
            print('【{}】退出登录!'.format(FLOG['user_info'][0]))
            FLOG['user_info'] = []
            while not FLOG['user_info'][4] == '2':
                in_username = input('请输入你的用户名:>>>').strip()
                in_password = input('请输入您的密码:>>>').strip()
                login(in_username,in_password)
            r = fun(*args,**kwargs)
        return r
    return inner

@outer
@privilege_user
def del_comuser():                                  # 删除普通用户
    in_user = input('请输入您要删除的用户名:>>>')
    temp_is_comuser = False
    with open('user_data','r+',encoding='utf-8') as f:             # 判断有没有这个用户,判断是否为普通用户
        for i in f:
            username = i.split('|')[0]
            privilege = i.split('|')[4]
            if in_user == username and privilege == '1':
                temp_is_comuser = True
    temp_file = []
    temp_flog = False
    if temp_is_comuser:                                   # temp_flog = True 删除输入的普通用户
        with open('user_data','r+',encoding='utf-8') as f:
            count = 0
            for i in f:
                count += 1
                username = i.split('|')[0]
                if in_user == username:
                    FLOG['line_count'] = count
                    temp_flog = True
                    continue
                if temp_flog:
                    temp_file.append(i)

        with open('user_data','r+',encoding='utf-8') as f:
            for i in range(FLOG.get('line_count')-1):
                f.readline()
            f.seek(f.tell())
            f.truncate()                                # 清除光标之后的内容
            for i in temp_file:
                f.write(i)
            print('删除用户成功'.center(50,'-'))
    else:
        print('用户不存在/用户权限为管理员,无法删除'.center(50,'-'))

@outer
@privilege_user
def add_user():                # 添加用户
    in_username = input('请输入您要添加用户的用户名:>>>').strip()
    in_password = input('请输入您要添加用户的密码:>>>').strip()
    in_email = input('请输入您要添加用户的邮箱:>>>').strip()
    in_phone = input('请输入您要添加用户的电话号码:>>>').strip()
    in_conservator = input('添加的用户是否为管理员(1.不是,2.是):>>>').strip()
    str_join = '{}|{}|{}|{}|{}|\n'.format(in_username, in_password, in_email, in_phone, in_conservator)
    tamp_flog = False
    with open('user_data', 'r+', encoding='utf-8') as f:
        for i in f:
            username = i.split('|')[0]
            password = i.split('|')[1]
            if username == in_username and password == in_password:
                print('用户以存在'.center(50,'-'))
                tamp_flog = True
    if not tamp_flog:
        with open('user_data', 'a+', encoding='utf-8') as f:
            f.write(str_join)
        print('用户添加成功'.center(50,'-'))

@outer
@privilege_user
def alter_comuser_pwd():                        # 修改普通用户密码
    in_user = input('请输入您要修改用户的用户名:>>>')
    temp_is_comuser = False
    with open('user_data', 'r+', encoding='utf-8') as f:  # 判断有没有这个用户,判断是否为普通用户
        count = 0
        for i in f:
            count += 1
            username = i.split('|')[0]
            privilege = i.split('|')[4]
            if in_user == username and privilege == '1':
                temp_is_comuser = True
                FLOG['line_count'] = count
                FLOG['user_info'] = [i.split('|')[0],i.split('|')[1],i.split('|')[2],i.split('|')[3],i.split('|')[4]]
    temp_file = []
    temp_flog = False
    if temp_is_comuser:
        in_password = input('请输入您的新密码:>>>').strip()
        FLOG['user_info'][1] = in_password
        str_join = '|'.join(FLOG['user_info'])+'|\n'
        with open('user_data','r+',encoding='utf-8') as f:
            count = 0
            for i in f:
                count += 1
                if FLOG.get('line_count') == count:
                    temp_flog = True
                    continue
                if temp_flog:
                    temp_file.append(i)
        with open('user_data','r+',encoding='utf-8') as f:
            for i in range(FLOG.get('line_count')-1):
                f.readline()
            f.seek(f.tell())
            f.truncate()
            f.write(str_join)                          # 在这一行中添加修改了密码的用户性息
            for i in temp_file:
                f.write(i)
        print('修改成功'.center(50,'-'))
    else:
        print('用户不存在/用户权限为管理员,修改失败'.center(50,'-'))

@outer
@privilege_user
def print_all_comuser_info():                   # 查看所用普通用户
    Tamp_FLOG_user_info = FLOG['user_info']
    print('所有普通用户性息'.center(100,'-'))
    print('用户名     密码        邮箱                      电话        用户权限')
    with open('user_data','r+',encoding='utf-8') as f:
        for i in f:
            privilege = i.split('|')[4]
            if privilege == '1':
                FLOG['user_info'] = [i.split('|')[0], i.split('|')[1], i.split('|')[2], i.split('|')[3],
                                     i.split('|')[4]]
                print('{: <12}{: <12}{: <24}{: <18}{: <2}'.format(FLOG['user_info'][0],
                                                                  FLOG['user_info'][1],
                                                                  FLOG['user_info'][2],
                                                                  FLOG['user_info'][3],
                                                                  FLOG['user_info'][4]))
    FLOG['user_info'] = Tamp_FLOG_user_info

@outer
@privilege_user
def raise_authority():                          # 提高普通用户权利
    in_user = input('请输入普通用户的用户名:>>>')
    is_comuser = False
    temp_file = []
    temp_flog = False
    with open('user_data','r',encoding='utf-8') as f:
        count = 0
        for i in f:
            count += 1
            username = i.split('|')[0]
            privilege = i.split('|')[4]
            if in_user == username and privilege == '1':                       # 确认有这个用户这个用户为普通用户
                is_comuser = True
                FLOG['user_info'] = [i.split('|')[0], i.split('|')[1], i.split('|')[2], i.split('|')[3],
                                     i.split('|')[4]]
                FLOG['line_count'] = count

    if is_comuser:
        FLOG['user_info'][4] = '2'
        str_join = '|'.join(FLOG['user_info'])+'|\n'
        with open('user_data','r+',encoding='utf-8') as f:
            count = 0
            for i in f:
                count += 1
                if FLOG.get('line_count') == count:
                    temp_flog = True
                    continue
                if temp_flog:
                    temp_file.append(i)
        with open('user_data','r+',encoding='utf-8') as f:
            for i in range(FLOG.get('line_count')-1):
                f.readline()
            f.seek(f.tell())
            f.truncate()
            f.write(str_join)                          # 在这一行中添加修改了密码的用户性息
            for i in temp_file:
                f.write(i)
        print('修改成功'.center(50,'-'))
    else:
        print('没有这个用户'.center(50,'-'))





if __name__ == '__main__':
    while True:
        print('用户管理程序'.center(100,'-'))
        print('1.登录\n2.注册\n3.修改密码\n'
              '4.查看本用户性息\n'
              '5.删除普通用户\n'
              '6.添加用户\n'
              '7.修改普通用户密码\n'
              '8.查看所有普通用户\n'
              '9.提高普通用户权限')
        index = input('请输入您的选择(注意:5-9只使用于管理员):>>>')
        if int(index) in range(1,10):
            if index == '1':                                        # 登录
                username = input('请输入你的用户名:>>>').strip()
                password = input('请输入您的密码:>>>').strip()
                login(username,password)
            if index == '2':                                        # 注册
                username = input('请输入你的用户名:>>>').strip()
                password = input('请输入您的密码:>>>').strip()
                register(username,password)
            if index == '3':                                        # 修改密码
                modify_pwd()
            if index == '4':                                        # 查看本用户性息
                print_userinfo()
            if index == '5':                                        # 删除普通用户
                del_comuser()
            if index == '6':                                        # 添加用户
                add_user()
            if index == '7':                                        # 修改普通用户密码
                alter_comuser_pwd()
            if index == '8':                                        # 查看所用普通用户
                print_all_comuser_info()
            if index == '9':                                        # 提高普通用户权限
                raise_authority()
        else:
            print('您的输入有误,请重新输入'.center(50,'-'))

user_data文件:

ggz|123|[email protected]|18670221892|2|
ggz1|123|[email protected]|18670221892|1|
g|123|[email protected]|18670221892|2|
huawei|123|[email protected]|18670221892|1|
zhongxin|123456|[email protected]|18670221892|1|
z|123|[email protected]|18670221892|1|
lianxiang|123|123@123|123|1|

调试文件:

with open('user_data','r+',encoding='utf-8') as f:
    f.write('guo|123|[email protected]|18670221892|1|\n')
    f.write('ggz|123|[email protected]|18670221892|2|\n')
    f.write('xiaomi|123|[email protected]|18670221892|1|\n')
    f.write('meizu|123|[email protected]|18670221892|1|\n')
    f.write('huawei|123|[email protected]|18670221892|1|\n')
    f.write('zhongxin|123|[email protected]|18670221892|1|\n')

猜你喜欢

转载自www.cnblogs.com/guogangzhi/p/10088946.html
今日推荐