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 ================
[d]\tDepositar
[s]\tSacar
[e]\tExtrato
[nc]\tNova conta
[lc]\tListar contas
[nu]\tNovo usuário
[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@@@ Cliente não possui conta! @@@")
return
# FIXME: não permite cliente escolher a conta
return cliente.contas[0]
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)
def sacar(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 saque: "))
transacao = Saque(valor)
conta = recuperar_conta_cliente(cliente)
if not conta:
return
cliente.realizar_transacao(conta, transacao)
def exibir_extrato(clientes):
cpf = input("Informe o CPF do cliente: ")
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 ================")
transacoes = conta.historico.transacoes
extrato = ""
if not transacoes:
extrato = "Não foram realizadas movimentações."
else:
for transacao in transacoes:
extrato += f"\n{transacao['tipo']}:\n\tR$ {transacao['valor']:.2f}"
print(extrato)
print(f"\nSaldo:\n\tR$ {conta.saldo:.2f}")
print("==========================================")
if cliente:
print("\n@@@ Já existe cliente com esse CPF! @@@")
return
nome = input("Informe o nome completo: ")
data_nascimento = input("Informe a data de nascimento (dd-mm-aaaa): ")
endereco = input("Informe o 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=== Cliente criado com sucesso! ===")
def criar_conta(numero_conta, clientes, contas):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
if not cliente:
print("\n@@@ Cliente não encontrado, fluxo de criação de conta encerrado! @@@")
return
conta = ContaCorrente.nova_conta(cliente=cliente, numero=numero_conta)
contas.append(conta)
cliente.contas.append(conta)
print("\n=== Conta criada com sucesso! ===")
def listar_contas(contas):
for conta in contas:
print("=" * 100)
print(textwrap.dedent(str(conta)))
import textwrap
from abc import ABC, abstractclassmethod, abstractproperty
from datetime import datetime
class Cliente:
def init(self, endereco):
self.endereco = endereco
self.contas = []
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 menu():
menu = """\n
================ MENU ================
[d]\tDepositar
[s]\tSacar
[e]\tExtrato
[nc]\tNova conta
[lc]\tListar contas
[nu]\tNovo usuário
[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@@@ Cliente não possui conta! @@@")
return
def depositar(clientes):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
def sacar(clientes):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
def exibir_extrato(clientes):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
def criar_cliente(clientes):
cpf = input("Informe o CPF (somente número): ")
cliente = filtrar_cliente(cpf, clientes)
def criar_conta(numero_conta, clientes, contas):
cpf = input("Informe o CPF do cliente: ")
cliente = filtrar_cliente(cpf, clientes)
def listar_contas(contas):
for conta in contas:
print("=" * 100)
print(textwrap.dedent(str(conta)))
def main():
clientes = []
contas = []
main()
The text was updated successfully, but these errors were encountered: