Skip to content

Conversation

GabrielBrz23
Copy link

from datetime import datetime

==============================

CLASSE TRANSACAO

==============================

class Transacao:
def init(self, tipo, valor):
self.tipo = tipo # 'Depósito' ou 'Saque'
self.valor = valor
self.data = datetime.now()

def __str__(self):
    return f"{self.data.strftime('%d/%m/%Y %H:%M:%S')} - {self.tipo}: R$ {self.valor:.2f}"

==============================

CLASSE CLIENTE

==============================

class Cliente:
def init(self, nome, data_nascimento, cpf, endereco):
self.nome = nome
self.data_nascimento = data_nascimento
self.cpf = ''.join(filter(str.isdigit, cpf))
self.endereco = endereco
self.contas = []

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

==============================

CLASSE CONTA

==============================

class Conta:
contador = 1000

def __init__(self, cliente):
    self.numero = Conta.contador
    Conta.contador += 1
    self.cliente = cliente
    self.saldo = 0.0
    self.extrato = []  # lista de Transacao
    self.limite = 500.0
    self.numero_saques = 0
    self.limite_saques = 3
    cliente.adicionar_conta(self)

def depositar(self, valor):
    if valor <= 0:
        print("Valor inválido para depósito.")
        return
    self.saldo += valor
    self.extrato.append(Transacao("Depósito", valor))

def sacar(self, valor):
    if self.numero_saques >= self.limite_saques:
        print("Limite de saques atingido.")
        return
    if valor > self.saldo:
        print("Saldo insuficiente.")
        return
    if valor > self.limite:
        print("Valor excede o limite por saque.")
        return
    self.saldo -= valor
    self.extrato.append(Transacao("Saque", valor))
    self.numero_saques += 1

def mostrar_extrato(self):
    print(f"\nExtrato da conta {self.numero} - Cliente: {self.cliente.nome}")
    if not self.extrato:
        print("Nenhuma movimentação registrada.")
    else:
        for movimento in self.extrato:
            print(movimento)
    print(f"Saldo atual: R$ {self.saldo:.2f}")

==============================

CLASSE BANCO

==============================

class Banco:
def init(self):
self.clientes = []
self.contas = []

def cadastrar_cliente(self, nome, data_nascimento, cpf, endereco):
    if self.buscar_cliente(cpf):
        print("Cliente já cadastrado!")
        return None
    cliente = Cliente(nome, data_nascimento, cpf, endereco)
    self.clientes.append(cliente)
    return cliente

def criar_conta(self, cliente):
    conta = Conta(cliente)
    self.contas.append(conta)
    return conta

def buscar_cliente(self, cpf):
    cpf = ''.join(filter(str.isdigit, cpf))
    for cliente in self.clientes:
        if cliente.cpf == cpf:
            return cliente
    return None

def listar_clientes(self):
    for cliente in self.clientes:
        print(f"{cliente.nome} - CPF: {cliente.cpf}")

==============================

MENU INTERATIVO

==============================

def menu():
banco = Banco()

while True:
    print("\n===== SISTEMA BANCÁRIO =====")
    print("[1] Cadastrar cliente")
    print("[2] Criar conta")
    print("[3] Depositar")
    print("[4] Sacar")
    print("[5] Extrato")
    print("[6] Listar clientes")
    print("[0] Sair")

    opcao = input("Escolha: ")

    if opcao == "1":
        nome = input("Nome: ")
        nasc = input("Data de nascimento (dd/mm/aaaa): ")
        cpf = input("CPF: ")
        end = input("Endereço: ")
        banco.cadastrar_cliente(nome, nasc, cpf, end)

    elif opcao == "2":
        cpf = input("CPF do cliente: ")
        cliente = banco.buscar_cliente(cpf)
        if cliente:
            conta = banco.criar_conta(cliente)
            print(f"Conta criada com sucesso! Número: {conta.numero}")
        else:
            print("Cliente não encontrado.")

    elif opcao == "3":
        num = int(input("Número da conta: "))
        valor = float(input("Valor do depósito: "))
        conta = next((c for c in banco.contas if c.numero == num), None)
        if conta:
            conta.depositar(valor)
        else:
            print("Conta não encontrada.")

    elif opcao == "4":
        num = int(input("Número da conta: "))
        valor = float(input("Valor do saque: "))
        conta = next((c for c in banco.contas if c.numero == num), None)
        if conta:
            conta.sacar(valor)
        else:
            print("Conta não encontrada.")

    elif opcao == "5":
        num = int(input("Número da conta: "))
        conta = next((c for c in banco.contas if c.numero == num), None)
        if conta:
            conta.mostrar_extrato()
        else:
            print("Conta não encontrada.")

    elif opcao == "6":
        banco.listar_clientes()

    elif opcao == "0":
        print("Saindo...")
        break

    else:
        print("Opção inválida.")

==============================

MAIN

==============================

if name == "main":
menu()

Copy link
Contributor

Olá! Parece que houve um problema com o seu PR 🧐 Aqui estão algumas coisas para verificar:

  • Seu PR deve modificar apenas o arquivo community/GabrielBrz23.md (dê uma olhadinha na aba "Files changed");
  • O nome desse arquivo deve ser exatamente igual ao nome de usuário no GitHub (nossa validação é case-sensitive).

Para obter mais detalhes e garantir que tudo esteja correto, confira nossas instruções nos arquivos README.md e CONTRIBUTING.md (que, em geral, NÃO devem ser modificados, pois são arquivos genéricos de apoio).

Se o seu PR tem um objetivo diferente, não se preocupe! Ele será analisado manualmente por nossa equipe, o que pode levar um pouco mais de tempo. Pedimos paciência nesse processo 🙏

Agradecemos sua contribuição e compreensão 👊😉

@GabrielBrz23
Copy link
Author

Em análise.

@GabrielBrz23 GabrielBrz23 changed the title Sistema otimizado sistema_bancario_otimizado Oct 10, 2025
Copy link
Author

@GabrielBrz23 GabrielBrz23 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nome atualizado.

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

Successfully merging this pull request may close these issues.

1 participant