def buy_product(user): show_cart(user) while True: show_products(user) choice = input("请输入商品编号进行购买,购物完成请输入q退出购物,输入l查看已购买商品信息\n") if re.fullmatch("\d+",choice) and int(choice) < len(products): product_name = products[int(choice)]["name"] product_price = products[int(choice)]["price"] if product_name in users[user]["products"]: print("您已购买过该商品:\033[1;31;43m %s \033[0m " % product_name) elif consume_amount(user,product_price): users[user]["products"][product_name] = product_price print("成功购买商品:\033[1;33;42m %s \033[0m " % product_name) user_logger.info("%s 用户成功购买商品: %s "%(user,product_name)) else: print("您的余额不足以购买 %s"%product_name) user_logger.info("%s 用户因为余额不足,购买商品:%s 失败"%(user,product_name)) elif choice.upper() == "Q": show_cart(user) json_func(USER_FILE, users) break elif choice.upper() == "L": show_cart(user) else: print(":\033[1;31;43m 输入有误,请重新选择! \033[0m ")
def transfer_amount(user, in_user, amount): if not check_user(in_user): print("入账账户 %s 不存在!" % (user, in_user)) user_logger.warning("%s转账时,入账账户%s不存在!" % (user, in_user)) return False amount = check_amount(amount) if not amount: print("输入的金额非正数") user_logger.warning("%s转账时,输入的金额非正数" % user) return False fee = 0.05 * amount if not check_user_amount(user, (amount + fee)): print("账户余额为 %s元,不足转账!" % (users_atm[user]["usable"])) user_logger.warning("%s转账时,账户余额 %s 已不足!" % (user, users_atm[user]["usable"])) return False users_atm[user]["usable"] -= (amount + fee) users_atm[in_user]["usable"] += amount users_atm["admin"]["usable"] += fee print("成功转账给 %s 金额 %s 元!收取手续费用 %s 元!" % (in_user, amount, fee)) user_logger.info("%s 成功转账给 %s 金额 %s 元!手续费用 %s !" % (user, in_user, amount, fee)) bank_logger.info("%s 成功转账给 %s 金额 %s 元!手续费用 %s !" % (user, in_user, amount, fee)) bank_logger.info("admin 账户收入手续费金额 %s 元!" % fee)
def show_cart(user): user_logger.info("%s 查看购物车!"%user) if users[user]["products"]: print("您的购物车有如下商品".center(100, "-")) for i in users[user]["products"]: print(i, users[user]["products"][i]) else: print("您尚未购买商品!")
def login_func(): global online while True: user = input("your name:").strip() password = get_md5(input("your password:"******"password"): online = 1 print("欢迎 %s 登陆系统" % user) user_logger.info("%s 登陆系统" % user) role = users.get(user).get("role") return user, role else: print("账号或密码错误!") user_logger.warning("%s 登陆时,输错登陆账户信息!" % user)
def consume_amount(user, amount): usable_amount = users_atm[user]["usable"] if not amount: print("扣款金额非正数" % user) user_logger.warning("%s扣款时,传递的扣款金额非正数" % user) return False if amount > usable_amount: print("扣款金额 %s 大于可用金额%s 元!扣款失败!" % (amount, usable_amount)) user_logger.warning("%s扣款时,扣款金额 %s 大于可用金额%s 元!扣款失败!" % (user, amount, usable_amount)) return False users_atm[user]["usable"] -= amount print("成功扣款您的金额 %s 元!" % (amount)) user_logger.info("%s 成功扣款金额 %s 元!" % (user, amount)) bank_logger.info("%s 成功扣款金额 %s 元!" % (user, amount)) return True
def withdraw_amount(user, amount): amount = check_amount(amount) if not amount: print("输入的提现金额非正数") user_logger.warning("%s提现时,输入的提现金额非正数" % user) return False fee = 0.05 * amount if not check_user_amount(user, (amount + fee)): print("账户余额 %s元 不足提现!" % (users_atm[user]["usable"])) user_logger.warning("%s提现时,账户余额 %s 已不足!" % (user, users_atm[user]["usable"])) return False users_atm[user]["usable"] -= (amount + fee) users_atm["admin"]["usable"] += fee print("成功提现金额 %s 元!收取手续费用 %s 元" % (amount, fee)) user_logger.info("%s 成功提现金额 %s 元!手续费用 %s 元" % (user, amount, fee)) bank_logger.info("%s 成功提现金额 %s 元!手续费用 %s 元" % (user, amount, fee)) bank_logger.info("admin 账户收入手续费金额 %s 元!" % fee)
def repay_amount(user, amount): amount = check_amount(amount) used_amount = users_atm[user]["limit"] - users_atm[user]["usable"] if not amount: print("输入的还款金额非正数") user_logger.warning("%s还款时,输入的还款金额非正数" % user) return False if amount > used_amount: print("输入的还款金额大于已用金额,只需还款 %s 元!" % (used_amount)) user_logger.info("%s还款时,输入的还款金额大于已用金额,只需还款 %s 元!" % (user, used_amount)) return False users_atm[user]["usable"] += amount users_atm["admin"]["usable"] += amount print("成功还款金额 %s 元!" % (amount)) user_logger.info("%s 成功还款金额 %s 元!" % (user, amount)) bank_logger.info("%s 成功还款金额 %s 元!" % (user, amount)) bank_logger.info("admin 账户收入 %s 的还款金额 %s 元!" % (user, amount))
def change_status(admin): while True: change = input("请输入用户账号和修改状态(1代表可用,0代表冻结)\n账号和状态用逗号分割\n>>:") if re.fullmatch("\w+[,|,]{1}[1|0]{1}", change): change_lis = re.split("[,|,]", change) user = change_lis[0] change_statu = int(change_lis[1]) if user in users_atm: users_atm[user]["status"] = change_statu print("修改 %s 用户状态成功!修改后的状态为 %s" % (user, change_statu)) user_logger.info("管理员 %s 修改 %s 用户状态成功!修改后的状态为 %s" % (admin, user, change_statu)) bank_logger.info("管理员 %s 修改 %s 用户状态成功!修改后的状态为 %s" % (admin, user, change_statu)) break else: print("被修改的用户不存在,修改 %s 用户的状态失败!" % user) user_logger.warning("被修改的用户不存在,管理员 %s 修改 %s 用户的状态失败!" % (admin, user)) else: print("输入用户和状态格式有误,修改 %s 用户的状态失败!") user_logger.warning("输入用户和状态格式有误,管理员 %s 修改的状态失败!" % admin)
def change_limit(admin): while True: change = input("请输入用户账号和额度修改值(+表示增加额度,-代表减少额度)\n账号和额度用逗号分割\n>>:") if re.fullmatch("\w+[,|,]{1}[+|-]{1}[\d]+", change): change_lis = re.split("[,|,]", change) user = change_lis[0] change_amount = change_lis[1] limit = users_atm[user]["limit"] usable = users_atm[user]["usable"] after_change_limit = eval(str(limit) + change_amount) after_change_usable = eval(str(usable) + change_amount) if user in users_atm and not after_change_usable < 0: users_atm[user]["limit"] = after_change_limit users_atm[user]["usable"] = after_change_usable print( "修改 {user} 额度成功!修改前 {user} 额度:{before};修改后 {user} 额度:{after}" .format(user=user, before=limit, after=after_change_limit)) user_logger.info( "管理员 {admin} 修改 {user} 额度成功!修改前 {user} 额度:{before};修改后 {user} 额度:{after}" .format(admin=admin, user=user, before=limit, after=after_change_limit)) bank_logger.warning( "管理员 {admin} 修改 {user} 额度成功!修改前 {user} 额度:{before};修改后 {user} 额度:{after}" .format(admin=admin, user=user, before=limit, after=after_change_limit)) break else: print("被修改的用户不存在或者额度减小过多,请确认修改信息正确性!") user_logger.warning("被修改的用户不存在或者额度减小过多,管理员 %s 修改 %s 用户的额度失败!" % (admin, user)) else: print("输入信息有误,请参照提示按格式输入!") bank_logger.warning("输入用户和金额格式有误,管理员 %s 修改用户的额度失败!" % admin)
def add_user(admin): while True: info = input( "请以逗号隔开输入账号(英文或数字),姓名(非空字符),角色(1代表管理员/0代表普通用户),密码(英文或数字),额度\n") if re.fullmatch( "\w+[,|,]{1}\S+[,|,]{1}[0|1]{1}[,|,]{1}\w+[,|,]{1}[\d]+", info): user_lis = re.split("[,|,]", info) user = user_lis[0] name = user_lis[1] role = int(user_lis[2]) pwd = get_md5(user_lis[3]) limit = float(user_lis[4]) if user not in users: users[user] = {} users[user]["name"] = name users[user]["password"] = pwd users[user]["role"] = role users[user]["products"] = {} users[user]["create_time"] = str( datetime.datetime.now().date()) users_atm[user] = {} users_atm[user]["name"] = name users_atm[user]["usable"] = limit users_atm[user]["limit"] = limit users_atm[user]["status"] = 1 users_atm["admin"]["usable"] -= limit print("添加用户 %s 成功" % user) user_logger.info("管理员 %s 添加用户 %s 成功" % (admin, user)) bank_logger.info("管理员 %s 添加用户 %s 成功" % (admin, user)) break else: print("%s 用户已存在" % user) user_logger.warning("管理员添加用户时,%s 用户已存在" % user) else: print("输入信息有误,请参照提示按格式输入!") user_logger.warning("管理员添加用户时,用户输入用户信息格式有误!")
def show_products(user): user_logger.info("%s 查看商品列表!"%user) print("商店已上架商品有".center(100, "-")) for index, value in enumerate(products): print("%s %s %s" % (index, value['name'], value["price"]))
def wrapper(*args, **kwargs): user = args[0] if users_atm[user]["status"] == 1: return func(*args, **kwargs) user_logger.info("%s 账户已被冻结,不可进行此次操作,请联系管理员解冻!" % user) bank_logger.info("已冻结账户 %s 尝试进行ATM操作,请管理员留意!" % user)