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 bancário aprimorado! #172

Open
gathddu opened this issue Jul 12, 2024 · 0 comments
Open

sistema bancário aprimorado! #172

gathddu opened this issue Jul 12, 2024 · 0 comments

Comments

@gathddu
Copy link

gathddu commented Jul 12, 2024

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.")
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