Menu
Coddy logo textTech

復習 - 職員給与計算

CoddyのRジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 16/57。

challenge icon

チャレンジ

中級

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オンラインコンパイラ