''' 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)+"\n") 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)+"\n") 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)+"\n") 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("您输入的菜单不存在. 请重新输入")