Menu
Coddy logo textTech

Repaso - Nómina del personal

Parte de la sección Programación orientada a objetos del Journey de Ruby de Coddy. Lección 26 de 57.

challenge icon

Desafío

Intermedio

Construye una nómina con herencia. Employee.new(name, rate) tiene pay(hours) (la tarifa multiplicada por las horas, y las horas por encima de 40 se pagan a 1.5 veces la tarifa) y line(hours), que devuelve Ada (employee): 800.00, construido a partir de pay(hours) y role, donde role devuelve employee. Manager.new(name, rate, bonus) pasa el nombre y la tarifa a super, añade el bono al pago de super y tiene el rol manager. Contractor < Employee recibe la tarifa multiplicada por las horas, sin horas extra, y tiene el rol contractor.

El código proporcionado lee líneas employee Ada 20 40, manager Bo 30 45 500 o contractor Cy 50 50 (nombre, tarifa, horas y un bono para los managers) e imprime line(hours) para cada una; después, staff: 3, managers: 1, employees: 3 (ambos se cuentan con is_a?, por lo que los managers y los contractors también son empleados) y el pago total.

Tu código va en employee.rb, manager.rb y contractor.rb. main.rb contiene el código proporcionado de entrada/salida y no se puede editar.

Pruébalo tú mismo

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

# Código de entrada/salida suministrado: déjalo como está
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) })

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Compilador de Ruby online