'''
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. Django ORM模型

    Object Relational Mapping(ORM) 一,ORM介绍 1, ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象 ...

  2. windows 虚拟环境下 安装 mysql 引擎一系列错误处理

    报错现象 运行django 报错. 很明显是缺少引擎 下载引擎 django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb m ...

  3. mysql Navicat 连接MySQL 8.0.11 出现2059错误

    https://www.cnblogs.com/lifan1998/p/9177731.html 原因 mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8 ...

  4. opencv图像融合(给人脸添加一个眼镜)

    基于dlib68点人脸检测的小功能实现 图像旋转找的现成的方法,稍稍麻烦点的地方就是mask处理,虽然目的达到了,但是效果一般 import numpy as np import cv2 as cv ...

  5. 树莓派(Raspberry Pi)使用Shell编写的极简Service

    树莓派(Raspberry Pi)运行的系统是基于Debian的,不仅可以运行Shell,还支持systemd和docker,可以编写一个简单的服务,让其在启动时运行,执行一些自动化的操作.这里在Ra ...

  6. Python数据采集分析告诉你为何上海二手房你都买不起

    感谢关注Python爱好者社区公众号,在这里,我们会每天向您推送Python相关的文章实战干货. 来吧,一起Python. 对商业智能BI.大数据分析挖掘.机器学习,python,R等数据领域感兴趣的 ...

  7. Hdoj 1846.Brave Game 题解

    Problem Description 十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫<勇敢者的游戏>(英文名称:Zathura),一直到现在,我依然对于电影中 ...

  8. 【转】c语言中的#号和##号的作用

    @2019-01-25 [小记] c语言中的#号和##号的作用

  9. 使用rt-thread中BSP-stm32 ENV构建工具报错

    @2019-01-23 [小记] --路径问题 参照rtt官方<STM32 系列 BSP 制作教程> 构建项目时出现如下错误 error1:打开 menuconfig 出错 解决方法: 根 ...

  10. bzoj4337树的同构

    树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱,这个树就成为有根树. 对于两个树T1和T2,如果能够把树T1的所有点重 ...