Untitled

 avatar
unknown
plain_text
6 months ago
4.4 kB
2
Indexable
class Usuario:
    def __init__(self, nome, cpf):
        self.nome = nome
        self.cpf = cpf

class ContaCorrente:
    LIMITE_SAQUES = 3
    LIMITES_DEPOSITO = 500

    def __init__(self, usuario):
        self.usuario = usuario
        self.numero_conta = None  # Será definido na criação da conta
        self.saldo = 0
        self.extrato = ""
        self.numero_saques = 0

    def depositar(self, valor):
        if valor > 0:
            self.saldo += valor
            self.extrato += f"Depósito: R$ {valor:.2f}\n"
            print("Depósito realizado com sucesso!")
        else:
            print("Operação falhou! O valor informado é inválido.")

    def sacar(self, valor):
        excedeu_saldo = valor > self.saldo
        excedeu_limite = valor > self.LIMITE_DEPOSITO
        excedeu_saques = self.numero_saques >= self.LIMITE_SAQUES

        if excedeu_saldo:
            print("Operação falhou! Você não tem saldo suficiente.")
        elif excedeu_limite:
            print("Operação falhou! O valor do saque excede o limite.")
        elif excedeu_saques:
            print("Operação falhou! Número máximo de saques excedido.")
        elif valor > 0:
            self.saldo -= valor
            self.extrato += f"Saque: R$ {valor:.2f}\n"
            self.numero_saques += 1
            print("Saque realizado com sucesso!")
        else:
            print("Operação falhou! O valor informado é inválido.")

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

# Funções do sistema bancário
def criar_usuario(usuarios):
    nome = input("Informe o nome do usuário: ")
    cpf = input("Informe o CPF do usuário: ")
    usuarios[cpf] = Usuario(nome, cpf)
    print(f"Usuário {nome} criado com sucesso!")

def criar_conta_corrente(usuarios, contas):
    cpf = input("Informe o CPF do usuário para vincular a conta: ")
    if cpf in usuarios:
        conta = ContaCorrente(usuarios[cpf])
        conta.numero_conta = len(contas) + 1  # Gera um número de conta sequencial
        contas[conta.numero_conta] = conta
        print(f"Conta corrente criada com sucesso para {usuarios[cpf].nome}! Número da conta: {conta.numero_conta}")
    else:
        print("Usuário não encontrado!")

# Inicialização
menu = """
[d] Depositar
[s] Sacar
[e] Extrato
[u] Criar Usuário
[c] Criar Conta Corrente
[q] Sair

=> """

usuarios = {}
contas = {}

while True:
    opcao = input(menu)

    if opcao == "d":
        cpf = input("Informe o CPF do usuário: ")
        if cpf in usuarios:
            numero_conta = int(input("Informe o número da conta: "))
            if numero_conta in contas:
                valor = float(input("Informe o valor do depósito: "))
                contas[numero_conta].depositar(valor)
            else:
                print("Conta não encontrada!")
        else:
            print("Usuário não encontrado!")

    elif opcao == "s":
        cpf = input("Informe o CPF do usuário: ")
        if cpf in usuarios:
            numero_conta = int(input("Informe o número da conta: "))
            if numero_conta in contas:
                valor = float(input("Informe o valor do saque: "))
                contas[numero_conta].sacar(valor)
            else:
                print("Conta não encontrada!")
        else:
            print("Usuário não encontrado!")

    elif opcao == "e":
        cpf = input("Informe o CPF do usuário: ")
        if cpf in usuarios:
            numero_conta = int(input("Informe o número da conta: "))
            if numero_conta in contas:
                contas[numero_conta].visualizar_extrato()
            else:
                print("Conta não encontrada!")
        else:
            print("Usuário não encontrado!")

    elif opcao == "u":
        criar_usuario(usuarios)

    elif opcao == "c":
        criar_conta_corrente(usuarios, contas)

    elif opcao == "q":
        break

    else:
        print("Operação inválida, por favor selecione novamente a operação desejada.")
Editor is loading...
Leave a Comment