项目二:模拟博客园登录
声明:
项目代码纯粹本人自己编写,无任何抄袭、转载等情况,所以写的很low,仅供大家参考,有不懂的随时评论留言
项目要求:
首先程序启动,显示下面内容供用户选择:
- 请登录
- 请注册
- 进入文章页面
- 进入评论页面
- 进入日记页面
- 进入收藏页面
- 注销账号
- 退出整个程序
必须实现的功能:
注册功能要求:
首先判断用户名在userinfo.txt表中存在不在,存在就不能进行注册
- 当注册的用户名不存在的时候将用户名、密码要记录在文件中。
- 用户名要求:不能有特殊字符并且确保用户名唯一。
密码要求:长度要在6~14个字符之间。
登录功能要求:
- 用户输入用户名、密码进行登录验证。
- 登录成功之后,才可以访问3 – 7选项,如果没有登录或者登录不成功时访问3 – 7选项,不允许访问,提示用户进行登录!
- 用户名和密码不一致,只有三次登录机会,三次过后提示用户名被锁定,请联系管理员!并终止循环
- 当用户名错误三次,再次运行程序.登录锁定的账号继续提示用户名被锁定,请联系管理员!
进入文章页面要求:
- 提示欢迎xx进入文章页面。(xx是当前登录的用户名)
进入评论页面要求:
- 提示欢迎xx进入评论页面
进入日记页面要求:
- 提示欢迎xx进入日记页面。
进入收藏页面要求:
- 提示欢迎xx进入收藏页面。
注销账号要求:
- 不是退出整个程序,而是将已经登录的状态变成未登录状态(在次访问3~7选项时需要重新登录)
退出整个程序要求:
- 就是结束整个程序
源码:
def register():
"""
功能:账号密码注册
实现:判断用户输入内容符合注册要求后循环查看文件中有无输入信息,若没有将信息加入文件
:return: None
"""
flag1 = True
while flag1:
username = input("请输入账号(不能含有特殊字符):")
password = input("请输入密码(6~14字符):")
if not username.isalnum():
print("账号不能含有特殊字符,请重新输入!")
elif not 6 <= len(password) <= 14:
print("密码长度不符,请重新输入!")
else:
f1.seek(0)
for el in f1:
if username in el.split(":")[1]:
print("该账号已存在")
break
else:
print("注册成功!")
f1.write(f"\n{0}:{username}:{password}")
flag1 = False
def login():
"""
功能:账号密码登录
实现:输入三次错误锁定账号
:return: str ——> None
"""
global flag,username,visit
count = 3
while count:
username = input("请输入账号:")
password = input("请输入密码:")
f1.seek(0)
for el in f1:
num, user, pwd = el.strip().split(":")
if num == "1":
print("账号已被锁定!请联系管理员!")
return
elif username == user:
if password == pwd:
print("登陆成功!")
visit = True
return
else:
count -= 1
print(f"账号密码错误,请重新输入(剩余次数:{count})")
break
else:
print("账号不存在,请先注册!")
else:
print("账号已被锁定!请联系管理员!")
f1.seek(0)
for el in f1:
if el.strip().split(":")[1] == username:
f2.write(el.replace("0", "1", 1))
else:
f2.write(el)
flag = True
def article():
"""
功能:进入文章页面
实现:格式化输出
:return: None
"""
print(f"欢迎{username}进入文章页面")
def comment():
"""
功能:进入文章评论页面
实现:格式化输出
:return: None
"""
print(f"欢迎{username}进入评论页面")
def diary():
"""
功能:进入文章日记页面
实现:格式化输出
:return: None
"""
print(f"欢迎{username}进入日记页面")
def collect():
"""
功能:进入文章收藏页面
实现:格式化输出
:return: None
"""
print(f"欢迎{username}进入收藏页面")
def logout():
"""
功能:注销登录
实现:将全局访问权变标志变为False
:return: None
"""
global visit
print("注销成功")
visit = False
def drop_out():
"""
功能:退出
实现:利用exit()函数
:return:None
"""
print("欢迎您下次访问!")
exit()
function = {
"1": register,
"2": login,
"3": article,
"4": comment,
"5": diary,
"6": collect,
"7": logout,
"8": drop_out,
}
msg = f"""{'博客园'.center(15, "*")}
1.注册
2.登录
3.进入文章页面
4.进入评论页面
5.进入日记页面
6.进入收藏页面
7.注销账号
8.退出
请输入序号:"""
import os
flag = False
visit = False # 访问权限标志
while True:
with open("userinfo.txt", "r+", encoding="utf-8") as f1, \
open("userinfo_副本.txt", "w", encoding="utf-8") as f2:
choose = input(msg)
if choose in function: # 先判断choose是否在字典中
if visit: # 判断访问权限标志位是否开启,若不开启不能访问3~7
if choose in ["1", "2"]: # 若已登录不能再注册登录
print("您已登录,请先注销!")
else:
function[choose]() # 执行对应函数
elif choose in ["1", "2", "8"]: # 只能执行"1"、"2"、"8"功能
function[choose]()
else:
print("请先登录")
else:
print("您的输入有误,请重新输入!")
if flag: # 修改文件
os.remove("userinfo.txt")
os.rename("userinfo_副本.txt", "userinfo.txt")
flag = False
exit()