'''
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. BZOJ2565最长双回文串——manacher

    题目描述 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同).输入长度为n的串S,求S的最长双回文子串T,即可将T分为两 ...

  2. 【BZOJ4944】【NOI2017】泳池 概率DP 常系数线性递推 特征多项式 多项式取模

    题目大意 有一个\(1001\times n\)的的网格,每个格子有\(q\)的概率是安全的,\(1-q\)的概率是危险的. 定义一个矩形是合法的当且仅当: 这个矩形中每个格子都是安全的 必须紧贴网格 ...

  3. Error fetching command 'collectstatic': You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path. Command 'collectstatic' skipped

    报错现象 报错解决 在 settings.py 中添加这一句话则可以解决 STATIC_ROOT = os.path.join(BASE_DIR, 'static') 测试不在有问题

  4. DevOps 10秒钟进阶大师之路

    简介:DevOps(Development开发和Operations运维的组合词),是一种文化.原则.思维.理念.组织. DevOps 是一个完整的面向开发.运维的工作流,以 IT 自动化以及持续集成 ...

  5. MT【248】$f(x)=\dfrac{1}{x-1}+\dfrac{1}{x-b}$的性质

    探讨函数$f(x)=\dfrac{1}{x-a}+\dfrac{1}{x-b}$其中$a<b$的几个性质 分析:对称性:关于$(\dfrac{a+b}{2},0)$证明提示:$f(x)+f(a+ ...

  6. Shell基础 - Bash基础功能

    历史命令 history选项: -c 清空历史命令 -w 立即保存历史命令Linux 下输入过的历史命令,都会保存在根目录下的:~/root/.bash_history 文件中默认保存 1000 条, ...

  7. Hdoj 2899.Strange fuction 题解

    Problem Description Now, here is a fuction: F(x) = 6 * x^7+8x^6+7x^3+5x^2-yx (0 <= x <=100) Ca ...

  8. Android LinearLayout 渐变背景

    更多  参考 Drawable Resources | Android Developers main_header.xml: <?xml version="1.0" enc ...

  9. 【Luogu3731】[HAOI2017]新型城市化(网络流,Tarjan)

    [Luogu3731][HAOI2017]新型城市化(网络流,Tarjan) 题面 洛谷 给定一张反图,保证原图能分成不超过两个团,问有多少种加上一条边的方法,使得最大团的个数至少加上\(1\). 题 ...

  10. iptables(3)

    ----------------------------iptables企业应用 ****************************单机防火墙列表#!/bin/bash#============ ...