Menu
Coddy logo textTech

Repaso - Nómina del personal

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

challenge icon

Desafío

Intermedio

Construye una nómina en tres archivos. La función genérica pay() se proporciona en Employee.R.

  • Employee.R: new_employee(name, salary, ..., class = character()); pay.employee() es el salario dividido por 12; format.employee() devuelve Ada: 5000.00 con pay() formateado con dos decimales; y manager_cost(staff), el pago mensual total de todas las personas que heredan de manager.
  • Manager.R: new_manager(name, salary, bonus) con el campo adicional bonus; pay.manager() suma una doceava parte del bono al pago del empleado mediante NextMethod(); format.manager() añade (manager) después del texto del empleado mediante NextMethod().
  • Intern.R: new_intern(name, salary); pay.intern() es la mitad del pago del empleado, usando NextMethod(). Los becarios conservan el formato del empleado.

El código proporcionado lee las líneas employee Bo 36000, manager Ada 60000 12000 o intern Cy 24000, muestra el formato de cada persona y después el total de los gerentes.

Tu código va en Employee.R, Manager.R e Intern.R. main.R contiene el código proporcionado de entrada/salida y no se puede editar.

Pruébalo tú mismo

source("Employee.R")
source("Manager.R")
source("Intern.R")

# Código de entrada/salida suministrado: déjalo tal como está
input <- suppressWarnings(readLines(file("stdin")))
staff <- list()
for (line in input) {
  p <- strsplit(line, " ")[[1]]
  staff[[length(staff) + 1]] <- switch(p[1],
    employee = new_employee(p[2], as.numeric(p[3])),
    manager = new_manager(p[2], as.numeric(p[3]), as.numeric(p[4])),
    intern = new_intern(p[2], as.numeric(p[3])))
}
for (x in staff) cat(format(x), "\n", sep = "")
cat(sprintf("managers cost %.2f per month", manager_cost(staff)), "\n", sep = "")

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Compilador de R online