Menu
Coddy logo textTech

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

Часть раздела Объектно-ориентированное программирование путешествия по 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: Print "After removal:"

-- TODO: Вызвать listUsers() снова

-- TODO: Найти пользователя с searchId
-- If found, print their info; if not found, print "User not found"

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор Lua