Menu
Coddy logo textTech

Riepilogo - Paghe del personale

Fa parte della sezione Programmazione orientata agli oggetti del percorso Ruby di Coddy. Lezione 26 di 57.

challenge icon

Sfida

Medio

Crea un sistema di gestione delle paghe con l’ereditarietà. Employee.new(name, rate) ha pay(hours) (tariffa moltiplicata per le ore, con le ore oltre le 40 pagate a 1.5 volte la tariffa) e line(hours) che restituisce Ada (employee): 800.00, composto da pay(hours) e role, dove role restituisce employee. Manager.new(name, rate, bonus) passa nome e tariffa a super, aggiunge il bonus alla retribuzione di super e ha il ruolo manager. Contractor < Employee viene pagato con la tariffa moltiplicata per le ore, senza straordinari, e ha il ruolo contractor.

Il codice fornito legge righe come employee Ada 20 40, manager Bo 30 45 500 o contractor Cy 50 50 (nome, tariffa, ore e un bonus per i manager) e stampa line(hours) per ciascuna, poi staff: 3, managers: 1, employees: 3 (entrambi conteggiati con is_a?, quindi anche i manager e i contractor sono dipendenti) e la retribuzione totale.

Il tuo codice va inserito in employee.rb, manager.rb e contractor.rb. main.rb contiene il codice fornito per l’input/output e non può essere modificato.

Provalo tu

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

# Codice di input/output fornito: lascialo così com'è
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) })

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Ruby online