Menu
Coddy logo textTech

Riepilogo - Gestore di conti bancari

Fa parte della sezione Programmazione orientata agli oggetti del percorso C++ di Coddy. Lezione 33 di 104.

challenge icon

Sfida

Facile

Costruiamo un gestore completo di conti bancari che riunisce tutti i concetti relativi alle proprietà delle classi che hai imparato in questo capitolo: membri privati con getter e setter, funzioni membro const, membri mutable, variabili e metodi statici e funzioni friend.

Creerai due file per organizzare il codice:

  • BankAccount.h: definisci una classe BankAccount che gestisce i dati dei conti con un corretto incapsulamento. La classe deve avere:
    • Membri privati: accountNumber (stringa), ownerName (stringa), balance (double) e un mutable int queryCount per tenere traccia del numero di volte in cui è stato controllato il saldo
    • Un membro statico privato totalAccounts per tenere traccia del numero di conti esistenti
    • Un costruttore che accetta il numero del conto, il nome del titolare e il saldo iniziale. Deve inizializzare queryCount a 0 e incrementare totalAccounts
    • Getter const: getAccountNumber(), getOwnerName() e getBalance(): il getter del saldo deve incrementare queryCount ogni volta che viene chiamato
    • Un getter const getQueryCount() che restituisce il numero di volte in cui è stato controllato il saldo
    • Un metodo deposit(double amount) che aggiunge al saldo solo se l'importo è positivo
    • Un metodo withdraw(double amount) che sottrae dal saldo solo se l'importo è positivo e non supera il saldo attuale
    • Un metodo statico getTotalAccounts() che restituisce il numero totale di conti creati
    • Dichiara una funzione friend transfer(BankAccount& from, BankAccount& to, double amount) che trasferisce denaro tra i conti. Deve effettuare il trasferimento solo se l'importo è positivo e il conto di origine dispone di fondi sufficienti

    Definisci il membro statico e la funzione friend dopo la definizione della classe.

  • main.cpp: mostra tutte queste funzionalità in azione. Leggi da input due nomi di titolari e due saldi iniziali (quattro righe in totale: name1, balance1, name2, balance2), poi:
    • Crea due oggetti BankAccount con i numeri di conto "ACC001" e "ACC002"
    • Stampa "Total accounts: <count>"
    • Stampa "<name>: $<balance>" per il primo conto
    • Stampa "<name>: $<balance>" per il secondo conto
    • Deposita 500.0 sul primo conto
    • Stampa "After deposit - <name>: $<balance>" per il primo conto
    • Trasferisci 300.0 dal primo conto al secondo usando la funzione friend
    • Stampa "After transfer:"
    • Stampa " <name>: $<balance>" per il primo conto
    • Stampa " <name>: $<balance>" per il secondo conto
    • Stampa "Query count for <name>: <count>" per il primo conto

Formatta tutti i valori dei saldi con due cifre decimali usando std::fixed e std::setprecision(2) di <iomanip>. Converti gli input dei saldi da stringhe a double usando std::stod().

Non dimenticare le protezioni dell'header nel file header e di includere <string> e <iostream> dove necessario.

Provalo tu

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

int main() {
    // Leggi l'input
    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);
    
    // Imposta la formattazione dell'output a 2 cifre decimali
    std::cout << std::fixed << std::setprecision(2);
    
    // TODO: Crea due oggetti BankAccount con i numeri di conto "ACC001" e "ACC002"
    
    // TODO: Stampa "Total accounts: <count>"
    
    // TODO: Stampa "<name>: $<balance>" per il primo conto
    
    // TODO: Stampa "<name>: $<balance>" per il secondo conto
    
    // TODO: Deposita 500.0 sul primo conto
    
    // TODO: Stampa "After deposit - <name>: $<balance>" per il primo conto
    
    // TODO: Trasferisci 300.0 dal primo conto al secondo usando la funzione friend
    
    // TODO: Stampa "After transfer:"
    
    // TODO: Stampa "  <name>: $<balance>" per il primo conto (nota il rientro di 2 spazi)
    
    // TODO: Stampa "  <name>: $<balance>" per il secondo conto (nota il rientro di 2 spazi)
    
    // TODO: Stampa "Query count for <name>: <count>" per il primo conto
    
    return 0;
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C++ online