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

نماذج الكتاب والمستخدم

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

challenge icon

التحدي

سهل

دعنا نوسع نظام المكتبة الخاص بك من خلال بناء نماذج Book و User بوظائف أغنى. ستضيف تتبع الحالة للكتب، وإمكانيات الاستعارة للمستخدمين، والتغليف (encapsulation) المناسب للحفاظ على أمان بياناتك.

ستستمر في العمل مع هيكل الملفات الأربعة الخاص بك:

  • Book.cs: قم بتحسين فئة Book الخاصة بك بمعرف فريد وتتبع الحالة. يجب أن يحتوي كل كتاب على Id (string)، و Title (string)، و Author (string)، و IsAvailable (bool، وقيمته الافتراضية true). أضف الطرق Borrow() و Return() التي تغير حالة التوفر وتعيد رسالة تشير إلى النجاح أو الفشل. إذا حاول شخص ما استعارة كتاب غير متاح، فقم بإرجاع "{Title} is not available". وإذا حاولوا إرجاع كتاب متاح بالفعل، فقم بإرجاع "{Title} was not borrowed". يجب أن تعيد العمليات الناجحة "{Title} has been borrowed" أو "{Title} has been returned".
  • User.cs: قم بتوسيع فئة User لتتبع الكتب المستعارة. قم بتضمين Name (string)، و MemberId (int)، وقائمة خاصة (private list) لتخزين معرفات الكتب المستعارة. أضف خاصية للقراءة فقط BorrowedCount تعيد عدد الكتب التي يمتلكها المستخدم حالياً. قم بتضمين الطرق AddBorrowedBook(string bookId) و RemoveBorrowedBook(string bookId) لإدارة الكتب المستعارة للمستخدم. أضف أيضاً طريقة HasBook(string bookId) تعيد true إذا كان المستخدم قد استعار ذلك الكتاب المحدد.
  • Library.cs: يجب أن تحتفظ فئة Library الخاصة بك بمجموعات من الكتب والمستخدمين. قم بتضمين الطرق AddBook(Book book) و RegisterUser(User user) لملء المكتبة. أضف طريقة GetBookById(string id) تعيد الكتاب الذي يحمل ذلك المعرف (أو null إذا لم يتم العثور عليه)، و GetUserById(int memberId) التي تعمل بشكل مشابه للمستخدمين.
  • Program.cs: اجمع كل شيء معاً من خلال معالجة عمليات المكتبة بناءً على المدخلات.

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

  • اسم المكتبة
  • عدد الكتب المراد إضافتها
  • لكل كتاب: id|title|author
  • عدد المستخدمين المراد تسجيلهم
  • لكل مستخدم: name|memberId
  • عدد العمليات المراد تنفيذها
  • لكل عملية: action|bookId|memberId حيث تكون action إما borrow أو return

لكل عملية، اطبع نتيجة إجراء الاستعارة أو الإرجاع. بعد كل العمليات، اطبع ملخصاً لكل مستخدم يوضح اسمه وعدد الكتب التي استعارها حالياً بالتنسيق {Name}: {BorrowedCount} book(s).

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

Downtown Library
2
B001|Clean Code|Robert Martin
B002|Design Patterns|Gang of Four
2
Alice|101
Bob|102
4
borrow|B001|101
borrow|B002|101
borrow|B001|102
return|B001|101

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

Clean Code has been borrowed
Design Patterns has been borrowed
Clean Code is not available
Clean Code has been returned
Alice: 1 book(s)
Bob: 0 book(s)

لاحظ كيف استعارت Alice كتابين بنجاح، ولكن عندما حاول Bob استعارة Clean Code (الذي تمتلكه Alice بالفعل)، فشلت العملية. بعد أن أعادت Alice كتاب Clean Code، انخفض عدد كتبها إلى 1. يوضح هذا كيف تعمل نماذجك معاً لفرض قواعد المكتبة!

جرّب بنفسك

using System;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // قراءة المدخلات
            string libraryName = Console.ReadLine();
            string bookInput = Console.ReadLine();
            string userInput = Console.ReadLine();

            // تحليل مدخلات الكتاب (التنسيق: title|author)
            string[] bookParts = bookInput.Split('|');
            string bookTitle = bookParts[0];
            string bookAuthor = bookParts[1];

            // تحليل مدخلات المستخدم (التنسيق: name|memberId)
            string[] userParts = userInput.Split('|');
            string userName = userParts[0];
            int memberId = Convert.ToInt32(userParts[1]);

            // إنشاء مثيل Library باستخدام اسم المكتبة
            Library library = new Library(libraryName);

            // إنشاء مثيل Book باستخدام العنوان والمؤلف
            Book book = new Book(bookTitle, bookAuthor);

            // إنشاء مثيل User باستخدام الاسم ومعرف العضو memberId
            User user = new User(userName, memberId);

            // طباعة معلومات المكتبة باستخدام GetInfo()
            Console.WriteLine(library.GetInfo());

            // طباعة معلومات الكتاب بالتنسيق: Book: {Title} by {Author} - Available: {IsAvailable}
            Console.WriteLine($"Book: {book.Title} by {book.Author} - Available: {book.IsAvailable}");

            // طباعة معلومات المستخدم بالتنسيق: User: {Name} (ID: {MemberId})
            Console.WriteLine($"User: {user.Name} (ID: {user.MemberId})");
        }
    }
}

جميع دروس Object Oriented Programming