Menu
Coddy logo textTech

Tekrar - Personel Maaşları

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

challenge icon

Görev

Orta

Kalıtım kullanarak bir bordro oluşturun. Employee.new(name, rate), pay(hours) yöntemine (oran çarpı saat; 40’ın üzerindeki saatler oranın 1,5 katı üzerinden ödenir) ve Ada (employee): 800.00 döndüren line(hours) yöntemine sahiptir. Bu çıktı pay(hours) ve role kullanılarak oluşturulur; role ise employee döndürür. Manager.new(name, rate, bonus), name ve rate değerlerini super yöntemine aktarır, bonusu super yönteminin ücretine ekler ve manager rolüne sahiptir. Contractor < Employee, fazla mesai olmadan oran çarpı saat üzerinden ücretlendirilir ve contractor rolüne sahiptir.

Sağlanan kod; employee Ada 20 40, manager Bo 30 45 500 veya contractor Cy 50 50 satırlarını (name, rate, hours ve yöneticiler için bonus) okur ve her biri için line(hours) çıktısını yazdırır. Ardından staff: 3, managers: 1, employees: 3 çıktısını (her ikisi de is_a? kullanılarak sayılır; yani yöneticiler ve taşeronlar da çalışandır) ve toplam ücreti yazdırır.

Kodunuz employee.rb, manager.rb ve contractor.rb dosyalarına gider. main.rb, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

require_relative 'employee'
require_relative 'manager'
require_relative 'contractor'

# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input = []
while (line = gets)
  input << line.chomp
end
staff = input.map do |line|
  kind, name, rate, hours, bonus = line.split
  worker = case kind
           when "manager" then Manager.new(name, rate.to_f, bonus.to_f)
           when "contractor" then Contractor.new(name, rate.to_f)
           else Employee.new(name, rate.to_f)
           end
  [worker, hours.to_i]
end
staff.each { |worker, hours| puts worker.line(hours) }
managers = staff.count { |w, _| w.is_a?(Manager) }
employees = staff.count { |w, _| w.is_a?(Employee) }
puts "staff: #{staff.size}, managers: #{managers}, employees: #{employees}"
puts format("total: %.2f", staff.sum { |w, h| w.pay(h) })

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

Kendi başına pratik yap: Online Ruby derleyicisi