Menu
Coddy logo textTech

Resumen - Gestor de cuentas bancarias

Parte de la sección Programación Orientada a Objetos del Journey de C++ de Coddy — lección 33 de 104.

challenge icon

Desafío

Fácil

Vamos a construir un Gestor de Cuentas Bancarias completo que reúna todos los conceptos de propiedades de clase que has aprendido en este capítulo: miembros privados con getters y setters, funciones miembro const, miembros mutable, variables y métodos estáticos, y funciones friend.

Crearás dos archivos para organizar tu código:

  • BankAccount.h: Define una clase BankAccount que gestione los datos de la cuenta con una encapsulación adecuada. Tu clase debe tener:
    • Miembros privados: accountNumber (string), ownerName (string), balance (double), y un mutable int queryCount para rastrear cuántas veces se ha consultado el saldo
    • Un miembro estático privado totalAccounts para rastrear cuántas cuentas existen
    • Un constructor que reciba el número de cuenta, el nombre del propietario y el saldo inicial. Debe inicializar queryCount a 0 e incrementar totalAccounts
    • Getters const: getAccountNumber(), getOwnerName(), y getBalance() — el getter del saldo debe incrementar queryCount cada vez que se llame
    • Un getter const getQueryCount() que devuelva cuántas veces se consultó el saldo
    • Un método deposit(double amount) que sume al saldo solo si la cantidad es positiva
    • Un método withdraw(double amount) que reste del saldo solo si la cantidad es positiva y no excede el saldo actual
    • Un método estático getTotalAccounts() que devuelva el número total de cuentas creadas
    • Declarar una función amiga (friend) transfer(BankAccount& from, BankAccount& to, double amount) que mueva dinero entre cuentas — solo debe transferir si la cantidad es positiva y el origen tiene fondos suficientes

    Define el miembro estático y la función friend después de la definición de la clase.

  • main.cpp: Demuestra todas estas características funcionando juntas. Lee dos nombres de propietarios y dos saldos iniciales de la entrada (cuatro líneas en total: name1, balance1, name2, balance2), luego:
    • Crea dos objetos BankAccount con los números de cuenta "ACC001" y "ACC002"
    • Imprime "Total accounts: <count>"
    • Imprime "<name>: "<name>: $<balance>"lt;balance>" para la primera cuenta
    • Imprime "<name>: "<name>: $<balance>"lt;balance>" para la segunda cuenta
    • Deposita 500.0 en la primera cuenta
    • Imprime "After deposit - <name>: "After deposit - <name>: $<balance>"lt;balance>" para la primera cuenta
    • Transfiere 300.0 de la primera cuenta a la segunda usando la función friend
    • Imprime "After transfer:"
    • Imprime " <name>: " <name>: $<balance>"lt;balance>" para la primera cuenta
    • Imprime " <name>: " <name>: $<balance>"lt;balance>" para la segunda cuenta
    • Imprime "Query count for <name>: <count>" para la primera cuenta

Formatea todos los valores de saldo con dos decimales usando std::fixed y std::setprecision(2) de <iomanip>. Convierte las entradas de saldo de strings a doubles usando std::stod().

No olvides los protectores de inclusión (header guards) en tu archivo de cabecera e incluir <string> y <iostream> donde sea necesario.

Pruébalo tú mismo

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

int main() {
    // Leer 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);
    
    // Establecer el formato de salida para 2 decimales
    std::cout << std::fixed << std::setprecision(2);
    
    // TODO: Crear dos objetos BankAccount con los números de cuenta "ACC001" y "ACC002"
    
    // TODO: Imprimir "Total accounts: <count>"
    
    // TODO: Imprimir "<name>: $<balance>" para la primera cuenta
    
    // TODO: Imprimir "<name>: $<balance>" para la segunda cuenta
    
    // TODO: Depositar 500.0 en la primera cuenta
    
    // TODO: Imprimir "After deposit - <name>: $<balance>" para la primera cuenta
    
    // TODO: Transferir 300.0 de la primera cuenta a la segunda usando la función friend
    
    // TODO: Imprimir "After transfer:"
    
    // TODO: Imprimir "  <name>: $<balance>" para la primera cuenta (notar la sangría de 2 espacios)
    
    // TODO: Imprimir "  <name>: $<balance>" para la segunda cuenta (notar la sangría de 2 espacios)
    
    // TODO: Imprimir "Query count for <name>: <count>" para la primera cuenta
    
    return 0;
}

Todas las lecciones de Programación Orientada a Objetos