Menu
CoddyTech

Buku Besar Bank

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Ruby di Coddy. Pelajaran 57 dari 57.

challenge icon

Tantangan

Sulit

Buat bank kecil. BankError < StandardError adalah induk dari InvalidAmount, InsufficientFunds, LimitReached dan NoAccount, yang membawa pesan invalid amount, insufficient funds in 2, withdrawal limit on 2 dan no account 9. Account.new(id, owner) memiliki pembaca untuk id, owner dan balance, dengan setter privat untuk saldo. deposit(amount) dan withdraw(amount) memunculkan InvalidAmount jika nilainya kurang dari 1; withdraw memunculkan InsufficientFunds saat saldo akan turun di bawah lowest_balance, sebuah hook yang mengembalikan 0. month_end tidak melakukan apa pun dan kind mengembalikan tipe akun. Checking mengizinkan saldo negatif hingga -100. Savings mengizinkan paling banyak 2 penarikan per bulan (LimitReached), dan month_end-nya menambahkan bunga 1%, dibulatkan ke bawah, lalu mengatur ulang jumlah penarikan. to_s mengembalikan 1 ada checking: -20. Bank#open(kind, id, owner) membuat Checking atau Savings, account(id) memunculkan NoAccount, transfer(from, to, amount) mencari kedua akun sebelum menarik dan menyetor dana, month_end memanggilnya pada setiap akun, dan Bank menyertakan Enumerable dengan each yang menghasilkan akun berdasarkan id.

Kode yang disediakan membaca perintah open checking 1 ada, dep 1 100, wd 2 30, tr 1 2 50 atau month, mencetak ok atau pesan error untuk masing-masing perintah, lalu mencetak setiap akun.

Tulis kodemu di bank_error.rb, invalid_amount.rb, insufficient_funds.rb, limit_reached.rb, no_account.rb, account.rb, checking.rb, savings.rb dan bank.rb. main.rb berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

require_relative 'bank_error'
require_relative 'invalid_amount'
require_relative 'insufficient_funds'
require_relative 'limit_reached'
require_relative 'no_account'
require_relative 'account'
require_relative 'checking'
require_relative 'savings'
require_relative 'bank'

# Kode input/output yang disediakan: biarkan apa adanya
input = []
while (line = gets)
  input << line.chomp
end
bank = Bank.new
input.each do |cmd|
  parts = cmd.split
  begin
    case parts[0]
    when "open" then bank.open(parts[1], parts[2].to_i, parts[3])
    when "dep" then bank.account(parts[1].to_i).deposit(parts[2].to_i)
    when "wd" then bank.account(parts[1].to_i).withdraw(parts[2].to_i)
    when "tr" then bank.transfer(parts[1].to_i, parts[2].to_i, parts[3].to_i)
    else bank.month_end
    end
    puts "ok"
  rescue BankError => e
    puts e.message
  end
end
bank.each { |account| puts account }

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Ruby online