Menu
Coddy logo textTech

Revisão - Folha de pagamento da equipe

Parte da seção Programação orientada a objetos do Journey de Ruby da Coddy. Lição 26 de 57.

challenge icon

Desafio

Médio

Crie uma folha de pagamento com herança. Employee.new(name, rate) tem pay(hours) (taxa multiplicada pelas horas, com as horas acima de 40 pagas a 1,5 vezes a taxa) e line(hours), que retorna Ada (employee): 800.00, construído a partir de pay(hours) e role, onde role retorna employee. Manager.new(name, rate, bonus) passa name e rate para super, adiciona o bônus ao pagamento de super e tem a função manager. Contractor < Employee recebe a taxa multiplicada pelas horas, sem hora extra, e tem a função contractor.

O código fornecido lê linhas employee Ada 20 40, manager Bo 30 45 500 ou contractor Cy 50 50 (nome, taxa, horas e um bônus para gerentes) e imprime line(hours) para cada uma; em seguida, imprime staff: 3, managers: 1, employees: 3 (todos contados com is_a?, portanto gerentes e prestadores de serviço também são funcionários) e o pagamento total.

Seu código deve ficar em employee.rb, manager.rb e contractor.rb. main.rb contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

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

# Código de entrada/saída fornecido: mantenha-o 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 as lições de Programação orientada a objetos

Pratique por conta própria: Compilador de Ruby online