בספרייה העירונית יש מאגר מידע על הספרים שבה. בעבור כל ספר נשמר הדירוג שקיבל מכל אחד מהקוראים שקראו אותו: מספר שלם בין 0 ל-4 (0 המינימלי, כאשר 4 מציין את מידת ההנאה הגדולה ביותר). המידע על דירוג הספר נשמר במאגר כך שאפשר לדעת כמה קוראים דרגו את הספר בכל אחת מחמש הדרגות האפשריות (0 עד 4) — מערך מונים לפי דרגה, ולא רשימת הדירוגים הבודדים עצמם.
בספרייה העירונית יש מאגר מידע על הספרים שבה. בעבור כל ספר נשמר הדירוג שקיבל מכל אחד מהקוראים שקראו אותו: מספר שלם בין 0 ל-4 (0 המינימלי, כאשר 4 מציין את מידת ההנאה הגדולה ביותר). המידע על דירוג הספר נשמר במאגר כך שאפשר לדעת כמה קוראים דרגו את הספר בכל אחת מחמש הדרגות האפשריות (0 עד 4) — מערך מונים לפי דרגה, ולא רשימת הדירוגים הבודדים עצמם.
עבור מאגר המידע הוגדרו שתי מחלקות: המחלקה Book המייצגת ספר והמחלקה Library המייצגת ספרייה.
המחלקה Book מוגדרת באופן הבא:
public class Book
{
private int code; // קוד הספר
private String name; // שם הספר
private String genre; // סוג הספר (רומן, מתח, ילדים...)
private int numOfCopies; // מספר העותקים הזמינים של הספר עכשיו בספרייה (לא בהשאלה)
private int[] ratings; // מערך מונים של דרגות ההנאה של הקוראים מהספר
}
כאשר ratings הוא מערך בגודל 5: התא ratings[r] (עבור r בין 0 ל-4) שומר כמה קוראים העניקו לספר את הדרגה r.
המחלקה Library מוגדרת באופן הבא:
public class Library
{
private Book [] books; // כל ספר מופיע במערך פעם אחת.
}
אפשר להניח שמספר הספרים בספרייה הוא כגודל המערך, כלומר אין מקומות ריקים במערך ואין צורך לבדוק זאת.
כתבו במחלקה Book פעולה המקבלת דירוג חדש לספר rate (מספר שלם בין 0 ל-4) ומעדכנת את מערך המונים ratings בהתאם (מגדילה באחד את המונה של הדרגה rate).
public void updateRating(int rate)
כתבו פעולה במחלקה Book לחישוב הדירוג הממוצע של הספר, המחושב על-פי ממוצע משוקלל של דרגות ההנאה שהספר קיבל (על סמך מערך המונים ratings: לכל דרגה r מ-0 עד 4, ratings[r] קוראים העניקו אותה). אם אף קורא לא דרג את הספר, הפעולה תחזיר 0.
public double calcRating()
כתבו במחלקה Library פעולה להשאלת ספר. הפעולה תקבל קוד ספר ותבדוק אם אפשר להשאילו (אם יש עותק זמין, כלומר numOfCopies גדול מ-0). אם אפשר להשאיל, הפעולה תעדכן את הספר בהתאם (תקטין את numOfCopies באחד) ותחזיר ערך true. אם לא אפשר להשאיל (הספר לא נמצא, או שאין עותק זמין) הפעולה תחזיר ערך false.
public boolean isAvailable(int code)
כתבו במחלקה Library פעולה המקבלת סוג ספר תקין (רומן, ילדים, מתח וכו') ואת גובה הדירוג המינימלי. הפעולה תדפיס את שמות הספרים העונים לשני הקריטריונים האלה (מאותו סוג, ובעלי דירוג ממוצע גבוה או שווה לדירוג המינימלי שהתקבל).
public void printBooksByGenreAndRating(String genre, double minRating)
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.