Menu
Coddy logo textTech

Podsumowanie – menedżer konta bankowego

Część sekcji Programowanie obiektowe ścieżki C++ w Coddy. Lekcja 33 z 104.

challenge icon

Wyzwanie

Łatwy

Stwórzmy kompletnego menedżera kont bankowych, który łączy wszystkie poznane w tym rozdziale zagadnienia dotyczące właściwości klas: składowe prywatne z getterami i setterami, stałe funkcje składowe, składowe modyfikowalne, zmienne i metody statyczne oraz funkcje zaprzyjaźnione.

Utworzysz dwa pliki, aby uporządkować kod:

  • BankAccount.h: Zdefiniuj klasę BankAccount, która zarządza danymi konta z zachowaniem właściwej enkapsulacji. Klasa powinna mieć:
    • Prywatne składowe: accountNumber (string), ownerName (string), balance (double) oraz mutable int queryCount do śledzenia, ile razy sprawdzono saldo
    • Prywatną statyczną składową totalAccounts do śledzenia liczby istniejących kont
    • Konstruktor przyjmujący numer konta, imię i nazwisko właściciela oraz początkowe saldo. Powinien inicjalizować queryCount wartością 0 i zwiększać totalAccounts
    • Stałe gettery: getAccountNumber(), getOwnerName() i getBalance(): getter salda powinien zwiększać queryCount przy każdym wywołaniu
    • Stały getter getQueryCount(), który zwraca, ile razy sprawdzono saldo
    • Metodę deposit(double amount), która dodaje kwotę do salda tylko wtedy, gdy jest ona dodatnia
    • Metodę withdraw(double amount), która odejmuje kwotę od salda tylko wtedy, gdy jest ona dodatnia i nie przekracza aktualnego salda
    • Metodę statyczną getTotalAccounts(), która zwraca łączną liczbę utworzonych kont
    • Zadeklaruj funkcję zaprzyjaźnioną transfer(BankAccount& from, BankAccount& to, double amount), która przenosi środki między kontami. Przelew powinien zostać wykonany tylko wtedy, gdy kwota jest dodatnia, a na koncie źródłowym są wystarczające środki

    Zdefiniuj składową statyczną i funkcję zaprzyjaźnioną po definicji klasy.

  • main.cpp: Zademonstruj współdziałanie wszystkich tych funkcji. Wczytaj imiona i nazwiska dwóch właścicieli oraz początkowe salda dwóch kont (łącznie cztery wiersze: name1, balance1, name2, balance2), a następnie:
    • Utwórz dwa obiekty BankAccount z numerami kont "ACC001" i "ACC002"
    • Wypisz "Total accounts: <count>"
    • Wypisz "<name>: $<balance>" dla pierwszego konta
    • Wypisz "<name>: $<balance>" dla drugiego konta
    • Wpłać 500.0 na pierwsze konto
    • Wypisz "After deposit - <name>: $<balance>" dla pierwszego konta
    • Przelej 300.0 z pierwszego konta na drugie, używając funkcji zaprzyjaźnionej
    • Wypisz "After transfer:"
    • Wypisz " <name>: $<balance>" dla pierwszego konta
    • Wypisz " <name>: $<balance>" dla drugiego konta
    • Wypisz "Query count for <name>: <count>" dla pierwszego konta

Formatuj wszystkie wartości salda z dokładnością do dwóch miejsc po przecinku, używając std::fixed i std::setprecision(2) z <iomanip>. Konwertuj wczytane salda z ciągów znaków na wartości typu double za pomocą std::stod().

Nie zapomnij o strażnikach nagłówka w pliku nagłówkowym oraz o dołączeniu <string> i <iostream> tam, gdzie to potrzebne.

Spróbuj swoich sił

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

int main() {
    // Wczytaj dane wejściowe
    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);
    
    // Ustaw formatowanie wyjścia na 2 miejsca po przecinku
    std::cout << std::fixed << std::setprecision(2);
    
    // TODO: Utwórz dwa obiekty BankAccount o numerach kont "ACC001" i "ACC002"
    
    // TODO: Wypisz "Total accounts: <count>"
    
    // TODO: Wypisz "<name>: $<balance>" dla pierwszego konta
    
    // TODO: Wypisz "<name>: $<balance>" dla drugiego konta
    
    // TODO: Wpłać 500.0 na pierwsze konto
    
    // TODO: Wypisz "After deposit - <name>: $<balance>" dla pierwszego konta
    
    // TODO: Przelej 300.0 z pierwszego konta na drugie, używając funkcji zaprzyjaźnionej
    
    // TODO: Wypisz "After transfer:"
    
    // TODO: Wypisz "  <name>: $<balance>" dla pierwszego konta (zwróć uwagę na wcięcie o 2 spacje)
    
    // TODO: Wypisz "  <name>: $<balance>" dla drugiego konta (zwróć uwagę na wcięcie o 2 spacje)
    
    // TODO: Wypisz "Query count for <name>: <count>" dla pierwszego konta
    
    return 0;
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C++ online