Menu
Coddy logo textTech

Revisão - Gerenciador de Usuários

Parte da seção Object Oriented Programming do Journey de Lua da Coddy — lição 68 de 70.

challenge icon

Desafio

Fácil

Vamos construir um sistema de gerenciamento de usuários—uma aplicação prática que você encontraria em muitos programas do mundo real! Você criará duas classes que trabalham juntas: uma representando usuários individuais e outra que gerencia uma coleção deles de forma eficiente.

Você organizará seu código em três arquivos:

  • User.lua: Crie uma classe User que representa um único usuário no sistema. Cada usuário possui um id e um name. Inclua um método :getInfo() que retorna uma string no formato "ID: {id}, Name: {name}".
  • UserManager.lua: Construa uma classe gerenciadora que lida com uma coleção de usuários. Pense em como armazenar usuários para uma busca eficiente—usar o ID do usuário como uma chave de tabela torna a localização e a remoção de usuários muito mais simples do que pesquisar em uma lista. Seu gerenciador precisa de:
    • :addUser(user) — adiciona um objeto User à coleção
    • :removeUser(id) — remove um usuário pelo seu ID
    • :findUser(id) — retorna o User com o ID correspondente, ou nil se não for encontrado
    • :listUsers() — imprime as informações de todos os usuários, uma por linha
  • main.lua: Reúna tudo! Crie um UserManager, adicione alguns usuários com base nas entradas que você receber, realize operações e exiba os resultados.

Você receberá cinco entradas:

  1. ID do primeiro usuário (um número)
  2. Nome do primeiro usuário
  3. ID do segundo usuário (um número)
  4. Nome do segundo usuário
  5. ID de um usuário para pesquisar (um número)

No seu arquivo principal:

  1. Crie um UserManager e adicione ambos os usuários
  2. Chame :listUsers() para imprimir todos os usuários
  3. Remova o primeiro usuário (usando o primeiro ID)
  4. Imprima "After removal:"
  5. Chame :listUsers() novamente
  6. Pesquise pelo usuário com o ID da quinta entrada—se encontrado, imprima suas informações; se não for encontrado, imprima "User not found"

Por exemplo, se as entradas forem 101, Alice, 102, Bob e 102, a saída deve ser:

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

Se as entradas forem 201, Charlie, 202, Diana e 201, a saída deve ser:

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

Observe no segundo exemplo que, após remover o usuário 201 (Charlie), a busca por esse ID retorna "User not found", pois ele não está mais no sistema!

Experimente você mesmo

-- main.lua: Reúne tudo

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

-- Ler entradas
local id1 = tonumber(io.read())
local name1 = io.read()
local id2 = tonumber(io.read())
local name2 = io.read()
local searchId = tonumber(io.read())

-- TODO: Criar uma instância de UserManager

-- TODO: Criar dois objetos User com os dados de entrada

-- TODO: Adicionar ambos os usuários ao gerenciador

-- TODO: Chamar listUsers() para imprimir todos os usuários

-- TODO: Remover o primeiro usuário (usando id1)

-- TODO: Imprimir "After removal:"

-- TODO: Chamar listUsers() novamente

-- TODO: Procurar pelo usuário com searchId
-- Se encontrado, imprimir suas informações; se não encontrado, imprimir "User not found"

Todas as lições de Object Oriented Programming