Menu
CoddyTech

Buku Besar Bank

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan R di Coddy. Pelajaran 57 dari 57.

challenge icon

Tantangan

Sulit

Buat bank kecil menggunakan Reference Classes dalam empat file. Semua definisi dibungkus dengan suppressMessages(); gunakan call. = FALSE di setiap stop().

  • Account.R: field id, owner, balance (0 di awal). deposit(x) dan withdraw(x) berhenti dengan invalid amount saat x tidak tersedia atau kurang dari 1; withdraw() berhenti dengan insufficient funds in 2 saat saldo akan turun di bawah lowest(), yaitu 0. month_end() tidak melakukan apa pun; line() mengembalikan 1 ada checking: -20 menggunakan kind().
  • Checking.R: jenis checking; saldo dapat turun hingga -100.
  • Savings.R: jenis savings; paling banyak 2 penarikan per bulan (withdrawal limit on 2), hanya dihitung jika berhasil; month_end() menambahkan bunga 1%, dibulatkan ke bawah, dan mengatur ulang hitungan.
  • Bank.R: open_account(kind, id, owner) (account 2 exists), get_account(id) (no account 9), transfer(from, to, amount), yang tidak mengubah apa pun jika penarikan gagal, month_end() untuk setiap akun, dan statement(), baris-baris semua akun yang diurutkan berdasarkan id.

Code 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 menampilkan pernyataan.

Kodemu ditulis di Account.R, Checking.R, Savings.R dan Bank.R. main.R berisi code input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

source("Account.R")
source("Checking.R")
source("Savings.R")
source("Bank.R")

# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
bank <- Bank$new()
for (line in input) {
  p <- strsplit(line, " ")[[1]]
  n <- suppressWarnings(as.numeric(p[-1]))
  msg <- tryCatch({
    switch(p[1],
      open = bank$open_account(p[2], as.numeric(p[3]), p[4]),
      dep = bank$get_account(n[1])$deposit(n[2]),
      wd = bank$get_account(n[1])$withdraw(n[2]),
      tr = bank$transfer(n[1], n[2], n[3]),
      month = bank$month_end())
    "ok"
  }, error = function(e) conditionMessage(e))
  cat(line, ": ", msg, "\n", sep = "")
}
for (l in bank$statement()) cat(l, "\n", sep = "")

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler R online