Menu
CoddyTech

Ôn tập: hệ phân cấp nhân viên

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

challenge icon

Thử thách

Dễ

Hãy xây dựng một hệ thống phân cấp nhân viên, kết hợp tất cả các khái niệm về kế thừa trong chương này. Bạn sẽ tạo cấu trúc công ty, trong đó các loại nhân viên khác nhau có chung thuộc tính nhưng tính tiền thưởng theo cách khác nhau.

Bạn sẽ chia code thành bốn tệp:

  • Employee.cs: Định nghĩa lớp cơ sở Employee trong không gian tên Company. Mỗi nhân viên có Name (chuỗi) và Salary (decimal). Tạo hàm khởi tạo nhận cả hai giá trị. Thêm phương thức virtual có tên CalculateBonus(), theo mặc định trả về 10% lương. Ghi đè ToString() để trả về "{Name} - ${Salary}".
  • Manager.cs: Định nghĩa lớp Manager trong không gian tên Company, kế thừa từ Employee. Quản lý có thêm thuộc tính TeamSize (int). Hàm khởi tạo nhận tên, lương và số lượng thành viên trong nhóm, dùng base để khởi tạo lớp cha. Ghi đè CalculateBonus() để trả về 15% lương cộng thêm $50 cho mỗi thành viên trong nhóm. Ghi đè ToString() để trả về "{Name} - ${Salary} (Manager, Team: {TeamSize})".
  • Developer.cs: Định nghĩa lớp Developer trong không gian tên Company, kế thừa từ Employee. Nhà phát triển có thuộc tính ProgrammingLanguage (string). Hàm khởi tạo nhận tên, lương và ngôn ngữ lập trình. Ghi đè CalculateBonus() để trả về 12% lương. Ghi đè ToString() để trả về "{Name} - ${Salary} (Developer, {ProgrammingLanguage})".
  • Program.cs: Trong tệp chính, tạo một nhân viên thuộc mỗi loại bằng các giá trị đầu vào. Lưu cả ba vào một mảng các tham chiếu Employee để thể hiện tính đa hình. Duyệt qua mảng và in ra kết quả ToString() của từng nhân viên, rồi đến tiền thưởng của họ.

Bạn sẽ nhận tám giá trị đầu vào:

  • Tên nhân viên cơ sở
  • Lương nhân viên cơ sở
  • Tên quản lý
  • Lương quản lý
  • Số lượng thành viên trong nhóm của quản lý
  • Tên nhà phát triển
  • Lương nhà phát triển
  • Ngôn ngữ lập trình của nhà phát triển

In thông tin và tiền thưởng của từng nhân viên theo định dạng sau:

{ToString result}
Bonus: ${CalculateBonus result}

Ví dụ, nếu các giá trị đầu vào là John, 50000, Sarah, 80000, 5, Mike, 70000 và C#, kết quả đầu ra sẽ là:

John - $50000
Bonus: $5000
Sarah - $80000 (Manager, Team: 5)
Bonus: $12250
Mike - $70000 (Developer, C#)
Bonus: $8400

Hãy chú ý cách mỗi loại nhân viên tính tiền thưởng khác nhau, nhưng bạn vẫn có thể xử lý tất cả thông qua một mảng Employee. Đó là sức mạnh của việc kết hợp kế thừa với tính đa hình!

Tự làm thử

using System;
using Company;

class Program
{
    public static void Main(string[] args)
    {
        // Đọc đầu vào (input) của nhân viên cơ bản
        string empName = Console.ReadLine();
        decimal empSalary = Convert.ToDecimal(Console.ReadLine());
        
        // Đọc đầu vào của người quản lý
        string mgrName = Console.ReadLine();
        decimal mgrSalary = Convert.ToDecimal(Console.ReadLine());
        int teamSize = Convert.ToInt32(Console.ReadLine());
        
        // Đọc đầu vào của lập trình viên
        string devName = Console.ReadLine();
        decimal devSalary = Convert.ToDecimal(Console.ReadLine());
        string progLang = Console.ReadLine();
        
        // TODO: Tạo một Employee, một Manager và một Developer
        
        // TODO: Lưu cả ba vào một mảng (array) Employee để minh họa tính đa hình
        
        // TODO: Duyệt mảng và in ra ToString() cùng tiền thưởng của từng nhân viên
        // Định dạng:
        // {kết quả ToString}
        // Tiền thưởng: ${kết quả CalculateBonus}
    }
}

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 C# online