using System.Collections.Generic; using System.Linq; using System.Text; namespace NoNamespace.Task020 { public class Student //Определить класс Student, который имеет { public Education Education { get; private set; } //· закрытое поле типа Education для информации о форме обучения; public List Exams { get; private set; } //· закрытое поле типа Exam[] для информации об экзаменах, которые сдал студент. public int GroupNumber { get; private set; } //· закрытое поле типа int для номера группы; public Person Person { get; private set; } //· закрытое поле типа Person, в котором хранятся данные студента; public bool this[Education ed] => this.Education == ed; //· индексатор булевского типа(только с методом get) с одним параметром типа Education; значение индексатора равно true, если значение поля с //формой обучения студента совпадает со значением индекса, и false в противном случае; public double AverageMark { //· свойство типа double (только с методом get), в котором вычисляется средний балл как среднее значение оценок в списке сданных экзаменов; get { return this.Exams.Any() ? this.Exams.Where(x => !string.IsNullOrWhiteSpace(x.Subject)).Average(x => x.Mark) : 0; } } public Student(Person person, Education education, int group_number) //· конструктор c параметрами типа Person, Education, int для инициализации соответствующих полей класса; { this.Person = person; this.Education = education; this.GroupNumber = group_number; this.Exams = new List(); } public Student() //· конструктор без параметров, инициализирующий поля класса значениями по умолчанию. { this.Person = new Person(); this.GroupNumber = 0; this.Exams = new List(); } //· метод void AddExams(params Exam[] ) для добавления элементов в список экзаменов; public void AddExams(params Exam[] exams) { this.Exams.AddRange(exams); } //· перегруженную(override) версию виртуального метода string ToString() для формирования строки со значениями всех свойств класса. public override string ToString() { var sb = new StringBuilder($"{this.Person.ToShortString()}:"); sb.AppendLine($"Дата рождения: {this.Person.Birthday}"); sb.AppendLine($"Группа: {this.GroupNumber}"); sb.AppendLine($"Образование: {this.Education}"); sb.AppendLine($"Средняя оценка: {this.AverageMark}"); sb.AppendLine($"Экзамены: "); foreach (var exam in this.Exams) sb.AppendLine($" {exam}"); return sb.ToString(); } //· виртуальный метод string ToShortString(), который формирует строку со значениями всех полей класса без списка экзаменов, но со значением среднего балла. public virtual string ToShortString() { var sb = new StringBuilder($"{this.Person.ToShortString()}:"); sb.AppendLine($"Дата рождения: {this.Person.Birthday}"); sb.AppendLine($"Группа: {this.GroupNumber}"); sb.AppendLine($"Образование: {this.Education}"); sb.AppendLine($"Средняя оценка: {this.AverageMark}"); return sb.ToString(); } } }