You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
def menu():
menu = """\n
****************** MENU ******************
[nu]\tNovo usuário
[nc]\tNova conta
[d]\tDepositar
[s]\tSacar
[e]\tExtrato
[lc]\tListar contas
[q]\tSair
=> """
return input(textwrap.dedent(menu))
def filtrar_cliente(cpf, clientes):
clientes_filtrados = [cliente for cliente in clientes if cliente.cpf == cpf]
return clientes_filtrados[0] if clientes_filtrados else None
def recuperar_conta_cliente(cliente):
if not cliente.contas:
print("\n*** Esse Cliente não possui conta! ***")
return
return cliente.contas[0]
@log_transacao
def depositar(clientes):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
if not cliente:
print("\n*** Cliente não encontrado! ***")
return
valor = float(input("Informe o valor do depósito: "))
transacao = Deposito(valor)
conta = recuperar_conta_cliente(cliente)
if not conta:
return
cliente.realizar_transacao(conta, transacao)
@log_transacao
def sacar(clientes):
cpf = input("Informe o seu CPF: ")
cliente = filtrar_cliente(cpf, clientes)
if not cliente:
print("\n*** Cliente nao encontrado! ***")
return
valor = float(input("Informe o valor que deseja sacar: "))
transacao = Saque(valor)
conta = recuperar_conta_cliente(cliente)
if not conta:
return
cliente.realizar_transacao(conta, transacao)
@log_transacao
def exibir_extrato(clientes):
cpf = input("Informe o seu CPF: ")
cliente = filtrar_cliente(cpf, clientes)
if not cliente:
print("\n*** Cliente não encontrado! ***")
return
conta = recuperar_conta_cliente(cliente)
if not conta:
return
print("\n***************** EXTRATO ******************")
extrato = ""
tem_transacao = False
for transacao in conta.historico.gerar_relatorio():
tem_transacao = True
extrato += f"\n{transacao['tipo']}:\n\tR$ {transacao['valor']:.2f}"
if not tem_transacao:
extrato = "Não foram realizadas transações"
print(extrato)
print(f"\nSaldo:\n\tR$ {conta.saldo:.2f}")
print("***********************************")
@log_transacao
def criar_cliente(clientes):
cpf = input("Informe o seu CPF (somente número): ")
cliente = filtrar_cliente(cpf, clientes)
if cliente:
print("\n****** Já existe cliente com esse CPF! ******")
return
nome = input("Informe o seu nome completo: ")
data_nascimento = input("Informe a sua data de nascimento (dd-mm-aaaa): ")
endereco = input("Informe o seu endereço (logradouro, nro - bairro - cidade/sigla estado): ")
cliente = PessoaFisica(nome=nome, data_nascimento=data_nascimento, cpf=cpf, endereco=endereco)
clientes.append(cliente)
print("\n*** Novo Cliente criado com sucesso! ***")
@log_transacao
def criar_conta(numero_conta, clientes, contas):
cpf = input("Informe o seu CPF : ")
cliente = filtrar_cliente(cpf, clientes)
if not cliente:
print("\n*** Cliente não encontrado, criação de conta encerrado! ***")
return
conta = ContaCorrente.nova_conta(cliente=cliente, numero=numero_conta, limite=2000, limite_saques=20)
contas.append(conta)
cliente.contas.append(conta)
print("\n*** Parabens, conta criada com sucesso! ***")
def listar_contas(contas):
for conta in ContasIterador(contas):
print("=" * 100)
print(textwrap.dedent(str(conta)))
****************** MENU ******************
[nu] Novo usuário
[nc] Nova conta
[d] Depositar
[s] Sacar
[e] Extrato
[lc] Listar contas
[q] Sair
=> nu
Informe o seu CPF (somente número): 301994
Informe o seu nome completo: Marina Freitas
Informe a sua data de nascimento (dd-mm-aaaa): 30041994
Informe o seu endereço (logradouro, nro - bairro - cidade/sigla estado): Rua 12, 200 - Jd Finotti - Uberlandia MG
*** Novo Cliente criado com sucesso! ***
2024-08-23 00:18:41.365696: CRIAR_CLIENTE
****************** MENU ******************
[nu] Novo usuário
[nc] Nova conta
[d] Depositar
[s] Sacar
[e] Extrato
[lc] Listar contas
[q] Sair
=> nc
Informe o seu CPF : 301994
*** Parabens, conta criada com sucesso! ***
2024-08-23 00:18:47.864918: CRIAR_CONTA
****************** MENU ******************
[nu] Novo usuário
[nc] Nova conta
[d] Depositar
[s] Sacar
[e] Extrato
[lc] Listar contas
[q] Sair
=> d
Informe o CPF do cliente: 301994
Informe o valor do depósito: 5000
*** Depósito realizado com sucesso! ***
2024-08-23 00:18:56.745940: DEPOSITAR
****************** MENU ******************
[nu] Novo usuário
[nc] Nova conta
[d] Depositar
[s] Sacar
[e] Extrato
[lc] Listar contas
[q] Sair
=> s
Informe o seu CPF: 301994
Informe o valor que deseja sacar: 1000
***** Saque realizado com sucesso! ****
2024-08-23 00:19:06.483734: SACAR
****************** MENU ******************
[nu] Novo usuário
[nc] Nova conta
[d] Depositar
[s] Sacar
[e] Extrato
[lc] Listar contas
[q] Sair
=> e
Informe o seu CPF: 301994
***************** EXTRATO ******************
Deposito:
R$ 5000.00
Saque:
R$ 1000.00
Saldo:
R$ 4000.00
2024-08-23 00:19:13.637899: EXIBIR_EXTRATO
****************** MENU ******************
[nu] Novo usuário
[nc] Nova conta
[d] Depositar
[s] Sacar
[e] Extrato
[lc] Listar contas
[q] Sair
=>
The text was updated successfully, but these errors were encountered:
import textwrap
from abc import ABC, abstractclassmethod, abstractproperty
from datetime import datetime
class ContasIterador:
def init(self, contas):
self.contas = contas
self._index = 0
class Cliente:
def init(self, endereco):
self.endereco = endereco
self.contas = []
self.indice_conta = 0
class PessoaFisica(Cliente):
def init(self, nome, data_nascimento, cpf, endereco):
super().init(endereco)
self.nome = nome
self.data_nascimento = data_nascimento
self.cpf = cpf
class Conta:
def init(self, numero, cliente):
self._saldo = 0
self._numero = numero
self._agencia = "0001"
self._cliente = cliente
self._historico = Historico()
class ContaCorrente(Conta):
def init(self, numero, cliente, limite=500, limite_saques=3):
super().init(numero, cliente)
self._limite = limite
self._limite_saques = limite_saques
class Historico:
def init(self):
self._transacoes = []
class Transacao(ABC):
@Property
@abstractproperty
def valor(self):
pass
class Saque(Transacao):
def init(self, valor):
self._valor = valor
class Deposito(Transacao):
def init(self, valor):
self._valor = valor
def log_transacao(func):
def envelope(*args, **kwargs):
resultado = func(*args, **kwargs)
print(f"{datetime.now()}: {func.name.upper()}")
return resultado
def menu():
menu = """\n
****************** MENU ******************
[nu]\tNovo usuário
[nc]\tNova conta
[d]\tDepositar
[s]\tSacar
[e]\tExtrato
[lc]\tListar contas
[q]\tSair
=> """
return input(textwrap.dedent(menu))
def filtrar_cliente(cpf, clientes):
clientes_filtrados = [cliente for cliente in clientes if cliente.cpf == cpf]
return clientes_filtrados[0] if clientes_filtrados else None
def recuperar_conta_cliente(cliente):
if not cliente.contas:
print("\n*** Esse Cliente não possui conta! ***")
return
return cliente.contas[0]
@log_transacao
def depositar(clientes):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
@log_transacao
def sacar(clientes):
cpf = input("Informe o seu CPF: ")
cliente = filtrar_cliente(cpf, clientes)
@log_transacao
def exibir_extrato(clientes):
cpf = input("Informe o seu CPF: ")
cliente = filtrar_cliente(cpf, clientes)
@log_transacao
def criar_cliente(clientes):
cpf = input("Informe o seu CPF (somente número): ")
cliente = filtrar_cliente(cpf, clientes)
@log_transacao
def criar_conta(numero_conta, clientes, contas):
cpf = input("Informe o seu CPF : ")
cliente = filtrar_cliente(cpf, clientes)
def listar_contas(contas):
for conta in ContasIterador(contas):
print("=" * 100)
print(textwrap.dedent(str(conta)))
def main():
clientes = []
contas = []
main()
RESULTADO IMPRESSO
****************** MENU ******************
[nu] Novo usuário
[nc] Nova conta
[d] Depositar
[s] Sacar
[e] Extrato
[lc] Listar contas
[q] Sair
=> nu
Informe o seu CPF (somente número): 301994
Informe o seu nome completo: Marina Freitas
Informe a sua data de nascimento (dd-mm-aaaa): 30041994
Informe o seu endereço (logradouro, nro - bairro - cidade/sigla estado): Rua 12, 200 - Jd Finotti - Uberlandia MG
*** Novo Cliente criado com sucesso! ***
2024-08-23 00:18:41.365696: CRIAR_CLIENTE
****************** MENU ******************
[nu] Novo usuário
[nc] Nova conta
[d] Depositar
[s] Sacar
[e] Extrato
[lc] Listar contas
[q] Sair
=> nc
Informe o seu CPF : 301994
*** Parabens, conta criada com sucesso! ***
2024-08-23 00:18:47.864918: CRIAR_CONTA
****************** MENU ******************
[nu] Novo usuário
[nc] Nova conta
[d] Depositar
[s] Sacar
[e] Extrato
[lc] Listar contas
[q] Sair
=> d
Informe o CPF do cliente: 301994
Informe o valor do depósito: 5000
*** Depósito realizado com sucesso! ***
2024-08-23 00:18:56.745940: DEPOSITAR
****************** MENU ******************
[nu] Novo usuário
[nc] Nova conta
[d] Depositar
[s] Sacar
[e] Extrato
[lc] Listar contas
[q] Sair
=> s
Informe o seu CPF: 301994
Informe o valor que deseja sacar: 1000
***** Saque realizado com sucesso! ****
2024-08-23 00:19:06.483734: SACAR
****************** MENU ******************
[nu] Novo usuário
[nc] Nova conta
[d] Depositar
[s] Sacar
[e] Extrato
[lc] Listar contas
[q] Sair
=> e
Informe o seu CPF: 301994
***************** EXTRATO ******************
Deposito:
R$ 5000.00
Saque:
R$ 1000.00
Saldo:
R$ 4000.00
2024-08-23 00:19:13.637899: EXIBIR_EXTRATO
****************** MENU ******************
[nu] Novo usuário
[nc] Nova conta
[d] Depositar
[s] Sacar
[e] Extrato
[lc] Listar contas
[q] Sair
=>
The text was updated successfully, but these errors were encountered: