Создать класс Company с несколькими методами
Всем привет! В общем, нужно разработать класс Company в котором должны быть:
- Закрытое поле employees (персонал) – массив типа Employee.
- Конструктор, который получает массив сотрудников типа Employee произвольной длины
- Метод GiveEverybodyBonus с денежным параметром companyBonus, задающим размер базовой премии для каждого сотрудника.
- Метод TotalToPay, который возвращает общую сумму заработной платы всех сотрудников, включая начисленные бонусы.
- Метод NameMaxSalary, возвращающий фамилию сотрудника, получившего максимальную заработную плату с учетом премии.
Я не понимаю как написать NameMaxSalary метод. Так же я не уверен в правильности написаных мной методов. Вот мой класс Company:
public class Company
{
private readonly Employee[] employees;
public Company(int length, params Employee[] employees)
{
employees = new Employee[length];
}
public void GiveEverybodyBonus(decimal companyBonus)
{
for(int i = 0; i < employees.Length; i++)
{
if(employees[i] != null)
this.employees[i].SetBonus(companyBonus);
}
}
public decimal TotalToPay()
{
for(int i = 0; i <= employees.Length; i++)
{
if (employees[i] != null)
return this.employees[i].ToPay();
}
return 0;
}
public Employee NameMaxSalary()
{
}
}
Методы ToPay и SetBonus были созданы ранее в иных классах.
public virtual void SetBonus(decimal bonus)
{
this.bonus = bonus;
}
public decimal ToPay()
{
return salary + bonus;
}
Вот класс Employee
public class Employee
{
// Define three private fields: 'name'(string), 'salary'(decimal), 'bonus'(decimal)
private readonly string name;
private decimal salary;
private decimal bonus;
// Define public property 'Name' for getting 'name'
public string Name
{
get
{
return name;
}
}
// Define public property 'Salary' for getting and setting 'salary'
public decimal Salary
{
get
{
return salary;
}
set
{
if (value > 0)
{
salary = value;
}
}
}
//Define constructor with two parameters: 'name'(string), 'salary'(decimal). Assign parameters to its fields
public Employee(string name, decimal salary)
{
this.name = name;
this.salary = salary;
}
//Define public virtual method 'SetBonus', that set value in 'bonus'
public virtual void SetBonus(decimal bonus)
{
this.bonus = bonus;
}
//Define public method 'ToPay', that returns sum of salary and bonus
public decimal ToPay()
{
return salary + bonus;
}
}
Ответы (1 шт):
Попробуй использовать метод MaxBy() в массиве. Этот метод возвратит тебе экземпляр класса Employee.
.Net >= 6:
Employee MaxSalary = employees.MaxBy(x => x.ToPay());
.Net <= 5:
Employee MaxSalary = Array.Find<Employee>(employees, x => x.ToPay() == employees.Max(x => x.ToPay()));
Также метод TotalToPay() реализован не совсем правильно, так как он вернёт зарплату только первого not null объекта в массиве. В будущем запомните что return возвращает значение и сразу выходит из метода, не дожидаясь окончания цикла. Вы можете использовать такой метод решения для TotalToPay():
public decimal TotalToPay() => employees.Sum(x => x.ToPay());