Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - مدير الحساب البنكي

جزء من قسم Object Oriented Programming في رحلة C# على Coddy — الدرس 18 من 70.

challenge icon

التحدي

سهل

لنقم ببناء نظام كامل لإدارة الحسابات المصرفية يجمع كل ما تعلمته حول بنية الفئات (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