Menu
Coddy logo textTech

לוגיקת השאלת ספרים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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);
                }
            }
        }
    }
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר C# אונליין