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

Desafio Banco POO 3.0 #49

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

cleytonkauffmann
Copy link

import random
from datetime import datetime

class Cliente:
def init(self, nome, cpf, endereco):
self.nome = nome
self.cpf = cpf
self.endereco = endereco

class PessoaFisica(Cliente):
def init(self, nome, cpf, data_nascimento, endereco):
super().init(nome, cpf, endereco)
self.data_nascimento = data_nascimento

class Conta:
def init(self, cliente):
self.cliente = cliente
self.agencia = random.randint(100, 999)
self.numero = random.randint(10000000, 99999999)
self.saldo = 0
self.saques_feitos = 0
self.saques_diarios = 0
self.extrato = []

def depositar(self, valor):
    self.saldo += valor
    self.extrato.append(f"Depósito de R${valor:.2f}")
    print("Depósito realizado com sucesso!")

def sacar(self, valor):
    if self.saques_feitos < 3 and self.saques_diarios < 3 and valor <= 500 and valor <= self.saldo:
        self.saldo -= valor
        self.saques_feitos += 1
        self.saques_diarios += 1
        self.extrato.append(f"Saque de R${valor:.2f}")
        print("Saque realizado com sucesso!")
        print(f"Você tem {3 - self.saques_diarios} saques disponíveis hoje.")
    elif self.saques_diarios >= 3:
        print("Você atingiu o limite de saque diário. Tente novamente amanhã!")
    else:
        print("Saldo insuficiente para realizar o saque.")

def gerar_extrato(self):
    print("\n" + "=" * 20 + " EXTRATO " + "=" * 20 + "\n")
    print(f"Agência: {self.agencia} | Conta: {self.numero}\n")
    print("Operações:")
    for operacao in self.extrato:
        print(operacao)
    print("\n" + "=" * 46 + "\n")
    print(f"Saldo atual: R${self.saldo:.2f}")
    print("=" * 46)

def reiniciar_saques_diarios(self):
    self.saques_diarios = 0

class ContaCorrente(Conta):
def init(self, cliente):
super().init(cliente)
self.limite_cheque_especial = 5000

class Historico:
def init(self):
self.transacoes = []

def registrar_transacao(self, transacao):
    self.transacoes.append(transacao)

def mostrar_historico(self):
    for transacao in self.transacoes:
        print(transacao)

class Transacao:
def init(self, valor):
self.valor = valor
self.data = datetime.now()

class Saque(Transacao):
def str(self):
return f"Saque de R${self.valor:.2f} em {self.data}"

class Deposito(Transacao):
def str(self):
return f"Depósito de R${self.valor:.2f} em {self.data}"

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

def cadastrar_cliente(self, nome, cpf, data_nascimento, rua, bairro, cidade, estado):
    endereco = {
        "rua": rua,
        "bairro": bairro,
        "cidade": cidade,
        "estado": estado
    }

    if cpf not in self.clientes:
        cliente = PessoaFisica(nome, cpf, data_nascimento, endereco)
        self.clientes[cpf] = cliente
        conta = ContaCorrente(cliente)
        print(f"Parabéns {nome}, sua conta foi criada com sucesso!")
        print("Segue os dados de sua conta:")
        print(f"Agência: {conta.agencia} | Conta: {conta.numero}")
        self.clientes[cpf].conta = conta
        self.contas.append(conta)
    else:
        print("CPF já cadastrado.")

def buscar_conta(self, cpf):
    if cpf in self.clientes:
        return self.clientes[cpf].conta
    else:
        print("Cliente não encontrado.")

def listar_contas(self):
    print("\n" + "=" * 20 + " LISTA DE CONTAS " + "=" * 20 + "\n")
    for conta in self.contas:
        print(f"Agência: {conta.agencia} | Conta: {conta.numero} | Cliente: {conta.cliente.nome}")
    print("=" * 50)

def main():
banco = Banco()

while True:
    print("\n" + "=" * 20 + " MENU " + "=" * 20 + "\n")
    print(" " * 18 + "1. Cadastrar Cliente")
    print(" " * 18 + "2. Depositar")
    print(" " * 18 + "3. Sacar")
    print(" " * 18 + "4. Extrato")
    print(" " * 18 + "5. Listar Contas")
    print(" " * 18 + "0. Sair")
    print("\n" + "=" * 46 + "\n")

    opcao = input("Escolha uma opção: ")

    if opcao == "1":
        nome = input("Digite o nome do cliente: ")
        data_nascimento = input("Digite a data de nascimento do cliente (formato: DD/MM/AAAA): ")
        cpf = input("Digite o CPF do cliente: ")
        rua = input("Digite o nome da rua: ")
        bairro = input("Digite o nome do bairro: ")
        cidade = input("Digite o nome da cidade: ")
        estado = input("Digite o nome do estado: ")

        # Validando data de nascimento
        try:
            data_nascimento = datetime.strptime(data_nascimento, "%d/%m/%Y")
        except ValueError:
            print("Data de nascimento inválida. Use o formato DD/MM/AAAA.")
            continue

        banco.cadastrar_cliente(nome, cpf, data_nascimento, rua, bairro, cidade, estado)
    elif opcao == "2":
        cpf = input("Digite o CPF do cliente: ")
        conta = banco.buscar_conta(cpf)
        if conta:
            valor = float(input("Digite o valor a ser depositado: "))
            conta.depositar(valor)
            conta.reiniciar_saques_diarios()
        else:
            print("Cliente não encontrado.")
    elif opcao == "3":
        cpf = input("Digite o CPF do cliente: ")
        conta = banco.buscar_conta(cpf)
        if conta:
            valor = float(input("Digite o valor a ser sacado: "))
            conta.sacar(valor)
        else:
            print("Cliente não encontrado.")
    elif opcao == "4":
        cpf = input("Digite o CPF do cliente: ")
        conta = banco.buscar_conta(cpf)
        if conta:
            conta.gerar_extrato()
        else:
            print("Cliente não encontrado.")
    elif opcao == "5":
        banco.listar_contas()
    elif opcao == "0":
        print("Obrigado por utilizar nosso Sistema...Banco Kauffmann Agradece!!!")
        break
    else:
        print("Opção inválida. Tente novamente.")

if name == "main":
main()

Criação de conta bancaria 2.0
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.

None yet

1 participant