from datetime import datetime
class Historico:
def __init__(self):
self.data_abertura = datetime.now()
self.transacoes = []
def imprime(self):
for transacao in self.transacoes:
print(transacao)
class Cliente:
def __init__(self, nome, sobrenome, cpf):
self.nome = nome
self.sobrenome = sobrenome
self.cpf = cpf
def dados_cliente(self):
return f'{self.nome} {self.sobrenome} - CPF: {self.cpf}'
class ContaBancaria:
def __init__(self, numero_agencia, tipo_conta, saldo, limite, cliente):
self.numero_agencia = numero_agencia
self.tipo_conta = tipo_conta
self.saldo = saldo
self.limite = limite
self.cliente = cliente
self.historico = Historico()
def consultar_saldo(self):
return self.saldo
def saca(self, valor):
if self.saldo >= valor:
self.saldo -= valor
self.historico.transacoes.append(f'Saque de {valor}')
return True
return False
def deposita(self, valor):
self.saldo += valor
self.historico.transacoes.append(f'Depósito de {valor}')
return True
def transfere_para(self, destino, valor):
if self.saldo >= valor:
self.saldo -= valor
destino.saldo += valor
self.historico.transacoes.append(f'Transferência de {valor} para
{destino.cliente.nome}')
return True
return False
def obter_extrato(self):
return self.historico.imprime()
def alterar_titular(self, novo_titular):
self.cliente = novo_titular
self.historico.transacoes.append(f'Titular alterado para
{novo_titular.nome}')
def fechar_conta(self):
self.historico.transacoes.append(f'Conta fechada com saldo de
{self.saldo}')
self.saldo = 0
class ContaPoupanca(ContaBancaria):
def __init__(self, numero_agencia, saldo, limite, cliente, aniversario_conta):
super().__init__(numero_agencia, 'Poupança', saldo, limite, cliente)
self.aniversario_conta = aniversario_conta
def calcular_juros_mensal(self):
juros = self.saldo * 0.005 # Exemplo de juros de 0.5% ao mês
self.saldo += juros
self.historico.transacoes.append(f'Juros de {juros} aplicados')
class ContaCorrente(ContaBancaria):
def __init__(self, numero_agencia, saldo, limite, cliente, cheque_especial):
super().__init__(numero_agencia, 'Corrente', saldo, limite, cliente)
self.cheque_especial = cheque_especial
def utilizar_cheque_especial(self, valor):
if self.saldo + self.limite >= valor:
self.saldo -= valor
self.historico.transacoes.append(f'Cheque especial utilizado: {valor}')
return True
return False