Menu
Coddy logo textTech

מערכת השאלת ספרים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 84 מתוך 91.

challenge icon

אתגר

קל

בואו נפיח חיים במערכת ניהול הספרייה שלנו באמצעות יצירת המחלקה Library, שמתזמרת את כל פעולות השאלת הספרים. המתאם המרכזי הזה ינהל את אוסף הספרים ויאכוף את הכללים שמאפשרים לספרייה שלנו לפעול בצורה חלקה.

תארגן את הקוד שלך בארבעה קבצים:

  • Book.php: מחלקת Book שלך מהשיעור הקודם, עם מאפיינים לקריאה בלבד (isbn, title, author), מאפיין פרטי $isAvailable שמתחיל בערך true, והמתודות: isAvailable(), markAsBorrowed() ו-markAsReturned().
  • User.php: כלול את קובץ Book. מחלקת User שלך עם מאפיינים לקריאה בלבד (id, name), מערך פרטי $borrowedBooks, קבוע MAX_BOOKS שערכו 3, והמתודות: getBorrowedBooks(), canBorrow(), addBook(Book $book) ו-removeBook(string $isbn).
  • Library.php: כלול את קובץ User. צור מחלקת Library שמנהלת את אוסף הספרים. בספרייה שלך צריכים להיות:
    • מערך פרטי $books לאחסון ספרים לפי ISBN
    • addBook(Book $book): void: מוסיפה ספר לאוסף
    • findBook(string $isbn): ?Book: מחזירה את הספר או null אם לא נמצא
    • borrowBook(User $user, string $isbn): string: מאמתת ומבצעת השאלה, ומחזירה הודעות מתאימות
    • returnBook(User $user, string $isbn): string: מבצעת החזרה ומעדכנת את מצב הספר והמשתמש

    המתודה borrowBook צריכה לבדוק שלושה תנאים לפי הסדר ולהחזיר את ההודעות המדויקות הבאות:

    • "Book not found": אם הספר לא קיים
    • "Book is not available": אם הספר כבר הושאל
    • "Borrowing limit reached": אם למשתמש יש 3 ספרים
    • "Successfully borrowed: [title]": במקרה של הצלחה

    המתודה returnBook צריכה להחזיר "Book not found" אם הספר לא קיים, או "Successfully returned: [title]" במקרה של הצלחה.

  • main.php: כלול את קובץ Library. תקבל שתי קלטים: ISBN וכותרת של ספר.

    צור Library, משתמש User עם מזהה 1 ושם "Alice", וספר Book עם ה-ISBN, הכותרת והמחבר "Unknown" שסופקו. הוסף את הספר לספרייה, ואז בצע את הפעולות האלה והדפס את התוצאה של כל אחת בשורה חדשה:

    1. השאל את הספר
    2. נסה להשאיל שוב את אותו הספר
    3. החזר את הספר
    4. השאל את הספר פעם נוספת

האתגר הזה מדגים כיצד המחלקה Library מרכזת את הלוגיקה העסקית. היא מאמתת תנאים, מתאמת שינויים במצב בין אובייקטים של Book ו-User, ומחזירה משוב משמעותי עבור כל פעולה.

נסו בעצמכם

<?php
require_once 'Library.php';

// קראו את הקלט
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: צרו מופע של Library

// TODO: צרו User עם ID 1 והשם "Alice"

// TODO: צרו Book עם ה-ISBN שסופק, הכותרת והמחבר "Unknown"

// TODO: הוסיפו את הספר לספרייה

// TODO: בצעו את הפעולות הבאות והדפיסו כל תוצאה בשורה חדשה:
// 1. השאילו את הספר
// 2. נסו לשאול שוב את אותו הספר
// 3. החזירו את הספר
// 4. השאילו את הספר פעם נוספת

?>

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

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