项目分享:模拟博客园登录
时间:2019-09-23
本文章向大家介绍项目分享:模拟博客园登录,主要包括项目分享:模拟博客园登录使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
项目二:模拟博客园登录
声明:
项目代码纯粹本人自己编写,无任何抄袭、转载等情况,所以写的很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()
原文地址:https://www.cnblogs.com/tianlangdada/p/11573534.html
- Silverlight制作scrollbar.
- [Silverlight动画]转向行为 - 躲避行为
- WCF后续之旅(1): WCF是如何通过Binding进行通信的
- CaseStudy(showcase)布局篇-列表的排放与遮罩
- [Silverlight动画]转向行为 - 追捕行为
- 前端三大框架vue,angular,react大杂烩
- CaseStudy(showcase)布局篇-如何做一个自适应窗口大小的布局
- WCF后续之旅(2): 如何对Channel Layer进行扩展——创建自定义Channel
- [Silverlight动画]转向行为 - 到达行为
- Asp.Net统一前后端提示信息方案
- 人工智能:未来决策制定的机遇与影响
- CaseStudy(showcase)界面篇-导出xaml以及放入Blend的技巧
- [Silverlight动画]转向行为 - 避开行为
- CaseStudy(showcase)界面篇-desing设计界面
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- TCB系列学习文章——云开发登录篇(九)
- 字符串操作的全面总结
- C 语言 C++ 中 assert 的用法
- kubernetes之StatefulSet控制器
- 如何使用 S3CMD 访问 COS 服务
- 利用STS临时密钥服务快速搭建直传页面的实践
- codeforces 1436C(二分+数学)
- WAF案例:为什么curl可以wget不行?
- React进阶(4)-拆分Redux-将store,Reducer,action,actionTypes独立管理
- React进阶(5)-分离容器组件,UI组件(无状态组件)
- React进阶(6)-react-redux的使用
- Kubernetes 1.19.0——服务svc(2)
- Android菜单的定义及ActionBar的实现
- 3分钟短文:Laravel表单验证的“指挥中心”:FormRequest
- 10 种跨域解决方案(附终极方案)