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

منطق نظام الاستعارة

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

challenge icon

التحدي

سهل

لنقم بإحياء نظام المكتبة الخاص بك من خلال تنفيذ منطق الاستعارة الأساسي! ستقوم بإنشاء نظام مركزي ينسق بين الكتب والمستخدمين، ويفرض قواعد المكتبة مثل حدود الاستعارة ويضمن عدم استعارة الكتب إلا عندما تكون متاحة.

ستستمر في البناء على هيكل الملفات الأربعة الحالي لديك:

  • Book.cs: احتفظ بفئة Book مع خصائص Id و Title و Author و IsAvailable، بالإضافة إلى طريقتي Borrow() و Return() من الدرس السابق.
  • User.cs: احتفظ بفئة User مع Name و MemberId و BorrowedCount، والطرق الخاصة بإدارة الكتب المستعارة. أضف ثابتاً MaxBooks مضبوطاً على 3 يمثل الحد الأقصى لعدد الكتب التي يمكن للمستخدم استعارتها في وقت واحد. أضف طريقة CanBorrow() التي تعيد true فقط إذا كان المستخدم قد استعار أقل من MaxBooks.
  • Library.cs: هذا هو المكان الذي يجتمع فيه منطق نظام الاستعارة الخاص بك. يجب أن تحتوي فئة Library على مجموعات من الكتب والمستخدمين، بالإضافة إلى طرق لإضافتهم. قم بتنفيذ طريقتين رئيسيتين:
    • BorrowBook(string bookId, int memberId) - ينسق عملية الاستعارة. يجب أن يتحقق مما إذا كان الكتاب موجوداً، وما إذا كان المستخدم موجوداً، وما إذا كان الكتاب متاحاً، وما إذا كان بإمكان المستخدم استعارة المزيد من الكتب. قم بإرجاع الرسائل المناسبة لكل حالة فشل أو نجاح.
    • ReturnBook(string bookId, int memberId) - يتعامل مع عمليات الإرجاع من خلال التحقق من أن المستخدم يمتلك الكتاب بالفعل قبل معالجة عملية الإرجاع.
  • Program.cs: معالجة عمليات المكتبة وعرض النتائج.

يجب أن تعيد طريقة BorrowBook هذه الرسائل بناءً على الموقف:

  • Book not found - عندما لا يكون معرف الكتاب موجوداً
  • User not found - عندما لا يكون معرف العضو موجوداً
  • {Title} is not available - عندما يكون الكتاب مستعاراً بالفعل
  • {Name} has reached the borrowing limit - عندما يكون لدى المستخدم بالفعل 3 كتب
  • {Name} borrowed {Title} - عند نجاح الاستعارة

يجب أن تعيد طريقة ReturnBook ما يلي:

  • Book not found أو User not found - للمعرفات غير الصالحة
  • {Name} did not borrow {Title} - عندما يحاول المستخدم إرجاع كتاب ليس لديه
  • {Name} returned {Title} - عند نجاح الإرجاع

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

  • اسم المكتبة
  • عدد الكتب، ثم كل كتاب بتنسيق id|title|author
  • عدد المستخدمين، ثم كل مستخدم بتنسيق name|memberId
  • عدد العمليات، ثم كل عملية بتنسيق action|bookId|memberId

اطبع نتيجة كل عملية في سطر مستقل.

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

Central Library
4
B001|The Hobbit|Tolkien
B002|1984|Orwell
B003|Dune|Herbert
B004|Foundation|Asimov
2
Alice|101
Bob|102
6
borrow|B001|101
borrow|B002|101
borrow|B003|101
borrow|B004|101
borrow|B001|102
return|B002|101

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

Alice borrowed The Hobbit
Alice borrowed 1984
Alice borrowed Dune
Alice has reached the borrowing limit
The Hobbit is not available
Alice returned 1984

لاحظ كيف تعمل فئة Library كمنسق - فهي تتحقق من جميع الشروط قبل السماح بالعمليات، مما يحافظ على تركيز فئتي Book و User على مسؤولياتهما الخاصة. هذا الفصل يجعل الكود الخاص بك أسهل في الصيانة والاختبار!

جرّب بنفسك

using System;
using System.Collections.Generic;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // قراءة اسم المكتبة
            string libraryName = Console.ReadLine();
            
            // إنشاء مثيل من Library باستخدام اسم المكتبة
            Library library = new Library(libraryName);
            
            // قراءة عدد الكتب
            int numBooks = Convert.ToInt32(Console.ReadLine());
            
            // قراءة وإضافة الكتب
            for (int i = 0; i < numBooks; i++)
            {
                string bookInput = Console.ReadLine();
                string[] bookParts = bookInput.Split('|');
                string bookId = bookParts[0];
                string bookTitle = bookParts[1];
                string bookAuthor = bookParts[2];
                
                Book book = new Book(bookId, bookTitle, bookAuthor);
                library.AddBook(book);
            }
            
            // قراءة عدد المستخدمين
            int numUsers = Convert.ToInt32(Console.ReadLine());
            
            // قراءة وتسجيل المستخدمين
            for (int i = 0; i < numUsers; i++)
            {
                string userInput = Console.ReadLine();
                string[] userParts = userInput.Split('|');
                string userName = userParts[0];
                int memberId = Convert.ToInt32(userParts[1]);
                
                User user = new User(userName, memberId);
                library.RegisterUser(user);
            }
            
            // قراءة عدد العمليات
            int numOperations = Convert.ToInt32(Console.ReadLine());
            
            // معالجة العمليات
            for (int i = 0; i < numOperations; i++)
            {
                string operationInput = Console.ReadLine();
                string[] opParts = operationInput.Split('|');
                string action = opParts[0];
                string bookId = opParts[1];
                int memberId = Convert.ToInt32(opParts[2]);
                
                if (action == "borrow")
                {
                    string result = library.BorrowBook(bookId, memberId);
                    Console.WriteLine(result);
                }
                else if (action == "return")
                {
                    string result = library.ReturnBook(bookId, memberId);
                    Console.WriteLine(result);
                }
            }
        }
    }
}

جميع دروس Object Oriented Programming