은행 원장
Coddy Ruby 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 57번째.
챌린지
어려움작은 은행을 만드세요. BankError < StandardError는 InvalidAmount, InsufficientFunds, LimitReached 및 NoAccount의 부모이며, 이들은 각각 invalid amount, insufficient funds in 2, withdrawal limit on 2 및 no account 9 메시지를 전달합니다. Account.new(id, owner)에는 id, owner 및 balance에 대한 리더가 있고, balance에는 private setter가 있습니다. deposit(amount)와 withdraw(amount)는 1 미만의 값에서 InvalidAmount를 발생시킵니다. withdraw는 잔액이 lowest_balance 아래로 내려가게 될 때 InsufficientFunds를 발생시키며, 이 훅은 0을 반환합니다. month_end는 아무 작업도 하지 않고, kind는 계좌 유형을 반환합니다. Checking은 -100까지의 초과 인출을 허용합니다. Savings는 한 달에 최대 2회의 인출만 허용하며(LimitReached), 해당 month_end는 1%의 이자를 내림하여 더하고 인출 횟수를 초기화합니다. to_s는 1 ada checking: -20을 반환합니다. Bank#open(kind, id, owner)은 Checking 또는 Savings를 생성하고, account(id)는 NoAccount를 발생시키며, transfer(from, to, amount)는 인출하고 입금하기 전에 두 계좌를 모두 조회하고, month_end는 모든 계좌에 대해 이를 호출합니다. 또한 Bank는 Enumerable을 포함하며 each는 id 순서대로 계좌를 yield합니다.
제공된 코드는 open checking 1 ada, dep 1 100, wd 2 30, tr 1 2 50 또는 month 명령을 읽고, 각 명령에 대해 ok 또는 오류 메시지를 출력한 다음 마지막으로 모든 계좌를 출력합니다.
코드는 bank_error.rb, invalid_amount.rb, insufficient_funds.rb, limit_reached.rb, no_account.rb, account.rb, checking.rb, savings.rb 및 bank.rb에 작성합니다. main.rb에는 제공된 입출력 코드가 있으며 편집할 수 없습니다.
직접 해보기
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'
# 제공된 입/출력 코드: 그대로 유지하세요
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 }
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 Ruby 컴파일러