回顾:员工薪资
本课属于 Coddy R 学习旅程的“面向对象编程”单元。第 16 课,共 57 课。
挑战
中等通过 3 个文件构建薪资系统。泛型函数 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:实现带有额外字段bonus的new_manager(name, salary, bonus);pay.manager()使用NextMethod(),在员工薪资的基础上加上奖金的十二分之一;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 在线编译器