Menu
Coddy logo textTech

Banka Defteri

Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 57 / 57.

challenge icon

Görev

Zor

Dört dosyada Reference Classes kullanarak küçük bir banka oluşturun. Tüm tanımlar suppressMessages() içine alınmıştır; her stop() içinde call. = FALSE kullanın.

  • Account.R: id, owner, balance alanları (başlangıçta 0). deposit(x) ve withdraw(x), x eksikse veya 1'in altındaysa invalid amount ile durur; bakiye lowest() değerinin (0) altına düşecekse withdraw(), insufficient funds in 2 ile durur. month_end() hiçbir şey yapmaz; line(), kind() kullanarak 1 ada checking: -20 değerini döndürür.
  • Checking.R: tür checking; bakiye -100'e kadar düşebilir.
  • Savings.R: tür savings; ayda en fazla 2 para çekme işlemi (withdrawal limit on 2), yalnızca başarılı olduklarında sayılır; month_end() %1 faizi aşağı yuvarlayarak ekler ve sayacı sıfırlar.
  • Bank.R: open_account(kind, id, owner) (account 2 exists), get_account(id) (no account 9), para çekme başarısız olduğunda hiçbir şeyi değiştirmeyen transfer(from, to, amount), her hesap için month_end() ve kimliğe göre sıralanmış tüm hesapların satırlarını döndüren statement().

Sağlanan kod open checking 1 ada, dep 1 100, wd 2 30, tr 1 2 50 veya month komutlarını okur, her biri için ok ya da hata mesajını yazdırır, ardından hesap özetini yazdırır.

Kodunuz Account.R, Checking.R, Savings.R ve Bank.R dosyalarına yerleştirilmelidir. main.R, sağlanan giriş/çıkış kodunu içerir ve düzenlenemez.

Kendin dene

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

# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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 = "")

Nesne Tabanlı Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online R derleyicisi