Banka Defteri
Coddy'nin Ruby Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 57 / 57.
Görev
ZorKüçü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
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıf TanımlamaÖrnek DeğişkenleriMetotlar ve selfto_s ve inspectÖzet - Kütüphane Kartı7Çok Biçimlilik ve Ördek Tiplemesi
Çok BiçimlilikÖrdek TiplemesiSoyut Metotlarcase ve SınıflarTekrar - Ödeme Yöntemleri2Erişimciler ve self
Okuyucular ve YazıcılarÖzel Setter'larMetotlarda selfKimlik ve EşitlikTekrar - Kişi Listesi5Kalıtım
Alt sınıflarMetotları geçersiz kılmasuper çağrısıis_a? ve üst sınıflarTekrar - Personel Maaşları8Özel Metotlar
Eşitlik ve hashOperatör Metotlarıİndeksleme ve EklemeÖzel KoleksiyonlarTekrar - Kesirler11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç Alma3Sınıf Metotları ve Değişkenleri
Sınıf MetotlarıSınıf Örnek DeğişkenleriSabitlerFabrika MetotlarıTekrar - Kupon KodlarıKendi başına pratik yap: Online Ruby derleyicisi