Ejemplo n.º 1
0
def transfer(acc_data):
    '''
    转账
    :param acc_data: 
    :return: 
    '''
    account_data = data_handler.get_user_db(acc_data['account_id'])
    log_obj = logger.logger(account_data['id'], 'transaction')
    all_user = data_handler.get_all_username()  # 存在data/accounts文件夹下的所有用户
    current_balance = '''---------------- BALABCE INFO --------------
                Credit :  %s
                Balance:  %s
-------------------------------------------''' % (account_data['credit'],
                                                  account_data['balance'])
    print(current_balance)
    back_flag = False
    while not back_flag:
        tran_id = input(
            '\033[1;34mInput what account you want transfer: \033[0m').strip()
        if tran_id in all_user:  # 用户存在
            tran_amount = input(
                '\033[1;34mInput withdraw amount: \033[0m').strip()
            if tran_amount.isdigit():  # 数字
                new_balance = transaction.make_transaction(
                    log_obj, account_data, 'withdraw', tran_amount)
                if new_balance:  # 返回的 new_balance 有效,即钱够
                    # 汇款方进行相关操作并进行相关日志记录
                    tran_data = data_handler.get_user_db(tran_id)
                    tran_data['balance'] += int(tran_amount)
                    data_handler.set_user_db(tran_id, tran_data)
                    traned_log_obj = logger.logger(tran_id, 'transaction')
                    traned_log_obj.info(
                        'Received account %s transfer amount %s' %
                        (account_data['id'], tran_amount))

                    print('New:Balance:\033[32;1m %s \033[0m' %
                          new_balance['balance'])
            elif tran_amount == 'b':  # 返回
                back_flag = True
            elif tran_amount == 'q':  # 退出程序
                exit('请保管好您的信用卡,欢迎下次使用!')
            else:  # 错误输入
                print(
                    '\033[31;1m[%s] is not a valid amount, only accept integer!\033[0m'
                    % tran_amount)
        elif tran_id == 'b':  # 返回
            back_flag = True
        elif tran_id == 'q':  # 退出程序
            exit('请保管好您的信用卡,欢迎下次使用!')
        else:  # 错误输入
            print('\033[31;1m[%s] is not a valid id' % tran_id)
Ejemplo n.º 2
0
def withdraw(acc_data):
    '''
    提现
    :param acc_data: 
    :return: 
    '''
    account_data = data_handler.get_user_db(acc_data['account_id'])
    log_obj = logger.logger(account_data['id'], 'transaction')
    current_balance = '''---------------- BALABCE INFO --------------
            Credit :  %s
            Balance:  %s
-------------------------------------------''' % (account_data['credit'],
                                                  account_data['balance'])
    print(current_balance)
    back_flag = False
    while not back_flag:
        withdraw_amount = input(
            '\033[1;34mInput withdraw amount: \033[0m').strip()
        if withdraw_amount.isdigit():
            new_balance = transaction.make_transaction(log_obj, account_data,
                                                       'withdraw',
                                                       withdraw_amount)
            if new_balance:
                print('New:Balance:\033[32;1m %s \033[0m' %
                      new_balance['balance'])
        elif withdraw_amount == 'b':  # 返回
            back_flag = True
        elif withdraw_amount == 'q':  # 退出程序
            exit('请保管好您的信用卡,欢迎下次使用!')
        else:  # 错误输入
            print(
                '\033[31;1m[%s] is not a valid amount, only accept integer!\033[0m'
                % withdraw_amount)
Ejemplo n.º 3
0
def account_info(acc_data):
    '''
    查询账户信息
    :param acc_data: 
    :return: 
    '''
    account_data = data_handler.get_user_db(acc_data['account_id'])
    log_obj = logger.logger(account_data['id'], 'access')
    info_title = ("\033[31;m %s's Bank info\033[0m" %
                  acc_data['account_id']).center(55, '-')
    info_body = '''\033[32;m
    username:           %s
    credit:             %s
    balance:            %s
    enroll date:        %s
    expire date:        %s
    last logout data:   %s
\033[0m''' % (account_data['id'], account_data['credit'],
              account_data['balance'], account_data['enroll_date'],
              account_data['expire_date'], account_data['last_login_time'])

    info = info_title + info_body + '-' * 45
    print(info, flush=True)
    log_obj.info('account [%s] query the account information' %
                 account_data['id'])
Ejemplo n.º 4
0
def repay(acc_data):
    '''
    还款
    :param acc_data:   包含user_db和用户是否登陆 的字典
    :return: 
    '''
    account_data = data_handler.get_user_db(acc_data['account_id'])
    tr_log_obj = logger.set_tr_logger(account_data['id'])
    current_balance = '''---------------- BALABCE INFO --------------
        Credit :  %s
        Balance:  %s
-------------------------------------------''' % (account_data['credit'],
                                                  account_data['balance'])
    print(current_balance)
    back_flag = False
    while not back_flag:
        repay_amount = input('\033[1;34mInput repay amount: \033[0m').strip()
        if len(repay_amount) > 0 and repay_amount.isdigit():
            new_balance = transaction.make_transaction(tr_log_obj,
                                                       account_data, 'repay',
                                                       repay_amount)
            if new_balance:
                print('New:Balance:\033[32;1m %s \033[0m' %
                      new_balance['balance'])
        elif repay_amount == 'b':  # 返回
            back_flag = True
        elif repay_amount == 'q':  # 退出程序
            exit('请保管好您的信用卡,欢迎下次使用!')
        else:  # 错误输入
            print(
                '\033[31;1m[%s] is not a valid amount, only accept integer!\033[0m'
                % repay_amount)
Ejemplo n.º 5
0
def login(acc_data):
    username = input('account: ')
    ac_log_obj = logger.set_ac_logger(username, 'access')

    max_try_cnt, try_cnt = 3, 0  # 运行最大尝试次数
    all_user = data_handler.get_all_username()  # 存在data/accounts文件夹下的所有用户
    if username in all_user:  # 用户名存在
        user_db = data_handler.get_user_db(username)
        last_login_time = user_db['last_login_time']
        if user_db['status'] == 0:  # 正常状态
            while try_cnt < max_try_cnt:
                password = input('Please input your password(quit:q): ')
                # 认证成功后欢迎信息 ,判断密码是否与真实密码相等
                if user_db['password'] == password:
                    welcome_login()  # 欢迎信息
                    ac_log_obj.info('you are login')
                    acc_data['is_authenticated'] = True
                    acc_data['account_id'] = username
                    return acc_data  # 退出循环
                elif password == 'q':  # 取消重新登陆,直接退出程序
                    exit()
                else:  # 未达到三次,最大尝试次数减一
                    try_cnt += 1
                print('You have \033[1;35m%s times chance\033[0m' %
                      (max_try_cnt - try_cnt))
            else:  # 输入三次错误后锁定
                # localTime = time.strftime("%Y/%m/%d %H:%M:%S", time.localtime())
                user_db['last_login_time'] = time.time()  # 时间戳
                user_db['status'] = 1
                data_handler.set_user_db(username, user_db)
                ac_log_obj.error("too many login attempts")
                print("you have been locked...")
                exit()
            pass
        elif user_db['status'] == 1:  # 锁定状态
            print("you have been locked at the time:"
                  "\033[1;32m %s\033[0m " % last_login_time)  # 高亮显示锁定时间
            pass
        elif user_db['status'] == 2:  # 注销状态,即不可见
            print("you have been revoke your account at the time: "
                  "\033[1;32m %s\033[0m " % last_login_time)  # 高亮显示吊销账号时间
            pass
        pass
    else:  # 用户名不存在,提示是否重新注册
        want_add_user = input("Do you want add a new account (y/n)? ")
        if (want_add_user == 'y'):
            add_user = input('Please input a new account: ')  # 输入用户名密码
            add_passwd = input('Please input a passwd: ')
            user_db = default_db.default_db  # 为新用户增加用户数据
            user_db['id'] = add_user
            user_db['password'] = add_passwd
            data_handler.set_user_db(add_user, user_db)

            ac_log_obj = logger.set_ac_logger(username, 'access')
            ac_log_obj.info('account [%s] are login' % add_user)
            acc_data['is_authenticated'] = True
            acc_data['account_id'] = username
            return acc_data  # 退出循环
        else:
            exit()
Ejemplo n.º 6
0
def pay_check(acc_data):
    # 账单
    account_data = data_handler.get_user_db(acc_data['account_id'])

    Base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    tr_log_path = '%s/log/transaction_log/%s_transactions.log' % (
        Base_path, account_data['id'])
    # print(tr_log_path)
    with open(tr_log_path, 'r', encoding='utf-8') as f:
        print(f.read())
Ejemplo n.º 7
0
def reset_passwd():
    username = input('Please input a username: '******'[%s] is not been registered')
    else:
        user_db = data_handler.get_user_db(username)
        user_db['password'] = default_db.default_password
        data_handler.set_user_db(username, user_db)

        ac_log_obj = logger.set_ac_logger(username, 'access')
        ac_log_obj.info('reset password successful')
        print('\033[32;1maccount [%s] reset password successfull!\033[0m' % username)
Ejemplo n.º 8
0
def change_balance():
    username = input('Please input a username: '******'No user named [%s]' % username)
    else:
        user_db = data_handler.get_user_db(username)
        new_balance = input('Please input new balance: ')   # 输入旧密码
        user_db['password'] = new_balance
        data_handler.set_user_db(username, user_db)
        ac_log_obj = logger.set_ac_logger(username, 'access')
        ac_log_obj.info('change balance successful')
        print('\033[32;1maccount [%s] change balance successfull\033[0m' % username)
Ejemplo n.º 9
0
def unfreeze():
    '''
    解冻用户
    :return: 
    '''
    username = input('Please input a username: '******'No user named [%s]' % username)
    else:
        user_db = data_handler.get_user_db(username)
        user_db['status'] = 0
        data_handler.set_user_db(username, user_db)
        ac_log_obj = logger.set_ac_logger(username, 'access')
        ac_log_obj.info('freeze username [%s] successful!' % username)
        print('freeze username [%s] successful!' % username)
Ejemplo n.º 10
0
def logout(acc_data):
    '''
    退出登陆
    :param acc_data: 
    :return: 
    '''
    if acc_data['is_authenticated'] == False:
        print('\033[31;1mWarning,You are not login...\033[0m')
    else:
        account_data = data_handler.get_user_db(acc_data['account_id'])
        username = account_data['id']
        ac_log_obj = logger.set_ac_logger(username)
        ac_log_obj.info('account [%s] are logout' % username)
        acc_data['is_authenticated'] = False
        if username in logger.log_id['ac_id']:
            logger.log_id['ac_id'].remove(username)
        elif username in logger.log_id['tr_id']:
            logger.log_id['tr_id'].remove(username)
        print('您已退出ATM系统,请保管好您的信用卡')
Ejemplo n.º 11
0
def change_passwd():
    username = input('Please input a username: '******'No user named [%s]' % username)
    else:
        user_db = data_handler.get_user_db(username)
        old_passwd = input('Please input old password: '******'password']:
            new_passwd = input('Please input new password: '******'Please input new password: '******'':
                user_db['password'] = new_passwd
                data_handler.set_user_db(username, user_db)
                ac_log_obj = logger.set_ac_logger(username, 'access')
                ac_log_obj.info('change password successful')
                print('\033[32;1maccount [%s] change password successfull\033[0m' % username)
            else:
                print('You have input two different password')
        else :
            print('You input an error password')
Ejemplo n.º 12
0
def pay_for(acc_data, goods_list):
    account_data = data_handler.get_user_db(acc_data['account_id'])
    tr_log_obj = logger.set_tr_logger(account_data['id'])
    balance = account_data['balance']
    print('Your balance is: %s' % balance)
    buy_flag = input('Do you really want to buy the goods(Y/N): ').strip()
    if buy_flag == 'Y':  # 确定购买
        all_goods_price = 0  # 所有商品的价格
        for goods in goods_list:
            all_goods_price += goods[1]
        if all_goods_price <= account_data['balance']:
            account_data['balance'] -= all_goods_price
            for val in goods_list:
                tr_log_obj.info('Buy %s ,cost %s$' % (val[0], val[1]))
            print(
                '\033[33;1mYou have bought all the goods! Thanks for your Custom\033[0m'
            )
        else:
            print(
                'Your credit card have no enough money to pay for the goods!')
    elif buy_flag == 'N':
        exit()
    else:
        exit('Invalid input, see you next time!')