Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sistema bancario com poo #179

Open
vinirgg opened this issue Jul 15, 2024 · 0 comments
Open

sistema bancario com poo #179

vinirgg opened this issue Jul 15, 2024 · 0 comments

Comments

@vinirgg
Copy link

vinirgg commented Jul 15, 2024

from abc import ABC, abstractclassmethod, abstractproperty
from datetime import datetime

class Cliente:
def init(self, endereco):
self.endereco = endereco
self.contas = []

def realizar_transacao(self, conta, transacao):
    transacao.registrar(conta)

def adicionar_conta(self, conta):
    self.contas.append(conta)

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()

@classmethod
def nova_conta(cls, cliente, numero):
    return cls(numero, cliente)

@property
def saldo(self):
    return self._saldo

@property
def numero(self):
    return self._numero

@property
def agencia(self):
    return self._agencia

@property
def cliente(self):
    return self._cliente

@property
def historico(self):
    return self._historico

def sacar(self, valor):
    saldo = self.saldo
    excedeu_saldo = valor > saldo

    if excedeu_saldo:
        print("\n@@@ Operação falhou! Você não tem saldo suficiente. @@@")

    elif valor > 0:
        self._saldo -= valor
        print("\n=== Saque realizado com sucesso! ===")
        return True

    else:
        print("\n@@@ Operação falhou! O valor informado é inválido. @@@")

    return False

def depositar(self, valor):
    if valor > 0:
        self._saldo += valor
        print("\n=== Depósito realizado com sucesso! ===")
    else:
        print("\n@@@ Operação falhou! O valor informado é inválido. @@@")
        return False

    return True

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

def sacar(self, valor):
    numero_saques = len(
        [transacao for transacao in self.historico.transacoes if transacao["tipo"] == Saque.__name__]
    )

    excedeu_limite = valor > self.limite
    excedeu_saques = numero_saques >= self.limite_saques

    if excedeu_limite:
        print("\n@@@ Operação falhou! O valor do saque excede o limite. @@@")

    elif excedeu_saques:
        print("\n@@@ Operação falhou! Número máximo de saques excedido. @@@")

    else:
        return super().sacar(valor)

    return False

def __str__(self):
    return f"""\
        Agência:\t{self.agencia}
        C/C:\t\t{self.numero}
        Titular:\t{self.cliente.nome}
    """

class Historico:
def init(self):
self._transacoes = []

@property
def transacoes(self):
    return self._transacoes

def adicionar_transacao(self, transacao):
    self._transacoes.append(
        {
            "tipo": transacao.__class__.__name__,
            "valor": transacao.valor,
            "data": datetime.now().strftime("%d-%m-%Y %H:%M:%s"),
        }
    )

class Transacao(ABC):
@Property
@abstractproperty
def valor(self):
pass

@abstractclassmethod
def registrar(self, conta):
    pass

class Saque(Transacao):
def init(self, valor):
self._valor = valor

@property
def valor(self):
    return self._valor

def registrar(self, conta):
    sucesso_transacao = conta.sacar(self.valor)

    if sucesso_transacao:
        conta.historico.adicionar_transacao(self)

class Deposito(Transacao):
def init(self, valor):
self._valor = valor

@property
def valor(self):
    return self._valor

def registrar(self, conta):
    sucesso_transacao = conta.depositar(self.valor)

    if sucesso_transacao:
        conta.historico.adicionar_transacao(self)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant