trilha-python-dio icon indicating copy to clipboard operation
trilha-python-dio copied to clipboard

sistema bancário aprimorado!

Open gathddu opened this issue 7 months ago • 0 comments

from datetime import datetime, timedelta

class ContaBancaria: def init(self, numero, titular, senha): self.numero = numero self.titular = titular self.saldo = 0 self.limite_saque = 500 self.limite_transferencia = 1000 self.extrato = "" self.numero_saques = 0 self.limite_saques = 3 self.limite_diario_saques = 1000 self.saques_dia = 0 self.historico_transacoes = [] self.senha = senha self.ultimo_reset_diario = datetime.now()

def autenticar(self, senha):
    return self.senha == senha

def resetar_limites_diarios(self):
    agora = datetime.now()
    if agora - self.ultimo_reset_diario > timedelta(days=1):
        self.saques_dia = 0
        self.numero_saques = 0
        self.ultimo_reset_diario = agora

def registrar_transacao(self, tipo, valor):
    transacao = {
        "tipo": tipo,
        "valor": valor,
        "data": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    }
    self.historico_transacoes.append(transacao)

def depositar(self, valor):
    self.resetar_limites_diarios()
    if valor > 0:
        self.saldo += valor
        self.extrato += f"Depósito: R$ {valor:.2f}\n"
        self.registrar_transacao("Depósito", valor)
        return f"Depósito de {valor:.2f} concluído :)"
    else:
        return "Operação falhou :(. O valor informado é inválido."

def sacar(self, valor):
    self.resetar_limites_diarios()
    if valor <= 0:
        return "Operação falhou :(. O valor informado é inválido."
    elif valor > self.saldo:
        return "Operação falhou :(. Você não tem saldo suficiente."
    elif valor > self.limite_saque:
        return "Operação falhou :(. O valor do saque excede o limite."
    elif self.numero_saques >= self.limite_saques:
        return "Operação falhou :(. Número máximo de saques excedido."
    elif self.saques_dia + valor > self.limite_diario_saques:
        return "Operação falhou :(. Você excedeu o limite diário de saques."
    else:
        self.saldo -= valor
        self.extrato += f"Saque: R$ {valor:.2f}\n"
        self.numero_saques += 1
        self.saques_dia += valor
        self.registrar_transacao("Saque", valor)
        return f"Saque de {valor:.2f} realizado com sucesso."

def exibir_extrato(self):
    extrato = "\n        EXTRATO        \n"
    extrato += "Não foram realizadas movimentações." if not self.extrato else self.extrato
    extrato += f"\nSaldo: R$ {self.saldo:.2f}\n        "
    return extrato

def exibir_historico_transacoes(self):
    historico = "\n        HISTÓRICO DE TRANSAÇÕES        \n"
    if not self.historico_transacoes:
        historico += "Não foram realizadas transações."
    else:
        for transacao in self.historico_transacoes:
            historico += f"{transacao['data']} - {transacao['tipo']}: R$ {transacao['valor']:.2f}\n"
    historico += "        "
    return historico

def transferir(self, valor, conta_destino):
    self.resetar_limites_diarios()
    if valor <= 0:
        return "Operação falhou :(. O valor informado é inválido."
    elif valor > self.saldo:
        return "Operação falhou :(. Você não tem saldo suficiente."
    elif valor > self.limite_transferencia:
        return "Operação falhou :(. O valor da transferência excede o limite."
    else:
        self.saldo -= valor
        conta_destino.saldo += valor
        self.extrato += f"Transferência: R$ {valor:.2f} para conta {conta_destino.numero}\n"
        conta_destino.extrato += f"Transferência: R$ {valor:.2f} da conta {self.numero}\n"
        self.registrar_transacao("Transferência Enviada", valor)
        conta_destino.registrar_transacao("Transferência Recebida", valor)
        return f"Transferência de {valor:.2f} para conta {conta_destino.numero} realizada com sucesso."

Gerenciamento de contas

contas = {}

def criar_conta(numero, titular, senha): if numero in contas: return "Número de conta já existente. Tente outro número." else: contas[numero] = ContaBancaria(numero, titular, senha) return f"Conta {numero} criada com sucesso para {titular}."

def selecionar_conta(numero, senha): conta = contas.get(numero) if conta and conta.autenticar(senha): return conta else: return None

Menus

menu_principal = """ [c] Criar Conta [s] Selecionar Conta [S] Sair

"""

menu_conta = """ [d] Depositar [s] Sacar [e] Extrato [h] Histórico de Transações [t] Transferir [S] Sair

"""

Loop principal do sistema

while True: opcao = input(menu_principal)

if opcao == "c":
    numero = input("Informe o número da conta: ")
    titular = input("Informe o nome do titular: ")
    senha = input("Crie uma senha: ")
    print(criar_conta(numero, titular, senha))

elif opcao == "s":
    numero = input("Informe o número da conta: ")
    senha = input("Informe a senha: ")
    conta = selecionar_conta(numero, senha)
    if conta:
        while True:
            opcao_conta = input(menu_conta)

            if opcao_conta == "d":
                valor = float(input("Informe o valor do depósito: "))
                print(conta.depositar(valor))

            elif opcao_conta == "s":
                valor = float(input("Informe o valor do saque: "))
                print(conta.sacar(valor))

            elif opcao_conta == "e":
                print(conta.exibir_extrato())

            elif opcao_conta == "h":
                print(conta.exibir_historico_transacoes())

            elif opcao_conta == "t":
                valor = float(input("Informe o valor da transferência: "))
                numero_destino = input("Informe o número da conta destino: ")
                conta_destino = contas.get(numero_destino)
                if conta_destino:
                    print(conta.transferir(valor, conta_destino))
                else:
                    print("Conta destino não encontrada.")

            elif opcao_conta == "S":
                break

            else:
                print("Operação Inválida. Selecione a operação desejada.")

elif opcao == "S":
    break

else:
    print("Operação Inválida. Selecione a operação desejada.")

gathddu avatar Jul 12 '24 02:07 gathddu