def transfer(transfer_card,recipient_card): db_global_path = data_handler.get_db_global_path('card_num.txt') public_file=open(db_global_path,'r') public_info=public_file.read() public_file.close() if recipient_card in public_info: transfer_amount=input('请输入您想转账的金额>>>') transfer_card_info=accounts.read_info(transfer_card) recipient_card_info=accounts.read_info(recipient_card) if transfer_card_info['limit']<float(transfer_amount): logger.public_operation_log(transfer_card_info,'转账失败') logger.private_access_log(transfer_card_info,'转账失败') print('余额不足!') else: print('接受账户开户人:%s****%s'%(recipient_card_info['account_id'][0],recipient_card_info['account_id'][-1])) user_choice=input('请确认是否转账(输入任意值以继续或输入b以取消)>>>') if user_choice=='b': logger.public_operation_log(transfer_card_info, '取消转账') logger.private_access_log(transfer_card_info, '取消转账') print('您已取消转账!') return False else: transfer_card_info['limit']=transfer_card_info['limit']-float(transfer_amount) recipient_card_info['limit']=recipient_card_info['limit']+float(transfer_amount) accounts.write_info(transfer_card,transfer_card_info) accounts.write_info(recipient_card,recipient_card_info) logger.public_operation_log(transfer_card_info, '成功转账 %s 元至账号 %s'%(transfer_amount,recipient_card)) logger.private_access_log(transfer_card_info, '') print('转账成功') return True else: print('账户不存在,请检查输入是否正确!') return False
def repay(card_num): repay_amount=input('请输入还款金额:') modified_info=accounts.read_info(card_num) modified_info['limit']=round(modified_info['limit']+float(repay_amount),2) accounts.write_info(card_num,modified_info) logger.public_operation_log(modified_info,'还款%s元'%(repay_amount)) logger.private_access_log(modified_info,'还款%s元'%(repay_amount)) print('还款成功!') return repay_amount
def creat_account(): BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) new_path = BASE_DIR + '\\data\\accounts_info\\card_num.txt' sys.path.append(BASE_DIR) card_num_record = open(new_path, 'r+', encoding='utf-8') num_data = card_num_record.read() user_choice = 'none' while True: user_choice = input('\033[32;1m请输入任意值以继续,或输入b返回上一级>>>\033[0m') if user_choice == 'b': exit('\033[31;1m取消创建账户!\033[0m') account_id = input('\033[32;1m请输入您的姓名>>>\033[0m') card_num = input( '\033[32;1m请输入一个合法的卡号(卡号为8位纯数字),此卡号以后将成为您的信用卡账户:\033[0m') password = input('\033[32;1m请输入您的密码>>>\033[0m') password_confirm = input('\033[32;1m请再次输入您的密码以确定>>>\033[0m') user_limit = input('\033[32;1m请输入您想申请的信用卡额度>>>\033[0m') if card_num in num_data or len(card_num) != 8 or card_num.isdigit( ) == False: print('\033[31;1m账号已存在!\033[0m') continue elif password != password_confirm: print('\033[31;1m两次密码输入不一致\033[0m') continue elif user_limit.isdigit() != True: print('\033[31;1m信用额度只能为数字!\033[0m') continue elif int(user_limit) < 0: print('\033[31;1m额度不合法!\033[0m') continue else: card_num_record.write('%s\n' % (card_num)) card_num_record.close() time_stamp = time.mktime(time.gmtime()) + 172800 info = { 'account_id': account_id, 'card_num': card_num, 'password': password, 'limit': float(user_limit), 'expired_time': time_stamp, 'state': True } real_path = data_handler.get_db_private_path(info) accounts.write_info(card_num, info) print('\033[32;1m成功创建账户!\033[0m') logger.public_operation_log(info, '创建账户') break
def withdrawls(card_num): withdrawls_amount=input('请输入取款金额:') modified_info = accounts.read_info(card_num) if float(withdrawls_amount)>modified_info['limit']: print('余额不足!') return '取款失败,余额不足' else: modified_info['limit']=round(modified_info['limit']-float(withdrawls_amount)*1.05,2) accounts.write_info(card_num, modified_info) logger.public_operation_log(modified_info, '取款%s元' % (withdrawls_amount)) logger.private_access_log(modified_info, '取款%s元' % (withdrawls_amount)) print('取款成功') return '取款 %s 元'%withdrawls_amount
def acc_auth(card_num, password, mode, count=1): db_private_path = data_handler.get_db_private_path(card_num) private_info = accounts.read_info(card_num) if mode == 'r': time_stamp = time.mktime(time.gmtime()) if count < 4: if private_info['password'] == password and private_info[ 'state'] == True and time_stamp <= private_info[ 'expired_time']: print('登录成功!') logger.public_operation_log(private_info, '成功登录') return True elif time_stamp >= private_info['expired_time']: print('您的账户已过期,请前往管理端口处理!') logger.public_operation_log(private_info, '登录失败') return False elif private_info['state'] == False: print('您的账户已被冻结,请前往管理端口处理!') logger.public_operation_log(private_info, '登录失败') return False else: print('密码错误!') logger.public_operation_log(private_info, '登录失败') count = count + 1 return count else: print('密码输错次数过多,您的账户已被冻结!') private_info['state'] = False accounts.write_info(private_info) logger.public_operation_log(private_info, '账户被冻结') logger.private_access_log(private_info, '账户被冻结') return False if mode == 'm': if private_info['password'] == password: print('登录成功!') logger.public_operation_log(private_info, '成功登录') return True else: print('密码错误!') logger.public_operation_log(private_info, '登录失败') return False
def manage(): while True: choice = input('\033[32;1m请输入任意值以继续,或输入q退出管理系统>>>\033[0m') if choice == 'q': print('您已退出ATM管理系统') break print('----请选择一种服务----') print('1 %s' % management['1']) print('2 账户管理') print('3 %s' % management['5']) user_choice = input('请输入对应服务序号以继续>>>') if user_choice == '1': account_sample.creat_account() continue elif user_choice == '2': while True: choice = input('\033[32;1m请输入任意值以继续,或输入b返回>>>\033[0m') if choice == 'b': print('您已退出,即将返回初始界面') for i in range(10): print('. ', end='') time.sleep(0.5) print('\n') break card_num = input('请输入您的信用卡账号>>>') password = input('请输入密码>>>') if auth.is_exist(card_num) == False: print('账户不存在,请检查输入是否正确!') continue jud = auth.acc_auth(card_num, password, 'm') while jud == True: print('1 %s' % management['2']) print('2 %s' % management['3']) print('3 %s' % management['4']) print('4 %s' % management['5']) print('5 %s' % management['6']) user_choice2 = input('请输入对应服务序号以继续>>>') if user_choice2 == '1': new_limit = input('请输入您想申请的额度>>>') present_info = accounts.read_info(card_num) present_info['limit'] = float(new_limit) accounts.write_info(card_num, present_info) logger.public_operation_log(present_info, '申请额度 %s 元' % new_limit) logger.private_access_log(present_info, '申请额度 %s 元' % new_limit) print('审核中') for i in range(10): print('. ', end='') time.sleep(0.5) print('\n申请成功') continue elif user_choice2 == '2': present_info = accounts.read_info(card_num) present_info['state'] = True accounts.write_info(card_num, present_info) logger.public_operation_log(present_info, '解冻账户') logger.private_access_log(present_info, '解冻账户') print('审核中') for i in range(10): print('. ', end='') time.sleep(0.5) print('\n您的账户已解冻') continue elif user_choice2 == '3': confirm = input('您确认要冻结您的账号吗?输入任意值以确认,输入b以取消>>>') if confirm == 'b': continue else: present_info = accounts.read_info(card_num) present_info['state'] = False accounts.write_info(card_num, present_info) logger.public_operation_log(present_info, '冻结账户') logger.private_access_log(present_info, '冻结账户') print('审核中') for i in range(10): print('. ', end='') time.sleep(0.5) print('\n您的账户已冻结') continue elif user_choice2 == '4': present_info = accounts.read_info(card_num) present_info['expired_time'] = time.mktime( time.gmtime()) + 172800 accounts.write_info(card_num, present_info) logger.public_operation_log(present_info, '更新账户') logger.private_access_log(present_info, '更新账户') print('审核中') for i in range(10): print('. ', end='') time.sleep(0.5) print('\n您的账户已更新') continue elif user_choice2 == '5': print('您的账户已登出!') break else: print('不合法的输入,请再次输入') continue elif user_choice == '3': print('您已登出') break else: print('不合法的输入,请重新输入!') continue