سجل الحسابات المصرفية
جزء من قسم البرمجة كائنية التوجه في رحلة R على Coddy. الدرس 57 من 57.
التحدي
صعبأنشئ بنكًا صغيرًا باستخدام الفئات المرجعية في أربعة ملفات. جميع التعريفات مغلّفة داخل suppressMessages()؛ استخدم call. = FALSE في كل stop().
Account.R: الحقولidوownerوbalance(تبدأ بقيمة 0). تتوقفdeposit(x)وwithdraw(x)معinvalid amountعندما تكونxمفقودة أو أقل من 1؛ وتتوقفwithdraw()معinsufficient funds in 2عندما ينخفض الرصيد إلى ما دونlowest()، التي قيمتها 0. لا تفعلmonth_end()شيئًا؛ وتُرجعline()القيمة1 ada checking: -20باستخدامkind().Checking.R: النوعchecking؛ ويمكن أن ينخفض الرصيد إلى -100.Savings.R: النوعsavings؛ يُسمح بحد أقصى بعمليتي سحب شهريًا (withdrawal limit on 2)، ولا تُحتسب العملية إلا عند نجاحها؛ تضيفmonth_end()فائدة بنسبة 1%، مع التقريب إلى الأسفل، وتعيد ضبط العداد.Bank.R: open_account(kind, id, owner)(account 2 exists)، وget_account(id)(no account 9)، وtransfer(from, to, amount)، التي لا تغيّر شيئًا عند فشل السحب، وmonth_end()لكل حساب، وstatement()التي تُرجع أسطر جميع الحسابات مرتبة حسب المعرّف.
يقرأ الكود الم provided الأوامر open checking 1 ada وdep 1 100 وwd 2 30 وtr 1 2 50 أو month، ويطبع ok أو رسالة الخطأ لكل أمر، ثم يطبع البيان.
ضع الكود في Account.R وChecking.R وSavings.R وBank.R. يحتوي main.R على كود الإدخال/الإخراج الم provided ولا يمكن تعديله.
جرّب بنفسك
source("Account.R")
source("Checking.R")
source("Savings.R")
source("Bank.R")
# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
input <- suppressWarnings(readLines(file("stdin")))
bank <- Bank$new()
for (line in input) {
p <- strsplit(line, " ")[[1]]
n <- suppressWarnings(as.numeric(p[-1]))
msg <- tryCatch({
switch(p[1],
open = bank$open_account(p[2], as.numeric(p[3]), p[4]),
dep = bank$get_account(n[1])$deposit(n[2]),
wd = bank$get_account(n[1])$withdraw(n[2]),
tr = bank$transfer(n[1], n[2], n[3]),
month = bank$month_end())
"ok"
}, error = function(e) conditionMessage(e))
cat(line, ": ", msg, "\n", sep = "")
}
for (l in bank$statement()) cat(l, "\n", sep = "")
جميع دروس البرمجة كائنية التوجه
1أساسيات S3
التعامل مع الملفاتالقوائم باستخدام فئةدوال المُنشئأساليب الطباعة والتنسيقأدوات التحقق والمساعدةمراجعة - درجات الحرارة2S3 الدوال العامة والطرق
الدوال العامة وUseMethodالطرق الافتراضيةطرق الدوال العامة الأساسيةأساسيات NextMethodمراجعة - مساحات الأشكالتدرّب بنفسك: مترجم R عبر الإنترنت