'''
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返回上一单元:") #
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返回上一单元:") #
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 == "":
read_article()
elif num == "":
write_article()
elif num == "":
print("========结束文章环节=========")
return @login_verify
def diary():
while 1:
print("========欢迎来到日记环节=============")
print("1. 读日记")
print("2. 写日记")
print("3. 返回")
num = input("请输入你要执行的菜单:")
if num == "":
read_diary()
elif num == "":
write_diary()
elif num == "":
print("========结束日记环节=========")
return print("欢迎来到博客园系统")
menu = ("登录", "注册", "文章", "日记", "退出") while 1:
for i in range(len(menu)):
print(i+1, menu[i]) m = input('请输入你要执行的菜单:')
if m == "":
login()
elif m == "":
regist()
elif m == "":
article()
elif m == "":
diary()
elif m == "":
exit()
else:
print("您输入的菜单不存在. 请重新输入")

python第三次周末大作业的更多相关文章

  1. python第四次周末大作业

    ''' 选课系统开发 系统登录需要有两类用户:学生.管理员,针对不用用户提供不同功能: 学生用户 :对于学生用户来说,登陆之后有三个功能 1.查看所有课程 2.选择课程 3.查看所选课程 4.删除已选 ...

  2. python第一次周末大作业

    #############################作业############################# 1. 三次登录验证 完成用户登录验证 要求: 1. 系统自动生成4位随机数. ...

  3. python第二次周末大作业

    题目 ''' HR人力资源管理. 1. 菜单: ("查看员⼯信息","添加员⼯信息", "修改员⼯信息", "删除员⼯信息&quo ...

  4. python第三十五天-----作业完成--学校选课系统

    选课系统:角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. 课程包含, ...

  5. 数据库大作业--由python+flask

    这个是项目一来是数据库大作业,另一方面也算是再对falsk和python熟悉下,好久不用会忘很快. 界面相比上一个项目好看很多,不过因为时间紧加上只有我一个人写,所以有很多地方逻辑写的比较繁琐,如果是 ...

  6. #006 C语言大作业学生管理系统第三天

    还差最后两部分 读取文件 恢复删除的学生信息 先学会处理文件的 知识点,再继续跟着视频做这个作业. 应该明天周六能把视频里手把手教的学生管理系统敲完 第二周尽量自己能完成C语言课本最后面那道学生管理系 ...

  7. c++小学期大作业攻略(三)用户系统

    Update at 2019/07/22 14:16 发现一个大坑,我们后期是打算用QSS统一堆样式进行美化的,于是我把之前对QLabel进行的setAlignment全部去掉了,打算统一丢进Qss里 ...

  8. 爬虫综合大作业——网易云音乐爬虫 & 数据可视化分析

    作业要求来自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075 爬虫综合大作业 选择一个热点或者你感兴趣的主题. 选择爬取的对象 ...

  9. python基础之员工信息表作业

    周末大礼包 文件存储格式如下: id, name, age, phone, job 1, Alex, 22, 13651054608, IT 2, Egon, 23, 13304320533, Tea ...

随机推荐

  1. BZOJ1398Vijos1382寻找主人 Necklace——最小表示法

    题目描述 给定两个项链的表示,判断他们是否可能是一条项链. 输入 输入文件只有两行,每行一个由0至9组成的字符串,描述一个项链的表示(保证项链的长度是相等的). 输出 如果两条项链不可能同构,那么输出 ...

  2. 51Nod 1381 硬币游戏

    参考自:https://www.cnblogs.com/ECJTUACM-873284962/p/6445369.html 1381 硬币游戏 基准时间限制:1 秒 空间限制:131072 KB 分值 ...

  3. POJ 2750 鸡兔同笼

    参考自:https://www.cnblogs.com/ECJTUACM-873284962/p/6414781.html POJ 2750鸡兔同笼 总时间限制:1000ms 内存限制:65536kB ...

  4. Phone List HDU - 1671 字典树

    题意:给出一堆一组一组的数字  判断有没有哪一个是另外一个的前缀 思路:字典树 插入的同时进行判断  不过 当处理一组数字的时候 需要考虑的有两点1.是否包含了其他的序列2.是否被其他序列包含 刚开始 ...

  5. 使用开源项目xutils3完成下载

    上一次自己写了一个多线程断点续传下载的demo,过于麻烦,bug超多,所以我学习使用xutils来完成此功能. 先将xutils依赖搭建好(上一篇博客已经具体写了方法) 先看看效果图: 下面开始代码的 ...

  6. IDEA 安装 Sonalint失败

    1.直接在线安装[Plugins]-[Browse reponsitories...],安不上,FQ了以后还是安不上 2.下载了离线的Sonalint 插件包,通过引用外部插件的方式,[Install ...

  7. RSS阅读器“阅读原文”报错400

    问题 使用SpringMVC框架,实现了RSS订阅,在FoxMail的RSS订阅页面,点击[阅读原文],报错400 . 每个RSS文章的链接是:https://jiashubing.cn/forum/ ...

  8. 【C++】VS2015/VS2017连接Mysql数据库教程

    要给C++程序连接MySQL数据库,分别需要: 安装MySQL Server 下载MySQL Connector/C++ 在IDE中配置依赖 然后就可以在代码中调用API,来连接以及操作数据库. 一. ...

  9. ie烦人的bug篇

    好多公司都不支持ie6了,基本都是ie8+,就连jq新版本也宣布放弃低版本ie,就不用说那些框架了,不过想用兼容ie的angularjs可以用我司徒大神写的avalon,个人感觉avalon也是比较好 ...

  10. django(八)之数据库表的一对多,多对多表-增删改查

    单表操作 表记录的添加 方式一: Book() b=Book(name="python基础",price=99,author="yuan",pub_date=& ...