مراجعة - مدير الحساب البنكي
جزء من قسم Object Oriented Programming في رحلة C# على Coddy — الدرس 18 من 70.
التحدي
سهللنقم ببناء نظام كامل لإدارة الحسابات المصرفية يجمع كل ما تعلمته حول بنية الفئات (classes). ستقوم بإنشاء فئة BankAccount تميز بشكل صحيح بين بيانات المثيل (الفريدة لكل حساب) والبيانات الثابتة static (المشتركة بين جميع الحسابات)، مع استخدام التحقق من الصحة للحفاظ على الحسابات في حالات صالحة.
ستقوم بإنشاء ملفين لتنظيم الكود الخاص بك:
BankAccount.cs: قم بتعريف فئةBankAccountداخل مساحة الأسماءBanking. يجب أن يتضمن حسابك ما يلي:- حقل
constباسمMinimumBalanceمضبوط على100- وهو الحد الأدنى للرصيد الذي يجب أن تحافظ عليه جميع الحسابات. - حقل
staticباسمInterestRate(من نوع decimal) يبدأ بـ0.03m- مشترك بين جميع الحسابات. - حقل
staticباسمTotalAccounts(من نوع int) يتتبع عدد الحسابات الموجودة. - حقل
readonlyباسمAccountNumber(من نوع string) - يتم تعيينه مرة واحدة أثناء الإنشاء ولا يتغير أبداً. - حقل دعم خاص (private backing field) باسم
_ownerNameمع خاصيةOwnerNameتقوم بإزالة المسافات الزائدة (trim) عند التعيين. - حقل دعم خاص باسم
_balanceمع خاصيةBalanceتمنع الرصيد من الانخفاض عنMinimumBalance(إذا حاول شخص ما تعيينه بقيمة أقل، فاجعله عندMinimumBalance). - منشئ (constructor) يقبل رقم الحساب، واسم المالك، والرصيد الأولي، ويقوم بزيادة
TotalAccounts. - طريقة ثابتة (static method) باسم
SetInterestRate(decimal rate)لتحديث سعر الفائدة المشترك. - طريقة باسم
CalculateInterest()تعيد الرصيد مضروباً في سعر الفائدة.
- حقل
Program.cs: في ملفك الرئيسي، قم بإنشاء حسابين مصرفيين باستخدام قيم الإدخال، وحدث سعر الفائدة، واعرض معلومات الحساب مع بيانات البنك المشتركة.
ستتلقى سبعة مدخلات:
- رقم الحساب الأول
- اسم مالك الحساب الأول
- الرصيد الأولي للحساب الأول
- رقم الحساب الثاني
- اسم مالك الحساب الثاني
- الرصيد الأولي للحساب الثاني
- سعر الفائدة الجديد (كقيمة عشرية مثل
0.05)
اطبع المخرجات بهذا التنسيق:
--- Bank Summary ---
Interest Rate: {InterestRate}
Minimum Balance: {MinimumBalance}
Total Accounts: {TotalAccounts}
Account: {AccountNumber}
Owner: {OwnerName}
Balance: {Balance}
Interest Earned: {interest}
Account: {AccountNumber}
Owner: {OwnerName}
Balance: {Balance}
Interest Earned: {interest}على سبيل المثال، إذا كانت المدخلات هي ACC001، و Alice Smith ، و 500، و ACC002، و Bob Jones، و 50، و 0.05، فيجب أن تكون المخرجات:
--- Bank Summary ---
Interest Rate: 0.05
Minimum Balance: 100
Total Accounts: 2
Account: ACC001
Owner: Alice Smith
Balance: 500
Interest Earned: 25.0
Account: ACC002
Owner: Bob Jones
Balance: 100
Interest Earned: 5.0لاحظ كيف تم تقليم اسم Alice من المساحات الإضافية، وكيف تم رفع رصيد Bob من 50 إلى الحد الأدنى 100. يتم حساب الفائدة باستخدام المعدل المحدث 0.05 الذي تم تعيينه بعد إنشاء الحسابات.
جرّب بنفسك
using System;
using Banking;
class Program
{
public static void Main(string[] args)
{
// قراءة المدخلات للحساب الأول
string accountNumber1 = Console.ReadLine();
string ownerName1 = Console.ReadLine();
decimal balance1 = Convert.ToDecimal(Console.ReadLine());
// قراءة المدخلات للحساب الثاني
string accountNumber2 = Console.ReadLine();
string ownerName2 = Console.ReadLine();
decimal balance2 = Convert.ToDecimal(Console.ReadLine());
// قراءة سعر الفائدة الجديد
decimal newRate = Convert.ToDecimal(Console.ReadLine());
// TODO: إنشاء كائنين من نوع BankAccount باستخدام قيم المدخلات
// TODO: تحديث سعر الفائدة باستخدام الـ static method
// TODO: طباعة ملخص البنك بالتنسيق المطلوب
// --- ملخص البنك ---
// سعر الفائدة: {InterestRate}
// الحد الأدنى للرصيد: {MinimumBalance}
// إجمالي الحسابات: {TotalAccounts}
// (سطر فارغ)
// الحساب: {AccountNumber}
// المالك: {OwnerName}
// الرصيد: {Balance}
// الفائدة المكتسبة: {interest}
// (سطر فارغ)
// الحساب: {AccountNumber}
// المالك: {OwnerName}
// الرصيد: {Balance}
// الفائدة المكتسبة: {interest}
}
}
جميع دروس Object Oriented Programming
1أساسيات OOP
الملفات الخارجيةNamespaces والتوجيهاتمقدمة في Classes و Objectsالكلمة المفتاحية 'this'Methods والمعاملاتFields مقابل PropertiesConstructorsObject Initializersمراجعة - آلة حاسبة بسيطة4الوراثة
صيغة الوراثة الأساسية (:)الكلمة المفتاحية 'base'الكلمات المفتاحية Virtual و Overrideالأصناف المختومة (Sealed Classes)الفئة الأساسية 'object'مراجعة - هيكلية الموظفين7ميزات متقدمة
تحميل العوامل (Operator Overloading)المفهرسات (Indexers (this[]))إعادة تعريف ()ToStringدوال التوسعة (Extension Methods)ملخص - Custom List2الخصائص والأعضاء الساكنة (Static Members)
الخصائص المطبقة تلقائيًا (Auto-Implemented Properties)خصائص القراءة فقط والكتابة فقطالحقول والدوال الساكنة (Static)الفئات الساكنة (Static Classes)الأعضاء ذات البنية التعبيرية (Expression-Bodied Members)5تعدد الأشكال والواجهات (Polymorphism & Interfaces)
تعدد الأشكال: وقت التجميع مقابل وقت التشغيلالواجهة مقابل الفئة المجردة (Abstract Class)الواجهات المتعددةالواجهات الصريحةUpcasting و Downcastingملخص - حاسبة الأشكال8مفاهيم البرمجة كائنية التوجه (OOP) المتقدمة
التركيب بدلاً من الوراثةالـ Generics (الأصناف والدوال)الـ Delegates والأحداثالـ Attributes والـ Reflectionواجهة IDisposable وجملة usingأساسيات Dependency Injection