Menu
Coddy logo textTech

残高の取得

CoddyのCジャーニー「Object Oriented Programming」セクションの一部 — レッスン 26/61。

challenge icon

チャレンジ

簡単

あなたの銀行口座モジュールはほぼ完成です!口座の作成、資金の入金、そして出金の機能を作成しましたが、1つ重要な要素が欠けています。現時点では、外部のコードから現在の残高を確認する方法がありません。ゲッター関数を追加して、これを解決しましょう。

ゲッターは、カプセル化されたモジュール内の隠されたデータを公開するための適切な方法です。残高(balance)フィールドを公開(パブリックに)するのではなく(これはカプセル化を壊してしまいます)、値を返す読み取り専用の関数を提供します。これにより、制御されたアクセスを許可しながら、データを保護し続けることができます。

引き続き、以下の3つのファイルを編集します:

  • account.h: 新しい関数プロトタイプ get_balance を追加します。この関数は const Account * を引数に取り(データを読み取るだけで変更しないため)、現在の残高を表す double 型を返します。既存の宣言はすべて保持してください。
  • account.c: get_balance 関数を実装します。これは単に口座の隠された balance フィールドを返します。この関数は構造体と同じファイルで定義されているため、内部データにアクセスできることに注目してください。外部のコードは依然として内部を直接覗き見ることはできません。
  • main.c: これでようやく口座の中で何が起きているかを確認できます!口座を作成し、いくつかの取引を行い、新しいゲッターを使用して各ステップでの残高を表示してください。

4つの入力を受け取ります:口座ID(整数)、入金額出金額、そして2回目の入金額です。

メインファイルで口座を作成し、初期残高(0.00であるはずです)を表示します。最初の金額を入金し、新しい残高を表示します。指定された金額を出金し、再び残高を表示します。最後に、2回目の入金を行い、最終的な残高を表示します。その後、口座を破棄してください。

出力は以下の形式で表示してください:

Account 1001 created
Balance: 0.00
Balance: 500.00
Balance: 200.00
Balance: 350.00
Account destroyed

ここで 1001 は口座IDであり、残高はそれぞれ、初期状態(0.00)、500.00の入金後、300.00の出金後、そしてさらに150.00を入金した後の状態を反映しています。すべての残高の値は %.2f を使用して小数点以下2桁でフォーマットしてください。

このゲッターを導入することで、銀行口座モジュールは口座データへの完全かつ制御されたアクセスを提供できるようになります。ユーザーは残高を確認できますが、変更は検証済みの入金(deposit)および出金(withdraw)関数を通じてのみ行うことができます。

自分で試してみよう

#include <stdio.h>
#include "account.h"

int main() {
    int account_id;
    scanf("%d", &account_id);
    
    double deposit1;
    scanf("%lf", &deposit1);
    
    double withdraw_amount;
    scanf("%lf", &withdraw_amount);
    
    double deposit2;
    scanf("%lf", &deposit2);
    
    Account* account = create_account(account_id);
    printf("Account %d created\n", account_id);
    
    // TODO: get_balanceを使用して初期残高を表示する
    
    deposit(account, deposit1);
    // TODO: 初回の入金後の残高を表示する
    
    withdraw(account, withdraw_amount);
    // TODO: 出金後の残高を表示する
    
    deposit(account, deposit2);
    // TODO: 2回目の入金後の残高を表示する
    
    destroy_account(account);
    printf("Account destroyed\n");
    
    return 0;
}

Object Oriented Programmingのすべてのレッスン