Menu
Coddy logo textTech

Повторение — расчёт зарплаты сотрудников

Часть раздела Объектно-ориентированное программирование путешествия по R на Coddy. Урок 16 из 57.

challenge icon

Задание

Средне

Создайте расчёт заработной платы в трёх файлах. Обобщённая функция pay() задана в Employee.R.

  • Employee.R: new_employee(name, salary, ..., class = character()); pay.employee() возвращает зарплату, делённую на 12; format.employee() возвращает Ada: 5000.00, форматируя результат pay() до двух знаков после запятой; а manager_cost(staff) вычисляет общую ежемесячную выплату всем, кто наследует от manager.
  • Manager.R: new_manager(name, salary, bonus) с дополнительным полем bonus; pay.manager() добавляет к зарплате сотрудника одну двенадцатую бонуса с помощью NextMethod(); format.manager() добавляет (manager) после текста сотрудника с помощью NextMethod().
  • Intern.R: new_intern(name, salary); pay.intern() возвращает половину зарплаты сотрудника, используя NextMethod(). Для стажёров сохраняется формат сотрудника.

Предоставленный код считывает строки employee Bo 36000, manager Ada 60000 12000 или intern Cy 24000, выводит формат каждого человека, а затем общую сумму выплат менеджерам.

Ваш код должен находиться в файлах Employee.R, Manager.R и Intern.R. В main.R содержится предоставленный код ввода/вывода, и его нельзя изменять.

Попробуйте сами

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

# Предоставленный код ввода/вывода: оставьте его как есть
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 = "")

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор R