החברה "Cake4Me" מספקת עוגות למסעדות ולאולמי האירועים. לצורך מחשוב ובקרת איכות הוגדרו שלוש מחלקות: Date, Cake, Refrigerator.
החברה "Cake4Me" מספקת עוגות למסעדות ולאולמי האירועים. לצורך מחשוב ובקרת איכות הוגדרו שלוש מחלקות: Date, Cake, Refrigerator.
המחלקה Date מייצגת תאריך לפי יום, חודש ושנה. המחלקה מכילה: פעולה בונה public Date(int day, int month, int year); הפעולה הבוליאנית equals המקבלת אובייקט אחר other מהמחלקה Date ומחזירה true אם התאריך שמייצג this והתאריך שמייצג other שווים בערכיהם, ו-false אם הם אינם שווים; הפעולה הבוליאנית before המקבלת אובייקט אחר other ומחזירה true אם התאריך שמייצג this קודם (בלוח השנה) לתאריך ש-other מייצג, ו-false אחרת. המחלקה Date כבר נתונה ואפשר להשתמש בפעולות שבה. אין צורך לממש אותן!
המחלקה Cake מייצגת עוגה. תכונות המחלקה חן [כך במקור, כנראה שגיאת דפוס תחת "תכונות המחלקה הן"]:
- שם העוגה – name, מטיפוס מחרוזת String.
- תאריך תפוגה – lastDate, מטיפוס תאריך Date.
- מחיר – price, מטיפוס מספר שלם int.
- האם חלבי? – hasMilk, מטיפוס boolean, true – חלבי, false – פרווה.
במחלקה Cake הוגדרו פעולות get ו-set ופעולה toString. אין צורך לממש אותן!
public class Date
{
public Date(int day, int month, int year) // פעולה בונה
public bool Equals(Date other) // הפעולה הבוליאנית Equals המקבלת אובייקט אחר other מהמחלקה Date ומחזירה true אם התאריך שמייצג האובייקט שעליו מופעלת השיטה (this) והתאריך שמייצג other שווים בערכיהם, ו-false אם הם אינם שווים.
public bool Before(Date other) // הפעולה הבוליאנית Before המקבלת אובייקט אחר other מהמחלקה Date ומחזירה true אם התאריך שמייצג האובייקט שעליו מופעלת השיטה (this) קודם (בלוח השנה) לתאריך ש-other מייצג אותו, ו-false אחרת אם הוא אינו קודם.
}
כתבו למחלקה Cake פעולה בונה (בנאי, constructor) שמקבל כפרמטרים: שם העוגה, שלושה מספרים שלמים המייצגים יום, חודש ושנה של תאריך התפוגה, מחיר וערך בוליאני (true/false) המציין אם העוגה חלבית או לא. אפשר להניח שכל הפרמטרים תקינים ואין צורך לבדוק זאת.
כתבו למחלקה Cake פעולה isFresh המקבלת כפרמטר תאריך d ומחזירה true אם בתאריך d העוגה עדיין טרייה (כלומר, התאריך d אינו מאוחר מתאריך התפוגה).
public bool IsFresh (Date d)
כתבו למחלקה Cake פעולה isReplaceable המקבלת כפרמטר עוגה other ובודקת אם ניתן להחליף אותה עם העוגה הנוכחית. אפשר להחליף שתי עוגות אם יש להן תאריך תפוגה זהה, סוג זהה (חלבי או פרווה) והפרש מחירים שאינו עולה על 10 שקלים. אם כן – הפעולה תחזיר true, ואם לא – הפעולה תחזיר false.
public bool IsReplaceable(Cake other)
המחלקה Refrigerator מייצגת מקרר ובו נמצאות עוגות. הייצוג נעשה באמצעות מערך ששומר את העוגות. התכונות במחלקה הן: מערך של העוגות – arr, מערך עצמים מטיפוס Cake; מספר העוגות שיש במקרר – numOfCakes, מסוג int. כמו כן קיים קבוע מספרי בשם MAX המציין את הגודל המקסימלי של המערך – 30. העוגות נמצאות במערך ברצף, ללא "חורים" מתחילת המערך. המערך צריך להישאר כך (ללא חורים) לאחר כל פעולה.
כתבו במחלקה פעולה בשם mostFresh המחזירה את העוגה שהיא הכי טרייה במקרר. אם יש כמה כאלו, תוחזר אחת מהן. אם המקרר ריק יוחזר null. נגדיר שעוגה א' טרייה יותר מעוגה ב' אם תאריך התפוגה של עוגה א' מאוחר יותר מתאריך התפוגה של עוגה ב'.
public Cake MostFresh()
כתבו במחלקה Refrigerator פעולה בשם removeNotFresh המקבלת כפרמטר תאריך d ומוחקת מהמקרר את כל העוגות שתאריך התפוגה שלהם הוא לפני התאריך d (כלומר, את כל המוצרים שהם מקולקלים בתאריך d, כי תאריך התפוגה שלהם כבר עבר). אם אין כאלו, או אם המערך ריק, הפעולה לא תעשה כלום. שימו לב שצריך למחוק ממש את המוצר מהמערך, ושלא יישארו חורים במערך. אין צורך לשמור על הסדר הפנימי בין העוגות. שימו לב, הפעולה צריכה לבצע את כל עדכוני הנתונים הנדרשים.
public void RemoveNotFresh(Date d)
כתבו במחלקה Refrigerator פעולה בשם purchaseOrder המקבלת כפרמטר מערך names של שמות העוגות שלקוח רוצה לקנות. הפעולה תבדוק אם אפשר לבצע את ההזמנה. אם כן – הפעולה תדפיס את פרטי העוגות שבהזמנה ותחזיר את הסכום הכולל של ההזמנה, אם לא – הפעולה תדפיס את השמות של העוגות החסרות ותחזיר 0. הערה: אפשר להניח שלקוח רוצה לקנות עוגות שונות (כל שם מופיע במערך names פעם אחת).
public int PurchaseOrder (string[] names)
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.