Menu
Coddy logo textTech

Revisão - Gerenciador de Contas Bancárias

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 criar um gerenciador completo de contas bancárias que reúne todos os conceitos de propriedades de classes que você aprendeu neste capítulo: membros privados com getters e setters, funções-membro const, membros mutable, variáveis e métodos static e funções friend.

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

  • BankAccount.h: defina uma classe BankAccount que gerencie os dados da conta com encapsulamento adequado. Sua classe deve ter:
    • Membros privados: accountNumber (string), ownerName (string), balance (double) e um mutable int queryCount para acompanhar quantas vezes o saldo foi consultado
    • Um membro static privado totalAccounts para acompanhar quantas contas existem
    • Um construtor que receba o número da conta, o nome do titular e o saldo inicial. Ele deve inicializar queryCount com 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 retorne quantas vezes o saldo foi consultado
    • Um método deposit(double amount) que adicione ao saldo somente se o valor for positivo
    • Um método withdraw(double amount) que subtraia do saldo somente se o valor for positivo e não exceder o saldo atual
    • Um método static getTotalAccounts() que retorne o número total de contas criadas
    • Declare uma função friend transfer(BankAccount& from, BankAccount& to, double amount) que mova dinheiro entre as contas. Ela deve transferir somente se o valor for positivo e a conta de origem tiver fundos suficientes

    Defina o membro static e a função friend depois da definição da classe.

  • main.cpp: demonstre todos esses recursos funcionando em conjunto. Leia dois nomes de titulares e dois saldos iniciais da entrada (quatro linhas no total: name1, balance1, name2, balance2) e, em seguida:
    • Crie dois objetos BankAccount com os números de conta "ACC001" e "ACC002"
    • Imprima "Total accounts: <count>"
    • Imprima "<name>: $<balance>" para a primeira conta
    • Imprima "<name>: $<balance>" para a segunda conta
    • Deposite 500.0 na primeira conta
    • Imprima "After deposit - <name>: $<balance>" para a primeira conta
    • Transfira 300.0 da primeira conta para a segunda usando a função friend
    • Imprima "After transfer:"
    • Imprima " <name>: $<balance>" para a primeira conta
    • Imprima " <name>: $<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 no arquivo de cabeçalho e de incluir <string> e <iostream> onde 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);
    
    // Definir formatação de saída para 2 casas decimais
    std::cout << std::fixed << std::setprecision(2);
    
    // TODO: Crie dois objetos BankAccount com números de conta "ACC001" e "ACC002"
    
    // TODO: Print "Total accounts: <count>"
    
    // TODO: Imprima "<name>: $<balance>" para a primeira conta
    
    // TODO: Imprima "<name>: $<balance>" para a segunda conta
    
    // TODO: Deposite 500.0 na primeira conta
    
    // TODO: Print "After deposit - <name>: $<balance>" for the first account
    
    // TODO: Transfira 300.0 da primeira conta para a segunda usando a função friend
    
    // TODO: Print "After transfer:"
    
    // TODO: Imprima "  <name>: $<balance>" para a primeira conta (observe a indentação de 2 espaços)
    
    // TODO: Imprima "  <name>: $<balance>" para a segunda conta (observe a indentação de 2 espaços)
    
    // TODO: Print "Query count for <name>: <count>" for the first account
    
    return 0;
}

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

Pratique por conta própria: Compilador de C++ online