Menu
Coddy logo textTech

Повторение: Менеджер пользователей

Часть раздела Object Oriented Programming путешествия по Lua на Coddy — урок 68 из 70.

challenge icon

Задание

Легко

Давайте создадим систему управления пользователями — практическое приложение, которое можно встретить во многих реальных программах! Вы создадите два класса, которые работают вместе: один представляет отдельных пользователей, а другой эффективно управляет их коллекцией.

Вы распределите свой код по трем файлам:

  • User.lua: Создайте класс User, который представляет одного пользователя в системе. У каждого пользователя есть id и name. Включите метод :getInfo(), который возвращает строку в формате "ID: {id}, Name: {name}".
  • UserManager.lua: Создайте класс менеджера, который управляет коллекцией пользователей. Подумайте о том, как хранить пользователей для эффективного поиска — использование ID пользователя в качестве ключа таблицы делает поиск и удаление пользователей намного проще, чем поиск по списку. Вашему менеджеру необходимы:
    • :addUser(user) — добавляет объект User в коллекцию
    • :removeUser(id) — удаляет пользователя по его ID
    • :findUser(id) — возвращает объект User с соответствующим ID или nil, если он не найден
    • :listUsers() — выводит информацию обо всех пользователях, по одной строке на каждого
  • main.lua: Объедините все вместе! Создайте UserManager, добавьте нескольких пользователей на основе полученных входных данных, выполните операции и выведите результаты.

Вы получите пять входных значений:

  1. ID первого пользователя (число)
  2. Имя первого пользователя
  3. ID второго пользователя (число)
  4. Имя второго пользователя
  5. ID пользователя для поиска (число)

В вашем основном файле:

  1. Создайте UserManager и добавьте обоих пользователей
  2. Вызовите :listUsers(), чтобы вывести всех пользователей
  3. Удалите первого пользователя (используя первый ID)
  4. Выведите "After removal:"
  5. Снова вызовите :listUsers()
  6. Выполните поиск пользователя по пятому входному ID — если он найден, выведите его информацию; если не найден, выведите "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) поиск по этому ID возвращает "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"

Все уроки раздела Object Oriented Programming