Menu
CoddyTech

Ôn tập: Vai trò của nhân viên

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 42 trên 70.

challenge icon

Thử thách

Dễ

Hãy xây dựng một hệ thống thưởng lương minh họa cách các loại nhân viên khác nhau có thể dùng chung một giao diện nhưng tính tiền thưởng theo cách khác nhau!

Bạn sẽ tạo một hệ thống phân cấp nhân viên nhỏ gồm bốn tệp:

  • Employee.lua: Lớp cơ sở đại diện cho một nhân viên thông thường. Hàm khởi tạo :new(name, salary) cần lưu tên và mức lương của nhân viên. Thêm phương thức :calculateBonus() trả về 10% mức lương (mức thưởng mặc định cho nhân viên thông thường), cùng phương thức :getName() để lấy tên.
  • Manager.lua: Lớp con kế thừa từ Employee. Quản lý làm việc chăm chỉ và được thưởng: ghi đè :calculateBonus() để trả về 20% mức lương thay vì mức mặc định 10%.
  • Intern.lua: Một lớp con khác kế thừa từ Employee. Thực tập sinh nhận mức thưởng cố định là 50, bất kể mức lương: ghi đè :calculateBonus() để luôn trả về số tiền này.
  • main.lua: Kết hợp mọi thứ! Đọc ba đầu vào là tên nhân viên và ba đầu vào là mức lương của họ. Tạo một Manager, một Intern và một Employee thông thường. Lưu cả ba vào một bảng, sau đó lặp qua bảng và in tên của từng người, theo sau là tiền thưởng đã tính.

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

  1. Tên Manager
  2. Mức lương của Manager
  3. Tên Intern
  4. Mức lương của Intern
  5. Tên nhân viên thông thường
  6. Mức lương của nhân viên thông thường

Với mỗi nhân viên trong danh sách (theo thứ tự: Manager, Intern, Employee), hãy in tên và tiền thưởng của họ theo định dạng sau:

{name}: {bonus}

Ví dụ, nếu đầu vào là Alice, 5000, Bob, 2000, Carol và 3000, đầu ra sẽ là:

Alice: 1000
Bob: 50
Carol: 300

Hãy chú ý cách cùng một lời gọi :calculateBonus() tạo ra kết quả khác nhau tùy theo loại nhân viên: đó chính là tính đa hình! Manager nhận 20% của 5000, Intern nhận khoản cố định 50, còn Employee thông thường nhận 10% của 3000.

Tự làm thử

-- main.lua: Kết hợp tất cả lại

local Employee = require('Employee')
local Manager = require('Manager')
local Intern = require('Intern')

-- Đọc dữ liệu đầu vào
local managerName = io.read()
local managerSalary = tonumber(io.read())
local internName = io.read()
local internSalary = tonumber(io.read())
local employeeName = io.read()
local employeeSalary = tonumber(io.read())

-- TODO: Tạo một Manager, một Intern và một Employee thông thường

-- TODO: Lưu cả ba vào một bảng (theo thứ tự: Manager, Intern, Employee)

-- TODO: Duyệt qua bảng bằng vòng lặp và in ra tên cùng tiền thưởng của từng người
-- Định dạng: {name}: {bonus}

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