Menu
CoddyTech

回顾:用户管理器

本课属于 Coddy Lua 学习旅程的“面向对象编程”单元。第 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):返回 ID 匹配的 User;如果没有找到,则返回 nil
    • :listUsers():打印所有用户的信息,每行一个
  • main.lua:把所有内容整合起来!创建一个 UserManager,根据收到的输入添加一些用户,执行操作并显示结果。

你会收到 5 个输入:

  1. 第一个用户的 ID(一个数字)
  2. 第一个用户的姓名
  3. 第二个用户的 ID(一个数字)
  4. 第二个用户的姓名
  5. 要查找的用户 ID(一个数字)

在主文件中:

  1. 创建一个 UserManager,并添加两个用户
  2. 调用 :listUsers() 打印所有用户
  3. 删除第一个用户(使用第一个 ID)
  4. 打印 "After removal:"
  5. 再次调用 :listUsers()
  6. 查找 ID 与第 5 个输入相同的用户。如果找到,就打印该用户的信息;如果没有找到,就打印 "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:查找 ID 为 searchId 的用户
-- 如果找到,就打印该用户的信息;如果没找到,就打印 "User not found"

面向对象编程中的所有课

自己练习: Lua 在线编译器