Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- //В новой версии класса Student определить
- //* итератор для последовательного перебора всех элементов(объектов типа object) из списков зачетов и экзаменов(объединение);
- //* итератор c параметром для перебора экзаменов(объектов типа Exam) с оценкой больше заданного значения.
- namespace ConsoleApp2
- {
- //реализовать интерфейс IDateAndCopy
- class Person : IDateAndCopy
- {
- private string name;
- private string lastName;
- private DateTime bdate;
- public Person(string name, string lastName, DateTime bdate)
- {
- this.name = name;
- this.lastName = lastName;
- this.bdate = bdate;
- }
- public Person()
- {
- name = "Gulshat";
- lastName = "Sabitova";
- bdate = new DateTime(1999, 3, 22);
- }
- public string Name
- {
- get { return name; }
- set { name = value; }
- }
- public string LastName
- {
- get { return lastName; }
- set { lastName = value; }
- }
- public DateTime Date
- {
- get { return bdate; }
- set { bdate = value; }
- }
- public int Year
- {
- get { return bdate.Year; }
- set { bdate = new DateTime(value, bdate.Month, bdate.Day); }
- }
- public override string ToString()
- {
- return "Имя: " + name + "\n" + "Фамилия: " + lastName + "\n" + "Дата рождения: " + bdate.ToShortDateString();
- }
- public virtual string ToShortString()
- {
- return "Имя: " + name + "\n" + "Фамилия: " + lastName;
- }
- //переопределить метод virtial bool Equals (object obj)
- public override bool Equals(Object obj)
- {
- Person person = (Person)obj;
- bool value = false;
- if (obj != null)
- if (name.Equals(person.name))
- if (lastName.Equals(person.lastName))
- if (bdate.Equals(person.bdate))
- value = true;
- return value;
- }
- //переопределить виртуальный метод int GetHashCode()
- public override int GetHashCode()
- {
- return name.Length + lastName.Length + bdate.Day + bdate.Month + bdate.Year;
- }
- // определить операции == и != так, чтобы равенство объектов типа Person трактовалось как совпадение всех данных объектов, а не ссылок на объекты Person
- public static bool operator ==(Person p1, Person p2)
- {
- bool result = false;
- if (p1.name.Equals(p2.name))
- if (p1.lastName.Equals(p2.lastName))
- if (p1.bdate.Equals(p2.bdate))
- result = true;
- return result;
- }
- public static bool operator !=(Person p1, Person p2)
- {
- bool result = true;
- if (p1.name.Equals(p2.name))
- if (p1.lastName.Equals(p2.lastName))
- if (p1.bdate.Equals(p2.bdate))
- result = false;
- return result;
- }
- //определить виртуальный метод object DeepCopy();
- public object DeepCopy()
- {
- Person person = new Person(name, lastName, bdate);
- return person;
- }
- }
- //Определить класс Test, который имеет два открытых автореализуемых свойства, доступных для чтения и записи
- class Test : IDateAndCopy
- {
- //свойство типа string, в котором хранится название предмет
- string name;
- //свойство типа bool для информации о том, сдан зачет или нет
- bool resultTest;
- DateTime date;
- //конструктор c параметрами типа string и bool для инициализации свойств класса
- public Test(string name, bool resultTest, DateTime date)
- {
- this.name = name;
- this.resultTest = resultTest;
- this.date = date;
- }
- //конструктор без параметров, инициализирующий все свойства класса некоторыми значениями по умолчанию
- public Test()
- {
- name = "Maths";
- resultTest = true;
- date = new DateTime(2019, 1, 1);
- }
- public DateTime Date
- {
- get { return date; }
- set { date = value; }
- }
- //перегруженную(override) версию виртуального метода string ToString() для формирования строки со значениями всех свойств класс
- public override string ToString()
- {
- return "Название зачета: " + name + "\n Результат " + resultTest.ToString() + "\n Дата " + date.ToShortDateString();
- }
- public object DeepCopy()
- {
- Test test = new Test(name, resultTest, date);
- return test;
- }
- }
- class Exam : IDateAndCopy
- {
- string name;
- int rating;
- DateTime dateExam;
- public Exam(string name, int rating, DateTime dateExam)
- {
- this.name = name;
- this.rating = rating;
- this.dateExam = dateExam;
- }
- public Exam()
- {
- name = "Maths";
- rating = 5;
- dateExam = new DateTime(2019, 1, 1);
- }
- public string Name
- {
- get { return name; }
- set { name = value; }
- }
- public int Rating
- {
- get { return rating; }
- set { rating = value; }
- }
- public DateTime Date
- {
- get { return dateExam; }
- set { dateExam = value; }
- }
- public override string ToString()
- {
- return "Название экзамена: " + name + "\n оценка: " + rating.ToString() + "\n Дата экзамена: " + dateExam.ToShortDateString();
- }
- public object DeepCopy()
- {
- Exam exam = new Exam(this.name, this.rating, this.dateExam);
- return exam;
- }
- public override bool Equals(Object obj)
- {
- Exam exam = (Exam)obj;
- bool result = false;
- if (name == exam.name)
- if (rating == exam.rating)
- if (dateExam == exam.dateExam)
- result = true;
- return result;
- }
- public static bool operator ==(Exam p1, Exam p2)
- {
- bool result = false;
- if (p1.name == p2.name)
- if (p1.rating == p2.rating)
- if (p1.dateExam == p2.dateExam)
- result = true;
- return result;
- }
- public static bool operator !=(Exam p1, Exam p2)
- {
- bool result = true;
- if (p1.name == p2.name)
- if (p1.rating == p2.rating)
- if (p1.dateExam == p2.dateExam)
- result = false;
- return result;
- }
- public override int GetHashCode()
- {
- return name.Length + rating + dateExam.Day + dateExam.Month + dateExam.Year;
- }
- }
- //Класс Student определить как производный от класса Person,реализовать интерфейс IDateAndCopy
- class Student : Person, IDateAndCopy
- {
- //закрытое поле типа Education для информации о форме обучени
- private Education education;
- //закрытое поле типа int для номера группы
- private int numberGroup;
- //закрытое поле типа System.Collections.ArrayList, в котором хранится список зачетов (объекты типа Test
- private ArrayList listTests;
- //закрытое поле типа System.Collections.ArrayList для списка экзаменов (объекты типа Exam).
- private Exam[] exams;
- //конструктор c параметрами типа Person, Education, int для инициализации соответствующих полей класса
- public Student(Person person, Education education, int numberGroup)
- {
- Person = person;
- this.education = education;
- this.numberGroup = numberGroup;
- exams = new Exam[0];
- listTests = new ArrayList();
- }
- //конструктор без параметров для инициализации по умолчанию;
- public Student()
- {
- Person = new Person();
- education = Education.Bachelor;
- numberGroup = 1;
- exams = new Exam[0];
- listTests = new ArrayList();
- }
- //свойство типа Person
- public Person Person
- {
- //метод get свойства возвращает объект типа Person, данные которого совпадают с данными подобъекта базового класса
- get { return (Person)this; }
- // метод set присваивает значения полям из подобъекта базового класса
- set
- {
- Name = value.Name;
- LastName = value.LastName;
- Date = value.Date;
- }
- }
- //свойство типа System.Collections.ArrayList с методами get и set для доступа к полю со списком экзаменов
- public ArrayList ListTests
- {
- get { return listTests; }
- set { listTests = value; }
- }
- //метод void AddExams ( params Exam[] ) для добавления элементов в список экзаменов
- public Exam[] Exams
- {
- get { return exams; }
- set { exams = value; }
- }
- //свойство типа double ( только с методом get), в котором вычисляется средний балл как среднее значение оценок в списке сданных экзаменов
- public double AverageRating
- {
- get
- {
- int sum = 0;
- for (int i = 0; i < exams.Length; i++)
- {
- sum += exams[i].Rating;
- }
- if (exams.Length != 0)
- return sum / exams.Length;
- else
- return 0;
- }
- }
- //определить свойство типа int с методами get и set для доступа к полю с номером группы. В методе set бросить исключение,
- //если присваиваемое значение меньше или равно 100 или больше 599.При создании объекта- исключения использовать один из определенных
- //в библиотеке CLR классов- исключений, инициализировать объект-исключение с помощью конструктора с параметром типа string,
- //в сообщении передать информацию о допустимых границах для значения свойства.
- public int NumberGroup
- {
- get { return numberGroup; }
- set
- {
- if (value <= 100 || value > 599)
- throw new Exception("Номер группы должен быть меньше 599 и не равен 100");
- }
- }
- public void AddExam(params Exam[] examAdd)
- {
- int Length = exams.Length;
- Array.Resize<Exam>(ref exams, Length + examAdd.Length);
- examAdd.CopyTo(exams, Length);
- }
- public void AddTest(params Test[] tests)
- {
- listTests.AddRange(tests);
- }
- //перегруженная версия виртуального метода string ToString() для формирования строки со значениями всех полей класса, включая список зачетов и экзаменов
- public override string ToString()
- {
- string result = base.ToString() + "\n Тип образования: " + education.ToString() + "\n Номер группы" + numberGroup.ToString() + "\n";
- //if(exams.Length != 0)
- foreach (Exam e in exams)
- {
- result += e.ToString() + "\n";
- }
- //if(listTests.Count !=0)
- foreach (Test t in listTests)
- {
- result += t.ToString() + "\n";
- }
- return result;
- }
- //виртуальный метод string ToShortString(), который формирует строку со значениями всех полей класса без списка зачетов и экзаменов, но со значением среднего балл
- new public string ToShortString()
- {
- string result = base.ToString() + "\n Тип образования: " + education.ToString() + "\n Номер группы: " + numberGroup.ToString() + "\n Средний балл: " + AverageRating.ToString();
- return result;
- }
- public override bool Equals(object obj)
- {
- Student student = (Student)obj;
- bool result = false;
- if (base.Equals(student))
- {
- if (exams.Length == student.exams.Length && listTests.Count == student.listTests.Count)
- {
- for (int i = 0; i < exams.Length; i++)
- {
- if (exams[i] != student.exams[i])
- return result;
- }
- for (int i = 0; i < listTests.Count; i++)
- {
- if (listTests[i] != student.listTests[i])
- return result;
- }
- if (education == student.education)
- if (numberGroup == student.numberGroup)
- result = true;
- }
- }
- return result;
- }
- public override int GetHashCode()
- {
- return ToString().Length;
- }
- //определить перегруженную версию виртуального метода object DeepCopy(
- new public object DeepCopy()
- {
- Student student = new Student((Person)this, education, numberGroup);
- for (int i = 0; i < exams.Length; i++)
- {
- student.exams[i] = (Exam)exams[i].DeepCopy();
- }
- for (int i = 0; i < listTests.Count; i++)
- {
- student.listTests[i] = (Test)listTests[i];
- }
- return student;
- }
- }
- enum Education
- {
- Specialist, Bachelor, SecondEducation
- }
- interface IDateAndCopy
- {
- object DeepCopy();
- DateTime Date { get; set; }
- }
- class Program
- {
- static void Main(string[] args)
- {
- String[] mass = { };
- Student student = new Student();
- //Создать два объекта типа Person с совпадающими данными и проверить, что ссылки на объекты не равны, а объекты равны, вывести значения хэш- кодов для объектов
- Console.WriteLine("1\n");
- Person a = new Person();
- Person b = new Person();
- Console.WriteLine(a.GetHashCode() + " " + b.GetHashCode() + "\n");
- //Создать объект типа Student, добавить элементы в список экзаменов и
- //зачетов, вывести данные объекта Student.
- Console.WriteLine("2\n");
- Student student2 = new Student();
- student.AddExam(new Exam("Phisics", 3, new DateTime(2019, 01, 15)));
- student.AddExam(new Exam("Biology", 4, new DateTime(2019, 01, 10)));
- student.AddExam(new Exam("Maths", 4, new DateTime(2019, 01, 10)));
- Array.Resize(ref mass, mass.Length + 1);
- mass[mass.Length - 1] = student2.ToString();
- //#######Console.WriteLine(student2.ToString() + "\n");
- //Вывести значение свойства типа Person для объекта типа Student.
- //#######Console.WriteLine("3\n");
- //#######Console.WriteLine(student2.Person.ToString() + "\n");
- Array.Resize(ref mass, mass.Length + 1);
- mass[mass.Length - 1] = student2.ToString();
- //С помощью метода DeepCopy() создать полную копию объекта Student.
- //Изменить данные в исходном объекте Student и вывести копию и исходный
- // объект, полная копия исходного объекта должна остаться без изменений.
- Console.WriteLine("4\n");
- Student student3 = (Student)student2.DeepCopy();
- student2.Name = "Leys";
- Array.Resize(ref mass, mass.Length + 1);
- mass[mass.Length - 1] = student3.ToString();
- //######Console.WriteLine(student2.ToString());
- //######Console.WriteLine(student3.ToString() + "\n");
- // В блоке try/catch присвоить свойству с номером группы некорректное
- // значение, в обработчике исключения вывести сообщение, переданное через объект - исключение
- Console.WriteLine("5\n");
- try
- {
- student.NumberGroup = 90;
- }
- catch (Exception e)
- {
- Console.WriteLine("\n" + e.Message);
- }
- Console.WriteLine();
- //С помощью оператора foreach вывести список всех зачетов и экзаменов.(С помощью оператора foreach для итератора, определенного в классе Student, вывести список всех зачетов и экзаменов)
- Console.WriteLine("6\n");
- foreach (Exam e in student.Exams)
- {
- Console.WriteLine(e.ToString());
- }
- foreach (Test t in student.ListTests)
- {
- Console.WriteLine(t.ToString());
- }
- //#####Console.WriteLine();
- //С помощью оператора foreach для итератора с параметром вывести список всех экзаменов с оценкой выше 3.(С помощью оператора foreach для итератора с параметром, определенного в классе Student, вывести список всех экзаменов с оценкой выше 3.)
- //#####Console.WriteLine("7\n");
- for (int i = 0; i < student.Exams.Length; i++)
- {
- if (student.Exams[i].Rating > 3)
- Console.WriteLine(student.Exams[i].ToString());
- }
- // ###########################
- // #цикл для перебора массива#
- // ###########################
- Console.WriteLine("Введите оценку...");
- int theGrade = Console.Read();
- for (int i = 0; i < student.Exams.Length; i++)
- {
- if (student.Exams[i].Rating > theGrade)
- {
- Console.WriteLine("Студент: " + student.Name+" "+student.LastName+ ", оценка" + student.Exams[i].ToString());
- }
- }
- foreach (String aMass in mass)
- {
- Console.WriteLine(aMass);
- }
- Console.ReadKey();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment