学Python这么久了,第一次写一个这么多的代码(我承认只有300多行,重复的代码挺多的,我承认我确实垃圾),但是也挺不容易的
自定义函数+装饰器,每一个模块写的一个函数
很多地方能用装饰器(逻辑跟不上,有的地方没用),包括双层装饰器(不会),很多地方需要优化,重复代码太多
我还是把我的流程图拿出来吧,虽然看着比上次的垃圾,但是我也做了一个小时,不容易!
好像是挺丑的(表示不会画,但我下次一定努力)
用户文件:
文件名为:user.txt
1代表管理员用户
2代表普通用户
smelond|admin|xx@qq.com|1 admin|admin|qweqwe@qq.com|2 qwe|qweasd|qwe@qq.com|2
代码(感觉这个程序还有很多bug):
#!/usr/bin/env python # _*_ coding:utf-8 _*_ # File_type:用户管理程序,装饰器版本,多功能 # Filename:user_manage_program.py # Author:smelond import os os.system("cls") # windows中的清屏 COUNT = 0 # 计数器 WHETHER_LOGIN = {"is_login": "error"} # 用于判断是否有用户登录 USER_LIST = [] # 当前用户信息存放的列表 def register_function(): # 注册函数 (所有注册都来调用这个函数) count = 3 # 计数器,做到了一个提示用户的作用 for i in range(3): # 循环3次 print("用户注册【你只有3次机会】,你还有【%s】次机会".center(80, "=") % count) # 输出提示 count -= 1 # 每次减1 username = input("请输入用户名:") while True: passwd = input("请输入密码:") if len(passwd) >= 5: break else: # 如果输入的密码小于5,位数,向下操作 print("请输入大于5位数的密码") input_passwd = input("【1:继续输入;2:返回上一步】") if input_passwd == "1": pass else: main() while True: email = input("请输入邮箱:") email_count = email.count("@") # 查看输入的邮箱是否带@, # print(email_count) # 返回1代表有一个@ if email_count == 1: break # 如果有一个@符号,代表邮箱输入正确,跳出当前循环 else: print("请输入正确的邮箱") input_email = input("【1:继续输入;2:返回上一步】") if input_email == "1": pass else: main() register_user = [username, passwd, email, "2"] # 将我们输入的用户名密码以及邮箱放到一个列表中,普通用户,所以加上了一个2 with open("user.txt", "r") as user: for line in user: f_user_list = line.strip("\n").split("|") if register_user[0] == f_user_list[0]: print("用户名已被注册") break if register_user[2] == f_user_list[2]: # 判断我们输入得的邮箱和用户名是否以及存在 print("邮箱已被注册") break else: # 接下来是通过了上面的筛选,开始把我们的注册信息写进数据库(总感觉上面有bug) user_write = "|".join(register_user) # 用join方法将这个列表转换为以|分隔 # open_user = open("user.txt", "a") # a 以追加方式写入文件 # open_user.write("\n" + user_write) # open_user.close() # 记得关闭 with open("user.txt", "a") as f: f.write("\n" + user_write) # 跟上面一样的方法,这种不用关闭文件 print("注册成功") user_write = """用户名:【%s】;密码:【%s】;邮箱:【%s】""" \ % (register_user[0], register_user[1], register_user[2]) # 注册成功的提示信息 return user_write # 返回提示信息 def outer(func): # 装饰器,用于管理接口 def inner(*args, **kwargs): if WHETHER_LOGIN["is_login"] == "success" and USER_LIST[3] == "1": # 为什么要加上引号,因为在列表中存储的是字符串,而不是整形 r = func() # 执行我们传入的函数 return r # 返回 elif WHETHER_LOGIN["is_login"] == "success" and USER_LIST[3] == "2": # 如果为普通用户,提示没有足够权限并且返回到main函数 print("\n当前用户为普通用户【%s】,没有足够的权限" % USER_LIST[0]) main() else: print("\n当前没有用户登录,请登录后再试。。。") # 否者就是没有登录了 main() return inner def user_login(func): # 检测用户是否登录的装饰器 def inner(*args, **kwargs): if WHETHER_LOGIN["is_login"] == "success": # 判断是否登录 r = func() return r # 如果已经登录,返回到原本的函数 else: user_no = input("请登录后再试【1:用户登录;2:返回】:") if user_no == "1":