Menu
Coddy logo textTech

Итоги — Иерархия сотрудников

Часть раздела Объектно-ориентированное программирование путешествия по C# на Coddy — урок 24 из 70.

challenge icon

Задание

Легко

Давайте создадим систему иерархии сотрудников, которая объединит все концепции наследования из этой главы. Вы создадите структуру компании, в которой различные типы сотрудников имеют общие атрибуты, но рассчитывают свои бонусы по-разному.

Вы организуете свой код в четырех файлах:

  • Employee.cs: Определите базовый класс Employee в пространстве имен Company. У каждого сотрудника есть Name (string) и Salary (decimal). Создайте конструктор, который принимает оба значения. Добавьте virtual метод с именем CalculateBonus(), который по умолчанию возвращает 10% от зарплаты. Переопределите ToString(), чтобы он возвращал "{Name} - ${Salary}".
  • Manager.cs: Определите класс Manager в пространстве имен Company, который наследуется от Employee. У менеджеров есть дополнительное свойство TeamSize (int). Конструктор должен принимать имя, зарплату и размер команды, используя base для инициализации родительского класса. Переопределите CalculateBonus(), чтобы он возвращал 15% от зарплаты плюс $50 за каждого члена команды. Переопределите ToString(), чтобы он возвращал "{Name} - ${Salary} (Manager, Team: {TeamSize})".
  • Developer.cs: Определите класс Developer в пространстве имен Company, который наследуется от Employee. У разработчиков есть свойство ProgrammingLanguage (string). Конструктор принимает имя, зарплату и язык программирования. Переопределите CalculateBonus(), чтобы он возвращал 12% от зарплаты. Переопределите ToString(), чтобы он возвращал "{Name} - ${Salary} (Developer, {ProgrammingLanguage})".
  • Program.cs: В основном файле создайте по одному экземпляру каждого типа сотрудников, используя входные данные. Сохраните все три объекта в массиве ссылок Employee, чтобы продемонстрировать полиморфизм. Пройдите циклом по массиву и выведите результат ToString() каждого сотрудника, а затем их бонус.

Вы получите восемь входных данных:

  • Имя базового сотрудника
  • Зарплата базового сотрудника
  • Имя менеджера
  • Зарплата менеджера
  • Размер команды менеджера
  • Имя разработчика
  • Зарплата разработчика
  • Язык программирования разработчика

Выведите информацию о каждом сотруднике и его бонус в следующем формате:

{ToString result}
Bonus: ${CalculateBonus result}

Например, если входные данные: John, 50000, Sarah, 80000, 5, Mike, 70000 и C#, вывод должен быть следующим:

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

Обратите внимание, как каждый тип сотрудника рассчитывает бонусы по-разному, но при этом вы можете обрабатывать их все через один массив Employee. В этом и заключается сила сочетания наследования с полиморфизмом!

Попробуйте сами

using System;
using Company;

class Program
{
    public static void Main(string[] args)
    {
        // Считать входные данные базового сотрудника
        string empName = Console.ReadLine();
        decimal empSalary = Convert.ToDecimal(Console.ReadLine());
        
        // Считать входные данные менеджера
        string mgrName = Console.ReadLine();
        decimal mgrSalary = Convert.ToDecimal(Console.ReadLine());
        int teamSize = Convert.ToInt32(Console.ReadLine());
        
        // Считать входные данные разработчика
        string devName = Console.ReadLine();
        decimal devSalary = Convert.ToDecimal(Console.ReadLine());
        string progLang = Console.ReadLine();
        
        // TODO: Создать одного Employee, одного Manager и одного Developer
        
        // TODO: Сохранить всех троих в массив Employee для демонстрации полиморфизма
        
        // TODO: Пройти циклом по массиву и вывести ToString() и бонус каждого сотрудника
        // Формат:
        // {результат ToString}
        // Bonus: ${результат CalculateBonus}
    }
}

Все уроки раздела Объектно-ориентированное программирование