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

واجهة Console / واجهة المسؤول

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

challenge icon

التحدي

سهل

لنقم بإكمال نظام المكتبة الخاص بك عن طريق بناء واجهة وحدة تحكم (console interface) تجمع كل المكونات معاً! ستقوم بإنشاء واجهة مسؤول تعالج الأوامر لإدارة المكتبة - إضافة الكتب، تسجيل المستخدمين، معالجة عمليات الاستعارة، والبحث في الكتالوج.

ستستمر في البناء على هيكل مشروعك الحالي:

  • Book.cs: احتفظ بفئة Book مع Id، Title، Author، IsAvailable، وطرق Borrow() و Return().
  • User.cs: احتفظ بفئة User مع تتبع الاستعارة، وثابت MaxBooks، و CanBorrow()، وطرق إدارة الكتب المستعارة.
  • Library.cs: احتفظ بفئة Library مع كل منطق الاستعارة وطرق بحث LINQ التي قمت ببنائها. أضف طريقة جديدة GetAllBooks() التي تعيد جميع الكتب في المكتبة، و GetAllUsers() التي تعيد جميع المستخدمين المسجلين.
  • Program.cs: هذا هو المكان الذي تدب فيه الحياة في واجهة وحدة التحكم الخاصة بك! ستقوم ببناء معالج أوامر يقرأ الأوامر وينفذ عمليات المكتبة المناسبة. فكر في هذا كلوحة تحكم المسؤول لنظام المكتبة الخاص بك.

يجب أن تتعامل واجهة وحدة التحكم الخاصة بك مع هذه الأوامر:

  • ADD_BOOK|id|title|author - يضيف كتاباً جديداً ويطبع Added: {Title}
  • ADD_USER|name|memberId - يسجل مستخدماً جديداً ويطبع Registered: {Name}
  • BORROW|bookId|memberId - يعالج طلب استعارة (استخدم منطق BorrowBook الحالي لديك)
  • RETURN|bookId|memberId - يعالج طلب إرجاع (استخدم منطق ReturnBook الحالي لديك)
  • SEARCH|type|value - يبحث في الكتالوج حيث يكون النوع title، أو author، أو available، أو borrowed
  • STATUS - يطبع ملخصاً يوضح إجمالي الكتب، الكتب المتاحة، إجمالي المستخدمين، وإجمالي الكتب المستعارة

بالنسبة لأمر STATUS، اطبع الملخص بهذا التنسيق:

--- Library Status ---
Total Books: {count}
Available: {count}
Total Users: {count}
Books Borrowed: {count}

بالنسبة لنتائج البحث، اطبع كل كتاب كـ {Title} by {Author} في سطر مستقل، أو No books found إذا كانت النتائج فارغة.

ستتلقى المدخلات التالية:

  • اسم المكتبة
  • عدد الأوامر المطلوب معالجتها
  • كل أمر في سطر مستقل بالتنسيقات الموضحة أعلاه

على سبيل المثال، إذا كانت المدخلات هي:

Downtown Library
8
ADD_BOOK|B001|Clean Code|Robert Martin
ADD_BOOK|B002|The Pragmatic Programmer|David Thomas
ADD_USER|Alice|101
ADD_USER|Bob|102
BORROW|B001|101
SEARCH|available
BORROW|B002|102
STATUS

يجب أن يكون المخرج:

Added: Clean Code
Added: The Pragmatic Programmer
Registered: Alice
Registered: Bob
Alice borrowed Clean Code
The Pragmatic Programmer by David Thomas
Bob borrowed The Pragmatic Programmer
--- Library Status ---
Total Books: 2
Available: 0
Total Users: 2
Books Borrowed: 2

تعمل واجهة وحدة التحكم الخاصة بك كالغراء الذي يربط مدخلات المستخدم بمكونات مكتبتك المنظمة جيداً. يفوض كل أمر إلى الطريقة المناسبة في فئة Library الخاصة بك، مما يوضح كيف يجعل التصميم النظيف (clean architecture) بناء واجهات المستخدم أمراً مباشراً!

جرّب بنفسك

using System;
using System.Collections.Generic;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // قراءة اسم المكتبة
            string libraryName = Console.ReadLine();
            
            // إنشاء مثيل (instance) من Library باستخدام اسم المكتبة
            Library library = new Library(libraryName);
            
            // قراءة عدد الأوامر
            int numCommands = Convert.ToInt32(Console.ReadLine());
            
            // معالجة كل أمر
            for (int i = 0; i < numCommands; i++)
            {
                string commandLine = Console.ReadLine();
                string[] parts = commandLine.Split('|');
                string command = parts[0];
                
                // TODO: معالجة الأمر ADD_BOOK
                // التنسيق: ADD_BOOK|id|title|author
                // طباعة: Added: {title}
                
                // TODO: معالجة الأمر ADD_USER
                // التنسيق: ADD_USER|name|memberId
                // طباعة: Registered: {name}
                
                // TODO: معالجة الأمر BORROW
                // التنسيق: BORROW|bookId|memberId
                // طباعة النتيجة من library.BorrowBook()
                
                // TODO: معالجة الأمر RETURN
                // التنسيق: RETURN|bookId|memberId
                // طباعة النتيجة من library.ReturnBook()
                
                // TODO: معالجة الأمر SEARCH
                // التنسيق: SEARCH|type|value (يمكن أن يكون النوع title، author، available، borrowed)
                // طباعة كل كتاب بتنسيق "{Title} by {Author}" أو "No books found"
                
                // TODO: معالجة الأمر STATUS
                // طباعة:
                // --- Library Status ---
                // Total Books: {count}
                // Available: {count}
                // Total Users: {count}
                // Books Borrowed: {count}
            }
        }
    }
}

جميع دروس Object Oriented Programming