המערכת "ארגונית" לניהול חשבונות משתמשים כוללת שתי מחלקות: Account ו-Users.
למחלקה Account תכונות הבאות:
- שם משתמש (username) – מסוג מחרוזת (String)
- סיסמה הנוכחית (currentPass) – מסוג מחרוזת (String)
- סיסמאות קודמות (passHistory) – מסוג מערך של 10 מחרוזות (String). המערך ישמור עד 10 סיסמאות קודמות של החשבון.
למחלקה Users שתי תכונות:
- חשבונות משתמשים (accounts) – מסוג מערך עצמים מסוג Account, בגודל מקסימלי 100.
- מספר משתמשים פעילים (numOfAccounts) – מסוג מספר שלם (int).
(א)כתבו בנאי (constructor) למחלקה Account שמקבל שם משתמש וסיסמה ראשונית כפרמטרים. הבנאי יאתחל את username, יאחסן את הסיסמה הראשונית ב-currentPass ובמקום הראשון במערך passHistory.
(ב)במערכת קיימת דרישת אבטחה לסיסמאות: הסיסמה תקינה אם היא עונה לפחות לשלושה מתוך חמישה תנאים:
- הסיסמה צריכה להיות באורך של שמונה תווים לפחות.
- הסיסמה צריכה להכיל שתי אותיות גדולות ('A'-'Z') לפחות.
- הסיסמה צריכה להכיל לפחות ספרה אחת ('0'-'9').
- הסיסמה צריכה להכיל לפחות תו מיוחד אחד (כל תו שאינו אות או ספרה).
- בסיסמה אין תווים זהים צמודים.
כתבו במחלקה Account את הפעולה isPasswordValid המקבלת מחרוזת ובודקת אם היא יכולה להיות סיסמה.
- הסיסמה צריכה להיות באורך של שמונה תווים לפחות.
- הסיסמה צריכה להכיל שתי אותיות גדולות ('A'-'Z') לפחות.
- הסיסמה צריכה להכיל לפחות ספרה אחת ('0'-'9').
- הסיסמה צריכה להכיל לפחות תו מיוחד אחד (כל תו שאינו אות או ספרה).
- בסיסמה אין תווים זהים צמודים.
כתבו במחלקה Account את הפעולה isPasswordValid המקבלת מחרוזת ובודקת אם היא יכולה להיות סיסמה.
(ג)כתבו במחלקה Account את הפעולה updatePassword המקבלת כפרמטר סיסמה חדשה. הסיסמה החדשה צריכה להיות תקינה. אם היא לא תקינה, הפעולה לא תבצע עדכון ותדפיס הודעה מתאימה. הסיסמה החדשה צריכה להיות גם שונה מהסיסמה הנוכחית ומסיסמאות הקודמות. אם היא זהה, הפעולה לא תבצע עדכון ותדפיס הודעה מתאימה.
אם הסיסמה החדשה תקינה ואינה זהה אף לא לאחת מהסיסמאות הקודמות, הפונקציה תעדכן את currentPass לסיסמה החדשה, ותוסיף את הסיסמה החדשה לתחילת מערך passHistory תוך כדי הזזת הסיסמאות הקיימות (אם המערך מלא, הסיסמה הישנה ביותר תידרס).
אם הסיסמה החדשה תקינה ואינה זהה אף לא לאחת מהסיסמאות הקודמות, הפונקציה תעדכן את currentPass לסיסמה החדשה, ותוסיף את הסיסמה החדשה לתחילת מערך passHistory תוך כדי הזזת הסיסמאות הקיימות (אם המערך מלא, הסיסמה הישנה ביותר תידרס).
(ד)כתבו במחלקה Users את הפעולה addUser המקבלת שם משתמש וסיסמה ראשונית כפרמטרים. תחילה הפעולה תבדוק אם כבר קיים חשבון עם שם המשתמש הזה. אם קיים או אם אין מקום, הפעולה לא תוסיף משתמש חדש ותדפיס הודעה מתאימה.
אם שם המשתמש לא קיים והמערך accounts אינו מלא, הפעולה תיצור אובייקט חדש מסוג Account, תוסיף אותו למערך accounts ותעדכן את ה-numOfAccounts.
אם שם המשתמש לא קיים והמערך accounts אינו מלא, הפעולה תיצור אובייקט חדש מסוג Account, תוסיף אותו למערך accounts ותעדכן את ה-numOfAccounts.
(ה)עקב ריבוי ניסיונות פריצה מצד גורמים זרים, הוחלט להקשיח את דרישות האבטחה לסיסמאות של המשתמשים. בהתאם לכך:
- הציעו לפחות שני שיפורים נוספים לחיזוק הסיסמאות, אשר יתווספו לתנאים לסיסמה תקינה.
- כתבו פונקציה המאפשרת לקבל את רשימת המשתמשים הנדרשים לחיזוק הסיסמה ולצד כל משתמש את רשימת התנאים בהם סיסמתו הישנה אינה עומדת. נא הדפיסו הודעה מתאימה!
- ממשו את השינויים הנדרשים בהתאם לשיפורים כפי שהצעתם במחלקה אחת או יותר.
יש לתעד היטב את הצעתכם.
- הציעו לפחות שני שיפורים נוספים לחיזוק הסיסמאות, אשר יתווספו לתנאים לסיסמה תקינה.
- כתבו פונקציה המאפשרת לקבל את רשימת המשתמשים הנדרשים לחיזוק הסיסמה ולצד כל משתמש את רשימת התנאים בהם סיסמתו הישנה אינה עומדת. נא הדפיסו הודעה מתאימה!
- ממשו את השינויים הנדרשים בהתאם לשיפורים כפי שהצעתם במחלקה אחת או יותר.
יש לתעד היטב את הצעתכם.
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה בטיחות
שאלו כאן — ותקבלו מענה מוסמך.
רוצים לתרגל אלפי שאלות נוספות?
המשיכו לתרגול מלא עם משוב אישי ←מבחני מה"ט אמיתיים · משוב מיידי · וידאו לכל נושא · מעקב התקדמות