'''
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. Newtonsoft.Json 概述

    有时候,在前后台数据交互或者APP与后台交互的时候,我们通常会使用Json进行数据交互,为此会使用到Newtonsoft.Json.dll 这个类库,这个类库非微软官方,但是下载量已经超过了数十万次, ...

  2. Django+Xadmin打造在线教育系统(四)

    完成授课机构的功能 模板继承 在templates目录下,新建base.html,剪切org-list.html内容到里面 编写org-list.html内容 继承base.html,将里面的面包屑和 ...

  3. 【XSY2680】玩具谜题 NTT 牛顿迭代

    题目描述 小南一共有\(n\)种不同的玩具小人,每种玩具小人的数量都可以被认为是无限大.每种玩具小人都有特定的血量,第\(i\)种玩具小人的血量就是整数\(i\).此外,每种玩具小人还有自己的攻击力, ...

  4. 【CF1097E】Egor and an RPG game(动态规划,贪心)

    [CF1097E]Egor and an RPG game(动态规划,贪心) 题面 洛谷 CodeForces 给定一个长度为\(n\)的排列\(a\),定义\(f(n)\)为将一个任意一个长度为\( ...

  5. 【BZOJ2823】[AHOI2012]信号塔(最小圆覆盖)

    [BZOJ2823][AHOI2012]信号塔(最小圆覆盖) 题面 BZOJ 洛谷 相同的题: BZOJ1 BZOJ2 洛谷 题解 模板题... #include<iostream> #i ...

  6. PHP-FPM安装报错解决

    PHP源码安装 setenforce 0--------------------------------------------------------------------安装php时的报错che ...

  7. luogu3621 城池攻占 (倍增)

    好像所有人都写的左偏树 但我不会啊233 首先发现乘的时候 系数不会为负,所以能得到一个关键条件:变化后的战斗力随变化前的战斗力大小单调 所以我们考虑倍增 设hp[x][i]是从x开始一路攻克$2^i ...

  8. kafka清理数据日志

    背景问题: 使用kafka的路上踩过不少坑,其中一个就是在测试环境使用kafka一阵子以后,发现其日志目录变的很大,占了磁盘很大空间,定位到指定目录下发现其中一个系统自动创建的 topic,__con ...

  9. POJ--1328 Radar Installation(贪心 排序)

    题目:Radar Installation 对于x轴上方的每个建筑 可以计算出x轴上一段区间可以包含这个点 所以就转化成 有多少个区间可以涵盖这所有的点 排序之后贪心一下就ok 用cin 好像一直t看 ...

  10. js 打开标签

    JS打开新标签的2种方式 1.超链接<a href="http://www.jb51.net" title="脚本之家">Welcome</a ...