zoukankan      html  css  js  c++  java
  • python第三次周末大作业

    '''
    s18第三周周末⼤作业
    模拟博客园系统:
    1. 启动程序, 显⽰菜单列表
         菜单:
         1. 登录
         2. 注册
         3. ⽂章
         4. ⽇记
         5. 退出
    2. ⽤户输入选项, ⽂章和⽇记必须在登录后才可以进⾏操作.(装饰器)
    
    3. ⽤户注册, 将⽤户名和密码写入到register⽂件中. 同时⽣成"article_⽤户名"⽂件⽤于
    存储⽤户⽂章. 同时⽣成"diary_⽤户名" 来存储⽤户的⽇记内容.
    
    4. ⽤户登录成功后, ⽤户名和密码从register⽂件中读取内容. 并记录好当前登录的⽤户
    名和登录状态.
    
    5. 在⽤户进入⽂章菜单后. 提⽰⽤户选择: 写⽂章, 读⽂章, 如果⽤户选择读⽂章. 把⽤户
    所有的⽂章标题显⽰出来. 让⽤户选择要显⽰的⽂章标题. 显⽰出⽂章内容. 如果选择
    写⽂章. 则让⽤户输入要写的⽂章标题和⽂章内容. 并存入该⽤户的⽂章⽂件中.
     例如,
     alex登录成功后.
     他可以选择读⽂章和写⽂章.
     读⽂章:
     您的⽂章有:
     1. 中东之⾏
     2. wusir是怎样炼成的
     请选择您要读的⽂章序号: 2
     标题: wusir是怎样炼成的
     内容: wusir这个⼤烧饼, 我们曾经在xxx地⽅的时候xxxxxxxx....
     写⽂章:
     请输入您要编写的⽂章标题: 太⽩在哪⾥
     请输入您这篇⽂章的内容: 太⽩⾦星昨⽇⼜去找王⺟娘娘做头发了.
     ⽂章保存成功
    
     此时系统读写的⽂件为article_alex⽂件. 如果是peiqi登录. 则操作的是
    article_peiqi⽂件. 每个⽤户都会单独分配⼀个 "article_⽤户名" ⽂件.
    
    
    5. 进入⽇记菜单后. 操作和⽂章类似. 差别是. ⽇记的标题就是当天的⽇期. 不需要⽤户
    输入. 直接⽣成系统时间. 当然. 对于⽇记每个⽤户也会有⾃⼰的单独的⽂件产⽣. 统
    ⼀命名为"diary_⽤户名"
    '''
    import time
    
    login_name = ""
    flag = False
    
    def login_verify(fn):
        def inner(*args, **kwargs):
            while 1:
                if flag == True:
                    ret = fn(*args, **kwargs)
                    return ret
                else:
                    print("您还没有登录. 请登录!")
                    login()
        return inner
    
    def login():
        print("=============欢迎进入登录环节================")
        while 1:
            uname = input('请输入你的用户名:')
            upwd = input('请输入你的密码:')
    
            f = open('register', mode="r", encoding="utf-8")
            for line in f:
                d = eval(line.strip())
                if uname == d['username'] and upwd == d["password"]:
                    global login_name
                    global flag
                    login_name = uname # 保存登录的用户名
                    flag = True
                    print("=============登录成功!!!!!================")
                    f.close()
                    return
            else:
                f.close() # 关文件
                y = input("=============用户名或密码错误,是否重新登录(Y/N)!!!!!================")
                if y.upper() != "Y":
                    return
    
    def regist():
        print('===========进入注册环节==============')
        ff = True
        while ff:
            uname = input("请输入你的用户名:")
            # 判断用户名是否重复
            f = open("register", mode="r", encoding="utf-8")
            for line in f:
                # 字符串转化回字典
                dd = eval(line.strip())
                if uname == dd['username']:
                    print('用户名重复!!!!')
                    f.flush()
                    f.close()
                    break
            else: # 用户名不存在. 可用
                print("用户名可用. ")
                ff = False
                f.flush()
                f.close()
    
        upwd = input("请输入你的密码:")
    
        d = {"username":uname, "password":upwd}
        f = open("register", mode="a", encoding="utf-8")
        f.write(str(d)+"
    ")
        f.flush()
        f.close()
        # 创建存放文件和文章的文件
        f1 = open("article_"+uname, mode="w", encoding="utf-8")
        f2 = open("diary_"+uname, mode="w", encoding="utf-8")
        f1.close()
        f2.close()
        print('===========注册成功!!!==============')
    
    def read_article():
        print("========读文章环节==============")
        with open("article_"+login_name, mode="r", encoding="utf-8") as f:
            count = 1
            for line in f:
                print(count, eval(line.strip())['title'])
                count += 1
        while 1:
            cc = input("请输入你要读的文章, 输入Q返回上一单元:") # 3
            if cc.upper()=='Q':
                return
    
            id = int(cc)
    
            if id < 1 or id > count:
                print('该文章不存在')
                continue
            else:
                with open("article_" + login_name, mode="r", encoding="utf-8") as f:
                    for i in range(id):
                        line = f.readline()
    
                # 此时读取的line就是第id行的数据
                dd = eval(line.strip())
                print('您选择的文章标题是: %s' % dd['title'])
                print("您选择的文章内容是:")
                print(dd['content'])
    
    def write_article():
        print("========写文章环节==============")
        title = input('请输入你要写入的文章标题:')
        content = input("请输入你要写入的文章的内容:")
        d = {"title":title, "content": content}
        with open("article_"+login_name, mode="a", encoding="utf-8") as f:
            f.write(str(d)+"
    ")
        print("========文章写入成功!!!!!==========")
    
    def read_diary():
        print("========读日记环节==============")
        with open("diary_"+login_name, mode="r", encoding="utf-8") as f:
            count = 1
            for line in f:
                print(count, eval(line.strip())['title'])
                count += 1
        while 1:
            cc = input("请输入你要读的日记, 输入Q返回上一单元:") # 3
            if cc.upper()=='Q':
                return
    
            id = int(cc)
    
            if id < 1 or id > count:
                print('该日记不存在')
                continue
            else:
                with open("diary_" + login_name, mode="r", encoding="utf-8") as f:
                    for i in range(id):
                        line = f.readline()
    
                # 此时读取的line就是第id行的数据
                dd = eval(line.strip())
                print('您选择的日记标题是: %s' % dd['title'])
                print("您选择的日记内容是:")
                print(dd['content'])
    
    def write_diary():
        print("========写日记环节==============")
        title = time.strftime("%Y-%m-%d")
        content = input("请输入你要写入的日记的内容:")
        d = {"title":title, "content": content}
        with open("diary_"+login_name, mode="a", encoding="utf-8") as f:
            f.write(str(d)+"
    ")
        print("========日记写入成功!!!!!==========")
    
    @login_verify
    def article():
        while 1:
            print("========欢迎来到文章环节=============")
            print("1. 读文章")
            print("2. 写文章")
            print("3. 返回")
            num = input("请输入你要执行的菜单:")
            if num == "1":
                read_article()
            elif num == "2":
                write_article()
            elif num == "3":
                print("========结束文章环节=========")
                return
    
    @login_verify
    def diary():
        while 1:
            print("========欢迎来到日记环节=============")
            print("1. 读日记")
            print("2. 写日记")
            print("3. 返回")
            num = input("请输入你要执行的菜单:")
            if num == "1":
                read_diary()
            elif num == "2":
                write_diary()
            elif num == "3":
                print("========结束日记环节=========")
                return
    
    
    print("欢迎来到博客园系统")
    menu = ("登录", "注册", "文章", "日记", "退出")
    
    while 1:
        for i in range(len(menu)):
            print(i+1, menu[i])
    
        m = input('请输入你要执行的菜单:')
        if m == "1":
            login()
        elif m == "2":
            regist()
        elif m == "3":
            article()
        elif m == "4":
            diary()
        elif m == "5":
            exit()
        else:
            print("您输入的菜单不存在. 请重新输入")
    不怕大牛比自己牛,就怕大牛比自己更努力
  • 相关阅读:
    Codeforces Round #497 (Div. 2) B. Turn the Rectangles
    Codeforces Round #497 (Div. 2) A. Romaji
    [DFS] [洛谷] P1219 八皇后 O(1)判断
    [归并] [STL] [洛谷] P1309 瑞士轮
    [贪心] [洛谷] P1803 凌乱的yyy / 线段覆盖
    [模拟] [洛谷] P1071 潜伏者
    java.io.EOFException: End of File Exception between local host is: "master/192.168.***.***"; destination host is: “master”:9000; :
    hadoop 无法打开网页和重新格式化问题
    hadoop平台环境搭建
    无法创建新虚拟机: 无法打开配置文件“F:BigDatavm12centos01centos01.vmx”: 拒绝访问。
  • 原文地址:https://www.cnblogs.com/zaizai1573/p/10182073.html
Copyright © 2011-2022 走看看