Пример #1
0
        /// <summary>
        /// Load by serialize
        /// </summary>
        /// <param name="filename">filename (without filename extension) for loading</param>
        /// <returns>true if succes else false</returns>
        public bool Load(string filename)
        {
            try
            {
                BinaryFormatter formatter = new BinaryFormatter();
                using (FileStream fs = new FileStream(filename + ".dat", FileMode.OpenOrCreate))
                {
                    ResearchTeam rt = (ResearchTeam)formatter.Deserialize(fs);
                    this.theme          = rt.theme;
                    this.name           = rt.name;
                    this.registerNumber = rt.registerNumber;
                    this.timeFrame      = rt.timeFrame;
                    foreach (Paper paper in rt.papers)
                    {
                        this.papers.Add(paper);
                    }
                    foreach (Person person in rt.persons)
                    {
                        this.persons.Add(person);
                    }
                }

                return(true);
            }
            catch (Exception)
            {
                return(false);
            }
        }
Пример #2
0
        /// <summary>
        /// Copy by value
        /// </summary>
        /// <returns>object with common fields as this</returns>
        public override object DeepCopy()
        {
            ResearchTeam researchTeam = new ResearchTeam(theme, new Team(name, registerNumber), timeFrame);

            foreach (Paper value in this.papers)
            {
                researchTeam.AddPapers(value);
            }
            foreach (Person value in this.persons)
            {
                researchTeam.AddPersons(value);
            }
            return(researchTeam);
        }
Пример #3
0
 /// <summary>
 /// object with common fields as this
 /// </summary>
 /// <param name="serialize">if true copy with serialize also with DeepCopy()</param>
 /// <returns>object with common fields as this</returns>
 public ResearchTeam DeepCopy(bool serialize)
 {
     if (serialize)
     {
         BinaryFormatter formatter = new BinaryFormatter();
         MemoryStream    ms        = new MemoryStream
         {
             Position = 0
         };
         formatter.Serialize(ms, this);
         ms.Position = 0;
         ResearchTeam rt = (ResearchTeam)formatter.Deserialize(ms);
         ms.Close();
         return(rt);
     }
     else
     {
         return((ResearchTeam)DeepCopy());
     }
 }
Пример #4
0
 /// <summary>
 /// Load by serialize
 /// </summary>
 /// <param name="filename">filename (without filename extension) for loading</param>
 /// <param name="obj">loading object</param>
 /// <returns>true if succes else false</returns>
 static public bool Load(string filename, ResearchTeam obj)
 {
     return(obj.Load(filename));
 }
Пример #5
0
 /// <summary>
 /// Save by serialize
 /// </summary>
 /// <param name="filename">filename (without filename extension) for saving</param>
 /// <param name="obj">saving object</param>
 /// <returns>true if succes else false</returns>
 static public bool Save(string filename, ResearchTeam obj)
 {
     return(obj.Save(filename));
 }
Пример #6
0
        /// <summary>
        /// done tasks from lab 1
        /// </summary>
        public static void Run()
        {
            //task 1
            //Создать один объект типа ResearchTeam, преобразовать данные в
            //текстовый вид с помощью метода ToShortString() и вывести данные
            ResearchTeam researchTeam = new ResearchTeam("C#", new Team("PIN-24", 100000), TimeFrame.Long);

            Console.WriteLine(researchTeam.ToShortString());


            //task 2
            //Вывести значения индексатора для значений индекса TimeFrame.Year,
            //TimeFrame.TwoYears, TimeFrame.Long
            Console.WriteLine("Year::     " + researchTeam[TimeFrame.Year]);
            Console.WriteLine("TwoYears:: " + researchTeam[TimeFrame.TwoYears]);
            Console.WriteLine("Long::     " + researchTeam[TimeFrame.Long]);

            //task 3
            //Присвоить значения всем определенным в типе ResearchTeam свойствам,
            //преобразовать данные в текстовый вид с помощью метода ToString() и
            //вывести данные.
            researchTeam.Theme          = ".NET";
            researchTeam.Name           = "MP-25A";
            researchTeam.RegisterNumber = 999999;
            researchTeam.TimeFrame      = TimeFrame.TwoYears;
            Console.WriteLine(researchTeam.ToString());

            //task 4
            //С помощью метода AddPapers (params Paper []) добавить элементы в
            //список публикаций и вывести данные объекта ResearchTeam.
            researchTeam.AddPapers(new Paper(), new Paper("lab1", new Person(), new DateTime(2020, 7, 13)), new Paper());
            Console.WriteLine(researchTeam.ToString());

            //task 5
            //Вывести значение свойства, которое возвращает ссылку на публикацию с
            //самой поздней датой выхода;
            Console.WriteLine(researchTeam.LastPaper);

            //task 6
            //Сравнить время выполнения операций с элементами одномерного,
            //двумерного прямоугольного и двумерного ступенчатого массивов с
            //одинаковым числом элементов типа Paper.
            int row = 0, column = 0;

            while (true)
            {
                Console.WriteLine("Введите число столбцов и строк одной строкой без пробелов разделив их символом  '&', '^', ',', '_' или ' '");
                string[] size = Console.ReadLine().Split(new char[] { '&', '^', ',', '_', ' ' });

                if (Int32.TryParse(size[0], out row) && Int32.TryParse(size[1], out column))
                {
                    break;
                }
                else
                {
                    Console.WriteLine("\nError: cant convert to int32\n");
                }
            }
            Console.Write("Строк:: "); Console.WriteLine(row);
            Console.Write("Столбцов:: "); Console.WriteLine(column);

            int size1d = row * column;
            int numberStepD = row * column;
            int i, j;

            Paper[] arr1 = new Paper[size1d];
            for (i = 0; i < size1d; i++)
            {
                arr1[i] = new Paper();
            }

            Paper[,] arr2 = new Paper[row, column];
            for (i = 0; i < row; i++)
            {
                for (j = 0; j < column; j++)
                {
                    arr2[i, j] = new Paper();
                }
            }

            int h = Convert.ToInt32(Math.Round(Math.Sqrt(numberStepD / 2) * 2));

            //looks as:
            //*
            //**
            //***
            //etc
            Paper[][] arr3 = new Paper[h][];
            int       k    = 0;

            for (i = 0; i < h; i++)
            {
                arr3[i] = new Paper[i + 1];
                for (j = 0; j <= i; j++)
                {
                    arr3[i][j] = new Paper();
                    k++;
                    if (k == numberStepD)
                    {
                        break;
                    }
                }
                if (k == numberStepD)
                {
                    break;
                }
            }

            Stopwatch sw = new Stopwatch();

            sw.Start();
            for (i = 0; i < size1d; i++)
            {
                arr1[i].Title = "Publication ";
            }
            sw.Stop();
            Console.Write("Время выполнения для одномерного массива (в миллисекундах):: "); Console.WriteLine(sw.ElapsedMilliseconds);

            //двухмерный массив
            sw.Restart();
            for (i = 0; i < row; i++)
            {
                for (j = 0; j < column; j++)
                {
                    arr2[i, j].Title = "Publication ";
                }
            }
            sw.Stop();
            Console.Write("Время выполнения для двухмерного массива (в миллисекундах):: "); Console.WriteLine(sw.ElapsedMilliseconds);

            //ступенчатый массив
            sw.Restart();
            for (i = 0; i < h; i++)
            {
                for (j = 0; j <= arr3[i].Length; j++)
                {
                    arr3[i][j].Title = "Publication ";
                }
            }
            sw.Stop();
            Console.Write("Время выполнения для ступечатого массива (в миллисекундах):: "); Console.WriteLine(sw.ElapsedMilliseconds);

            Console.ReadKey();
        }
Пример #7
0
        public static void Run()
        {
            //task 1
            //Создать объект типа T с непустым списком элементов, для которого
            //предусмотрен ввод данных с консоли.Создать полную копию объекта с
            //помощью метода, использующего сериализацию, и вывести исходный
            //объект и его копию.
            ResearchTeam researchTeam1 = new ResearchTeam("R1", new Team("team1", 220020), TimeFrame.Long);
            Person       person1       = new Person("N1", "S1", new DateTime(2000, 1, 1));
            Person       person2       = new Person("N2", "S2", new DateTime(2000, 2, 1));
            Person       person3       = new Person("N1", "S2", new DateTime(2000, 1, 1));

            researchTeam1.AddPersons(person1, person2, person3);
            researchTeam1.AddPapers(new Paper("T1", person1, new DateTime(2020, 7, 20)), new Paper("T2", person3, new DateTime(2019, 7, 20)));

            ResearchTeam researchTeam2 = researchTeam1.DeepCopy(true);

            Console.WriteLine(researchTeam1);
            Console.WriteLine(researchTeam2);

            //task 2
            //Предложить пользователю ввести имя файла:
            // если файла с введенным именем нет, приложение должно
            //сообщить об этом и создать файл;
            // если файл существует, вызвать метод Load(string filename) для
            //инициализации объекта T данными из файла.
            ResearchTeam researchTeam3 = new ResearchTeam();

            Console.WriteLine("Write file name");
            string filename = Console.ReadLine();

            if (File.Exists(filename + ".dat"))
            {
                bool isLoadSucces = researchTeam3.Load(filename);
                if (!isLoadSucces)
                {
                    Console.WriteLine("load from clear file");
                }
            }
            else
            {
                Console.WriteLine("File didn\'t found but create now");
                File.Create(filename + ".dat");
            }

            //task 3
            //Вывести объект T.
            Console.WriteLine(researchTeam3);

            //task 4
            //Для этого же объекта T сначала вызвать метод AddFromConsole(), затем
            //метод Save(string filename). Вывести объект T.
            researchTeam3.AddFromConsole();
            researchTeam3.Save(filename + ".dat");
            Console.WriteLine(researchTeam3);

            //task 5
            //Вызвать последовательно
            // статический метод Load(string filename, T obj), передав как
            //параметры ссылку на тот же самый объект T и введенное ранее имя
            //файла;
            // метод AddFromConsole();
            // статический метод Save(string filename, T obj).
            ResearchTeam.Load(filename + ".dat", researchTeam3);
            researchTeam3.AddFromConsole();
            ResearchTeam.Save(filename + ".dat", researchTeam3);

            //task 6
            //Вывести объект T.
            Console.WriteLine(researchTeam3);
        }
Пример #8
0
 //task 1
 //Создать две коллекции ResearchTeamCollection<string>.
 static string keySelector(ResearchTeam rt) => rt.GetHashCode().ToString();
        /// <summary>
        /// add new ResearchTeam() in dictionary
        /// </summary>
        public void AddDefault()
        {
            ResearchTeam rt = new ResearchTeam();

            researchTeamCollection.Add(keySelector(rt), rt);
        }
Пример #10
0
        public static void Run()
        {
            //task 1
            // Создать объект ResearchTeam и вызвать методы, выполняющие
            //сортировку списка публикаций List<Paper> по разным критериям, после
            //каждой сортировки вывести данные объекта. Выполнить сортировку
            // по дате выхода публикации;
            // по названию публикации;
            // по фамилии автора.
            ResearchTeam researchTeam1 = new ResearchTeam("R1", new Team("team1", 220020), TimeFrame.Long);
            Person       person1       = new Person("N1", "S1", new DateTime(2000, 1, 1));
            Person       person2       = new Person("N2", "S2", new DateTime(2000, 2, 1));
            Person       person3       = new Person("N1", "S2", new DateTime(2000, 1, 1));

            researchTeam1.AddPersons(person1, person2, person3);
            researchTeam1.AddPapers(new Paper("T1", person1, new DateTime(2020, 7, 20)), new Paper("T2", person3, new DateTime(2019, 7, 20)));

            researchTeam1.SortByDate();
            Console.WriteLine(researchTeam1.ToString());
            researchTeam1.SortByName();
            Console.WriteLine(researchTeam1.ToString());
            researchTeam1.SortByAuthorSnm();
            Console.WriteLine(researchTeam1.ToString());

            //task 2
            //Создать объект ResearchTeamCollection<string>. Добавить в коллекцию
            //несколько разных элементов ResearchTeam и вывести объект
            //ResearchTeamCollection<string>
            KeySelector <string>            keySelector            = (rt) => rt.GetHashCode().ToString();
            ResearchTeamCollection <string> researchTeamCollection = new ResearchTeamCollection <string>(keySelector);
            ResearchTeam researchTeam2 = new ResearchTeam("R2", new Team("team2", 220021), TimeFrame.Long);

            researchTeam2.AddPersons(person1, person3); researchTeam2.AddPapers(new Paper("T3", person3, new DateTime(2018, 7, 20)));
            researchTeamCollection.AddDefault();
            researchTeamCollection.AddResearchTeams(researchTeam1, researchTeam2);
            Console.WriteLine(researchTeamCollection.ToString());

            //task 3
            // Вызвать методы класса ResearchTeamCollection<string>, выполняющие
            //операции с коллекцией - словарем Dictionary<TKey, ResearchTeam>, после
            //каждой операции вывести результат операции. Выполнить
            // поиск даты последней по времени выхода публикации среди всех
            //элементов коллекции;
            // вызвать метод TimeFrameGroup для выбора объектов ResearchTeam
            //с заданным значением продолжительности исследований;
            // вызвать свойство класса, выполняющее группировку элементов
            //коллекции по значениию продолжительности исследований;
            //вывести все группы элементов из списка.

            Console.WriteLine(researchTeamCollection.LastPublication.ToShortDateString());
            foreach (var obj in researchTeamCollection.TimeFrameGroup(TimeFrame.Long))
            {
                Console.WriteLine(obj.Key + "\n" + obj.Value.ToString() + "\n");
            }
            foreach (var group in researchTeamCollection.GroupByTimeFrame)
            {
                Console.WriteLine(group.Key + "::");
                foreach (var obj in group)
                {
                    Console.WriteLine(obj.Key);
                    Console.WriteLine(obj.Value);
                }
                Console.WriteLine();
            }

            //task 4
            //Создать объект типа TestCollection<Team, ResearchTeam>. Ввести число
            //элементов в коллекциях и вызвать метод для поиска первого,
            //центрального, последнего и элемента, не входящего в коллекции.
            //Вывести значения времени поиска для всех четырех случаев.
            GenerateElement <Team, ResearchTeam> generator = delegate(int j)
            {
                Team el_key = new Team();
                el_key.Name += j;
                ResearchTeam el_value = new ResearchTeam();
                return(new KeyValuePair <Team, ResearchTeam>(el_key, el_value));
            };

            string ch;

            while (true)
            {
                ch = Console.ReadLine();
                try
                {
                    var testColl = new TestCollection <Team, ResearchTeam>(Convert.ToInt32(ch), generator);
                    testColl.SearchListTKey();
                    testColl.SearchListString();
                    testColl.SearchDictTkey();
                    testColl.SearchDictString();
                    testColl.SearchDictValue();
                    break;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message + "\nTry again");
                }
            }
        }
Пример #11
0
        /// <summary>
        /// done tasks from lab 1
        /// </summary>
        public static void Run()
        {
            //task 1
            //Создать два объекта типа Team с совпадающими данными и проверить,
            //что ссылки на объекты не равны, а объекты равны, вывести значения хэш-
            //кодов для объектов.
            Team team1 = new Team();
            Team team2 = new Team();

            Console.WriteLine("Equals by value: " + team1.Equals(team2));
            Console.WriteLine("Equals by ref:   " + Object.ReferenceEquals(team1, team2));
            Console.WriteLine("Hashcode 1: " + team1.GetHashCode());
            Console.WriteLine("Hashcode 2: " + team1.GetHashCode());

            //task 2
            //В блоке try/catch присвоить свойству с номером регистрации
            //некорректное значение, в обработчике исключения вывести сообщение,
            //переданное через объект-исключение
            try
            {
                team1.RegisterNumber = 0;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

            //task 3
            //Создать объект типа ResearchTeam, добавить элементы в список
            //публикаций и список участников проекта и вывести данные объекта
            //ResearchTeam.
            ResearchTeam researchTeam1 = new ResearchTeam();
            Person       person1       = new Person("N1", "S1", new DateTime(2000, 1, 1));
            Person       person2       = new Person("N2", "S2", new DateTime(2000, 2, 1));
            Person       person3       = new Person("N1", "S2", new DateTime(2000, 1, 1));

            researchTeam1.AddPersons(person1, person2, person3);
            researchTeam1.AddPapers(new Paper("T1", person1, new DateTime(2020, 7, 20)), new Paper("T2", person3, new DateTime(2019, 7, 20)));

            //task 4
            //Вывести значение свойства Team для объекта типа ResearchTeam.
            Console.WriteLine(researchTeam1.ToString());

            //task 5
            // С помощью метода DeepCopy() создать полную копию объекта
            //ResearchTeam.Изменить данные в исходном объекте ResearchTeam и
            //вывести копию и исходный объект, полная копия исходного объекта
            //должна остаться без изменений.
            ResearchTeam researchTeam2 = (ResearchTeam)researchTeam1.DeepCopy();

            researchTeam2.RegisterNumber = 999998;
            Console.WriteLine(researchTeam1.ToString());
            Console.WriteLine(researchTeam2.ToString());

            //task 6
            //С помощью оператора foreach для итератора, определенного в классе
            //ResearchTeam, вывести список участников проекта, которые не имеют
            //публикаций.
            foreach (object obj in researchTeam1)
            {
                Console.WriteLine(obj.ToString());
            }

            //task 7
            //С помощью оператора foreach для итератора с параметром,
            //определенного в классе ResearchTeam, вывести список всех публикаций,
            //вышедших за последние два года.
            foreach (object obj in researchTeam1.GetEnumerator(2))
            {
                Console.WriteLine(obj.ToString());
            }

            //task 8
            //С помощью оператора foreach для объекта типа ResearchTeam вывести
            //список участников проекта, у которых есть публикации.
            foreach (object obj in researchTeam1.GetPersonsWithPubs())
            {
                Console.WriteLine(obj.ToString());
            }

            //task 9
            //С помощью оператора foreach для итератора, определенного в классе
            //ResearchTeam, вывести список участников проекта, имеющих более
            //одной публикации.
            foreach (object obj in researchTeam1.GetPersonsWithMoreOnePubs())
            {
                Console.WriteLine(obj.ToString());
            }

            //task 10
            //C помощью оператора foreach для итератора, определенного в классе
            //ResearchTeam, вывести список публикаций, вышедших за последний год.
            foreach (object obj in researchTeam1.GetThisYearPubs())
            {
                Console.WriteLine(obj.ToString());
            }
        }