Menu
Coddy logo textTech

プロジェクトの仕上げ:メインループ

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

challenge icon

チャレンジ

簡単

おめでとうございます。完全な Bank Account ライブラリを構築しました!ここで役割を切り替えます。ライブラリの作成者ではなく、ライブラリの利用者になります。あなたの課題は、Account モジュールをさまざまな操作で試す main プログラムを書くことです。

銀行に顧客がやって来て、一連の取引を行うところを想像してください。account を作成し、入金と出金を行い、その過程で残高を確認し、最後に用事が済んだら account を閉じます。

3つのファイルを扱います。

  • account.h: opaque な Account 型と、すべての関数プロトタイプである create_accountdestroy_accountdepositwithdrawget_balance を含む、完成したヘッダーファイルです。
  • account.c: idbalance を含む非公開の struct と、このプロジェクトを通して構築してきたすべての関数実装を含む、完成した実装です。
  • main.c: ここがあなたの腕の見せ所です!現実的な一連の取引を通して、bank account の完全なライフサイクルを実演するプログラムを書きます。

5つの入力を受け取ります。account ID(整数)、first depositwithdrawalsecond deposit、そしてattempted overdraft(insufficient funds により失敗するはずの withdrawal)です。

main プログラムでは、この account の生涯を次のように示します。

  1. account を作成して通知する
  2. starting balance を表示する
  3. first deposit を行い、新しい balance を表示する
  4. funds を withdraw し、updated balance を表示する
  5. もう一度 deposit を行い、balance を表示する
  6. balance を超える withdrawal を試みる。これは failed になるはずです
  7. final balance を表示する(failed withdrawal の後も変わらない)
  8. account を閉じる

次の形式で出力します。

Account 2001 created
Balance: 0.00
Deposited 1000.00
Balance: 1000.00
Withdrew 250.00
Balance: 750.00
Deposited 500.00
Balance: 1250.00
Withdrawal failed: insufficient funds
Balance: 1250.00
Account 2001 closed

ここで 2001 は account ID、金額は入力を反映したものです。すべての金額を %.2f を使って小数点以下2桁で表示してください。withdraw が 0 を返したときに、failed withdrawal のメッセージを表示します。

この総仕上げでは、encapsulation について学んだことをすべて実演します。main プログラムは公開インターフェースを通してのみ Account とやり取りし、非公開の内部データに直接触れることはありません。

自分で試してみよう

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

int main() {
    // TODO: 入力から account_id、deposit1、withdraw_amount、deposit2、および overdraft を読み取る

    // TODO: アカウントを作成し、"Account <id> created" を出力する

    // TODO: 開始残高を出力する

    // TODO: 最初の入金を行い、"Deposited <amount>" と新しい残高を出力する

    // TODO: 資金を引き出し、"Withdrew <amount>" と更新された残高を出力する

    // TODO: 2回目の入金を行い、"Deposited <amount>" と新しい残高を出力する

    // TODO: Attempt the overdraft withdrawal; if it fails, print "Withdrawal failed: insufficient funds"
    // TODO: 最終残高を出力する

    // TODO: "Account <id> closed" を出力し、アカウントを破棄する

    return 0;
}

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

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