all_user_data = [] # 所有用户信息
current_user = None # 记录用户登陆信息
# 处理用户文件
def load_data():
"""处理文件中的用户数据将,数据以字典的方式存入一个列表中。"""
with open('user_db.txt', mode='rt', encoding='utf-8') as f:
for line in f:
line = line.strip("\n")
if line == "\n": continue
ls = line.split("|")
user_dic = {
"name": ls[0],
"pwd": ls[1],
"max": ls[2],
"money": ls[3],
"lock": ls[4],
}
print(user_dic)
all_user_data.append(user_dic) # 函数体内部的代码需要调用才会有值
# load_data()
# print(all_user_data)
# 获取输入的用户信息
def get_user(name):
"""根据用户输入的用户名取出用户"""
load_data()
for user in all_user_data:
if user['name'] == name:
# print(user['name'])
return user
# 将文件写入磁盘
import os
def save_to_file():
"""将内存中用户操作的数据存到文件中"""
with open('user_db.txt', mode='rt', encoding='utf-8') as f, \
open('.user_db.txt.swp', mode='w+t', encoding='utf-8') as f1:
for user in all_user_data:
f1.write("|".join(user.values())) # 列表转换为字符串并拼接值
f1.write("\n")
os.remove('user_db.txt')
os.rename('.user_db.txt.swp', 'user_db.txt')
# 购物商场
def shop_center():
print("shop center")
# 用于保存用户登陆成功的状态
def atm_login():
while True:
name = input("请输入用户名或q退出: ".rjust(20, "-")).strip()
# pwd = input("请输入密码:").strip()
if name == "q":
break
if not name:
print("用户名为空,请重新输入。")
continue
pwd = input("请输入密码:".rjust(20, "-")).strip()
if not pwd:
print("密码为空,请重新输入。")
continue
user = get_user(name)
print(user)
if name == user["name"] and pwd == user["pwd"]:
print("\n", "登陆成功".center(20, "*"), "\n")
global current_user
current_user = user
return
else:
print("用户或密码错误,请重新输入。")
# atm_login()
# print(all_user_data)
# 装饰器:验证用户是否登陆,并返回值
def login_auth(func):
def wrapper(*args, **kwargs):
if current_user == None:
print("请先登陆".center(50, " "))
atm_login()
if current_user:
return func(*args, **kwargs)
else:
print("已登陆")
return func(*args, **kwargs)
return wrapper
# 提现取款功能
@login_auth
def withdraw():
while True:
print(f"当前余额{current_user['money']}元\n")
money = input("请输入提款金额或q退出:").strip()
if money == "q": break
if not money.isdigit():
print("必须输入整数")
continue
money = int(money)
opt = money * 0.05
print(f"所需手续费{opt}")
user_money = float(current_user["money"])
if money + opt > user_money:
print("余额不足,请重新输入")
continue
current_user["money"] = str(user_money - money - opt) # 总金额减去取款金额以及手续费
save_to_file() # 调用函数将数据写入文件中
print(f"取款成功本次取款: {money},手续费{opt},余额{current_user['money']}")
return
# 转账功能
@login_auth
def transfer():
while True:
account = input("请输入对方用户名:").strip()
to_user = get_user(account) # 调用获取用户模块获取到用户信息
if not to_user:
print("对方账户/用户不存在,请查证后重新输入。")
continue
print(f"当前余额为{current_user['money']}")
money = input("请输入转账金额或q退出: ").strip()
if money == "q": break
money = str_to_num(money)
if not money:
print("你输入的不是数字,请重新输入。")
continue
user_money = float(current_user['money'])
if money > user_money:
print("余额不足,请重新输入。")
continue
# 减去转账用户的余额
current_user['money'] = str(user_money - money)
# 增加对方账户余额
to_user['money'] = str(float(to_user['money']) + money)
save_to_file()
print("转账成功")
return
def str_to_num(text):
'''将输入的字符串(input输入默认为字符串类型)转换为数字'''
if text.isdigit():
return int(text)
if "." in text:
ts = text.split(".")
if len(ts) == 2:
if ts[0].isdigit() and ts[1].isdigit():
return float(text)
# 还款功能
@login_auth
def repayment():
print(f"您当前欠款{str_to_num(current_user['max']) - str_to_num(current_user['money'])}")
while True:
print("还款")
money = input("请输入还款金额或q退出:")
if money == "q": break
money = str_to_num(money)
if not money:
print("输入有误,请重新输入。")
continue
current_user["money"] = str(str_to_num(current_user["money"]) + money)
save_to_file()
print("还款成功")
return
# 注册功能
def registered():
while True:
name = input("请输入注册用户名或q退出:".rjust(20, "-")).strip()
if name == "q": break
if not name:
print("用户名不能为空。")
continue
user = get_user(name)
if user:
print("用户名以存在,请重新输入。")
continue
pwd = input("请输入密码:").strip()
if not pwd:
print("密码不能为空。")
continue
if pwd != input("请再次输入密码:").strip():
print("两次密码输入不一致。")
continue
new_user = {"name": name, "pwd": pwd, "max": "15000", "money": "2000", "lock": "0"}
all_user_data.append(new_user)
print(f"{name}:用户创建成功")
save_to_file()
return
# 启动菜单
func_dict = {
"1": ["注册", registered],
"2": ["登陆", atm_login],
"3": ["提现", withdraw],
"4": ["转账", transfer],
"5": ["还款", repayment],
"q": ["退出"]
}
def start():
# 启动菜单
while True:
for ke_y, val in func_dict.items():
print("\t\t", ke_y, "\t", val[0])
choice = input(f"请输入操作指令的编号,q退出:").strip()
if choice == "q": break
if choice in func_dict:
func_dict[choice][1]()
else:
print("指令输入错误")
start()
最新评论
# 这只是一个创建远程登录并授权的语句、仅作为记录 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Fit2cloud!' WITH GRANT OPTION;
当MGR集群初始化结束后,需要开启MGR集群自启动(需要有一台节点是自动开启引导) loose-group_replication_start_on_boot = ON #设置节点是否在启动时自动启动 MGR 集群 loose-group_replication_bootstrap_group = ON #设置节点是否作为初始引导节点启动集群
密码:blog.sirliu.com
本内容密码:blog.sirliu.com 最新整理的文章在这里喔:https://blog.sirliu.com/2018/11/shell_lian_xi_ti.html