def run(user_data): ''' 程序主函数入口,根据用户的输入,调用不同的功能函数 :param user_data: :return: none ''' if user_data["is_authenticated"]: flag = False while not flag: print("-".center(70, "-")) print("欢迎光临ATM电子银行".center(60, " ")) print("-".center(70, "-")) print("【1】进入商城\t【2】用户管理\t【3】信用卡管理\t 【4】退出程序") choice_func = { "1": shoping, "2": user_manage, "3": credit_manage, "4": "e" } choice = input("请选择功能>>>") if choice.isdigit(): if 0 < int(choice) < len(choice_func): choice_func.get(choice)(user_data) elif int(choice) == 4: exit() else: print("输入的数字有误,请重新输入") log_sys.write_log("输入的数字有误,请重新输入", "error") else: print("输入需为数字,请重新输入") log_sys.write_log("输入需为数字,请重新输入", "error")
def add(user_data, credit_dic, credit_info): ''' 用户添加自己的信用卡函数 :param user_data: 用户状态信息 :param credit_dic: 信用卡信息 :param credit_info: 用户信用卡信息 :return: none ''' account = user_data["account_id"] add_dict = {} print("\033[1;31m信用卡默认额度为15000\033[0m") tag = False while not tag: credit_number = input("请输入你要添加的信用卡卡号>>>") if credit_number.isdigit(): pay_psd = input("请输入信用卡支付密码>>>") add_dict = { "credit_total": 15000, "balance": 15000, "owner": account, "pay_password": pay_psd, "frozenstatus": 0 } credit_dic[credit_number] = add_dict data_parse.credit_writen(credit_dic) #将用户添加的信用卡写入文件 print("\033[1;35m信用卡添加成功\033[0m") log_sys.write_log("信用卡添加成功", "info") tag = True else: print("\033[1;35m信用卡号需为数字\033[0m") log_sys.write_log("输入端哦信用卡需为数字", "warning")
def transaction(user_data,credit_info,tran_type,amount,*args): ''' 处理用户转账,还款的余额加减判断及计算函数 :param user_data: 用户状态信息 :param credit_info: 用户信用卡信息 :param tran_type: 交易类型 :param amount: 交易额度 :param args: 其他 :return: new_balance,交易成功后的余额 ''' amount = float(amount) if tran_type in setting.TRANSACTION_TYPE: old_balance = credit_info["balance"] #将用户可以额度赋值给old_balance interest = amount * setting.TRANSACTION_TYPE[tran_type]["interest"] if setting.TRANSACTION_TYPE[tran_type]["action"] == "plus": new_balance = old_balance + amount +interest elif setting.TRANSACTION_TYPE[tran_type]["action"] == "minus": new_balance = old_balance - amount - interest if new_balance < 0 : print("您的信用卡可用额度为%s,不能完成此次交易"%old_balance) log_sys.write_log("信用卡可用额度不足", "info") return new_balance else: print("错误的交易类型") log_sys.write_log("错误的交易类型", "error")
def credit_manage(user_data): ''' 信用卡管理主函数 :param user_data: 用户状态函数 :return: none ''' credit_dic = data_parse.credit_info_parse() account = user_data["account_id"] credit_id = user_data["account_data"]["bindcard"] credit_info = credit_dic[credit_id] tag = False while not tag: print("-".center(60, "-")) print("信用卡管理中心".center(50, " ")) print("卡号:%s"%credit_id) print("-".center(60, "-")) print("【1】查询\t【2】提款\t【3】还款\t【4】转账\t【5】返回") choice_func = {"1":check,"2":withdraw,"3":repay,"4":transfer,"5":"back"} choice = input("请选择功能>>>") if choice.isdigit(): if 0 < int(choice) < len(choice_func): choice_func.get(choice)(user_data,credit_dic,credit_info) #根据用户的选择调用不同的函数 elif choice == "5": tag = True else: print("输入的数字有误,请重新输入") log_sys.write_log("输入的数字有误", "error") else: print("输入需为数字,请重新输入") log_sys.write_log("输需为数字", "error")
def is_login(user_data): #实现用户未登录的情况下,先登录 while True: if not user_data["is_authenticated"]: #未登录状态 print("\033[1;37m您尚未登陆,请先登陆系统\033[0m") time.sleep(0.5) try: sign = user_login(user_data) #调用登录函数,登录成功,返回True if sign: user_data["is_authenticated"] = True break except UnboundLocalError as e: print("【%s】,用户名输入错误" % e) #如果用户用户名输入错误,系统会报错,先抓取这个错误,提醒用户 log_sys.write_log("用户名输入错误", "error") run(user_data)
def shoping(user_data): ''' 商城函数,为用户提供购买,结账等功能 :param user_data: :return: ''' buy_list = [] #定义购买列表 user_balance = user_data["account_data"]["balance"] #信用卡可用额度 goods_dict = data_parse.shop_parse() #商品列表 account = user_data["account_id"] #用户名 credit_dic = data_parse.credit_info_parse() #信用卡文件内容信息 credit_id = user_data["account_data"]["bindcard"] #信用卡id credit_info = credit_dic[credit_id] #用户信用卡信息 while True: print("您的账户可以余额:\033[33;1m%s\033[0m" % user_balance) print("编号[商品,价格]".center(50, "-")) for key, value in goods_dict.items(): print("%s号商品%s的价格为:\033[33;1m%s\033[0m" % (key, value[0], value[1])) #print(key,value) number = input("请输入您要购买的商品编号(b返回)>>>") if number.isdigit(): #判断用户输入的商品编号是否是数字 buy_number = int(number) if buy_number in goods_dict: #判断用户输入的商品编号是否存在 if user_balance >= goods_dict[buy_number][1]: #用户的工资够买商品 user_balance -= goods_dict[buy_number][1] buy_list.append(goods_dict[buy_number][0]) print( "您购买了\033[32;1m %s \033[0m,余额 \033[33;1m %s \033[0m" % (goods_dict[buy_number][0], user_balance)) log_sys.write_log("购买商品成功", "info") else: print("\033[1;31m余额不足\033[0m") #用户工资不够买 log_sys.write_log("余额不足,购买商品失败", "info") print( "您购买了\033[32;1m %s \033[0m,余额 \033[33;1m %s \033[0m" % (buy_list, user_balance)) user_data["account_data"]["balance"] = user_balance credit_info["balance"] = user_balance data_parse.user_writen( account, user_data["account_data"]) #将可用余额写入用户文件 data_parse.bill_parse(buy_list) #将已购商品写入文件 data_parse.credit_writen(credit_dic) #将可用余额写入信用卡文件 break else: print("\033[1;31m暂时没有这个商品\033[0m") log_sys.write_log("输入的商品编号错误", "error") elif number == 'b': print("您购买了\033[32;1m %s \033[0m,余额 \033[33;1m %s \033[0m" % (buy_list, user_balance)) user_data["account_data"]["balance"] = user_balance data_parse.user_writen(account, user_data["account_data"]) # 将余额写入文件 credit_info["balance"] = user_balance #将可用余额写入用户文件 data_parse.bill_parse(buy_list) #将已购商品写入文件 data_parse.credit_writen(credit_dic) #将可用余额写入信用卡文件 break else: print("\033[1;31m错误的商品编号\033[0m") log_sys.write_log("输入的商品编号错误", "error")
def check(user_data, credit_dic, credit_info): ''' 查询用户信息函数 :param user_data: 用户状态信息 :param credit_dic: 信用卡信息 :param credit_info: 用户信用卡信息 :return: none ''' status = credit_info["frozenstatus"] user_info = '''-----------用户信息----------- 信用卡号: \033[1;31m%s\033[0m 注册日期: \033[1;31m%s\033[0m 信用卡额度:\033[1;31m%s\033[0m 信用卡状态:\033[1;31m%s\033[0m\033[1;37m(0:正常,1:冻结)\033[0m ''' % (user_data["account_data"]["bindcard"], user_data["account_data"]["enroll_date"], credit_info["credit_total"], status) print(user_info) log_sys.write_log("用户信息查询成功", "info") time.sleep(1)
def alter(user_data, credit_dic, credit_info): ''' 修改用户登陆密码函数 :param user_data: 用户状态信息 :param credit_dic: 信用卡信息 :param credit_info: 用户信息卡信息 :return: none ''' account = user_data["account_id"] #当前登陆用户用户名 while True: old_psd = input("请输入原始密码>>>") if old_psd == user_data["account_data"]["password"]: new_psd1 = input("请输入新密码>>>") new_psd2 = input("请再输入新密码>>>") if new_psd1 == new_psd2: user_data["account_data"]["password"] = new_psd1 data_parse.user_writen(account, user_data["account_data"]) #将修改后的密码存入文件 print("\033[1;35m密码修改成功\033[0m") log_sys.write_log("用户密码修改成功", "info") break else: print("\033[1;35m两次密码输入的不一样\033[0m") log_sys.write_log("用户密码修改失败", "info") elif old_psd == "b": break else: print("\033[1;35m密码输入错误\033[0m") log_sys.write_log("密码输入错误", "error")
def repay(user_data,credit_dic,credit_info): ''' 实现还款函数 :param user_data: 用户状态信息 :param credit_dic: 信用卡信息 :param credit_info: 用户信用卡信息 :return: none ''' account_info = '''------------------------ 信用额度:\033[1;31m%s\033[0m 可用额度:\033[1;31m%s\033[0m ''' % (credit_info["credit_total"],credit_info["balance"]) print(account_info) if credit_info["frozenstatus"] == 0: #判断信用卡是否在冻结状态 back_flag = False while not back_flag: repay_amount = input("\033[33;1m请输入金额(输入b返回)>>>\033[0m").strip() if len(repay_amount) > 0 and repay_amount.isdigit(): new_balance = transaction(user_data,credit_info,"repay", repay_amount) if new_balance: credit_info["balance"] = new_balance data_parse.credit_writen(credit_dic) #将还款后的余额写入文件 print("目前可用额度: \033[1;31m%s\033[0m" % new_balance) time.sleep(1) log_sys.write_log("还款成功", "info") break else: print("\033[33;1m[%s]\033[0m输入无效,只接受整数"%repay_amount) log_sys.write_log("还款失败", "info") if repay_amount == "b": back_flag = True else: print("\033[33;1m您的信用卡已被冻结\033[33;1m") log_sys.write_log("信用卡被冻结", "info")
def user_login(user_data): ''' 用户登录函数 :param user_data: :return: tag(True or False) ''' tag = False while True: account = input("请输入你的\033[1;31m账户名>>>\033[0m") password = input("请输入你的\033[1;31m密码>>>\033[0m") signal, user_dict = data_parse.data_parse(account, password) if signal: print("登陆成功") log_sys.write_log("登陆成功", "info") tag = True user_data["account_id"] = account user_data["account_data"] = user_dict break else: print("登陆失败,请重新输入") log_sys.write_log("登陆失败", "error") return tag
def user_manage(user_data): ''' 用户管理功能主函数 :param user_data: 用户状态信息 :return: none ''' credit_dic = data_parse.credit_info_parse() #信用卡信息字典 account = user_data["account_id"] #当前登录用户名 credit_id = user_data["account_data"]["bindcard"] #当前用户信用卡卡号 credit_info = credit_dic[credit_id] #当前用户信用卡信息字典 flag = False while not flag: print("-".center(70, "-")) print("用户管理中心".center(50, " ")) print("用户名:%s" % account) print("-".center(70, "-")) print("【1】查询\t【2】修改密码\t【3】添加信用卡\t【4】冻结信用卡\t【5】返回") choice_func = { "1": check, "2": alter, "3": add, "4": freeze, "5": "back" } choice = input("请选择功能>>>") if choice.isdigit(): if 0 < int(choice) < len(choice_func): choice_func.get(choice)(user_data, credit_dic, credit_info) #根据用户的选择,调用不同的功能函数 elif choice == "5": flag = True else: print("输入的数字有误,请重新输入") log_sys.write_log("输入错误", "error") else: print("输入需为数字,请重新输入") log_sys.write_log("输入错误", "error")
def freeze(user_data, credit_dic, credit_info): ''' 冻结用户信用卡函数 :param user_data: 用户状态信息 :param credit_dic: 信用卡信息 :param credit_info: 用户信用卡信息 :return: none ''' credit_id = user_data["account_data"]["bindcard"] credit_count = '''---------您持有的信用卡--------- 01:%s ''' % credit_id print(credit_count) while True: choice = input("请选择您要冻结的信用卡>>>") if choice == "01" or choice == user_data["account_data"]["bindcard"]: print("\033[1;35m冻结成功\033[0m") log_sys.write_log("冻结信用卡成功", "info") credit_dic[credit_id]["frozenstatus"] = "1" data_parse.credit_writen(credit_dic) break else: print("\033[1;35m输入错误,请重新输入\033[0m") log_sys.write_log("冻结信用卡失败", "error")
def transfer(user_data,credit_dic,credit_info): ''' 实现转账函数 :param user_data: 用户状态信息 :param credit_dic: 信用卡信息 :param credit_info: 用户信用卡信息 :return: none ''' if credit_info["frozenstatus"] == 0: #判断信用卡是否冻结 back_flag = False while not back_flag: print("示例:2016010202") card_id = input("请输入您要转入的银行卡账号(输入b返回)>>>") if card_id == "b": back_flag = True elif card_id.isdigit() and card_id in credit_dic: if card_id != user_data["account_data"]["bindcard"]: card_info = '''--------对方信用卡信息-------- 所有人: \033[1;31m%s\033[0m 可用额度: \033[1;31m%s\033[0m '''%(credit_dic[card_id]["owner"], credit_dic[card_id]["balance"]) print("您卡上的可以余额:\033[1;31m%s\033[0m"%credit_info["balance"]) transfer_amount = input("请输入您要转入的金额>>>") if 0 < int(transfer_amount) < int(credit_info["balance"]): print(card_info) sign = input("是否转账Y/N>>>") if sign == "y": print("\033[33;1m交易成功\033[0m") log_sys.write_log("转账成功", "info") self_balance = transaction(user_data,credit_info,"withdraw",transfer_amount) credit_info["balance"] = self_balance print("您的可用额度:\033[1;31m%s\033[0m"%credit_info["balance"]) other_balance = transaction(user_data,credit_info,"repay",transfer_amount) credit_dic[card_id]["balance"] = other_balance data_parse.credit_writen(credit_dic) #缺将转账后的金额写入文件 print("对方的可以余额:\033[1;31m%s\033[0m"%credit_dic[card_id]["balance"]) time.sleep(1) break else: print("\033[33;1m交易取消\033[0m") log_sys.write_log("转账失败", "info") time.sleep(1) back_flag = True else: print("\033[33;1m您输入的卡号有误,请重新输入\033[0m") log_sys.write_log("输入的信用卡号有误", "error") else: print("\033[33;1m输入错误,请重新输入\033[0m") log_sys.write_log("输入的信用卡号有误", "error") else: print("\033[33;1m输入错误,请重新输入\033[0m") log_sys.write_log("输入的信用卡号有误", "error") elif credit_info["frozenstatus"] == 1 : print("\033[33;1m您的信用卡已被冻结\033[33;1m") log_sys.write_log("信用卡被冻结", "info")