using System; using System.Collections.Generic; namespace ConsoleApp1 { class Auditor { public bool Qualification { get; private set; } // Свойство public bool OnABusinessTrip { get; set; } = false; // Свойство public Auditor(bool qualification) { Qualification = qualification; } // Конструктор } class Programmer { public bool Qualification { get; private set; } // Свойство public bool OnABusinessTrip { get; set; } = false; // Свойство public Programmer(bool qualification) { Qualification = qualification; } // Конструктор } class Firm { public delegate void LackofHighQualificationHandler(string message); public event LackofHighQualificationHandler Notify; // Определение события private List Programmers; private List Auditors; public Firm(List programmers, List auditors) // Конструктор { Programmers = programmers; Auditors = auditors; } // Функция отправки случайных работников в командировку public void SendRandomEmployeesOnABusinessTrip(int countofProgrammers, int countofAuditors) { int highQualificationProgrammersCount = 0; // Счетчик, в котором будет записываться кол-во отправленных // в командировку программистов с высокой квалификацией Random r = new Random(); while (countofProgrammers>0) { int index = r.Next(Programmers.Count); // Случайный номер программита в списке // Если случайно выбранный программист уже не в командировке if (!Programmers[index].OnABusinessTrip) Programmers[index].OnABusinessTrip = true; else continue; if (Programmers[index].Qualification) highQualificationProgrammersCount++; countofProgrammers--; } // Вызов события if (highQualificationProgrammersCount==0) Notify?.Invoke("В группе отправленных в командировку сотрудников " + "отсутствует программист высокой квалификации!"); // Аналогичная логика для аудиторов int highQualificationAuditorsCount = 0; while (countofAuditors > 0) { int index = r.Next(Auditors.Count); // Случайный номер программита в списке // Если случайно выбранный программист уже не в командировке if (!Auditors[index].OnABusinessTrip) Auditors[index].OnABusinessTrip = true; else continue; if (Auditors[index].Qualification) highQualificationAuditorsCount++; countofAuditors--; } if (highQualificationAuditorsCount == 0) Notify?.Invoke("В группе отправленных в командировку сотрудников " + "отсутствует аудитор высокой квалификации!"); } } class Program { static void Main(string[] args) { List Programmers = new List(); // Создаем список программистов // Создаем 3 программиста обычной и 2 высокой квалификации for (int i = 0; i < 3; i++) Programmers.Add(new Programmer(false)); for (int i = 0; i < 2; i++) Programmers.Add(new Programmer(true)); List Auditors = new List(); // Создаем список аудиторов // Создаем 5 аудиторов обычной и 3 высокой квалификации for (int i = 0; i < 5; i++) Auditors.Add(new Auditor(false)); for (int i = 0; i < 3; i++) Auditors.Add(new Auditor(true)); Firm firm = new Firm(Programmers, Auditors); // Создаем фирму, в которой будут работать программисты и аудиторы firm.Notify += LackofHighQualificationActions; // Добавляем обработчик для события Notify firm.SendRandomEmployeesOnABusinessTrip(2,3); // Отправляем группу из 2-х программистов и 3-х аудиторов в коммандировку } // Функция, в которой описывается логика того, что происходит в случае отсутствия // сотрудника высокой квалификации хотя бы одной из должностей private static void LackofHighQualificationActions(string message) { Console.WriteLine(message); } } }