銀行システムの最終テスト
CoddyのLuaジャーニー「Object Oriented Programming」セクションの一部 — レッスン 25/70。
チャレンジ
簡単完全なデジタルバンクシステムの構築、おめでとうございます!あなたの Account クラスは、預金、引き出し、残高確認、アカウント識別、そしてアカウント間の送金を処理できるようになりました。現実的なマルチアカウントの銀行シナリオで、すべてをテストしてみましょう。
この最後のチャレンジでは、3人の顧客がさまざまな取引を行う小さな銀行をシミュレートします。これにより、すべてのメソッドが正しく連携して機能すること、および各アカウントが真に独立した状態を維持していることを検証します。
使用する2つのファイル:
Account.lua: このプロジェクトを通じて構築したすべての機能(ID付きのコンストラクタ、deposit、withdraw、getBalance、__tostring、および transfer)を備えた完全な Account クラス。main.lua: 複数のアカウントを作成し、それらの間で一連の取引を実行するシミュレーションスクリプト。
6つの入力を受け取ります:
- アカウント 1 の ID
- アカウント 2 の ID
- アカウント 3 の ID
- アカウント 1 の初回預金額
- アカウント 2 の初回預金額
- アカウント 3 の初回預金額
メインファイルで、以下の銀行業務の1日をシミュレートしてください:
- 指定された ID で3つのアカウントを作成する
- それぞれの対応するアカウントに初回金額を預け入れる
- アカウント 1 がアカウント 2 に 100 を送金する
- アカウント 2 がアカウント 3 に 150 を送金する
- アカウント 3 がアカウント 1 に 50 を送金する
- アカウント 1 がアカウント 3 に 1000 の送金を試みる(これは失敗するはずです)
- 3つのアカウントすべてを順番に(アカウント 1、次に 2、次に 3)出力する
例えば、入力が A001, A002, A003, 500, 300, 200 の場合、出力は以下のようになります:
Insufficient funds
Account [A001]: Balance = 450
Account [A002]: Balance = 250
Account [A003]: Balance = 300経過を追ってみましょう:アカウント 1 は 500 から始まり、アカウント 2 に 100 を送金し(現在 400)、その後アカウント 3 から 50 を受け取ります(現在 450)。アカウント 2 は 300 から始まり、100 を受け取り(現在 400)、アカウント 3 に 150 を送金します(現在 250)。アカウント 3 は 200 から始まり、150 を受け取り(現在 350)、アカウント 1 に 50 を送金します(現在 300)。最後に行われる 1000 の送金は、アカウント 1 に 450 しかないため失敗します。
自分で試してみよう
-- Accountモジュールを読み込む
local Account = require('Account')
-- 6つの入力を読み込む
local id1 = io.read()
local id2 = io.read()
local id3 = io.read()
local initialDeposit1 = tonumber(io.read())
local initialDeposit2 = tonumber(io.read())
local initialDeposit3 = tonumber(io.read())
-- IDを使用して3つのアカウントを作成する
-- TODO: Account:new()を使用してaccount1、account2、account3を作成する
-- それぞれのアカウントに初期金額を入金する
-- TODO: account1にinitialDeposit1を、account2にinitialDeposit2を、account3にinitialDeposit3を入金する
-- アカウント1からアカウント2へ100を転送する
-- TODO: account1:transfer(account2, 100)
-- アカウント2からアカウント3へ150を転送する
-- TODO: account2:transfer(account3, 150)
-- アカウント3からアカウント1へ50を転送する
-- TODO: account3:transfer(account1, 50)
-- アカウント1からアカウント3へ1000の転送を試みる(これは失敗するはずです)
-- TODO: account1:transfer(account3, 1000)
-- 3つのアカウントを順番に表示する
-- TODO: account1、account2、account3を表示する