xingyemdd

导航

 
# 写程序完成下列功能:
# 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    分),然后进入首页选择。
# 5),注销用户是指注销用户的登录状态,使其在访问任何页面时,必须重新登录。
# 6),退出程序为结束整个程序运行。

import time

#登录状态字典
status_dic = {'username':None,'status':False}

flag1 = True #标志位
#登录
def login(*args,**kwargs):
    i = 0
    while i < 3:
        username = input('请输入用户名:').strip()
        passward = input('请输入密码:').strip()
        with open('register',encoding='utf-8') as f1:
            for line in f1:
                line_list = line.strip().split(',')
                if username == line_list[0] and passward == line_list[1]:
                    print('登录成功...')
                    status_dic['username'] = username
                    status_dic['status'] = True
                    return True
            else:
                print('输入不正确,请重新输入,还剩%s次机会'%(2-i))
                if i == 2: return quit()
            i += 1

#注册
def register():
    flag = True
    while flag:
        username = input('请输入要注册的用户名:').strip()
        f1 = open('register',encoding='utf-8')
        for i in f1:
            i_list = i.strip().split(',')
            if username == i_list[0]:
                print('用户名重复,请重新输入...')
                f1.close()
                break
        else:
            f1.close()
            password = input('请输入要注册的密码:').strip()
            f2 = open('register',encoding='utf-8',mode='a')
            f2.write('\n{},{}'.format(username,password))
            f2.close()
            print('您已经注册成功,并且自动为您登录...')
            status_dic['username'] = username
            status_dic['status'] = True
            return True

#登录认证装饰器
def wrapper(func):
    def inner(*args,**kwargs):
        if status_dic['status']:
            ret = func(*args,**kwargs)
            return ret
        else:
            print('请先进行登录...')
            if login():
                ret = func(*args, **kwargs)
                return ret
    return inner

#打印日志装饰器
def log_record(func):
    def inner(*args,**kwargs):
        struct_time = time.localtime()
        time_now = time.strftime("%Y-%m-%d %H:%M:%S",struct_time)
        with open('log_func','a',encoding='utf-8') as f1:
            f1.write('用户:%s,在%s 执行了 %s函数\n'%(status_dic['username'],time_now,func.__name__))
        ret = func(*args,**kwargs)
        return ret
    return inner

#文章
@wrapper
@log_record
def aritcle():
    print('欢迎%s来到文章页面'% status_dic['username'])

#日记
@wrapper
@log_record
def diary():
    print('欢迎%s来到日记页面'% status_dic['username'])

#评论
@wrapper
@log_record
def comment():
    print('欢迎%s来到评论页面'% status_dic['username'])

#收藏
@wrapper
@log_record
def enshrine():
    print('欢迎%s来到收藏页面'% status_dic['username'])

#退出程序
def login_out():
    if status_dic['username'] == None:
        print('先登录才能注销...')
    else:
        status_dic['username'] = None
        status_dic['status'] = False
        print('注销成功...')

#注销
def quit():
    global flag1
    flag1 = False
    return flag1

#函数字典
choice_dict = {
    1:login,
    2:register,
    3:aritcle,
    4:diary,
    5:comment,
    6:enshrine,
    7:login_out,
    8:quit
}

while flag1:
    print('欢迎来到博客园首页\n1:请登录\n2:请注册\n3:文章页面\n4:日记页面\n5:评论页面\n6:收藏页面\n7:注销\n8:退出程序')
    choice = input("请输入您想选择的序号:").strip()
    if choice.isdigit():
        choice = int(choice)
        if 0 < choice <= len(choice_dict):
            choice_dict[choice]()
    else:
        print("您输入的选项有非法字符,请重新输入")

 

posted on 2018-04-25 22:23  xingyemdd  阅读(162)  评论(0编辑  收藏  举报