函数进阶-作业题

'''
作业:模拟博客园登录:
    1),启动程序,首页面应该显示成如下格式:
        欢迎来到博客园首页
        1:请登录
        2:请注册
        3:文章页面
        4:日记页面
        5:评论页面
        6:收藏页面
        7:注销
        8:退出程序
    2),用户输入选项,3~6选项必须在用户登录成功之后,才能访问成功。
    3),用户选择登录,用户名密码从register文件中读取验证,三次机会,没成功则结束整个程序运行,成功之后,可以选择访问3~6项,
    访问页面之前,必须要在log文件中打印日志,日志格式为-->用户:xx 在xx年xx月xx日 执行了 %s函数,访问页面时,页面内容为:欢迎xx用户访问评论(文章,日记,收藏)页面
    4),如果用户没有注册,则可以选择注册,注册成功之后,可以自动完成登录,然后进入首页选择。
    5),注销用户是指注销用户的登录状态,使其在访问任何页面时,必须重新登录。
    6),退出程序为结束整个程序运行。

'''

import time
struct_time = time.localtime()
login_status = {
    'username': None,
    'password':None,
    'status': False,
}

register_status = {'status': False}  # 定义注册的初始状态
# 定义装饰器
def login(f):
    def inner(*args, **kwargs):
        if login_status['status']:
            ret = f(*args, **kwargs)
            return ret
        else:
            count = 0
            while count < 3:
                name = input('请输入用户名:').strip()
                password = input('请输入密码:').strip()
        
                # 通过读文件的方式获取用户名和密码,支持多个账号和密码。
                f1 = open('多账号管理', encoding='utf-8', mode='r')
                for i in f1:
                    content = i.strip().split('|')
                    if name == content[0].strip() and password == content[1].strip():
                        print('恭喜你,登录成功!')
                        login_status['username'] = content[0].strip()
                        login_status['password'] = content[1].strip()
                        login_status['status'] = True
                        ret = f(*args, **kwargs)
                        return ret
                    else:
                        print('输入的账号或者密码有误,请重新输入!')
                        count = count + 1
                        n = str(3 - count)
                        print('您有' + n + '次重试机会')
                        break
        
                if count >= 3:
                    print('抱歉,您已经没有登录机会!')
                    quit()
                f1.close()
    return inner


@login
def article():
    f1 = open('log', encoding='utf-8', mode='a')
    f1.write(login_status['username'])
    f1.write('')
    f1.write(time.strftime("%Y-%m-%d", struct_time))
    f1.write('执行了article函数,访问页面内容时,页面内容为:')
    f1.write('欢迎访问文章页面\n')
    f1.close()
    print('欢迎访问文章页面')


@login
def dariy():
    f1 = open('log', encoding='utf-8', mode='a')
    f1.write(login_status['username'])
    f1.write('')
    f1.write(time.strftime("%Y-%m-%d", struct_time))
    f1.write('执行了dariy函数,访问页面内容时,页面内容为:')
    f1.write('欢迎访问日记页面\n')
    f1.close()
    print('欢迎访问日记页面')


@login
def comment():
    f1 = open('log', encoding='utf-8', mode='a')
    f1.write(login_status['username'])
    f1.write('')
    f1.write(time.strftime("%Y-%m-%d", struct_time))
    f1.write('执行了comment函数,访问页面内容时,页面内容为:')
    f1.write('欢迎访问评论页面\n')
    f1.close()
    print('欢迎访问评论页面')

@login
def collection():
    f1 = open('log', encoding='utf-8', mode='a')
    f1.write(login_status['username'])
    f1.write('')
    f1.write(time.strftime("%Y-%m-%d", struct_time))
    f1.write('执行了collection函数,访问页面内容时,页面内容为:')
    f1.write('欢迎访问收藏页面\n')
    f1.close()
    print('欢迎访问收藏页面')
    

def login():  # 定义登录函数
    if login_status['status'] == True:
        print('系统已经登录,无需在此登录')
    else:
        count = 0
        while count < 3 and login_status['status'] == False:
            name = input('请输入用户名:').strip()
            password = input('请输入密码:').strip()
        
            # 通过读文件的方式获取用户名和密码,支持多个账号和密码。
            f1 = open('多账号管理', encoding='utf-8', mode='r')
            for i in f1:
                content = i.strip().split('|')
                if name == content[0].strip() and password == content[1].strip():
                    print('恭喜你,登录成功!')
                    login_status['username'] = content[0].strip()
                    login_status['password'] = content[1].strip()
                    login_status['status'] = True
                    break
                else:
                    print('输入的账号或者密码有误,请重新输入!')
                    count = count + 1
                    n = str(3 - count)
                    print('您有' + n + '次重试机会')
                    break
        
            if count >= 3:
                print('抱歉,您已经没有登录机会!')
                quit()
            f1.close()

def register():  # 定义注册函数
    # register_name = input('请输入注册用户名:').strip()
    # register_password = input('请输入注册密码:').strip()
    # f2 = open('register', encoding='utf-8', mode='a')
    # f2.write('\t'+register_name +'|'+ register_password+'\n')
    # f2.close()
    # login_status['username'] = register_name
    # login_status['status'] = True
    # #
    
  
    register_status['status'] = False # 重置注册函的初始状态
    register_name = input('请输入注册用户名:').strip()
    register_password = input('请输入注册密码:').strip()
    f2 = open('register', encoding='utf-8', mode='r+')
    for line in f2:   # 判断用户名是否已经存在
        l1 = line.strip().split('|')  # 分割成为列表
        if register_name == l1[0]:
            print('用户名已经存在,请重新注册')
            register_status['status'] = True
            break
    if register_status['status'] == False:  # 状态为False说明用户名在register文件中未找到。
        f2.write('\t'+register_name +'|'+ register_password+'\n')
        login_status['username'] = register_name
        login_status['status'] = True
        print('恭喜您,已经注册成功,并且已登录成功,请访问页面')
    f2.close()

def logout():  # 定义注销函数
    print('系统已退出,如果访问系统,需要重新登录系统')
    login_status['status'] = False
    
def close():  # 定义关闭函数
    print('程序已关闭,如需使用请重新启动程序')
    quit()

# 定义字典,来存储各个函数。
dic = {
    '1': login,
    '2': register,
    '3': article,
    '4': dariy,
    '5': comment,
    '6':collection,
    '7':logout,
    '8':close
}

#  定义访问页面
while 1:
    print("""欢迎来到博客园首页\n3:文章页面\n4:日记页面\n5:评论页面\n6:收藏页面\n""")
    num = input("请输入输入1-8:").strip()

    if num.isdigit():  # 判断输入的信息是否只有数字输入
        dic[num]()
    else:
        print('您输入的为非数字,请输入数字')
 

 

posted @ 2018-11-08 12:40  马玉刚  阅读(255)  评论(0)    收藏  举报