Menu
Coddy logo textTech

Banka Defteri

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

challenge icon

Görev

Zor

Küçük bir banka oluşturun. BankError < StandardError, invalid amount, insufficient funds in 2, withdrawal limit on 2 ve no account 9 mesajlarını taşıyan InvalidAmount, InsufficientFunds, LimitReached ve NoAccount sınıflarının üst sınıfıdır. Account.new(id, owner), id, owner ve balance için okuyuculara ve bakiye için özel bir ayarlayıcıya sahiptir. deposit(amount) ve withdraw(amount), 1'in altında değerlerde InvalidAmount hatası oluşturur; withdraw, bakiye lowest_balance değerinin altına düşecekse InsufficientFunds hatası oluşturur; bu kanca 0 döndürür. month_end hiçbir şey yapmaz ve kind hesap türünü döndürür. Checking, -100'e kadar kredili mevduat kullanımına izin verir. Savings, ayda en fazla 2 para çekme işlemine (LimitReached) izin verir; month_end aşağı yuvarlanmış %1 faiz ekler ve sayacı sıfırlar. to_s, 1 ada checking: -20 değerini döndürür. Bank#open(kind, id, owner) bir Checking veya Savings oluşturur, account(id) NoAccount hatası oluşturur, transfer(from, to, amount) para çekip yatırmadan önce her iki hesabı da bulur, month_end bunu her hesap için çağırır ve Bank, hesapları kimliklerine göre veren each ile Enumerable modülünü içerir.

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 ve son olarak tüm hesapları yazdırır.

Kodunuz bank_error.rb, invalid_amount.rb, insufficient_funds.rb, limit_reached.rb, no_account.rb, account.rb, checking.rb, savings.rb ve bank.rb dosyalarına gider. main.rb, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

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'

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

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Ruby derleyicisi