復習 - 職員給与計算
CoddyのRジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 16/57。
チャレンジ
中級3つのファイルで給与計算を構築します。汎用的な pay() は Employee.R に用意されています。
Employee.R:new_employee(name, salary, ..., class = character())、pay.employee()は給与を12で割った値、format.employee()はpay()の結果を小数点以下2桁で整形したAda: 5000.00を返します。また、managerを継承する全員の月額給与の合計であるmanager_cost(staff)も含まれます。Manager.R: 追加フィールドbonusを持つnew_manager(name, salary, bonus)、pay.manager()はNextMethod()を使って従業員の給与にボーナスの12分の1を加算します。format.manager()はNextMethod()を使って従業員のテキストの後に(manager)を追加します。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オンラインコンパイラ