from abc import ABC, abstractclassmethod
from datetime import datetime
===== Classe Cliente =====
class Cliente:
def init(self, nome, cpf, endereco):
self.nome = nome
self.cpf = cpf
self.endereco = endereco
===== Classe Conta =====
class Conta:
def init(self, numero, senha, cliente: Cliente):
self.numero = numero
self.senha = senha
self.cliente = cliente
self._saldo = 0.0
self.movimentacoes = []
def depositar(self, valor: float):
if valor <= 0:
print("Valor inválido para depósito.")
return
self._saldo += valor
self.movimentacoes.append({"tipo": "Depósito", "valor": valor, "data": datetime.now().strftime("%d/%m/%Y %H:%M")})
print(f"Depósito de R$ {valor:.2f} realizado com sucesso!")
def sacar(self, valor: float, limite=500, limite_diario=10):
hoje = datetime.now().strftime("%d/%m/%Y")
numero_saques = sum(1 for m in self.movimentacoes if m['tipo'] == 'Saque' and m['data'][:10] == hoje)
if numero_saques >= limite_diario:
print("Limite diário de saques atingido.")
return
if valor > limite:
print("Valor excede o limite por saque.")
return
if valor > self.saldo:
print("Saldo insuficiente.")
return
self._saldo -= valor
self.movimentacoes.append({"tipo": "Saque", "valor": valor, "data": datetime.now().strftime("%d/%m/%Y %H:%M")})
print(f"Saque de R$ {valor:.2f} realizado com sucesso!")
return False
@property
def extrato(self):
print(f"\nExtrato da conta {self.numero} - Titular: {self.cliente.nome}")
if not self.movimentacoes:
print("Nenhuma movimentação registrada.")
else:
for m in self.movimentacoes:
print(f"{m['data']} - {m['tipo']}: R$ {m['valor']:.2f}")
print(f"Saldo atual: R$ {self.saldo:.2f}\n")
@property
def saldo(self):
return self._saldo
===== Gerenciador do Banco =====
class Banco:
def init(self):
self.clientes = {}
self.contas = {}
def criar_cliente(self):
nome = input("Nome: ").strip()
cpf = input("CPF: ").strip()
if not cpf.isdigit() and cpf != 11:
print('CPF errado')
return
endereco = input("Endereço: ").strip()
if cpf in self.clientes:
print("Cliente já cadastrado!")
return
cliente = Cliente(nome, cpf, endereco)
self.clientes[cpf] = cliente
print("Cliente cadastrado com sucesso!")
def criar_conta(self):
cpf = input("Informe o CPF do cliente: ").strip()
if cpf not in self.clientes:
print("Cliente não encontrado. Cadastre o cliente primeiro.")
return
numero = input("Número da conta (5 dígitos): ").strip()
if len(numero) != 5 or not numero.isdigit():
print("Número da conta inválido.")
return
if numero in self.contas:
print("Conta já existe!")
return
senha = input("Senha (4 dígitos): ").strip()
if len(senha) != 4 or not senha.isdigit():
print("Senha inválida.")
return
conta = Conta(numero, senha, self.clientes[cpf])
self.contas[numero] = conta
print(f"Conta {numero} criada com sucesso!")
def autenticar(self):
numero = input("Número da conta: ").strip()
senha = input("Senha: ").strip()
conta = self.contas.get(numero)
if conta and conta.senha == senha:
print(f"Bem-vindo(a), {conta.cliente.nome}!")
return conta
else:
print("Conta ou senha incorreta.")
return None
def relatorio(self, tipo = None):
print("\n=== Relatório Geral ===")
for conta in self.contas.values():
print(f"Conta: {conta.numero} | Titular: {conta.cliente.nome} | Saldo: R$ {conta.saldo:.2f}")
print("========================\n")
===== Menu Principal =====
def main():
banco = Banco()
while True:
print("\n=== MENU PRINCIPAL ===")
print("1. Cadastrar Cliente")
print("2. Criar Conta")
print("3. Acessar Conta")
print("4. Relatório Geral")
print("0. Sair")
opcao = input("Escolha: ").strip()
if opcao == "1":
banco.criar_cliente()
elif opcao == "2":
banco.criar_conta()
elif opcao == "3":
conta = banco.autenticar()
if conta:
while True:
print("\n--- MENU CONTA ---")
print("1. Depositar")
print("2. Sacar")
print("3. Extrato")
print('4. Saldo')
print("0. Voltar")
sub = input("Escolha: ").strip()
if sub == "1":
valor = float(input("Valor do depósito: "))
conta.depositar(valor)
elif sub == "2":
valor = float(input("Valor do saque: "))
conta.sacar(valor)
elif sub == "3":
conta.extrato()
elif sub == '4':
print(f'Saldo atual: R$ {conta.saldo:.2f}')
elif sub == "0":
break
else:
print("Opção inválida!")
elif opcao == "4":
banco.relatorio()
elif opcao == "0":
print("Saindo...")
break
else:
print("Opção inválida!")
if name == "main":
main()
from abc import ABC, abstractclassmethod
from datetime import datetime
===== Classe Cliente =====
class Cliente:
def init(self, nome, cpf, endereco):
self.nome = nome
self.cpf = cpf
self.endereco = endereco
===== Classe Conta =====
class Conta:
def init(self, numero, senha, cliente: Cliente):
self.numero = numero
self.senha = senha
self.cliente = cliente
self._saldo = 0.0
self.movimentacoes = []
===== Gerenciador do Banco =====
class Banco:
def init(self):
self.clientes = {}
self.contas = {}
===== Menu Principal =====
def main():
banco = Banco()
if name == "main":
main()