python顾客管理类别

学Python这么久了,第一次写一个这么多的代码(我承认只有300多行,重复的代码挺多的,我承认我确实垃圾),但是也挺不容易的

 

 

本文实例为大家分享了Python用户管理系统的具体代码,供大家参考,具体内容如下

python数据结构之链表的实例讲解,python实例讲解

在程序中,经常需要将⼀组(通常是同为某个类型的)数据元素作为整体
管理和使⽤,需要创建这种元素组,⽤变量记录它们,传进传出函数等。
⼀组数据中包含的元素个数可能发⽣变化(可以增加或删除元素)。

对于这种需求,最简单的解决⽅案便是将这样⼀组元素看成⼀个序列,⽤
元素在序列⾥的位置和顺序,表示实际应⽤中的某种有意义的信息,或者
表示数据之间的某种关系。

这样的⼀组序列元素的组织形式,我们可以将其抽象为线性表。⼀个线性
表是某类元素的⼀个集合,还记录着元素之间的⼀种顺序关系。线性表是
最基本的数据结构之⼀,在实际程序中应⽤⾮常⼴泛,它还经常被⽤作更
复杂的数据结构的实现基础。

根据线性表的实际存储⽅式,分为两种实现模型:

顺序表,将元素顺序地存放在⼀块连续的存储区⾥,元素间的顺序关
系由它们的存储顺序⾃然表示。

链表,将元素存放在通过链接构造起来的⼀系列存储块中。

为什么需要链表:

顺序表的构建需要预先知道数据⼤⼩来申请连续的存储空间,⽽在进⾏扩
充时⼜需要进⾏数据的搬迁,所以使⽤起来并不是很灵活。
链表结构可以充分利⽤计算机内存空间,实现灵活的内存动态管理。

链表的定义:

链表(pnked pst)是⼀种常⻅的基础数据结构,是⼀种线性表,但是不
像顺序表⼀样连续存储数据,⽽是在每⼀个节点(数据存储单元)⾥存放
下⼀个节点的位置信息(即地址)。

图片 1

以上这篇python数据结构之链表的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持帮客之家。

在程序中,经常需要将组(通常是同为某个类型的)数据元素作为整体
管理和使,需要创…

自定义函数+装饰器,每一个模块写的一个函数

学Python这么久了,第一次写一个这么多的代码(我承认只有300多行,重复的代码挺多的,我承认我确实垃圾),但是也挺不容易的

学Python这么久了,第一次写一个这么多的代码(我承认只有300多行,重复的代码挺多的,我承认我确实垃圾),但是也挺不容易的

用户管理系统

很多地方能用装饰器(逻辑跟不上,有的地方没用),包括双层装饰器(不会),很多地方需要优化,重复代码太多

自定义函数+装饰器,每一个模块写的一个函数

自定义函数+装饰器,每一个模块写的一个函数

1.注册新用户
如果注册用户已经存在,则报错
需要填写信息: name, passwd, gender, email,age
2.用户登录 要求同之前写的用户登录系统
3.注销用户 用户注销时,需要输入用户名和正确的用户密码
4.显示用户信息 显示系统中存在所有已经注册用户的信息
5.退出系统

我还是把我的流程图拿出来吧,虽然看着比上次的垃圾,但是我也做了一个小时,不容易!

很多地方能用装饰器(逻辑跟不上,有的地方没用),包括双层装饰器(不会),很多地方需要优化,重复代码太多

很多地方能用装饰器(逻辑跟不上,有的地方没用),包括双层装饰器(不会),很多地方需要优化,重复代码太多

代码如下

图片 2

我还是把我的流程图拿出来吧,虽然看着比上次的垃圾,但是我也做了一个小时,不容易!

我还是把我的流程图拿出来吧,虽然看着比上次的垃圾,但是我也做了一个小时,不容易!

#!/usr/bin/env python
#coding:utf-8

info = """
************************************************************
   用户登录管理系统
************************************************************

   1. 注册新用户
   2. 用户登录
   3. 用户注销
   4. 用户信息显示
   5. 退出系统
"""
userinfo = {

 'root': {
 'name': 'root',
 'password': 'redhat',
 'gender': 1,
 'email': '',
 'age': 12
 },
}

gender_choice = [0, 1, 2]

def CreateUser():
 print "注册用户界面".center(50, '*')
 name = raw_input("*注册用户名:")
 if name in userinfo:
 print "用户已存在,请更换注册名"
 else:
 password = raw_input("*用户密码:")
 while True:
  gender = input("*性别(0-男 1-女 2-其他):")
  if gender in gender_choice:
  break
  else:
  print "请输入正确的选择"

 email = raw_input("用户邮箱:")
 if not email:
  email = None
 age = raw_input("年龄:")
 if not age:
  age = None
 else:
  age = int(age)
 userinfo[name] = {
  'name': name,
  'password': password,
  'gender': gender,
  'email': email,
  'age': age,
 }
 print "%s 用户注册成功!!!" % (name)

def UserLogin():
 print "用户登录界面".center(50, '*')
 trycount = 0
 while trycount < 3:
 name = raw_input("登录用户名:")
 if name not in userinfo:
  print "用户未注册"
  break
 password = raw_input("登录密码:")
 trycount += 1
 if password == userinfo[name]['password']:
  print "恭喜%s登录成功" % (name)
  break
 else:
  print "请输入正确的用户名或密码!"
 else:
 print "已登录三次,请稍后再试"


def DeleteUser():
 print "用户注销界面".center(50, '*')
 name = raw_input("注销用户名:")
 if name not in userinfo:
 print "用户未注册"
 else:
 password = raw_input("登录密码:")
 if password == userinfo[name]['password']:
  userinfo.pop(name)
  print "恭喜注销%s成功" % (name)

def UserInfo():
 for key, value in userinfo.items():
 print "用户:%s" % (key),
 print "性别:%d" % (value['gender']),
 print "邮箱:%s" % (value['email']),
 print "年龄:%s" % (value['age']),
 print "\n\n"

def main():
 while True:
 print info
 choice = raw_input("Choice:").strip()
 if choice == "1":
  CreateUser()
 elif choice == "2":
  UserLogin()
 elif choice == "3":
  DeleteUser()
 elif choice == "4":
  UserInfo()
 elif choice == "5":
  exit()
 else:
  print "输入正确的选择"

main()

好像是挺丑的(表示不会画,但我下次一定努力)

图片 3

图片 3

更多学习资料请关注专题《管理系统开发》。

用户文件:

 

 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

文件名为:user.txt

好像是挺丑的(表示不会画,但我下次一定努力)

好像是挺丑的(表示不会画,但我下次一定努力)

您可能感兴趣的文章:

  • python实现员工管理系统
  • python用户管理系统的实例讲解
  • Python实现GUI学生信息管理系统
  • python实现用户管理系统
  • python实现外卖信息管理系统
  • python实现学生管理系统
  • python版学生管理系统
  • Python实现学生成绩管理系统
  • Python学生成绩管理系统简洁版
  • Python实现学校管理系统

1代表管理员用户

 用户文件:

 用户文件:

2代表普通用户

文件名为:user.txt

文件名为:user.txt

smelond|admin|xx@qq.com|1
admin|admin|qweqwe@qq.com|2
qwe|qweasd|qwe@qq.com|2

1代表管理员用户

1代表管理员用户

代码(感觉这个程序还有很多bug):

2代表普通用户

2代表普通用户

#!/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":
  login()
  else:
  print("返回成功")
  main()
 return inner # 切记,这里必须返回一个inner,不然上面的inner不会执行,不能再后面加(),如果加上了,就相当于调用这个函数

def exit_login(): # 6退出登录
 global USER_LIST
 if USER_LIST:
 quit_login = input("当前用户为【%s】,确定要退出【Y/N】:" % USER_LIST[0])
 # if quit_login == "Y" or quit_login == "y" or quit_login == "yes":
 if quit_login in ("Y", "y", "yes", "yES", "yeS", "yEs", "YES", "Yes", "YEs"): # 如果quit_login满足其中一个,继续执行
  WHETHER_LOGIN["is_login"] = "error"
  USER_LIST = [] # 直接将列表清除为初始状态,不知道这种方法好不好,但是好像管用
 elif quit_login in ("N", "n", "No", "nO", "NO"):
  print("退出失败")
 else:
 print("没有用户登录。。。")

def verifi_passwd():
 with open("user.txt", "r") as old_user:
 lines = old_user.readlines() # 一次性读取整个文件,感觉这方方式不好
 flag = True
 cout = 3
 while flag:
 cout -= 1
 user_info = input("请输入用户名:")
 if user_info == "": # 判断是否输入字符串
  print("你没有输入任何用户。。。\n")
  manage()
 for line in lines:
  user_all_info = line.strip("\n").split("|")
  if user_info == user_all_info[0]:
  current_user = user_all_info # 如果输入的用户和用户文件里面的用户相同,那就将他的所有信息写入一个新的列表中
  flag = False
 if cout == 0:
  print("然而,你可能不知道有哪些用户,赶紧去查看吧。。。")
  manage()
 lines_user = [lines, current_user]
 return lines_user

def user_info_func(username, password_or_power, user_info, lines): # 几个传入的类型为:用户名、密码或用户权限,需要修改的用户列表的位置、需要循环的文件内容
 new_user_info = username.copy() # 将username复制给new_user_info
 new_user_info[user_info] = password_or_power # 将新的用户密码修改为输入的新密码
 username = "|".join(username) # 将列表转换为数据库可以识别的内容
 new_user_info = "|".join(new_user_info)
 # print(username, new_user_info)
 with open("user.txt", "w") as new_user:
 for line in lines: # 将返回的整个文件循环打印
  if username in line: # 如果返回的用户信息在返回的文件里面
  line = line.replace(username, new_user_info) # 那就将旧的用户信息替换为新的用户信息
  new_user.write(line) # 写入文件
 print("修改成功") # 提示信息

@outer # 调用装饰器
def manage(): # 5用户管理接口
 while True:
 print("用户管理接口【欢迎管理员[%s]】".center(69, "=") % USER_LIST[0])
 print("1:查看所有用户;2、添加新用户;3:删除用户;4:修改用户密码;5:升级用户权限;6:退出用户管理")
 user_input = input("请输入对象序号:")
 if user_input == "1": # 查看用户信息
  print("\n" + "-" * 80) # 打印80个-
  with open("user.txt", "r") as user_info:
  for line in user_info:
   user_list = line.strip("\n").split("|") # 去掉默认的\n和|将他转换为列表类型
   if user_list[3] == "1":
   user_rights = "管理员用户" # 用户最后一个数如果等于1,代表管理员
   else:
   user_rights = "普通用户" # 否者为普通用户
   ordinary_user = """用户名【%s】\t密码【%s】\t邮箱【%s】\t用户等级【%s】""" \
     % (user_list[0], user_list[1], user_list[2], user_rights) # 中间默认有一个换行符
   print(ordinary_user)
  print("-" * 80 + "\n")
 elif user_input == "2":
  while True:
  ret = register_function() # 调用注册函数
  print(ret) # 输出返回值
  break # 跳出当前这个while循环
 elif user_input == "3":
  flag = "error" # 默认是没有用户的(做到一个提示作用)
  del_user = verifi_passwd()[1][0] # 得到函数返回的第二个值
  print("\033[1;31m删除用户为:\033[0m", del_user)
  with open("user.txt", "r") as old_user:
  lines = old_user.readlines() # 一次性读取整个文件,感觉这方方式不好1
  with open("user.txt", "w") as new_user:
  for line in lines: # 将上面读取到的文集一行一行的循环出来
   if line.startswith(del_user): # 检查数据库里面是否有我们输入的用户(以输入的用户名开头)
   flag = "success"
   continue
   new_user.write(line)
  if flag == "success": # 提示成功
   print("删除成功")
  else:
   print("没有这个用户。。。") # 如果输入的为空格或一些没有的用户,提示没有这个用户
   continue
 elif user_input == "4":
  ret = verifi_passwd() # 得到函数返回值
  lines = ret[0] # 获取到返回的整个文件内容
  username = ret[1] # 获取到返回的需要修改密码的用户
  new_password = input("请输入用户的新密码:")
  if len(new_password) < 5: # 判断输入的密码长度是否大于或等于5位数
  error_prompt = input("你输入的密码长度小于5位数,由于你是管理员,输入Y继续:").strip("") # 去掉输入的空格
  if error_prompt not in ("y", "Y"): # 如果输入的值不为y或Y,就直接退出
   print("退出。。。")
   continue
  user_info_func(username, new_password, 1, lines) # 传入实参到函数,1在列表中的位置代表用户的新密码
 elif user_input == "5": # 下面这部分和上面的部分基本相似,其实可以写一个函数用来调用的
  ret = verifi_passwd()
  lines = ret[0]
  username = ret[1] # 获取到输入用户的所有信息
  new_power = input("输入Y提升用户权限:")
  if new_power not in ("y", "Y"):
  print("输入错误。。。")
  break
  user_info_func(username, "1", 3, lines) # 传入实参:用户名、权限(1代表管理员)、位置、循环的文件内容
 elif user_input == "6":
  print("返回上一级!!!")
  main()
 else:
  print("输入有误")

@user_login # 调用装饰器
def see(): # 4查询当前用户的基本信息
 if USER_LIST[3] == "1": # 数据库里面定义了1代表管理员用户,2代表普通用户
 user_level = "管理员用户"
 else:
 user_level = "普通用户"
 user_see = """
 ----------------------------------------
 用户名: 【%s】
 密 码: 【%s】
 邮 箱: 【%s】
 用户等级:【%s】
 ----------------------------------------
 """ % (USER_LIST[0], USER_LIST[1], USER_LIST[2], user_level) # 一个简单的格式化输出
 print(user_see)

def error_password():
 counter = 3
 while True:
 counter -= 1
 if counter == 0:
  print("你输入错误的次数太多,程序自动返回。。。")
  main()
 else:
  print("两次输入的密码不相同。。。")
  continue

@user_login # 调用装饰器
def alter(): # 3修改密码
 print("当前用户为:【%s】" % USER_LIST[0])
 while True:
 old_user_password = input("请输入当前用户的旧密码密码:")
 if old_user_password == USER_LIST[1]:
  flag = True
  count = 3
  while flag:
  count -= 1
  new_user_password = input("请输入当前用户的\033[1;31m新密码\033[0m:") # 给新密码字体加颜色
  new_user_password1 = input("再次输入当前用户的\033[1;31m新密码\033[0m:")
  if len(new_user_password) >= 5:
   flag = False
  elif count == 0:
   print("多次不合法,程序自动返回。。。")
   main()
  else:
   print("输入不合法,请输入大于5位数的密码")
  if new_user_password == new_user_password1: # 判断两次输入的密码是否相等
  with open("user.txt", "r") as user_info: # 以读的方式打开这个文件
   old_user_info = "|".join(USER_LIST) # 获取以前的旧信息
   for line in user_info: # 将获取到的每行循环输出
   if USER_LIST[0] in line: # 找到当前登录的用户的这个用户名
    USER_LIST[1] = new_user_password1 # 如果找到了,就把新密码重新加入到我们全局的用户的信息列表中
    new_user_info = "|".join(USER_LIST) # 将用户信息表中的内容用join方法转换为用户数据库里面的格式(新用户信息)
    # print(new_user_info)
    # print(old_user_info)
    break # 跳出当前
  with open("user.txt", "r") as old_user:
   lines = old_user.readlines() # 一次性读取整个文件,感觉这方方式不好
  with open("user.txt", "w") as new_user:
   for line in lines: # 将上面读取到的文集一行一行的循环出来
   if old_user_info in line: # 检查文件里面是否有我们用户的旧信息
    line = line.replace(old_user_info, new_user_info) # 如果有就用replace替换
   new_user.write(line) # 接着写入到文件
  print("修改成功√")
  break # 完成后跳出
  else: # 两次不相等
  print("两次输入的密码不相同,程序自动返回。。。")
  main()
 else: # 当前用户密码输入错误
  print("当前用户密码输入错误,程序自动返回。。。")
  main()

def register(): # 2用户注册
 if WHETHER_LOGIN["is_login"] == "success":
 quit_login = input("无法注册用户,请退出登录后重试【1:退出登录;2:返回上一步】:")
 if quit_login == "1":
  exit_login() # 跳转到退出用户函数
 elif quit_login == "2":
  print("返回成功")
 elif WHETHER_LOGIN["is_login"] == "error":
 ret = register_function() # 调用注册函数
 print(ret) # 将返回值输出

def login(): # 1用户登录
 print("用户登录".center(82, "="))
 username = input("请输入用户名:")
 passwd = input("请输入密码:")
 with open("user.txt", "r") as user:
 for line in user:
  f_user_list = line.strip("\n").split("|") # 去除每行默认的回车,以及|,并且将它转换为列表赋给f_admin_list
  if f_user_list[0] == username and f_user_list[1] == passwd:
  print("登录成功")
  global USER_LIST
  USER_LIST = f_user_list # 将获取到的当前行放到用户信息列表中
  WHETHER_LOGIN["is_login"] = "success" # 登录成功将is_login的值设置success
  WHETHER_LOGIN["is_user"] = username # 将我们登录的用户放入字典用,方便后期查询
  # print(USER_LIST)
  return f_user_list
 else:
  print("登录失败")

def main():
 while True:
 global COUNT
 COUNT += 1
 print("用户管理系统".center(80, "*") + "\n")
 print("1、用户登录;2:用户注册;3:修改密码;4:用户信息;5:用户管理;6:退出登录;7:退出程序")
 inp = input("请输入序号:")
 if inp == "1":
  if USER_LIST:
  if USER_LIST[3] == "1":
   print("当前为管理员用户:【%s】,不能继续登录" % USER_LIST[0])
  else:
   print("当前用户为【%s】,不能继续登录" % USER_LIST[0])
  else:
  login()
 elif inp == "2":
  register()
 elif inp == "3":
  alter()
 elif inp == "4":
  see()
 elif inp == "5":
  manage()
 elif inp == "6":
  exit_login()
 elif inp == "7":
  exit("程序已退出!!!")
 else:
  if COUNT == 3:
  exit("输入错误次数过多,程序自动退出。。。")
  else:
  print("输入有误,请重新输入。。。\n")
  continue

main()
smelond|admin|xx@qq.com|1
admin|admin|qweqwe@qq.com|2
qwe|qweasd|qwe@qq.com|2
smelond|admin|xx@qq.com|1
admin|admin|qweqwe@qq.com|2
qwe|qweasd|qwe@qq.com|2

 

 

代码(感觉这个程序还有很多bug):

代码(感觉这个程序还有很多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":
                login()
            else:
                print("返回成功")
                main()

    return inner  # 切记,这里必须返回一个inner,不然上面的inner不会执行,不能再后面加(),如果加上了,就相当于调用这个函数


def exit_login():  # 6退出登录
    global USER_LIST
    if USER_LIST:
        quit_login = input("当前用户为【%s】,确定要退出【Y/N】:" % USER_LIST[0])
        # if quit_login == "Y" or quit_login == "y" or quit_login == "yes":
        if quit_login in ("Y", "y", "yes", "yES", "yeS", "yEs", "YES", "Yes", "YEs"):  # 如果quit_login满足其中一个,继续执行
            WHETHER_LOGIN["is_login"] = "error"
            USER_LIST = []  # 直接将列表清除为初始状态,不知道这种方法好不好,但是好像管用
        elif quit_login in ("N", "n", "No", "nO", "NO"):
            print("退出失败")
    else:
        print("没有用户登录。。。")


def verifi_passwd():
    with open("user.txt", "r") as old_user:
        lines = old_user.readlines()  # 一次性读取整个文件,感觉这方方式不好
    flag = True
    cout = 3
    while flag:
        cout -= 1
        user_info = input("请输入用户名:")
        if user_info == "":  # 判断是否输入字符串
            print("你没有输入任何用户。。。\n")
            manage()
        for line in lines:
            user_all_info = line.strip("\n").split("|")
            if user_info == user_all_info[0]:
                current_user = user_all_info  # 如果输入的用户和用户文件里面的用户相同,那就将他的所有信息写入一个新的列表中
                flag = False
        if cout == 0:
            print("然而,你可能不知道有哪些用户,赶紧去查看吧。。。")
            manage()

    lines_user = [lines, current_user]
    return lines_user


def user_info_func(username, password_or_power, user_info, lines):  # 几个传入的类型为:用户名、密码或用户权限,需要修改的用户列表的位置、需要循环的文件内容
    new_user_info = username.copy()  # 将username复制给new_user_info
    new_user_info[user_info] = password_or_power  # 将新的用户密码修改为输入的新密码
    username = "|".join(username)  # 将列表转换为数据库可以识别的内容
    new_user_info = "|".join(new_user_info)
    # print(username, new_user_info)
    with open("user.txt", "w") as new_user:
        for line in lines:  # 将返回的整个文件循环打印
            if username in line:  # 如果返回的用户信息在返回的文件里面
                line = line.replace(username, new_user_info)  # 那就将旧的用户信息替换为新的用户信息
            new_user.write(line)  # 写入文件
        print("修改成功")  # 提示信息


@outer  # 调用装饰器
def manage():  # 5用户管理接口
    while True:
        print("用户管理接口【欢迎管理员[%s]】".center(69, "=") % USER_LIST[0])
        print("1:查看所有用户;2、添加新用户;3:删除用户;4:修改用户密码;5:升级用户权限;6:退出用户管理")
        user_input = input("请输入对象序号:")
        if user_input == "1":  # 查看用户信息
            print("\n" + "-" * 80)  # 打印80个-
            with open("user.txt", "r") as user_info:
                for line in user_info:
                    user_list = line.strip("\n").split("|")  # 去掉默认的\n和|将他转换为列表类型
                    if user_list[3] == "1":
                        user_rights = "管理员用户"  # 用户最后一个数如果等于1,代表管理员
                    else:
                        user_rights = "普通用户"  # 否者为普通用户
                    ordinary_user = """用户名【%s】\t密码【%s】\t邮箱【%s】\t用户等级【%s】""" \
                                    % (user_list[0], user_list[1], user_list[2], user_rights)  # 中间默认有一个换行符
                    print(ordinary_user)
            print("-" * 80 + "\n")

        elif user_input == "2":
            while True:
                ret = register_function()  # 调用注册函数
                print(ret)  # 输出返回值
                break  # 跳出当前这个while循环

        elif user_input == "3":
            flag = "error"  # 默认是没有用户的(做到一个提示作用)
            del_user = verifi_passwd()[1][0]  # 得到函数返回的第二个值
            print("\033[1;31m删除用户为:\033[0m", del_user)
            with open("user.txt", "r") as old_user:
                lines = old_user.readlines()  # 一次性读取整个文件,感觉这方方式不好1
            with open("user.txt", "w") as new_user:
                for line in lines:  # 将上面读取到的文集一行一行的循环出来
                    if line.startswith(del_user):  # 检查数据库里面是否有我们输入的用户(以输入的用户名开头)
                        flag = "success"
                        continue
                    new_user.write(line)
                if flag == "success":  # 提示成功
                    print("删除成功")
                else:
                    print("没有这个用户。。。")  # 如果输入的为空格或一些没有的用户,提示没有这个用户
                    continue

        elif user_input == "4":
            ret = verifi_passwd()  # 得到函数返回值
            lines = ret[0]  # 获取到返回的整个文件内容
            username = ret[1]  # 获取到返回的需要修改密码的用户
            new_password = input("请输入用户的新密码:")
            if len(new_password) < 5:  # 判断输入的密码长度是否大于或等于5位数
                error_prompt = input("你输入的密码长度小于5位数,由于你是管理员,输入Y继续:").strip("")  # 去掉输入的空格
                if error_prompt not in ("y", "Y"):  # 如果输入的值不为y或Y,就直接退出
                    print("退出。。。")
                    continue
            user_info_func(username, new_password, 1, lines)  # 传入实参到函数,1在列表中的位置代表用户的新密码
        elif user_input == "5":  # 下面这部分和上面的部分基本相似,其实可以写一个函数用来调用的
            ret = verifi_passwd()
            lines = ret[0]
            username = ret[1]  # 获取到输入用户的所有信息
            new_power = input("输入Y提升用户权限:")
            if new_power not in ("y", "Y"):
                print("输入错误。。。")
                break
            user_info_func(username, "1", 3, lines)  # 传入实参:用户名、权限(1代表管理员)、位置、循环的文件内容
        elif user_input == "6":
            print("返回上一级!!!")
            main()
        else:
            print("输入有误")


@user_login  # 调用装饰器
def see():  # 4查询当前用户的基本信息
    if USER_LIST[3] == "1":  # 数据库里面定义了1代表管理员用户,2代表普通用户
        user_level = "管理员用户"
    else:
        user_level = "普通用户"
    user_see = """
    ----------------------------------------
    用户名:  【%s】
    密  码:  【%s】
    邮  箱:  【%s】
    用户等级:【%s】
    ----------------------------------------
        """ % (USER_LIST[0], USER_LIST[1], USER_LIST[2], user_level)  # 一个简单的格式化输出
    print(user_see)


def error_password():
    counter = 3
    while True:
        counter -= 1
        if counter == 0:
            print("你输入错误的次数太多,程序自动返回。。。")
            main()
        else:
            print("两次输入的密码不相同。。。")
            continue


@user_login  # 调用装饰器
def alter():  # 3修改密码
    print("当前用户为:【%s】" % USER_LIST[0])
    while True:
        old_user_password = input("请输入当前用户的旧密码密码:")
        if old_user_password == USER_LIST[1]:
            flag = True
            count = 3
            while flag:
                count -= 1
                new_user_password = input("请输入当前用户的\033[1;31m新密码\033[0m:")  # 给新密码字体加颜色
                new_user_password1 = input("再次输入当前用户的\033[1;31m新密码\033[0m:")
                if len(new_user_password) >= 5:
                    flag = False
                elif count == 0:
                    print("多次不合法,程序自动返回。。。")
                    main()
                else:
                    print("输入不合法,请输入大于5位数的密码")
            if new_user_password == new_user_password1:  # 判断两次输入的密码是否相等
                with open("user.txt", "r") as user_info:  # 以读的方式打开这个文件
                    old_user_info = "|".join(USER_LIST)  # 获取以前的旧信息
                    for line in user_info:  # 将获取到的每行循环输出
                        if USER_LIST[0] in line:  # 找到当前登录的用户的这个用户名
                            USER_LIST[1] = new_user_password1  # 如果找到了,就把新密码重新加入到我们全局的用户的信息列表中
                            new_user_info = "|".join(USER_LIST)  # 将用户信息表中的内容用join方法转换为用户数据库里面的格式(新用户信息)
                            # print(new_user_info)
                            # print(old_user_info)
                            break  # 跳出当前
                with open("user.txt", "r") as old_user:
                    lines = old_user.readlines()  # 一次性读取整个文件,感觉这方方式不好
                with open("user.txt", "w") as new_user:
                    for line in lines:  # 将上面读取到的文集一行一行的循环出来
                        if old_user_info in line:  # 检查文件里面是否有我们用户的旧信息
                            line = line.replace(old_user_info, new_user_info)  # 如果有就用replace替换
                        new_user.write(line)  # 接着写入到文件
                print("修改成功√")
                break  # 完成后跳出

            else:  # 两次不相等
                print("两次输入的密码不相同,程序自动返回。。。")
                main()
        else:  # 当前用户密码输入错误
            print("当前用户密码输入错误,程序自动返回。。。")
            main()


def register():  # 2用户注册
    if WHETHER_LOGIN["is_login"] == "success":
        quit_login = input("无法注册用户,请退出登录后重试【1:退出登录;2:返回上一步】:")
        if quit_login == "1":
            exit_login()  # 跳转到退出用户函数
        elif quit_login == "2":
            print("返回成功")
    elif WHETHER_LOGIN["is_login"] == "error":
        ret = register_function()  # 调用注册函数
        print(ret)  # 将返回值输出


def login():  # 1用户登录
    print("用户登录".center(82, "="))
    username = input("请输入用户名:")
    passwd = input("请输入密码:")
    with open("user.txt", "r") as user:
        for line in user:
            f_user_list = line.strip("\n").split("|")  # 去除每行默认的回车,以及|,并且将它转换为列表赋给f_admin_list
            if f_user_list[0] == username and f_user_list[1] == passwd:
                print("登录成功")
                global USER_LIST
                USER_LIST = f_user_list  # 将获取到的当前行放到用户信息列表中
                WHETHER_LOGIN["is_login"] = "success"  # 登录成功将is_login的值设置success
                WHETHER_LOGIN["is_user"] = username  # 将我们登录的用户放入字典用,方便后期查询
                # print(USER_LIST)
                return f_user_list
        else:
            print("登录失败")


def main():
    while True:
        global COUNT
        COUNT += 1
        print("用户管理系统".center(80, "*") + "\n")
        print("1、用户登录;2:用户注册;3:修改密码;4:用户信息;5:用户管理;6:退出登录;7:退出程序")
        inp = input("请输入序号:")
        if inp == "1":
            if USER_LIST:
                if USER_LIST[3] == "1":
                    print("当前为管理员用户:【%s】,不能继续登录" % USER_LIST[0])
                else:
                    print("当前用户为【%s】,不能继续登录" % USER_LIST[0])
            else:
                login()
        elif inp == "2":
            register()
        elif inp == "3":
            alter()
        elif inp == "4":
            see()
        elif inp == "5":
            manage()
        elif inp == "6":
            exit_login()
        elif inp == "7":
            exit("程序已退出!!!")
        else:
            if COUNT == 3:
                exit("输入错误次数过多,程序自动退出。。。")
            else:
                print("输入有误,请重新输入。。。\n")
                continue


main()
#!/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":
                login()
            else:
                print("返回成功")
                main()

    return inner  # 切记,这里必须返回一个inner,不然上面的inner不会执行,不能再后面加(),如果加上了,就相当于调用这个函数


def exit_login():  # 6退出登录
    global USER_LIST
    if USER_LIST:
        quit_login = input("当前用户为【%s】,确定要退出【Y/N】:" % USER_LIST[0])
        # if quit_login == "Y" or quit_login == "y" or quit_login == "yes":
        if quit_login in ("Y", "y", "yes", "yES", "yeS", "yEs", "YES", "Yes", "YEs"):  # 如果quit_login满足其中一个,继续执行
            WHETHER_LOGIN["is_login"] = "error"
            USER_LIST = []  # 直接将列表清除为初始状态,不知道这种方法好不好,但是好像管用
        elif quit_login in ("N", "n", "No", "nO", "NO"):
            print("退出失败")
    else:
        print("没有用户登录。。。")


def verifi_passwd():
    with open("user.txt", "r") as old_user:
        lines = old_user.readlines()  # 一次性读取整个文件,感觉这方方式不好
    flag = True
    cout = 3
    while flag:
        cout -= 1
        user_info = input("请输入用户名:")
        if user_info == "":  # 判断是否输入字符串
            print("你没有输入任何用户。。。\n")
            manage()
        for line in lines:
            user_all_info = line.strip("\n").split("|")
            if user_info == user_all_info[0]:
                current_user = user_all_info  # 如果输入的用户和用户文件里面的用户相同,那就将他的所有信息写入一个新的列表中
                flag = False
        if cout == 0:
            print("然而,你可能不知道有哪些用户,赶紧去查看吧。。。")
            manage()

    lines_user = [lines, current_user]
    return lines_user


def user_info_func(username, password_or_power, user_info, lines):  # 几个传入的类型为:用户名、密码或用户权限,需要修改的用户列表的位置、需要循环的文件内容
    new_user_info = username.copy()  # 将username复制给new_user_info
    new_user_info[user_info] = password_or_power  # 将新的用户密码修改为输入的新密码
    username = "|".join(username)  # 将列表转换为数据库可以识别的内容
    new_user_info = "|".join(new_user_info)
    # print(username, new_user_info)
    with open("user.txt", "w") as new_user:
        for line in lines:  # 将返回的整个文件循环打印
            if username in line:  # 如果返回的用户信息在返回的文件里面
                line = line.replace(username, new_user_info)  # 那就将旧的用户信息替换为新的用户信息
            new_user.write(line)  # 写入文件
        print("修改成功")  # 提示信息


@outer  # 调用装饰器
def manage():  # 5用户管理接口
    while True:
        print("用户管理接口【欢迎管理员[%s]】".center(69, "=") % USER_LIST[0])
        print("1:查看所有用户;2、添加新用户;3:删除用户;4:修改用户密码;5:升级用户权限;6:退出用户管理")
        user_input = input("请输入对象序号:")
        if user_input == "1":  # 查看用户信息
            print("\n" + "-" * 80)  # 打印80个-
            with open("user.txt", "r") as user_info:
                for line in user_info:
                    user_list = line.strip("\n").split("|")  # 去掉默认的\n和|将他转换为列表类型
                    if user_list[3] == "1":
                        user_rights = "管理员用户"  # 用户最后一个数如果等于1,代表管理员
                    else:
                        user_rights = "普通用户"  # 否者为普通用户
                    ordinary_user = """用户名【%s】\t密码【%s】\t邮箱【%s】\t用户等级【%s】""" \
                                    % (user_list[0], user_list[1], user_list[2], user_rights)  # 中间默认有一个换行符
                    print(ordinary_user)
            print("-" * 80 + "\n")

        elif user_input == "2":
            while True:
                ret = register_function()  # 调用注册函数
                print(ret)  # 输出返回值
                break  # 跳出当前这个while循环

        elif user_input == "3":
            flag = "error"  # 默认是没有用户的(做到一个提示作用)
            del_user = verifi_passwd()[1][0]  # 得到函数返回的第二个值
            print("\033[1;31m删除用户为:\033[0m", del_user)
            with open("user.txt", "r") as old_user:
                lines = old_user.readlines()  # 一次性读取整个文件,感觉这方方式不好1
            with open("user.txt", "w") as new_user:
                for line in lines:  # 将上面读取到的文集一行一行的循环出来
                    if line.startswith(del_user):  # 检查数据库里面是否有我们输入的用户(以输入的用户名开头)
                        flag = "success"
                        continue
                    new_user.write(line)
                if flag == "success":  # 提示成功
                    print("删除成功")
                else:
                    print("没有这个用户。。。")  # 如果输入的为空格或一些没有的用户,提示没有这个用户
                    continue

        elif user_input == "4":
            ret = verifi_passwd()  # 得到函数返回值
            lines = ret[0]  # 获取到返回的整个文件内容
            username = ret[1]  # 获取到返回的需要修改密码的用户
            new_password = input("请输入用户的新密码:")
            if len(new_password) < 5:  # 判断输入的密码长度是否大于或等于5位数
                error_prompt = input("你输入的密码长度小于5位数,由于你是管理员,输入Y继续:").strip("")  # 去掉输入的空格
                if error_prompt not in ("y", "Y"):  # 如果输入的值不为y或Y,就直接退出
                    print("退出。。。")
                    continue
            user_info_func(username, new_password, 1, lines)  # 传入实参到函数,1在列表中的位置代表用户的新密码
        elif user_input == "5":  # 下面这部分和上面的部分基本相似,其实可以写一个函数用来调用的
            ret = verifi_passwd()
            lines = ret[0]
            username = ret[1]  # 获取到输入用户的所有信息
            new_power = input("输入Y提升用户权限:")
            if new_power not in ("y", "Y"):
                print("输入错误。。。")
                break
            user_info_func(username, "1", 3, lines)  # 传入实参:用户名、权限(1代表管理员)、位置、循环的文件内容
        elif user_input == "6":
            print("返回上一级!!!")
            main()
        else:
            print("输入有误")


@user_login  # 调用装饰器
def see():  # 4查询当前用户的基本信息
    if USER_LIST[3] == "1":  # 数据库里面定义了1代表管理员用户,2代表普通用户
        user_level = "管理员用户"
    else:
        user_level = "普通用户"
    user_see = """
    ----------------------------------------
    用户名:  【%s】
    密  码:  【%s】
    邮  箱:  【%s】
    用户等级:【%s】
    ----------------------------------------
        """ % (USER_LIST[0], USER_LIST[1], USER_LIST[2], user_level)  # 一个简单的格式化输出
    print(user_see)


def error_password():
    counter = 3
    while True:
        counter -= 1
        if counter == 0:
            print("你输入错误的次数太多,程序自动返回。。。")
            main()
        else:
            print("两次输入的密码不相同。。。")
            continue


@user_login  # 调用装饰器
def alter():  # 3修改密码
    print("当前用户为:【%s】" % USER_LIST[0])
    while True:
        old_user_password = input("请输入当前用户的旧密码密码:")
        if old_user_password == USER_LIST[1]:
            flag = True
            count = 3
            while flag:
                count -= 1
                new_user_password = input("请输入当前用户的\033[1;31m新密码\033[0m:")  # 给新密码字体加颜色
                new_user_password1 = input("再次输入当前用户的\033[1;31m新密码\033[0m:")
                if len(new_user_password) >= 5:
                    flag = False
                elif count == 0:
                    print("多次不合法,程序自动返回。。。")
                    main()
                else:
                    print("输入不合法,请输入大于5位数的密码")
            if new_user_password == new_user_password1:  # 判断两次输入的密码是否相等
                with open("user.txt", "r") as user_info:  # 以读的方式打开这个文件
                    old_user_info = "|".join(USER_LIST)  # 获取以前的旧信息
                    for line in user_info:  # 将获取到的每行循环输出
                        if USER_LIST[0] in line:  # 找到当前登录的用户的这个用户名
                            USER_LIST[1] = new_user_password1  # 如果找到了,就把新密码重新加入到我们全局的用户的信息列表中
                            new_user_info = "|".join(USER_LIST)  # 将用户信息表中的内容用join方法转换为用户数据库里面的格式(新用户信息)
                            # print(new_user_info)
                            # print(old_user_info)
                            break  # 跳出当前
                with open("user.txt", "r") as old_user:
                    lines = old_user.readlines()  # 一次性读取整个文件,感觉这方方式不好
                with open("user.txt", "w") as new_user:
                    for line in lines:  # 将上面读取到的文集一行一行的循环出来
                        if old_user_info in line:  # 检查文件里面是否有我们用户的旧信息
                            line = line.replace(old_user_info, new_user_info)  # 如果有就用replace替换
                        new_user.write(line)  # 接着写入到文件
                print("修改成功√")
                break  # 完成后跳出

            else:  # 两次不相等
                print("两次输入的密码不相同,程序自动返回。。。")
                main()
        else:  # 当前用户密码输入错误
            print("当前用户密码输入错误,程序自动返回。。。")
            main()


def register():  # 2用户注册
    if WHETHER_LOGIN["is_login"] == "success":
        quit_login = input("无法注册用户,请退出登录后重试【1:退出登录;2:返回上一步】:")
        if quit_login == "1":
            exit_login()  # 跳转到退出用户函数
        elif quit_login == "2":
            print("返回成功")
    elif WHETHER_LOGIN["is_login"] == "error":
        ret = register_function()  # 调用注册函数
        print(ret)  # 将返回值输出


def login():  # 1用户登录
    print("用户登录".center(82, "="))
    username = input("请输入用户名:")
    passwd = input("请输入密码:")
    with open("user.txt", "r") as user:
        for line in user:
            f_user_list = line.strip("\n").split("|")  # 去除每行默认的回车,以及|,并且将它转换为列表赋给f_admin_list
            if f_user_list[0] == username and f_user_list[1] == passwd:
                print("登录成功")
                global USER_LIST
                USER_LIST = f_user_list  # 将获取到的当前行放到用户信息列表中
                WHETHER_LOGIN["is_login"] = "success"  # 登录成功将is_login的值设置success
                WHETHER_LOGIN["is_user"] = username  # 将我们登录的用户放入字典用,方便后期查询
                # print(USER_LIST)
                return f_user_list
        else:
            print("登录失败")


def main():
    while True:
        global COUNT
        COUNT += 1
        print("用户管理系统".center(80, "*") + "\n")
        print("1、用户登录;2:用户注册;3:修改密码;4:用户信息;5:用户管理;6:退出登录;7:退出程序")
        inp = input("请输入序号:")
        if inp == "1":
            if USER_LIST:
                if USER_LIST[3] == "1":
                    print("当前为管理员用户:【%s】,不能继续登录" % USER_LIST[0])
                else:
                    print("当前用户为【%s】,不能继续登录" % USER_LIST[0])
            else:
                login()
        elif inp == "2":
            register()
        elif inp == "3":
            alter()
        elif inp == "4":
            see()
        elif inp == "5":
            manage()
        elif inp == "6":
            exit_login()
        elif inp == "7":
            exit("程序已退出!!!")
        else:
            if COUNT == 3:
                exit("输入错误次数过多,程序自动退出。。。")
            else:
                print("输入有误,请重新输入。。。\n")
                continue


main()

 

 

相关文章