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 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 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 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)