Menu
Coddy logo textTech

Powtórzenie — lista płac pracowników

Część sekcji Programowanie obiektowe ścieżki R w Coddy. Lekcja 16 z 57.

challenge icon

Wyzwanie

Średni

Zbuduj system płacowy w trzech plikach. Ogólna funkcja pay() jest podana w Employee.R.

  • Employee.R: new_employee(name, salary, ..., class = character()); pay.employee() zwraca pensję podzieloną przez 12; format.employee() zwraca Ada: 5000.00, gdzie wynik pay() jest sformatowany do dwóch miejsc po przecinku; oraz manager_cost(staff) zwraca łączną miesięczną pensję wszystkich obiektów dziedziczących po manager.
  • Manager.R: new_manager(name, salary, bonus) z dodatkowym polem bonus; pay.manager() dodaje jedną dwunastą premii do pensji pracownika za pomocą NextMethod(); format.manager() dodaje (manager) po tekście pracownika za pomocą NextMethod().
  • Intern.R: new_intern(name, salary); pay.intern() zwraca połowę pensji pracownika, używając NextMethod(). Stażyści zachowują format pracownika.

Dostarczony kod odczytuje wiersze employee Bo 36000, manager Ada 60000 12000 lub intern Cy 24000, wyświetla format każdej osoby, a następnie łączną pensję kierowników.

Twój kod umieść w plikach Employee.R, Manager.R i Intern.R. main.R zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.

Spróbuj swoich sił

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

# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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 = "")

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator R online