def unfreeze_user(): ''' 解冻函数,由ATM管理员调用 :return: 成功为True, 失败为False ''' user = input('请输入要解冻的账号: ').strip() if user: if user not in user_manager.ATM_USER_INFO.keys(): print('用户[ %s ]不存在!') return False else: freeze_status = '已冻结' if user_manager.ATM_USER_INFO[user].get('freeze') else '可用' if freeze_status == '已冻结': print('[ %s ]用户,当前的状态为 [ %s ]'%(user,freeze_status)) inp_limit = input('\033[31;1m确定要解冻用户[ %s ]吗? y/n:'%user).strip() if inp_limit == 'y' or inp_limit == 'Y': user_manager.ATM_USER_INFO[user]['freeze'] = False json.dump(user_manager.ATM_USER_INFO,open(user_manager.ATM_USERDB,'w')) #持久化到文件 log.atm_log(user,time.localtime(),'info','信用卡账户: [%s] 被成功解冻 操作员: [ %s ]' \ %(user,user_manager.ATM_ADMIN_STATUS['username'])) #打印日志 log.logger_atm.info('信用卡账户: [%s] 被成功解冻 操作员: [ %s ]'%(user,user_manager.ATM_ADMIN_STATUS['username'])) print('\033[31;1m信用卡账户: [%s]已被成功解冻!\033[0m'%(user)) return True elif inp_limit == 'n' or inp_limit == 'N': print('已放弃操作!') return False else: print('\033[31;1m 信用卡账户[ %s ]已经是可用状态!\033[0m'%user) return False
def unfreeze_user(): ''' 解冻函数,由ATM管理员调用 :return: 成功为True, 失败为False ''' user = input('请输入要解冻的账号: ').strip() if user: if user not in user_manager.ATM_USER_INFO.keys(): print('用户[ %s ]不存在!') return False else: freeze_status = '已冻结' if user_manager.ATM_USER_INFO[user].get( 'freeze') else '可用' if freeze_status == '已冻结': print('[ %s ]用户,当前的状态为 [ %s ]' % (user, freeze_status)) inp_limit = input('\033[31;1m确定要解冻用户[ %s ]吗? y/n:' % user).strip() if inp_limit == 'y' or inp_limit == 'Y': user_manager.ATM_USER_INFO[user]['freeze'] = False json.dump(user_manager.ATM_USER_INFO, open(user_manager.ATM_USERDB, 'w')) #持久化到文件 log.atm_log(user,time.localtime(),'info','信用卡账户: [%s] 被成功解冻 操作员: [ %s ]' \ %(user,user_manager.ATM_ADMIN_STATUS['username'])) #打印日志 log.logger_atm.info( '信用卡账户: [%s] 被成功解冻 操作员: [ %s ]' % (user, user_manager.ATM_ADMIN_STATUS['username'])) print('\033[31;1m信用卡账户: [%s]已被成功解冻!\033[0m' % (user)) return True elif inp_limit == 'n' or inp_limit == 'N': print('已放弃操作!') return False else: print('\033[31;1m 信用卡账户[ %s ]已经是可用状态!\033[0m' % user) return False
def reset_limit(): ''' 调整用户额度函数,由ATM管理员调用 :return: 成功为True, 失败为False ''' user = input('请输入要调整额度的用户: ').strip() if user: if user not in user_manager.ATM_USER_INFO.keys(): print('用户[ %s ]不存在!') return False else: print('[ %s ]用户,当前的额度为 [ %.2f ]'%(user,float(user_manager.ATM_USER_INFO[user].get('limit')))) inp_limit = input('请输入调整后的额度: ').strip() if int(inp_limit) <= 0 or not inp_limit: print('输入的金额不合法!') return False else: if float(inp_limit) < float(user_manager.ATM_USER_INFO[user]['limit']): inp_diff = float(user_manager.ATM_USER_INFO[user]['limit']) - float(inp_limit) #差值 if float(user_manager.ATM_USER_INFO[user]['available']) >= float(inp_diff): user_manager.ATM_USER_INFO[user]['available'] -= float(inp_diff) else: print('\033[31;1m不能调整额度到此值,错误!\033[0m') return False else: inp_diff = float(inp_limit) - float(user_manager.ATM_USER_INFO[user]['limit']) #差值 user_manager.ATM_USER_INFO[user]['available'] += float(inp_diff) user_manager.ATM_USER_INFO[user]['limit'] = float(inp_limit) json.dump(user_manager.ATM_USER_INFO,open(user_manager.ATM_USERDB,'w')) #持久化到文件 log.atm_log(user,time.localtime(),'info','信用卡账户: [%s] 调整额度: [%.2f] 调整后的额度: [ %.2f ] 操作员: [ %s ]' \ %(user,float(inp_limit),float(inp_limit),user_manager.ATM_ADMIN_STATUS['username'])) #打印日志 print('\033[31;1m信用卡账户: [%s]额度调整成功, 调整后的额度: [ %.2f ]\033[0m'%(user,float(inp_limit))) return True
def draw_cash(): ''' 提现函数 :return: ''' user = user_manager.ATM_USER_STATUS['username'] username = user_manager.ATM_USER_INFO[user]['user'] avalilable = show_user(user, 'available') cash_limit = avalilable / 2 # print(cash_limit) # print(avalilable) # print(type(avalilable)) verify = input('\033[31;1m尊敬的用户[ %s ],取现手续费为提取现金金额的5%%, 确认? (y/Y)\033[0m' % username).strip() if verify == 'y' or verify == 'Y': inp = input('您的账户最高可取现[ %.2f ]元, 请输入你要提取的现金金额: ' % int(cash_limit)).strip() if inp and inp.isdigit(): if float(inp) <= avalilable / 2 and int(inp) > 0: inp = float(inp) cost = inp * 0.05 avalilable = avalilable - inp - cost #减金额和手续费 log.atm_log( user, time.localtime(), 'info', '信用卡账户: [%s] 提现: [%.2f] 元 手续费[ %.2f ] 元' % (user, inp, cost)) user_manager.ATM_USER_INFO[user]['available'] = avalilable curr_time = shop_mall.curr_datetime() #取出账单日期 if user_manager.ATM_USER_INFO[user]['record'].get( curr_time, None): if user_manager.ATM_USER_INFO[user]['record'].get(curr_time,None).get('total_debt') and \ user_manager.ATM_USER_INFO[user]['record'].get(curr_time,None).get('total_debt') >= 0: user_manager.ATM_USER_INFO[user]['record'][curr_time][ 'total_debt'] += (inp + cost) #账单欠款金额增加 else: user_manager.ATM_USER_INFO[user]['record'].setdefault( curr_time, {'total_debt': inp + cost}) else: user_manager.ATM_USER_INFO[user]['record'].setdefault( curr_time, {'total_debt': inp + cost}) json.dump(user_manager.ATM_USER_INFO, open(user_manager.ATM_USERDB, 'w')) #持久化 print('正在出抄票,请不要离开...') time.sleep(2) if input('\033[31;1m 成功提现: [%.2f] 元 手续费[ %.2f ] 元\033[0m' % (inp, cost)): pass else: print('\033[31;1m账户可用额度不够或者输入金额不合法!\033[0m') return False else: print('输入的金额不合法!') return False
def repayment(user): ''' 用户还款函数 :return: ''' cost = show_bill(user) if cost: cost = float(cost) else: cost = 0 bill_month = input('请输入你要还款的账单日期, 如: 2016-5-22\n>>').strip() if bill_month and user_manager.ATM_USER_INFO[user]['record'].get(bill_month): bill = user_manager.ATM_USER_INFO[user]['record'].get(bill_month).get('total_debt',0) repayment_money = user_manager.ATM_USER_INFO[user]['record'].get(bill_month).get('repayment',0) if repayment_money >= bill + cost: #如果已还金额大于用户账单金额,则不让其还款 if input('\033[31;1m账单总额: [ %.2f ], 已还金额: [%.2f] 已还清当期[ %s ]账单!\033[0m'%(bill,repayment_money,bill_month)):pass return False else: inp_money = input('[ %s ] 账单总额: [ %.2f ], 已还金额: [%.2f], 还差 [ %.2f ]可以还清当期账单\n请输入你要还款的金额 >>'%(bill_month,bill,repayment_money,bill+cost-repayment_money)).strip() if inp_money and inp_money >= '0': inp_money = float(inp_money) if repayment_money + inp_money >= bill + cost: repayment = user_manager.ATM_USER_INFO[user]['record'][bill_month].get('repayment',0) #+= inp_money #还款金额赋值为还款后的金额 repayment += inp_money user_manager.ATM_USER_INFO[user]['record'][bill_month]['repayment'] = repayment del user_manager.ATM_USER_INFO[user]['record'][bill_month] #还清账单之后,删除月份账单,这块在字典里真的很难判断多个账单,本想实现类似于招行信用卡那种,还完账单 \ #之后显示账单已还清,但是还能查看上期账单多少. 所以没办法,删除了这个功能,还完款之后直接删掉账单 user_manager.ATM_USER_INFO[user]['available'] += inp_money json.dump(user_manager.ATM_USER_INFO,open(user_manager.ATM_USERDB,'w')) log.atm_log(user,time.localtime(),'info','信用卡账户: [%s] 还款: [%.2f] 元 逾期手续费[ %.2f ] 元, 账单金额: [ %.2f ], [ %s ]账单已还清'%(user,inp_money,cost,bill,bill_month)) print('正在还款,请稍等...') time.sleep(2) print('\033[31;1m 已成功还清[ %s ]账单\033[0m' %bill_month) else: # repayment_money += if user_manager.ATM_USER_INFO[user]['record'][bill_month].get('repayment'): user_manager.ATM_USER_INFO[user]['record'][bill_month]['repayment'] += inp_money #还款金额赋值为还款后的金额 else: user_manager.ATM_USER_INFO[user]['record'][bill_month]['repayment'] = inp_money user_manager.ATM_USER_INFO[user]['available'] += inp_money #增加可用额度 print('正在还款,请稍等...') time.sleep(2) print('\033[31;1m账单未还清,逾期会有手续费! 已还金额 [ %.2f ], 账单金额: [ %.2f ] \033[0m'%(inp_money,bill)) json.dump(user_manager.ATM_USER_INFO,open(user_manager.ATM_USERDB,'w')) #持久化到文件 log.atm_log(user,time.localtime(),'info','信用卡账户: [%s] 还款: [%.2f] 元 逾期手续费[ %.2f ] 元'%(user,inp_money,cost)) else: print('\033[31;1m您输入的账单不存在!')
def draw_cash(): ''' 提现函数 :return: ''' user = user_manager.ATM_USER_STATUS['username'] username = user_manager.ATM_USER_INFO[user]['user'] avalilable = show_user(user,'available') cash_limit = avalilable/2 # print(cash_limit) # print(avalilable) # print(type(avalilable)) verify = input('\033[31;1m尊敬的用户[ %s ],取现手续费为提取现金金额的5%%, 确认? (y/Y)\033[0m'%username).strip() if verify == 'y' or verify == 'Y': inp = input('您的账户最高可取现[ %.2f ]元, 请输入你要提取的现金金额: '%int(cash_limit)).strip() if inp and inp.isdigit(): if float(inp) <= avalilable/2 and int(inp) > 0: inp = float(inp) cost = inp * 0.05 avalilable = avalilable - inp - cost #减金额和手续费 log.atm_log(user,time.localtime(),'info','信用卡账户: [%s] 提现: [%.2f] 元 手续费[ %.2f ] 元'%(user,inp,cost)) user_manager.ATM_USER_INFO[user]['available'] = avalilable curr_time = shop_mall.curr_datetime() #取出账单日期 if user_manager.ATM_USER_INFO[user]['record'].get(curr_time,None): if user_manager.ATM_USER_INFO[user]['record'].get(curr_time,None).get('total_debt') and \ user_manager.ATM_USER_INFO[user]['record'].get(curr_time,None).get('total_debt') >= 0: user_manager.ATM_USER_INFO[user]['record'][curr_time]['total_debt'] += (inp + cost) #账单欠款金额增加 else: user_manager.ATM_USER_INFO[user]['record'].setdefault(curr_time,{'total_debt': inp+cost}) else: user_manager.ATM_USER_INFO[user]['record'].setdefault(curr_time,{'total_debt': inp+cost}) json.dump(user_manager.ATM_USER_INFO,open(user_manager.ATM_USERDB,'w')) #持久化 print('正在出抄票,请不要离开...') time.sleep(2) if input('\033[31;1m 成功提现: [%.2f] 元 手续费[ %.2f ] 元\033[0m'%(inp,cost)):pass else: print('\033[31;1m账户可用额度不够或者输入金额不合法!\033[0m') return False else: print('输入的金额不合法!') return False
def reset_limit(): ''' 调整用户额度函数,由ATM管理员调用 :return: 成功为True, 失败为False ''' user = input('请输入要调整额度的用户: ').strip() if user: if user not in user_manager.ATM_USER_INFO.keys(): print('用户[ %s ]不存在!') return False else: print('[ %s ]用户,当前的额度为 [ %.2f ]' % (user, float(user_manager.ATM_USER_INFO[user].get('limit')))) inp_limit = input('请输入调整后的额度: ').strip() if int(inp_limit) <= 0 or not inp_limit: print('输入的金额不合法!') return False else: if float(inp_limit) < float( user_manager.ATM_USER_INFO[user]['limit']): inp_diff = float( user_manager.ATM_USER_INFO[user]['limit']) - float( inp_limit) #差值 if float(user_manager.ATM_USER_INFO[user] ['available']) >= float(inp_diff): user_manager.ATM_USER_INFO[user]['available'] -= float( inp_diff) else: print('\033[31;1m不能调整额度到此值,错误!\033[0m') return False else: inp_diff = float(inp_limit) - float( user_manager.ATM_USER_INFO[user]['limit']) #差值 user_manager.ATM_USER_INFO[user]['available'] += float( inp_diff) user_manager.ATM_USER_INFO[user]['limit'] = float(inp_limit) json.dump(user_manager.ATM_USER_INFO, open(user_manager.ATM_USERDB, 'w')) #持久化到文件 log.atm_log(user,time.localtime(),'info','信用卡账户: [%s] 调整额度: [%.2f] 调整后的额度: [ %.2f ] 操作员: [ %s ]' \ %(user,float(inp_limit),float(inp_limit),user_manager.ATM_ADMIN_STATUS['username'])) #打印日志 print('\033[31;1m信用卡账户: [%s]额度调整成功, 调整后的额度: [ %.2f ]\033[0m' % (user, float(inp_limit))) return True
def transfer(): ''' 账户间转账函数 :return: 失败的话 return False ''' user = user_manager.ATM_USER_STATUS['username'] #先获取用户当前登录账户 username = user_manager.ATM_USER_INFO[user]['user'] avalilable = show_user(user,'available') #可用额度 cash_limit = avalilable/2 #可转账金额最大限度 verify = input('\033[31;1m尊敬的用户[ %s ],转账手续费为当前转账金额的5%%, 确认否? (y/Y)\033[0m'%username).strip() if verify == 'y' or verify == 'Y': inp_user = input('请输入对方账户:').strip() inp_user_verify = input('请再次输入对方账号').strip() if inp_user != inp_user_verify: print('\033[31;1m两次输入号码不一致') return False else: inp = input('您的账户最高可转账[ %d ]元, 请输入你要向对方转账的金额: '%int(cash_limit)).strip() if inp_user not in user_manager.ATM_USER_INFO.keys(): print('\033[31;1m对方账户不存在!\033[0m') return False else: transfer_username = show_user(inp_user,'user') if inp_user == user_manager.ATM_USER_STATUS['username']: print('\033[31;1m不允许给自己转账!!!\033[0m') else: if inp and inp.isdigit(): inp = float(inp) transfer_verify = input(""" 对方银行账号: [ %s ] 对方账户名称: [ %s ] 对方转账金额: [ %.2f ] 手续费: [ %.2f ] \033[31;1m 是否确定? y/N \n>>\033[0m """%(inp_user,transfer_username,inp,inp*0.05)).strip() if transfer_verify == 'y' or transfer_verify == 'Y': if float(inp) <= avalilable/2 and int(inp) > 0: cost = inp * 0.05 avalilable = avalilable - inp - cost #减自己账户信息 log.atm_log(user,time.localtime(),'info','信用卡账户: [%s] 转账: [%.2f] 元 手续费[ %.2f ] 元'%(user,inp,cost)) user_manager.ATM_USER_INFO[user]['available'] = avalilable curr_time = shop_mall.curr_datetime() #取出账单日期 if user_manager.ATM_USER_INFO[user]['record'].get(curr_time,None): if user_manager.ATM_USER_INFO[user]['record'].get(curr_time).get('total_debt') and \ user_manager.ATM_USER_INFO[user]['record'].get(curr_time).get('total_debt') >= 0: user_manager.ATM_USER_INFO[user]['record'][curr_time]['total_debt'] += (inp + cost) #账单欠款金额增加 else: user_manager.ATM_USER_INFO[user]['record'].setdefault(curr_time,{'total_debt': inp+cost}) else: user_manager.ATM_USER_INFO[user]['record'].setdefault(curr_time,{'total_debt': inp+cost}) transfer_user = user_manager.ATM_USER_INFO[inp_user] #对方账户加金额 transfer_avalilable = show_user(inp_user,'available') #对方可用额度 transfer_avalilable += inp #加金额 user_manager.ATM_USER_INFO[inp_user]['available'] = transfer_avalilable log.atm_log(inp_user,time.localtime(),'info','信用卡账户: [%s] 收到转账: [%.2f] 元 手续费[ %.2f ] 元'%(inp_user,inp,0)) json.dump(user_manager.ATM_USER_INFO,open(user_manager.ATM_USERDB,'w')) #持久化到文件 print('正在转账,请不要离开操作台...') time.sleep(2) if input('\033[31;1m 成功转账: [%.2f] 元 手续费[ %.2f ] 元\033[0m'%(inp,cost)):pass else: print('\033[31;1m账户可用额度不够!\033[0m') return False else: print('\033[31;1m输入的金额不合法!\033[0m') return False
def repayment(user): ''' 用户还款函数 :return: ''' cost = show_bill(user) if cost: cost = float(cost) else: cost = 0 bill_month = input('请输入你要还款的账单日期, 如: 2016-5-22\n>>').strip() if bill_month and user_manager.ATM_USER_INFO[user]['record'].get( bill_month): bill = user_manager.ATM_USER_INFO[user]['record'].get(bill_month).get( 'total_debt', 0) repayment_money = user_manager.ATM_USER_INFO[user]['record'].get( bill_month).get('repayment', 0) if repayment_money >= bill + cost: #如果已还金额大于用户账单金额,则不让其还款 if input( '\033[31;1m账单总额: [ %.2f ], 已还金额: [%.2f] 已还清当期[ %s ]账单!\033[0m' % (bill, repayment_money, bill_month)): pass return False else: inp_money = input( '[ %s ] 账单总额: [ %.2f ], 已还金额: [%.2f], 还差 [ %.2f ]可以还清当期账单\n请输入你要还款的金额 >>' % (bill_month, bill, repayment_money, bill + cost - repayment_money)).strip() if inp_money and inp_money >= '0': inp_money = float(inp_money) if repayment_money + inp_money >= bill + cost: repayment = user_manager.ATM_USER_INFO[user]['record'][ bill_month].get('repayment', 0) #+= inp_money #还款金额赋值为还款后的金额 repayment += inp_money user_manager.ATM_USER_INFO[user]['record'][bill_month][ 'repayment'] = repayment del user_manager.ATM_USER_INFO[user]['record'][ bill_month] #还清账单之后,删除月份账单,这块在字典里真的很难判断多个账单,本想实现类似于招行信用卡那种,还完账单 \ #之后显示账单已还清,但是还能查看上期账单多少. 所以没办法,删除了这个功能,还完款之后直接删掉账单 user_manager.ATM_USER_INFO[user]['available'] += inp_money json.dump(user_manager.ATM_USER_INFO, open(user_manager.ATM_USERDB, 'w')) log.atm_log( user, time.localtime(), 'info', '信用卡账户: [%s] 还款: [%.2f] 元 逾期手续费[ %.2f ] 元, 账单金额: [ %.2f ], [ %s ]账单已还清' % (user, inp_money, cost, bill, bill_month)) print('正在还款,请稍等...') time.sleep(2) print('\033[31;1m 已成功还清[ %s ]账单\033[0m' % bill_month) else: # repayment_money += if user_manager.ATM_USER_INFO[user]['record'][ bill_month].get('repayment'): user_manager.ATM_USER_INFO[user]['record'][bill_month][ 'repayment'] += inp_money #还款金额赋值为还款后的金额 else: user_manager.ATM_USER_INFO[user]['record'][bill_month][ 'repayment'] = inp_money user_manager.ATM_USER_INFO[user][ 'available'] += inp_money #增加可用额度 print('正在还款,请稍等...') time.sleep(2) print( '\033[31;1m账单未还清,逾期会有手续费! 已还金额 [ %.2f ], 账单金额: [ %.2f ] \033[0m' % (inp_money, bill)) json.dump(user_manager.ATM_USER_INFO, open(user_manager.ATM_USERDB, 'w')) #持久化到文件 log.atm_log( user, time.localtime(), 'info', '信用卡账户: [%s] 还款: [%.2f] 元 逾期手续费[ %.2f ] 元' % (user, inp_money, cost)) else: print('\033[31;1m您输入的账单不存在!')
def transfer(): ''' 账户间转账函数 :return: 失败的话 return False ''' user = user_manager.ATM_USER_STATUS['username'] #先获取用户当前登录账户 username = user_manager.ATM_USER_INFO[user]['user'] avalilable = show_user(user, 'available') #可用额度 cash_limit = avalilable / 2 #可转账金额最大限度 verify = input( '\033[31;1m尊敬的用户[ %s ],转账手续费为当前转账金额的5%%, 确认否? (y/Y)\033[0m' % username).strip() if verify == 'y' or verify == 'Y': inp_user = input('请输入对方账户:').strip() inp_user_verify = input('请再次输入对方账号').strip() if inp_user != inp_user_verify: print('\033[31;1m两次输入号码不一致') return False else: inp = input('您的账户最高可转账[ %d ]元, 请输入你要向对方转账的金额: ' % int(cash_limit)).strip() if inp_user not in user_manager.ATM_USER_INFO.keys(): print('\033[31;1m对方账户不存在!\033[0m') return False else: transfer_username = show_user(inp_user, 'user') if inp_user == user_manager.ATM_USER_STATUS['username']: print('\033[31;1m不允许给自己转账!!!\033[0m') else: if inp and inp.isdigit(): inp = float(inp) transfer_verify = input(""" 对方银行账号: [ %s ] 对方账户名称: [ %s ] 对方转账金额: [ %.2f ] 手续费: [ %.2f ] \033[31;1m 是否确定? y/N \n>>\033[0m """ % (inp_user, transfer_username, inp, inp * 0.05)).strip() if transfer_verify == 'y' or transfer_verify == 'Y': if float(inp) <= avalilable / 2 and int(inp) > 0: cost = inp * 0.05 avalilable = avalilable - inp - cost #减自己账户信息 log.atm_log( user, time.localtime(), 'info', '信用卡账户: [%s] 转账: [%.2f] 元 手续费[ %.2f ] 元' % (user, inp, cost)) user_manager.ATM_USER_INFO[user][ 'available'] = avalilable curr_time = shop_mall.curr_datetime() #取出账单日期 if user_manager.ATM_USER_INFO[user][ 'record'].get(curr_time, None): if user_manager.ATM_USER_INFO[user]['record'].get(curr_time).get('total_debt') and \ user_manager.ATM_USER_INFO[user]['record'].get(curr_time).get('total_debt') >= 0: user_manager.ATM_USER_INFO[user][ 'record'][curr_time][ 'total_debt'] += (inp + cost ) #账单欠款金额增加 else: user_manager.ATM_USER_INFO[user][ 'record'].setdefault( curr_time, {'total_debt': inp + cost}) else: user_manager.ATM_USER_INFO[user][ 'record'].setdefault( curr_time, {'total_debt': inp + cost}) transfer_user = user_manager.ATM_USER_INFO[ inp_user] #对方账户加金额 transfer_avalilable = show_user( inp_user, 'available') #对方可用额度 transfer_avalilable += inp #加金额 user_manager.ATM_USER_INFO[inp_user][ 'available'] = transfer_avalilable log.atm_log( inp_user, time.localtime(), 'info', '信用卡账户: [%s] 收到转账: [%.2f] 元 手续费[ %.2f ] 元' % (inp_user, inp, 0)) json.dump(user_manager.ATM_USER_INFO, open(user_manager.ATM_USERDB, 'w')) #持久化到文件 print('正在转账,请不要离开操作台...') time.sleep(2) if input( '\033[31;1m 成功转账: [%.2f] 元 手续费[ %.2f ] 元\033[0m' % (inp, cost)): pass else: print('\033[31;1m账户可用额度不够!\033[0m') return False else: print('\033[31;1m输入的金额不合法!\033[0m') return False
def shop_pay(user): ''' 用户支付模块 :param user:传入形参商场用户身份 :return: ''' if not ATM_USER_STATUS['user_status']: # print(ATM_USER_STATUS) # atm_user,user_salary,available_money = user_manager.atm_login() result = user_manager.atm_login() if result: #如果认证ATM成功,取出用户atm用户名,信用卡额度,可用额度 atm_user,user_salary,available_money = result[0],result[1],result[2] ATM_USER_STATUS['username'] = atm_user ATM_USER_STATUS['user_status'] = True #user_manager.ATM_USER_INFO[atm_user]['user_status'] = True #并更改全局变量,待后面程序判定 #user_manager.ATM_USER_INFO[atm_user]['available'] = available_money #用户可用额度 else: return False price = check_user_shopp(user) if user_shopp_car: inp = input('\033[31;1m是否要支付? y/Y\033[0m').strip() if inp == 'y' or inp == 'Y': # print(price,user_salary,available_money) user_salary = float(user_salary) price = float(price) if price < user_manager.ATM_USER_INFO[atm_user]['available']: user_manager.ATM_USER_INFO[atm_user]['available'] -= price #可用额度减去消费金额 curr_time = curr_datetime() #取出账单日期 if user_manager.ATM_USER_INFO[atm_user]['record'].get(curr_time,None): if user_manager.ATM_USER_INFO[atm_user]['record'].get(curr_time).get('total_debt') and \ user_manager.ATM_USER_INFO[atm_user]['record'].get(curr_time).get('total_debt') >= 0: user_manager.ATM_USER_INFO[atm_user]['record'][curr_time]['total_debt'] += price #账单欠款金额增加 else: user_manager.ATM_USER_INFO[atm_user]['record'].setdefault(curr_time,{'total_debt': price}) else: user_manager.ATM_USER_INFO[atm_user]['record'].setdefault(curr_time,{'total_debt': price}) log.atm_log(atm_user,time.localtime(),'info','信用账户: %s 商城消费: %.2f'%(atm_user,price)) save_user_shop(user) json.dump(user_manager.ATM_USER_INFO,open(user_manager.ATM_USERDB,'w')) #持久化到文件 if input('\033[31;1m支付成功!本次消费[ %.2f ]元, 当前可用额度为: [ %.2f ]元\033[0m'\ %(price,user_manager.ATM_USER_INFO[atm_user]['available'])):pass return True else: inp = input('\033[31;1m 抱歉, 用于额度不足, 无法支付所购买商品! 是否要删除购物车某商品? \n y/Y>>\033[0m').strip() if inp == 'y' or inp == 'Y': del_shop() else: print('无效操作!') else: print('购物车里空的!') return False else: # print(ATM_USER_STATUS) # print(user_manager.ATM_USER_INFO) user_salary = user_manager.ATM_USER_INFO[ATM_USER_STATUS['username']]['limit'] #用户额度 # user_available = user_manager.ATM_USER_INFO[ATM_USER_STATUS['username']]['available'] #用户可用额度 atm_user = ATM_USER_STATUS.get('username') print('\033[31;1m您已经登录ATM机[ %s ]用户\033[0m'%atm_user) price = check_user_shopp(user) if user_shopp_car: inp = input('\033[31;1m是否要支付? y/Y\033[0m').strip() if inp == 'y' or inp == 'Y': # print(price,user_salary,user_manager.ATM_USER_INFO[ATM_USER_STATUS['username']]['available']) # user_available = int(user_available) price = float(price) if price < user_manager.ATM_USER_INFO[atm_user]['available']: user_manager.ATM_USER_INFO[ATM_USER_STATUS['username']]['available'] -= price curr_time = curr_datetime() #取出账单日期 if user_manager.ATM_USER_INFO[atm_user]['record'].get(curr_time,None): if user_manager.ATM_USER_INFO[atm_user]['record'].get(curr_time).get('total_debt') and \ user_manager.ATM_USER_INFO[atm_user]['record'].get(curr_time).get('total_debt') >= 0: user_manager.ATM_USER_INFO[atm_user]['record'][curr_time]['total_debt'] += price #账单欠款金额增加 else: user_manager.ATM_USER_INFO[atm_user]['record'].setdefault(curr_time,{'total_debt': price}) else: user_manager.ATM_USER_INFO[atm_user]['record'].setdefault(curr_time,{'total_debt': price}) log.atm_log(atm_user,time.localtime(),'info','信用账户: %s 商城消费: %.2f'%(atm_user,price)) save_user_shop(user) json.dump(user_manager.ATM_USER_INFO,open(user_manager.ATM_USERDB,'w')) #持久化到文件 if input('\033[31;1m支付成功!本次消费[ %.2f ]元, 当前可用额度为: [ %.2f ]元\033[0m'\ %(price,user_manager.ATM_USER_INFO[atm_user]['available'])):pass # print(user_manager.ATM_USER_INFO) return True else: inp = input('\033[31;1m 抱歉, 用于额度不足, 无法支付所购买商品! 是否要删除购物车某商品? \n y/Y>>\033[0m').strip() if inp == 'y' or inp == 'Y': del_shop() else: print('无效操作!') else: print('购物车里是空的!') return False
def shop_pay(user): ''' 用户支付模块 :param user:传入形参商场用户身份 :return: ''' if not ATM_USER_STATUS['user_status']: # print(ATM_USER_STATUS) # atm_user,user_salary,available_money = user_manager.atm_login() result = user_manager.atm_login() if result: #如果认证ATM成功,取出用户atm用户名,信用卡额度,可用额度 atm_user, user_salary, available_money = result[0], result[ 1], result[2] ATM_USER_STATUS['username'] = atm_user ATM_USER_STATUS['user_status'] = True #user_manager.ATM_USER_INFO[atm_user]['user_status'] = True #并更改全局变量,待后面程序判定 #user_manager.ATM_USER_INFO[atm_user]['available'] = available_money #用户可用额度 else: return False price = check_user_shopp(user) if user_shopp_car: inp = input('\033[31;1m是否要支付? y/Y\033[0m').strip() if inp == 'y' or inp == 'Y': # print(price,user_salary,available_money) user_salary = float(user_salary) price = float(price) if price < user_manager.ATM_USER_INFO[atm_user]['available']: user_manager.ATM_USER_INFO[atm_user][ 'available'] -= price #可用额度减去消费金额 curr_time = curr_datetime() #取出账单日期 if user_manager.ATM_USER_INFO[atm_user]['record'].get( curr_time, None): if user_manager.ATM_USER_INFO[atm_user]['record'].get(curr_time).get('total_debt') and \ user_manager.ATM_USER_INFO[atm_user]['record'].get(curr_time).get('total_debt') >= 0: user_manager.ATM_USER_INFO[atm_user]['record'][ curr_time]['total_debt'] += price #账单欠款金额增加 else: user_manager.ATM_USER_INFO[atm_user][ 'record'].setdefault(curr_time, {'total_debt': price}) else: user_manager.ATM_USER_INFO[atm_user][ 'record'].setdefault(curr_time, {'total_debt': price}) log.atm_log(atm_user, time.localtime(), 'info', '信用账户: %s 商城消费: %.2f' % (atm_user, price)) save_user_shop(user) json.dump(user_manager.ATM_USER_INFO, open(user_manager.ATM_USERDB, 'w')) #持久化到文件 if input('\033[31;1m支付成功!本次消费[ %.2f ]元, 当前可用额度为: [ %.2f ]元\033[0m'\ %(price,user_manager.ATM_USER_INFO[atm_user]['available'])): pass return True else: inp = input( '\033[31;1m 抱歉, 用于额度不足, 无法支付所购买商品! 是否要删除购物车某商品? \n y/Y>>\033[0m' ).strip() if inp == 'y' or inp == 'Y': del_shop() else: print('无效操作!') else: print('购物车里空的!') return False else: # print(ATM_USER_STATUS) # print(user_manager.ATM_USER_INFO) user_salary = user_manager.ATM_USER_INFO[ATM_USER_STATUS['username']][ 'limit'] #用户额度 # user_available = user_manager.ATM_USER_INFO[ATM_USER_STATUS['username']]['available'] #用户可用额度 atm_user = ATM_USER_STATUS.get('username') print('\033[31;1m您已经登录ATM机[ %s ]用户\033[0m' % atm_user) price = check_user_shopp(user) if user_shopp_car: inp = input('\033[31;1m是否要支付? y/Y\033[0m').strip() if inp == 'y' or inp == 'Y': # print(price,user_salary,user_manager.ATM_USER_INFO[ATM_USER_STATUS['username']]['available']) # user_available = int(user_available) price = float(price) if price < user_manager.ATM_USER_INFO[atm_user]['available']: user_manager.ATM_USER_INFO[ ATM_USER_STATUS['username']]['available'] -= price curr_time = curr_datetime() #取出账单日期 if user_manager.ATM_USER_INFO[atm_user]['record'].get( curr_time, None): if user_manager.ATM_USER_INFO[atm_user]['record'].get(curr_time).get('total_debt') and \ user_manager.ATM_USER_INFO[atm_user]['record'].get(curr_time).get('total_debt') >= 0: user_manager.ATM_USER_INFO[atm_user]['record'][ curr_time]['total_debt'] += price #账单欠款金额增加 else: user_manager.ATM_USER_INFO[atm_user][ 'record'].setdefault(curr_time, {'total_debt': price}) else: user_manager.ATM_USER_INFO[atm_user][ 'record'].setdefault(curr_time, {'total_debt': price}) log.atm_log(atm_user, time.localtime(), 'info', '信用账户: %s 商城消费: %.2f' % (atm_user, price)) save_user_shop(user) json.dump(user_manager.ATM_USER_INFO, open(user_manager.ATM_USERDB, 'w')) #持久化到文件 if input('\033[31;1m支付成功!本次消费[ %.2f ]元, 当前可用额度为: [ %.2f ]元\033[0m'\ %(price,user_manager.ATM_USER_INFO[atm_user]['available'])): pass # print(user_manager.ATM_USER_INFO) return True else: inp = input( '\033[31;1m 抱歉, 用于额度不足, 无法支付所购买商品! 是否要删除购物车某商品? \n y/Y>>\033[0m' ).strip() if inp == 'y' or inp == 'Y': del_shop() else: print('无效操作!') else: print('购物车里是空的!') return False