Повторение — расчёт зарплаты сотрудников
Часть раздела Объектно-ориентированное программирование путешествия по R на Coddy. Урок 16 из 57.
Задание
СреднеСоздайте расчёт заработной платы в трёх файлах. Обобщённая функция 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 = "")
Все уроки раздела Объектно-ориентированное программирование
1Основы S3
Работа с файламиСписки с классомФункции-конструкторыМетоды print и formatВалидаторы и вспомогательные функцииПовторение — температуры4Инкапсуляция в R
Замыкания как объектыОкружения как объектыФункции доступаЗащита состоянияПовторение — парковочный счётчик7S4 Наследование
Расширение с помощью containscallNextMethodВиртуальные классыПроверка типов с помощью is()Повторение — смотритель зоопарка10Шаблоны проектирования, часть 2
Шаблон «Декоратор»Шаблон «Строитель»Шаблон «Состояние»Шаблон «Итератор»2Обобщённые функции и методы S3
Обобщённые функции и UseMethodМетоды по умолчаниюМетоды для базовых обобщённых функцийОсновы NextMethodПовторение — площади фигур5Классы S4
Определение классов S4Слоты и доступПроверка корректностиМетоды showПовторение — каталог товаров8Ссылочные классы
Определение ссылочных классовМетоды и обновление полейСемантика копированияНаследование и callSuperПовторение — очередь задач11Проект: Управление библиотекой
Книги и читателиВыдача книг3Наследование S3
Векторы классовПорядок поиска методовРасширение с помощью NextMethodПроверка с помощью inherits()Повторение — расчёт зарплаты сотрудниковПотренируйтесь самостоятельно: Онлайн-компилятор R