Menu
Coddy logo textTech

復習 - 銀行口座マネージャー

CoddyのC++ジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 33/104。

challenge icon

チャレンジ

簡単

この章で学んだすべてのクラスプロパティの概念、つまり getters と setters を備えた private メンバー、const メンバー関数、mutable メンバー、static 変数とメソッド、そして friend 関数を組み合わせた、完全な Bank Account Manager を構築しましょう。

コードを整理するために、次の2つのファイルを作成します。

  • BankAccount.h: 適切なカプセル化によって口座データを管理する BankAccount class を Define します。class には次の要素を含めます。
    • Private メンバー: accountNumber(string)、ownerName(string)、balance(double)、および残高が何回確認されたかを追跡するための mutable int queryCount
    • 存在する口座数を追跡するための private static メンバー totalAccounts
    • 口座番号、所有者名、初期残高を受け取る constructor。queryCount0 に initialize し、totalAccounts を increment します
    • Const getters: getAccountNumber()getOwnerName()getBalance()。残高 getter は呼び出されるたびに queryCount を increment する必要があります
    • 残高が何回確認されたかを返す const getter getQueryCount()
    • 金額が正の場合にのみ残高へ加算する deposit(double amount) メソッド
    • 金額が正で、現在の残高を exceed しない場合にのみ残高から減算する withdraw(double amount) メソッド
    • 作成された口座の総数を返す static メソッド getTotalAccounts()
    • 口座間で資金を移動する friend 関数 transfer(BankAccount& from, BankAccount& to, double amount) を Declare します。金額が正で、送金元に十分な funds がある場合にのみ transfer する必要があります

    class 定義の後で static メンバーと friend 関数を Define します。

  • main.cpp: これらすべての機能が連携して動作することを示します。入力から2つの所有者名と2つの初期残高を読み取ります(合計4行: name1、balance1、name2、balance2)。その後、次の処理を行います。
    • 口座番号 "ACC001""ACC002" を持つ2つの BankAccount オブジェクトを Create します
    • "Total accounts: <count>" を Print します
    • 最初の口座について "<name>: $<balance>" を Print します
    • 2番目の口座について "<name>: $<balance>" を Print します
    • 最初の口座に 500.0 を Deposit します
    • 最初の口座について "After deposit - <name>: $<balance>" を Print します
    • friend 関数を使用して、最初の口座から2番目の口座へ 300.0 を Transfer します
    • "After transfer:" を Print します
    • 最初の口座について " <name>: $<balance>" を Print します
    • 2番目の口座について " <name>: $<balance>" を Print します
    • 最初の口座について "Query count for <name>: <count>" を Print します

<iomanip>std::fixedstd::setprecision(2) を使用して、すべての残高の値を小数点以下2桁で Format します。残高の入力は std::stod() を使用して string から double に Convert します。

header file の header guards を忘れずに記述し、必要な場所で <string><iostream> を include してください。

自分で試してみよう

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

int main() {
    // 入力を読み取る
    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);
    
    // 小数点以下2桁の出力フォーマットを設定する
    std::cout << std::fixed << std::setprecision(2);
    
    // TODO: 口座番号 "ACC001" と "ACC002" の2つの BankAccount オブジェクトを作成する
    
    // TODO: Print "Total accounts: <count>"
    
    // TODO: 最初の口座について "<name>: $<balance>" を出力する
    
    // TODO: 2番目の口座について "<name>: $<balance>" を出力する
    
    // TODO: 最初の口座に 500.0 を入金する
    
    // TODO: Print "After deposit - <name>: $<balance>" for the first account
    
    // TODO: friend 関数を使って最初の口座から2番目の口座へ 300.0 を振り込む
    
    // TODO: Print "After transfer:"
    
    // TODO: 最初の口座について "  <name>: $<balance>" を出力する(2スペースのインデントに注意)
    
    // TODO: 2番目の口座について "  <name>: $<balance>" を出力する(2スペースのインデントに注意)
    
    // TODO: Print "Query count for <name>: <count>" for the first account
    
    return 0;
}

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: C++オンラインコンパイラ