回顾:用户管理器
本课属于 Coddy Lua 学习旅程的“面向对象编程”单元。第 68 课,共 70 课。
挑战
简单我们来构建一个用户管理系统:这是许多实际程序中都会用到的实用应用!你将创建两个协同工作的类:一个表示单个用户,另一个负责高效管理用户集合。
你将把代码分成三个文件:
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 个输入:
- 第一个用户的 ID(一个数字)
- 第一个用户的姓名
- 第二个用户的 ID(一个数字)
- 第二个用户的姓名
- 要查找的用户 ID(一个数字)
在主文件中:
- 创建一个 UserManager,并添加两个用户
- 调用
:listUsers()打印所有用户 - 删除第一个用户(使用第一个 ID)
- 打印
"After removal:" - 再次调用
:listUsers() - 查找 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 在线编译器