Menu
Coddy logo textTech

Powtórka – lista płac pracowników

Część sekcji Programowanie obiektowe ścieżki Ruby w Coddy. Lekcja 26 z 57.

challenge icon

Wyzwanie

Średni

Stwórz system płacowy z dziedziczeniem. Employee.new(name, rate) ma metodę pay(hours) (stawka razy liczba godzin, przy czym godziny powyżej 40 są płatne według stawki 1.5 raza wyższej) oraz line(hours), zwracającą Ada (employee): 800.00, utworzone na podstawie pay(hours) i role, które zwraca employee. Manager.new(name, rate, bonus) przekazuje imię i stawkę do super, dodaje premię do wynagrodzenia z super i ma rolę manager. Contractor < Employee otrzymuje wynagrodzenie obliczane jako stawka razy liczba godzin, bez nadgodzin, i ma rolę contractor.

Dostarczony kod odczytuje wiersze employee Ada 20 40, manager Bo 30 45 500 lub contractor Cy 50 50 (imię, stawka, liczba godzin oraz premia dla menedżerów) i wypisuje dla każdego line(hours), a następnie staff: 3, managers: 1, employees: 3 (obie wartości są zliczane za pomocą is_a?, więc menedżerowie i wykonawcy również są pracownikami) oraz łączne wynagrodzenie.

Umieść swój kod w plikach employee.rb, manager.rb i contractor.rb. main.rb zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.

Spróbuj swoich sił

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

# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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) })

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Ruby online