Menu
Coddy logo textTech

Recapitulação - Gerenciador de Conta Bancária

Parte da seção Programação Orientada a Objetos do Journey de C++ da Coddy — lição 33 de 104.

challenge icon

Desafio

Fácil

Vamos construir um Gerenciador de Conta Bancária completo que reúna todos os conceitos de propriedades de classe que você aprendeu neste capítulo: membros privados com getters e setters, funções membros const, membros mutáveis, variáveis e métodos estáticos e funções amigas (friend functions).

Você criará dois arquivos para organizar seu código:

  • BankAccount.h: Defina uma classe BankAccount que gerencie os dados da conta com o encapsulamento adequado. Sua classe deve ter:
    • Membros privados: accountNumber (string), ownerName (string), balance (double) e um mutable int queryCount para rastrear quantas vezes o saldo foi verificado
    • Um membro estático privado totalAccounts para rastrear quantas contas existem
    • Um construtor que recebe o número da conta, o nome do proprietário e o saldo inicial. Ele deve inicializar queryCount como 0 e incrementar totalAccounts
    • Getters const: getAccountNumber(), getOwnerName() e getBalance() — o getter do saldo deve incrementar queryCount cada vez que for chamado
    • Um getter const getQueryCount() que retorna quantas vezes o saldo foi verificado
    • Um método deposit(double amount) que adiciona ao saldo apenas se o valor for positivo
    • Um método withdraw(double amount) que subtrai do saldo apenas se o valor for positivo e não exceder o saldo atual
    • Um método estático getTotalAccounts() que retorna o número total de contas criadas
    • Declare uma função amiga transfer(BankAccount& from, BankAccount& to, double amount) que move dinheiro entre contas — ela só deve transferir se o valor for positivo e a origem tiver fundos suficientes

    Defina o membro estático e a função amiga após a definição da classe.

  • main.cpp: Demonstre todos esses recursos funcionando juntos. Leia dois nomes de proprietários e dois saldos iniciais da entrada (quatro linhas no total: name1, balance1, name2, balance2), então:
    • Crie dois objetos BankAccount com os números de conta "ACC001" e "ACC002"
    • Imprima "Total accounts: <count>"
    • Imprima "<name>: "<name>: $<balance>"lt;balance>" para a primeira conta
    • Imprima "<name>: "<name>: $<balance>"lt;balance>" para a segunda conta
    • Deposite 500.0 na primeira conta
    • Imprima "After deposit - <name>: "After deposit - <name>: $<balance>"lt;balance>" para a primeira conta
    • Transfira 300.0 da primeira conta para a segunda usando a função amiga
    • Imprima "After transfer:"
    • Imprima " <name>: " <name>: $<balance>"lt;balance>" para a primeira conta
    • Imprima " <name>: " <name>: $<balance>"lt;balance>" para a segunda conta
    • Imprima "Query count for <name>: <count>" para a primeira conta

Formate todos os valores de saldo com duas casas decimais usando std::fixed e std::setprecision(2) de <iomanip>. Converta as entradas de saldo de strings para doubles usando std::stod().

Não se esqueça dos header guards em seu arquivo de cabeçalho e de incluir <string> e <iostream> onde for necessário.

Experimente você mesmo

#include <iostream>
#include <string>
#include <iomanip>
#include "BankAccount.h"

int main() {
    // Ler entrada
    std::string name1, name2;
    std::string balance1Str, balance2Str;
    
    std::getline(std::cin, name1);
    std::getline(std::cin, balance1Str);
    std::getline(std::cin, name2);
    std::getline(std::cin, balance2Str);
    
    double balance1 = std::stod(balance1Str);
    double balance2 = std::stod(balance2Str);
    
    // Configurar a formatação de saída para 2 casas decimais
    std::cout << std::fixed << std::setprecision(2);
    
    // TODO: Criar dois objetos BankAccount com os números de conta "ACC001" e "ACC002"
    
    // TODO: Imprimir "Total accounts: <count>"
    
    // TODO: Imprimir "<name>: $<balance>" para a primeira conta
    
    // TODO: Imprimir "<name>: $<balance>" para a segunda conta
    
    // TODO: Depositar 500.0 na primeira conta
    
    // TODO: Imprimir "After deposit - <name>: $<balance>" para a primeira conta
    
    // TODO: Transferir 300.0 da primeira conta para a segunda usando a função friend
    
    // TODO: Imprimir "After transfer:"
    
    // TODO: Imprimir "  <name>: $<balance>" para a primeira conta (note o recuo de 2 espaços)
    
    // TODO: Imprimir "  <name>: $<balance>" para a segunda conta (note o recuo de 2 espaços)
    
    // TODO: Imprimir "Query count for <name>: <count>" para a primeira conta
    
    return 0;
}

Todas as lições de Programação Orientada a Objetos