Menu
Coddy logo textTech

חזרה – מנהל משתמשים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Lua של Coddy. שיעור 68 מתוך 70.

challenge icon

אתגר

קל

בואו נבנה מערכת לניהול משתמשים: יישום מעשי שתמצאו בתוכניות רבות בעולם האמיתי! תיצרו שתי מחלקות שעובדות יחד: האחת מייצגת משתמשים בודדים, והאחרת מנהלת אוסף שלהם ביעילות.

תארגנו את הקוד בשלושה קבצים:

  • User.lua: צרו מחלקת User שמייצגת משתמש יחיד במערכת. לכל משתמש יש id ו-name. כללו מתודה :getInfo() שמחזירה מחרוזת בתבנית "ID: {id}, Name: {name}".
  • UserManager.lua: בנו מחלקת מנהל שמטפלת באוסף של משתמשים. חשבו איך לאחסן משתמשים כדי לאפשר חיפוש יעיל: שימוש במזהה של המשתמש כמפתח בטבלה מקל מאוד על מציאת משתמשים והסרתם, בהשוואה לחיפוש ברשימה. המנהל שלכם צריך לכלול:
    • :addUser(user): מוסיפה אובייקט User לאוסף
    • :removeUser(id): מסירה משתמש לפי המזהה שלו
    • :findUser(id): מחזירה את המשתמש עם המזהה התואם, או nil אם הוא לא נמצא
    • :listUsers(): מדפיסה את הפרטים של כל המשתמשים, אחד בכל שורה
  • main.lua: חברו הכול יחד! צרו UserManager, הוסיפו משתמשים על סמך הקלטים שתקבלו, בצעו פעולות והציגו את התוצאות.

תקבלו חמישה קלטים:

  1. המזהה של המשתמש הראשון (מספר)
  2. השם של המשתמש הראשון
  3. המזהה של המשתמש השני (מספר)
  4. השם של המשתמש השני
  5. המזהה של המשתמש שאחריו יש לחפש (מספר)

בקובץ הראשי שלכם:

  1. צרו UserManager והוסיפו את שני המשתמשים
  2. קראו ל-:listUsers() כדי להדפיס את כל המשתמשים
  3. הסירו את המשתמש הראשון (באמצעות המזהה הראשון)
  4. הדפיסו "After removal:"
  5. קראו שוב ל-:listUsers()
  6. חפשו את המשתמש עם המזהה שבקלט החמישי; אם הוא נמצא, הדפיסו את פרטיו; אם הוא לא נמצא, הדפיסו "User not found"

לדוגמה, אם הקלטים הם 101, Alice, 102, Bob ו-102, הפלט אמור להיות:

ID: 101, Name: Alice
ID: 102, Name: Bob
After removal:
ID: 102, Name: Bob
ID: 102, Name: Bob

אם הקלטים הם 201, Charlie, 202, Diana ו-201, הפלט אמור להיות:

ID: 201, Name: Charlie
ID: 202, Name: Diana
After removal:
ID: 202, Name: Diana
User not found

שימו לב שבדוגמה השנייה, לאחר הסרת המשתמש 201 (Charlie), חיפוש לפי המזהה הזה מחזיר "User not found", כי המשתמש כבר לא נמצא במערכת!

נסו בעצמכם

-- main.lua: לחבר את הכול יחד

local User = require('User')
local UserManager = require('UserManager')

-- לקרוא את הקלטים
local id1 = tonumber(io.read())
local name1 = io.read()
local id2 = tonumber(io.read())
local name2 = io.read()
local searchId = tonumber(io.read())

-- TODO: ליצור מופע של UserManager

-- TODO: ליצור שני אובייקטים מסוג User עם נתוני הקלט

-- TODO: להוסיף את שני המשתמשים למנהל

-- TODO: לקרוא ל־listUsers() כדי להדפיס את כל המשתמשים

-- TODO: להסיר את המשתמש הראשון (באמצעות id1)

-- TODO: להדפיס "After removal:"

-- TODO: לקרוא שוב ל־listUsers()

-- TODO: לחפש את המשתמש עם searchId
-- אם המשתמש נמצא, להדפיס את הפרטים שלו; אם לא, להדפיס "User not found"

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

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