במסעדת 'הרמה' אפשר להזמין מקום עבור סועד אחד או יותר. בסוף הארוחה, כל אחד מן הסועדים משלם בנפרד על מה שאכל. כל סועד יכול לבחור לשלם במזומן, באמצעות אפליקציה, או בכרטיס אשראי. למשלמים בכרטיס אשראי יש אפשרות לפצל את החשבון לכמה תשלומים שווים. כדי לנהל מערכת תשלומים עבור המסעדה, נתוקן פרויקט ובו הממשק (Interface) IPayment, והמחלקות Restaurant, Reservation, Credit, App, Cash כמפורט להלן:
במסעדת 'הרמה' אפשר להזמין מקום עבור סועד אחד או יותר. בסוף הארוחה, כל אחד מן הסועדים משלם בנפרד על מה שאכל. כל סועד יכול לבחור לשלם במזומן, באמצעות אפליקציה, או בכרטיס אשראי. למשלמים בכרטיס אשראי יש אפשרות לפצל את החשבון לכמה תשלומים שווים. כדי לנהל מערכת תשלומים עבור המסעדה, נתוקן פרויקט ובו הממשק (Interface) IPayment, והמחלקות Restaurant, Reservation, Credit, App, Cash כמפורט להלן:
IPayment - תשלום. במשק קיימת הפעולה: double getPrice().
Cash - תשלום במזומן. תכונות המחלקה: sumCash - הסכום לתשלום במזומן, מטיפוס ממשי. name - שם הלקוח, מטיפוס מחרוזת.
App - תשלום באמצעות אפליקציה. תכונות המחלקה: sumApp - הסכום לתשלום באפליקציה, מטיפוס ממשי. phoneNumber - מספר טלפון, מטיפוס מחרוזת.
Credit - תשלום בכרטיס אשראי. תכונות המחלקה: num - מספר התשלומים, מטיפוס שלם. part - הסכום בכל תשלום, מטיפוס ממשי. creditNumber - מספר כרטיס האשראי, מטיפוס מחרוזת.
Reservation - הזמנה. תכונות המחלקה: date - תאריך ההזמנה, מטיפוס מחרוזת. total - החשבון של כל הסועדים יחד באותה הזמנה, מטיפוס ממשי. payments - מערך השומר את כל התשלומים ששילם כל אחד מן הסועדים באותה הזמנה יחד (המערך מטיפוס IPayment, ללא ערכי null).
Restaurant - המסעדה. תכונות המחלקה: array - מערך בגודל 10,000 מטיפוס Reservation. current - כמות ההזמנות השמורות, מטיפוס שלם.
הניחו שבכל מחלקה הוגדרו פעולות get ו-set לכל אחת מן התכונות במחלקה, וכי ההזמנות נשמרות ברצף במערך array בין מיקום 0 למיקום current-1 (ואין ערכי null ביניהן).
סרטטו תרשים היררכייה המתאר את הקשרים של המחלקות והממשק של הפרויקט. יש לסמן מימוש ממשק באמצעות החץ המתאים (קו מקווקו עם ראש חץ משולש חלול).
המסעדה עושה הנחות לסועדים בהתאם לצורת התשלום: סועד שמשלם במזומן מעל ל-200 שקלים זכאי ל-10% הנחה, סועד שמשלם באמצעות אפליקציה זכאי תמיד ל-5% הנחה, וסועד שמשלם בכרטיס אשראי משלם מחיר מלא. פעולת הממשק getPrice מחזירה את סך התשלום שכל סועד משלם לאחר הנחה (כאשר אין הנחה - מוחזר מחיר מלא). ממשו את פעולת הממשק getPrice בכל אחת מן המחלקות הנדרשות.
double getPrice() // ב-Cash, App, Credit
כתבו במחלקה Reservation פעולה ששמה cashTotal. הפעולה מחזירה את סכום הכסף במזומן שהתקבל בהזמנה (לאחר שקלול ההנחה).
public double cashTotal ()
לפניכם פעולה במחלקה Reservation: public void printDetails () { for (int i = 0; i < payments.length; i ++) { System.out.println (payments[i].getDetails()); } } הפעולה מדפיסה עבור כל סועד פרטים מסוימים על פי הקריטריונים שלהלן: אם שילם הסועד במזומן, הפעולה מדפיסה את השם שלו. אם שילם הסועד באמצעות אפליקציה, הפעולה מדפיסה את מספר הטלפון שלו. אם שילם הסועד בכרטיס אשראי, הפעולה מדפיסה את מספר כרטיס האשראי שלו. הוסיפו את הפעולות הנחוצות לפרויקט כדי שהפעולה תבצע את הנדרש. ציינו עבור כל פעולה שהוספתם לאיזו מחלקה היא שייכת. הערה: אין לשנות את הפעולה printDetails.
String getDetails() // ב-IPayment (הכרזה) וב-Cash, App, Credit (מימוש)
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.