Rückblick – Gehaltsabrechnung des Personals
Teil des Abschnitts Objektorientierte Programmierung der Ruby-Journey von Coddy. Lektion 26 von 57.
Aufgabe
MittelErstelle 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
1Klassen und Objekte
Arbeiten mit DateienKlassen definierenInstanzvariablenMethoden und selfto_s und inspectRückblick – Bibliotheksausweis4Kapselung
Private MethodenGeschützte MethodenPrivate SetterZustand schützenRückblick – Verkaufsautomat7Polymorphismus und Duck Typing
PolymorphismusDuck TypingAbstrakte MethodenFälle und KlassenRückblick – Zahlungsmethoden2Getter und Setter sowie self
Leser und SchreiberBenutzerdefinierte Setterself in MethodenIdentität und GleichheitWiederholung – Kontaktliste5Vererbung
UnterklassenMethoden überschreibensuper aufrufenis_a? und VorfahrenRückblick – Gehaltsabrechnung des Personals8Spezielle Methoden
Gleichheit und HashOperator-MethodenIndexieren und AnhängenBenutzerdefinierte CollectionsRückblick – Brüche11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Online-Ruby-Compiler