Menu
Coddy logo textTech

Rückblick – Gehaltsabrechnung des Personals

Teil des Abschnitts Objektorientierte Programmierung der Ruby-Journey von Coddy. Lektion 26 von 57.

challenge icon

Aufgabe

Mittel

Erstelle eine Gehaltsabrechnung mit Vererbung. Employee.new(name, rate) verfügt über pay(hours) (Rate mal Stunden, wobei Stunden über 40 mit dem 1,5-Fachen der Rate bezahlt werden) und line(hours), das Ada (employee): 800.00 zurückgibt, aufgebaut aus pay(hours) und role, wobei role employee zurückgibt. Manager.new(name, rate, bonus) übergibt Name und Rate an super, addiert den Bonus zur Bezahlung von super und hat die Rolle manager. Contractor < Employee wird mit Rate mal Stunden ohne Überstunden bezahlt und hat die Rolle contractor.

Der bereitgestellte Code liest Zeilen wie employee Ada 20 40, manager Bo 30 45 500 oder contractor Cy 50 50 (Name, Rate, Stunden und ein Bonus für Manager) ein und gibt für jede Zeile line(hours) aus. Anschließend gibt er staff: 3, managers: 1, employees: 3 aus (alle werden mit is_a? gezählt, daher sind Manager und Auftragnehmer ebenfalls Angestellte) sowie die Gesamtbezahlung.

Dein Code kommt in employee.rb, manager.rb und contractor.rb. main.rb enthält den bereitgestellten Ein-/Ausgabecode und darf nicht bearbeitet werden.

Probier es selbst

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

# Gelieferter Ein-/Ausgabecode: belasse ihn wie er ist
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) })

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Ruby-Compiler