Menu
CoddyTech

Ôn tập: trình quản lý người dùng

Thuộc phần Lập trình hướng đối tượng trong hành trình Lua của Coddy. Bài học 68 trên 70.

challenge icon

Thử thách

Dễ

Hãy xây dựng một hệ thống quản lý người dùng, một ứng dụng thực tế thường có trong nhiều chương trình! Bạn sẽ tạo hai lớp (class) phối hợp với nhau: một lớp đại diện cho từng người dùng, lớp còn lại quản lý một nhóm người dùng.

Bạn sẽ sắp xếp code trong ba tệp:

  • User.lua: Tạo lớp User đại diện cho một người dùng trong hệ thống. Mỗi người dùng có id và name. Thêm phương thức :getInfo() để trả về một chuỗi theo định dạng "ID: {id}, Name: {name}".
  • UserManager.lua: Xây dựng một lớp quản lý nhóm người dùng. Hãy nghĩ cách lưu trữ người dùng để tìm kiếm hiệu quả: dùng ID của người dùng làm khóa trong bảng sẽ giúp việc tìm và xóa người dùng đơn giản hơn nhiều so với tìm trong danh sách. Lớp quản lý của bạn cần có:
    • :addUser(user): thêm một đối tượng User vào nhóm
    • :removeUser(id): xóa người dùng theo ID
    • :findUser(id): trả về User có ID khớp, hoặc nil nếu không tìm thấy
    • :listUsers(): in thông tin của tất cả người dùng, mỗi người dùng trên một dòng
  • main.lua: Kết hợp mọi thứ! Tạo một UserManager, thêm một số người dùng dựa trên đầu vào bạn nhận được, thực hiện các thao tác và hiển thị kết quả.

Bạn sẽ nhận năm đầu vào:

  1. ID của người dùng thứ nhất (một số)
  2. Tên người dùng thứ nhất
  3. ID của người dùng thứ hai (một số)
  4. Tên người dùng thứ hai
  5. ID của người dùng cần tìm (một số)

Trong tệp chính:

  1. Tạo một UserManager và thêm cả hai người dùng
  2. Gọi :listUsers() để in tất cả người dùng
  3. Xóa người dùng thứ nhất (dùng ID thứ nhất)
  4. In "After removal:"
  5. Gọi lại :listUsers()
  6. Tìm người dùng có ID là đầu vào thứ năm. Nếu tìm thấy, hãy in thông tin của họ; nếu không tìm thấy, hãy in "User not found"

Ví dụ, nếu đầu vào là 101, Alice, 102, Bob và 102, đầu ra sẽ là:

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

Nếu đầu vào là 201, Charlie, 202, Diana và 201, đầu ra sẽ là:

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

Trong ví dụ thứ hai, sau khi xóa người dùng 201 (Charlie), việc tìm ID đó sẽ trả về "User not found" vì người dùng đó không còn trong hệ thống!

Tự làm thử

-- main.lua: Kết hợp mọi thứ

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

-- Đọc dữ liệu đầu vào
local id1 = tonumber(io.read())
local name1 = io.read()
local id2 = tonumber(io.read())
local name2 = io.read()
local searchId = tonumber(io.read())

-- TODO: Tạo một instance của UserManager

-- TODO: Tạo hai đối tượng User từ dữ liệu đầu vào

-- TODO: Thêm cả hai người dùng vào trình quản lý

-- TODO: Gọi listUsers() để in ra tất cả người dùng

-- TODO: Xóa người dùng đầu tiên (dùng id1)

-- TODO: In ra "After removal:"

-- TODO: Gọi lại listUsers()

-- TODO: Tìm người dùng có searchId
-- Nếu tìm thấy, in ra thông tin của người dùng đó; nếu không, in ra "User not found"

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Lua online