Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
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您输入的账单不存在!')
Beispiel #6
0
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
Beispiel #7
0
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
Beispiel #8
0
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
Beispiel #9
0
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您输入的账单不存在!')
Beispiel #10
0
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
Beispiel #11
0
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
Beispiel #12
0
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