Menu
Coddy logo textTech

מחלקות ספר ומשתמש

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

challenge icon

אתגר

קל

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

תארגנו את הקוד שלכם בשלושה קבצים:

  • Book.php: צרו מחלקה בשם Book שעוקבת אחר ספרי הספרייה. למחלקת הספר יהיה שלוש תכונות readonly שיוגדרו באמצעות קידום פרמטרים בבנאי: isbn, title ו־author. כללו תכונה פרטית $isAvailable שערכה ההתחלתי הוא true. הוסיפו שלוש מתודות:
    • isAvailable(): bool: מחזירה את מצב הזמינות
    • markAsBorrowed(): void: מגדירה את הזמינות ל־false
    • markAsReturned(): void: מגדירה את הזמינות ל־true
  • User.php: כללו את קובץ Book וצרו מחלקה בשם User שמייצגת חברים בספרייה. למשתמש יהיו שתי תכונות readonly באמצעות קידום פרמטרים בבנאי: id (מספר שלם) ו־name (מחרוזת). כללו מערך פרטי $borrowedBooks (ריק בתחילה) וקבוע בשם MAX_BOOKS שערכו 3. הוסיפו את המתודות הבאות:
    • getBorrowedBooks(): array: מחזירה את מערך הספרים שהושאלו
    • canBorrow(): bool: מחזירה true אם המשתמש שאל פחות ספרים מ־MAX_BOOKS
    • addBook(Book $book): void: מוסיפה ספר למערך הספרים שהושאלו
    • removeBook(string $isbn): void: מסירה ספר לפי ISBN באמצעות array_filter
  • main.php: כללו את קובץ User והפעילו את המחלקות שלכם. תקבלו ארבעה קלטים: מזהה משתמש, שם משתמש, ISBN של ספר וכותרת הספר (המחבר יהיה "Unknown").

    צרו User ו־Book עם הערכים שסופקו. הדפיסו אם המשתמש יכול לשאול ספר בתחילה, ואז אפשרו למשתמש לשאול את הספר (סמנו אותו כמושאל והוסיפו אותו לרשימת הספרים של המשתמש). לבסוף, הדפיסו את זמינות הספר ואת מספר הספרים שהושאלו.

    תבנית הפלט:

    Can borrow: [yes/no]
    Book available: [yes/no]
    Books borrowed: [count]

שימו לב כיצד כימוס מגן על המצב הפנימי: הזמינות של ספר משתנה רק באמצעות מתודות ייעודיות, והספרים שהושאלו על ידי משתמש מנוהלים באמצעות גישה מבוקרת. הבסיס הזה יתמוך במערכת ההשאלה שנבנה בהמשך.

נסו בעצמכם

<?php

require_once 'User.php';

// קרא את הקלטים
$userId = intval(trim(fgets(STDIN)));
$userName = trim(fgets(STDIN));
$bookIsbn = trim(fgets(STDIN));
$bookTitle = trim(fgets(STDIN));
$bookAuthor = "Unknown";

// TODO: צור אובייקט User עם ה-id והשם שסופקו

// TODO: צור אובייקט Book עם ה-isbn, הכותרת והמחבר שסופקו

// TODO: הדפס אם המשתמש יכול לשאול ספר בתחילה
// פורמט: "Can borrow: yes" או "Can borrow: no"

// TODO: גרום למשתמש לשאול את הספר:
// - סמן את הספר כמושאל
// - הוסף את הספר לרשימת הספרים שהמשתמש שאל

// TODO: הדפס אם הספר זמין
// פורמט: "Book available: yes" או "Book available: no"

// TODO: הדפס את מספר הספרים שהושאלו
// פורמט: "Books borrowed: [count]"

?>

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

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