مراجعة - رواتب الموظفين
جزء من قسم البرمجة كائنية التوجه في رحلة 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
التعامل مع الملفاتالقوائم باستخدام فئةدوال المُنشئأساليب الطباعة والتنسيقأدوات التحقق والمساعدةمراجعة - درجات الحرارة2S3 الدوال العامة والطرق
الدوال العامة وUseMethodالطرق الافتراضيةطرق الدوال العامة الأساسيةأساسيات NextMethodمراجعة - مساحات الأشكال3وراثة S3
متجهات الأصنافترتيب البحث عن الأساليبالتوسعة باستخدام NextMethodالتحقق باستخدام inherits()مراجعة - رواتب الموظفينتدرّب بنفسك: مترجم R عبر الإنترنت