Menu
Coddy logo textTech

ממשק מנהל

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

challenge icon

אתגר

קל

נרחיב את מערכת ניהול הספרייה שלנו באמצעות הוספת יכולות ניהול. תיצור מחלקת Admin שיורשת מ־User, אך יש לה הרשאות מיוחדות לניהול מלאי הספרייה: הוספת ספרים חדשים והסרת ספרים קיימים.

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

  • 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 שלך עם הפונקציונליות הקיימת, כולל addBook(), findBook(), borrowBook(), returnBook() ומתודות החיפוש. הוסף מתודה חדשה:
    • removeBook(string $isbn): void: מסירה ספר מהאוסף באמצעות unset()
  • Admin.php: כלול את קובץ Library. צור מחלקת Admin שיורשת מ־User. מנהלים יורשים את כל היכולות של המשתמשים, אך מקבלים שתי מתודות ניהוליות:
    • addBookToLibrary(Library $library, Book $book): string: מוסיפה את הספר לספרייה ומחזירה "Added: [title]"
    • removeBookFromLibrary(Library $library, string $isbn): string: מנסה להסיר ספר באמצעות הבדיקות הבאות:
      • אם הספר לא קיים, החזר "Book not found"
      • אם הספר מושאל כרגע, החזר "Cannot remove: book is currently borrowed"
      • אחרת, הסר אותו והחזר "Removed: [title]"
  • main.php: כלול את קובץ Admin. תקבל שתי קלטים: ISBN ושם ספר.

    צור Library ו־Admin עם מזהה 1 ושם "AdminUser". צור גם משתמש User רגיל עם מזהה 2 ושם "RegularUser".

    צור Book עם ה־ISBN והכותרת שסופקו, ועם המחבר "Test Author". בצע את הפעולות הבאות והדפס את התוצאה של כל אחת בשורה חדשה:

    1. בקש מהמנהל להוסיף את הספר לספרייה
    2. בקש מהמשתמש הרגיל לשאול את הספר
    3. בקש מהמנהל לנסות להסיר את הספר (הפעולה אמורה להיכשל: הספר מושאל)
    4. בקש מהמשתמש הרגיל להחזיר את הספר
    5. בקש מהמנהל להסיר את הספר (הפעולה אמורה להצליח כעת)
    6. בקש מהמנהל לנסות להסיר שוב את אותו הספר (הפעולה אמורה להיכשל: הספר לא נמצא)

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

נסו בעצמכם

<?php
require_once 'Admin.php';

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

// TODO: צרו Library

// TODO: צרו Admin עם ID 1 והשם "AdminUser"

// TODO: צרו User רגיל עם ID 2 והשם "RegularUser"

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

// TODO: בצעו את הפעולות הבאות והדפיסו כל תוצאה בשורה חדשה:
// 1. בקשו מהאדמין להוסיף את הספר לספרייה
// 2. בקשו מהמשתמש הרגיל לשאול את הספר
// 3. בקשו מהאדמין לנסות להסיר את הספר (הפעולה אמורה להיכשל - הספר מושאל)
// 4. בקשו מהמשתמש הרגיל להחזיר את הספר
// 5. בקשו מהאדמין להסיר את הספר (הפעולה אמורה להצליח כעת)
// 6. בקשו מהאדמין לנסות להסיר שוב את אותו הספר (הפעולה אמורה להיכשל - הספר לא נמצא)

?>

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

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