zoukankan      html  css  js  c++  java
  • 模拟博客园登录 基础版

    '''用代码模拟博客园系统:

    项目分析:

    一.首先程序启动,页面显示下面内容供用户选择:

    请登录
    请注册
    进入文章页面
    进入评论页面
    进入日记页面
    进入收藏页面
    注销账号
    退出整个程序
    二.必须实现的功能:

    注册功能要求: a. 用户名、密码要记录在文件中。
    b. 用户名要求:只能含有字母或者数字不能含有特殊字符并且确保用户名唯一。
    c. 密码要求:长度要在6~14个字符之间。 d. 超过三次登录还未成功,则退出整个程序。

    登录功能要求: a. 用户输入用户名、密码进行登录验证。
    b. 登录成功之后,才可以访问37选项,如果没有登录或者登录不成功时访问37选项
    ,不允许访问,让其先登录。(装饰器)

    入文章页面要求: a. 提示欢迎xx进入文章页面。
    b. 此时用户可以选择:直接写入内容,还是导入md文件。
    ① 如果选择直接写内容:让学生直接写文件名|文件内容…最后创建一个文章。
    ② 如果选择导入md文件:让用户输入已经准备好的md文件的文件路径(相对路径即可:比如函数的进阶.md)
    ,然后将此md文件的全部内容写入文章(函数的进阶.text)中。

    进入评论页面要求: 提示欢迎xx进入评论页面。
    进入日记页面要求: 提示欢迎xx进入日记页面。
    进入收藏页面要求: 提示欢迎xx进入收藏页面。
    注销账号要求: 不是退出整个程序,而是将已经登录的状态变成未登录状态(访问3~7选项时需要重新登录)。
    退出整个程序要求: 就是结束整个程序。
    三.选做功能:'''

    status_dict = {'username':None,'status':False}

    读取文件中已有的用户名和密码

    x = {}
    with open('register.txt', encoding='utf-8') as f:
    for line in f:
    x.setdefault(line.strip().split('|')[0], line.strip().split('|')[1])
    #print(x)

    def logi():
    cont = 0
    while 1:
    name = input('请输入用户名: ')
    mima = input('请输入用户密码: ')
    if name in x and x[name] == mima :
    status_dict['username'] = name
    status_dict['status'] = True
    print('登陆成功!')
    return True
    else:
    cont += 1
    print(f'账号或密码输入错误,还剩{3-cont}次机会')
    if cont ==3:
    print('登陆失败!')
    return False
    '''
    ss = logi()
    print(ss)#测试上面函数执行成功,注意一个大坑TXT中光标停留位置的
    '''
    def register():
    while 1:
    a = input('请输入注册的用户名(只能含有字母或者数字不能含有特殊字符): ')
    b = input('请输入注册的密码(长度要在6~14个字符之间): ')
    if a.isalnum():
    with open('register.txt',encoding='utf-8',mode='a') as f1:
    if a not in x:
    if len(b) >= 6 and len(b) <= 24:
    f1.write(f'{a}|{b} ')
    print('注册成功! 系统已为你自动登陆')
    status_dict['username'] = a
    status_dict['status'] = True
    return True
    else:
    print('密码长度要在6~14个字符之间')
    continue
    else:
    print('用户名已存在')
    continue

    def warpper(h):
    def inner(args,**kwargs):
    if status_dict['status']:
    ret = h(
    args,**kwargs)
    return ret
    else:
    if logi():
    ret = h(*args, **kwargs)
    return ret
    return inner

    @ warpper
    def article():
    print(f"欢迎{status_dict['username']}访问文章页面")
    print('''
    请输入字母选择:
    a 直接写入内容
    b 导入md文件
    ''')
    p = input('请输入: ')
    if p == 'a':
    o = input('请输入文件名|文件内容:')
    ii = o.strip().split('|')
    with open(ii[0],encoding='utf-8',mode='w') as ff:
    ff.write(ii[1])
    if p == 'b':
    u = input('请输入相对文件路径: ')
    with open(u,encoding='utf-8') as ff1,
    open('函数的进阶.txt',encoding='utf-8',mode='w') as ff2:
    yy = ff1.read()
    ff2.write(yy)

    @warpper
    def comment():
    print(f"欢迎{status_dict['username']}访问评论页面")
    pass
    @warpper
    def dariy():
    print(f"欢迎{status_dict['username']}访问日记页面")
    @warpper
    def collect():
    print(f"欢迎{status_dict['username']}访问收藏页面")

    def login_out():
    status_dict['status'] = False
    print('已注销账号')

    def _quit():
    print('已退出整个程序')
    exit()

    dic = {
    1: logi,
    2: register,
    3: article,
    4: comment,
    5: dariy,
    6: collect,
    7: login_out,
    8: _quit,
    }
    def run():
    while 1:
    print('''
    1 请登录
    2 请注册
    3 进入文章页面
    4 进入评论页面
    5 进入日记页面
    6 进入收藏页面
    7 注销账号
    8 退出整个程序
    ''')
    num = input('请输入选项').strip()
    num = int(num)
    dicnum
    run()

  • 相关阅读:
    Joint Consensus两阶段成员变更的单步实现
    深度干货|云原生分布式数据库 PolarDBX 的技术演进
    SpringMVC框架入门配置 IDEA下搭建Maven项目
    windows安装composer方法和使用方法
    idea2016 spring 新手上路
    jQuery 获取 attr() 与 prop() 属性值的方法及区别介绍 _fei
    处女座的看过来【 JetBrains强迫症】注释篇
    phpstorm 配置 xdebug调试工具
    使用Intellij IDEA整合Spring+Spring MVC+MyBitis
    长链剖分小记
  • 原文地址:https://www.cnblogs.com/zhaoxinblog/p/13336297.html
Copyright © 2011-2022 走看看