Menu
Coddy logo textTech

Repaso - Gestor de usuarios

Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 68 de 70.

challenge icon

Desafío

Fácil

¡Vamos a construir un sistema de gestión de usuarios, una aplicación práctica que encontrarías en muchos programas del mundo real! Crearás dos clases que trabajan juntas: una que representa a los usuarios individuales y otra que gestiona una colección de ellos de manera eficiente.

Organizarás tu código en tres archivos:

  • User.lua: Crea una clase User que represente a un único usuario en el sistema. Cada usuario tiene un id y un name. Incluye un método :getInfo() que devuelva una cadena con el formato "ID: {id}, Name: {name}".
  • UserManager.lua: Construye una clase administradora que maneje una colección de usuarios. Piensa en cómo almacenar usuarios para una búsqueda eficiente; usar el ID del usuario como clave de tabla hace que encontrar y eliminar usuarios sea mucho más sencillo que buscar en una lista. Tu administrador necesita:
    • :addUser(user) — añade un objeto User a la colección
    • :removeUser(id) — elimina un usuario por su ID
    • :findUser(id) — devuelve el User con el ID coincidente, o nil si no se encuentra
    • :listUsers() — imprime la información de todos los usuarios, uno por línea
  • main.lua: ¡Une todo! Crea un UserManager, añade algunos usuarios basados en las entradas que recibas, realiza operaciones y muestra los resultados.

Recibirás cinco entradas:

  1. ID del primer usuario (un número)
  2. Nombre del primer usuario
  3. ID del segundo usuario (un número)
  4. Nombre del segundo usuario
  5. ID de un usuario para buscar (un número)

En tu archivo principal:

  1. Crea un UserManager y añade ambos usuarios
  2. Llama a :listUsers() para imprimir todos los usuarios
  3. Elimina al primer usuario (usando el primer ID)
  4. Imprime "After removal:"
  5. Llama a :listUsers() de nuevo
  6. Busca al usuario con el quinto ID de entrada; si se encuentra, imprime su información; si no se encuentra, imprime "User not found"

Por ejemplo, si las entradas son 101, Alice, 102, Bob, y 102, la salida debería ser:

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

Si las entradas son 201, Charlie, 202, Diana, y 201, la salida debería ser:

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

¡Observa en el segundo ejemplo que, después de eliminar al usuario 201 (Charlie), buscar ese ID devuelve "User not found" ya que ya no está en el sistema!

Pruébalo tú mismo

-- main.lua: Unir todo

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

-- Leer 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: Crear una instancia de UserManager

-- TODO: Crear dos objetos User con los datos de entrada

-- TODO: Agregar ambos usuarios al manager

-- TODO: Llamar a listUsers() para imprimir todos los usuarios

-- TODO: Eliminar al primer usuario (usando id1)

-- TODO: Imprimir "After removal:"

-- TODO: Llamar a listUsers() nuevamente

-- TODO: Buscar al usuario con searchId
-- Si se encuentra, imprimir su información; si no se encuentra, imprimir "User not found"

Todas las lecciones de Object Oriented Programming