image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Luis Ramos
Luis Ramos02/10/2024 16:46
Compartilhe

Desafio: Modelando o Sistema Bancário em POO com Python

    Este artigo irá explicar, de maneira simples e passo a passo, como funciona o código feito para o Desafio Modelando o Sistema Bancário em POO com Python. O código foi feito utilizando a linguagem Python e serve como um excelente exemplo de programação orientada a objetos (POO).

    Objetivo

    O programa permite que um banco gerencie **usuários** e **contas bancárias**. O usuário pode realizar operações como:

    - Criar novos usuários.

    - Criar novas contas.

    - Fazer depósitos e saques.

    - Consultar o extrato.

    - Listar todas as contas.

    Vamos analisar cada parte do código para entender seu funcionamento.

    1. Importação de Módulos

    import textwrap

    O módulo textwrap é utilizado para formatar texto, removendo indentação e deixando as saídas do programa mais bonitas e fáceis de ler.

    2. Classe Usuario

    A classe Usuario define os dados básicos de um cliente no banco, como nome, CPF, data de nascimento e endereço.

    class Usuario:
      def __init__(self, nome, data_nascimento, cpf, endereco):
        self.nome = nome
        self.data_nascimento = data_nascimento
        self.cpf = cpf
        self.endereco = endereco

    O método __init__ é o construtor da classe, responsável por inicializar um novo usuário. Quando um objeto Usuario é criado, esse método define suas informações básicas (nome, CPF, etc.).

    Função criar_usuario



    def criar_usuario(usuarios):
      cpf = input("Informe o CPF (somente número): ")
      if Usuario.filtrar_usuario(cpf, usuarios):
        print("\n@@@ Já existe usuário com esse CPF! @@@")
        return None

    Essa função permite a criação de novos usuários. Ela recebe a lista de usuarios como parâmetro e verifica se já existe um usuário com o CPF informado. Caso contrário, coleta as demais informações e adiciona um novo usuário à lista.

    Função filtrar_usuario

    def filtrar_usuario(cpf, usuarios):
      for usuario in usuarios:
        if usuario.cpf == cpf:
          return usuario
      return None

    Essa função faz a busca de um usuário baseado no CPF, retornando o objeto correspondente ou None se o CPF não for encontrado.

    3. Classe Conta

    A classe Conta representa a conta bancária de um usuário, armazenando informações como saldo, número da conta, limite de saque, extrato e o titular da conta (que é um objeto Usuario).

    class Conta:
      def __init__(self, agencia, numero_conta, usuario):
        self.agencia = agencia
        self.numero_conta = numero_conta
        self.usuario = usuario
        self.saldo = 0
        self.limite = 500
        self.extrato = ""
        self.numero_saques = 0
        self.LIMITE_SAQUES = 3

    Aqui o construtor da classe inicializa a conta com uma agência, número, saldo e define um limite de saques e de saldo.

    Função depositar

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

    Essa função adiciona um valor ao saldo da conta e registra a transação no extrato.

    Função sacar

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

    Essa função realiza um saque, verificando várias condições, como se o valor do saque é maior que o saldo, se excede o limite ou se o número de saques diários foi ultrapassado.

    Função exibir_extrato

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

    Essa função exibe o extrato da conta, mostrando todas as transações realizadas e o saldo atual.

    4. Classe Banco

    A classe Banco é a responsável por gerenciar as contas e os usuários.

    class Banco:
      def __init__(self):
        self.usuarios = []
        self.contas = []
        self.AGENCIA = "0001"

    Aqui, o banco possui uma lista de usuários e contas, além de definir uma agência padrão.

    Função criar_conta

    def criar_conta(self):
      cpf = input("Informe o CPF do usuário: ")
      usuario = Usuario.filtrar_usuario(cpf, self.usuarios)
      if usuario:
        numero_conta = len(self.contas) + 1
        conta = Conta(self.AGENCIA, numero_conta, usuario)
        self.contas.append(conta)
        print("\n=== Conta criada com sucesso! ===")
        return conta
      print("\n@@@ Usuário não encontrado! @@@")
      return None

    Essa função cria uma nova conta associada a um usuário existente.

    Função listar_contas

    def listar_contas(self):
      for conta in self.contas:
        linha = f"""\ 
          Agência:\t{conta.agencia}
          C/C:\t\t{conta.numero_conta}
          Titular:\t{conta.usuario.nome}
        """
        print("=" * 100)
        print(textwrap.dedent(linha))

    Essa função lista todas as contas cadastradas no banco, exibindo a agência, número da conta e o nome do titular.

    5. Função Principal main

    def main():
      banco = Banco()
      while True:
        opcao = menu()
        if opcao == "d":
          numero_conta = int(input("Informe o número da conta: "))
          conta = banco.contas[numero_conta - 1]
          valor = float(input("Informe o valor do depósito: "))
          conta.depositar(valor)

    A função main() controla o fluxo principal do programa, exibindo o menu e executando as ações conforme a escolha do usuário.

    Conclusão

    Este código oferece uma base sólida para entender como funciona a **orientação a objetos** em Python. O conceito de classes, métodos e a interação entre elas é fundamental para projetos maiores e mais complexos.

    Compartilhe
    Comentários (0)