Ejemplo n.º 1
0
        //Зчитування списку об'єктів з текстового файлу порядково
        public static List <CircleInscribedInSquareWithLegend> getListObjectsFromTextFile()
        {
            using (StreamReader sr = new StreamReader(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) +
                                                      @"\InputValues.txt"))
            {
                //Для застосування перевантаженного бінарного оператора +
                FiguresOnScreen figures = new FiguresOnScreen();
                while (!sr.EndOfStream)                  //Поки не кінець файлу
                {
                    String   str        = sr.ReadLine(); //Читаємо усю строку
                    String[] parsingStr = str.Split();   //Відділяємо значення один від одного
                    // і приводимо їх до відповідних типів
                    Double.TryParse(parsingStr[0], out double x);
                    Double.TryParse(parsingStr[1], out double y);
                    Double.TryParse(parsingStr[2], out double radius);
                    float.TryParse(parsingStr[3], out float length);
                    Int32.TryParse(parsingStr[4], out int tilt);
                    //Текст напису розбито на слова, конкатенуємо їх в одну строку
                    String text = "";
                    for (int i = 5; i < parsingStr.Length; i++)
                    {
                        text += parsingStr[i] + " ";
                    }
                    text = text.TrimEnd(' ');//Видаляє пробіл з кінця

                    Circle local = new Circle(radius, x, y);

                    //Перевантажений бінарний оператор +, додаємо до списку новий об'єкт
                    figures = figures + new CircleInscribedInSquareWithLegend(local,
                                                                              new LegendOnCircle(local, new Legend(length, text), tilt));
                }
                return(figures.List);
            }
        }
Ejemplo n.º 2
0
        //Функція пошуку за текстовим полем з використанням індексатора
        public static List <CircleInscribedInSquareWithLegend> findSubstringIn(FiguresOnScreen figures, String value)
        {
            List <CircleInscribedInSquareWithLegend> result = new List <CircleInscribedInSquareWithLegend>();

            for (int i = 0; i < figures.List.Count; i++)
            {
                if (figures[i].Legend.Legend.Text.ToLower().Contains(value.ToLower()))
                {
                    result.Add(figures[i]);
                }
            }
            return(result);
        }
Ejemplo n.º 3
0
        //Функція пошуку за числовим полем з використанням індексатора
        public static List <CircleInscribedInSquareWithLegend> findDoubleIn(FiguresOnScreen figures,
                                                                            double value)
        {
            List <CircleInscribedInSquareWithLegend> result = new List <CircleInscribedInSquareWithLegend>();

            for (int i = 0; i < figures.List.Count; i++)
            {
                if (figures[i].Circle.Radius == value)
                {
                    result.Add(figures[i]);
                }
            }
            return(result);
        }
Ejemplo n.º 4
0
        //Функція введення даних
        private void inputData()
        {
            createNewObjectWithObservers();
            Console.Write("Введiть кiлькiсть об'єктiв(не бiльше за 10): ");
            int amount;

            while ((amount = Utilities.getIntFromConsole()) <= 0 || amount > 10)
            {
                delShowOnScreen = OutputMethod.errorOutputOnScreen;
                delShowOnScreen("Кiлькiсть об'єктiв не може бути менше одиницi!\n");
                delShowOnScreen = OutputMethod.simplyOutputOnScreen;
            }

            int i = 0;

            while (i < amount)
            {
                delShowOnScreen = OutputMethod.simplyOutputOnScreen;
                delShowOnScreen("\nЗаповнення " + (i + 1).ToString() + "-го об'екта: \n");
                figures = figures + addNewObject();
                i++;
            }
        }
Ejemplo n.º 5
0
        //Головний процес, який викликатиметься в Main()
        public void process()
        {
            //Додання спостерігачів
            figures.addObserver(new ConsoleObserver());
            figures.addObserver(new FileObserver());
            //Очищення лог-файлу
            StreamWriter logFile = new StreamWriter(
                Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) +
                @"\LogFile_Observer.txt", false);

            logFile.Close();

            int choice;

            do
            {
                delShowOnScreen = OutputMethod.simplyOutputOnScreen;//Передача в делегат методу, який треба викликати
                delShowOnScreen("Ваш вибiр: ");
                while ((!Int32.TryParse((Console.ReadLine()), out choice)) || (choice < 0 || choice > 9))
                {
                    delShowOnScreen = OutputMethod.errorOutputOnScreen;//Передача в делегат методу про вивід помилки
                    delShowOnScreen("Допускаються лише цифри вiд 0 до 9\n");
                }
                //Очищення консолі
                //Console.Clear();
                //showMenu();

                switch (choice)
                {
                case 1:
                {        //Введення даних
                    inputData();
                    //Повідомлення спостерігачам, що кількість об'єктів змінено
                    figures.notifyObservers(figures.List.Count);
                    break;
                }

                case 2:
                    //Виведення даних у виглядi таблички на екран
                    if (figures.List.Count != 0)
                    {
                        OutputMethod.outputOnScreen(figures.List);
                    }
                    else
                    {
                        delShowOnScreen = OutputMethod.errorOutputOnScreen;
                        delShowOnScreen("\nДаних для виведення ще немає, натиснiть 1, щоб ввести данi.\n");
                    }
                    break;

                case 3:
                    //Запис об'єктiв на диск у текстовий файл
                    //Очищення файлу
                    StreamWriter file = new StreamWriter(
                        Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) +
                        @"\objects.txt", false);
                    file.Close();

                    if (figures.List.Count != 0)
                    {
                        OutputMethod.outputInTextFile(figures.List);
                        delShowOnScreen = OutputMethod.successOutputOnScreen;
                        delShowOnScreen("До текстового файлу успiшно записано!\n");
                    }
                    else
                    {
                        delShowOnScreen = OutputMethod.errorOutputOnScreen;
                        delShowOnScreen("Немає даних для запису у текстовий файл!\n");
                    }
                    break;

                case 4:
                    //Запис об'єктiв на диск у бiнарний файл
                    if (figures.List.Count != 0)
                    {
                        OutputMethod.serializationOutputInBinaryFile(figures.List);
                        delShowOnScreen = OutputMethod.successOutputOnScreen;
                        delShowOnScreen("До бiнарного файлу успiшно записано!\n");
                    }
                    else
                    {
                        delShowOnScreen = OutputMethod.errorOutputOnScreen;
                        delShowOnScreen("Немає даних для запису у бiнарний файл!\n");
                    }

                    break;

                case 5:
                    //Зчитування даних з текстового файлу
                    try
                    {
                        figures.List    = Utilities.getListObjectsFromTextFile();
                        delShowOnScreen = OutputMethod.successOutputOnScreen;
                        delShowOnScreen("З текстового файлу успiшно зчитано об'єкти!\n");
                    }
                    catch (FileNotFoundException)
                    {
                        delShowOnScreen = OutputMethod.errorOutputOnScreen;
                        delShowOnScreen(@"Файлу за шляхом C:\Users\USER_NAME\Documents\InputValues.txt не iснує.\n");
                        delShowOnScreen("Створiть його, розмiстивши в кожному рядку через пробiл поля об'єкта\n" +
                                        "Х У Радiус Довжину_напису Кут_нахилу Текст напису (до кiнця рядка)\n");
                    }
                    //Повідомлення спостерігачам, що кількість об'єктів змінено
                    figures.notifyObservers(figures.List.Count);
                    break;

                case 6:
                    //Зчитування даних з бiнарного файлу
                    try
                    {
                        figures.List    = Utilities.getListObjectsFromBinaryFile();
                        delShowOnScreen = OutputMethod.successOutputOnScreen;
                        delShowOnScreen("З бiнарного файлу успiшно зчитано об'єкти!\n");
                    }
                    catch (System.IO.FileNotFoundException)
                    {
                        delShowOnScreen = OutputMethod.errorOutputOnScreen;
                        delShowOnScreen(@"Файлу за шляхом C:\Users\USER_NAME\Documents\objects.dat не iснує.\n");
                        delShowOnScreen("Створiть його за допомогою пункту 1 i 5\n");
                    }
                    //Повідомлення спостерігачам, що кількість об'єктів змінено
                    figures.notifyObservers(figures.List.Count);
                    break;

                case 7:
                    //Пошук даних в масивi об'єктiв за текстовим чи числовим полем
                    if (figures.List.Count != 0)
                    {
                        Console.WriteLine("За яким полем бажаєте вести пошук у масивi об'єктiв?");
                        Console.WriteLine("1 - за числовим(радiус)");
                        Console.WriteLine("2 - за текстовим");
                        Console.Write("Поле: ");
                        int ch;
                        while ((ch = Utilities.getIntFromConsole()) < 1 || ch > 2)
                        {
                            delShowOnScreen = OutputMethod.errorOutputOnScreen;
                            delShowOnScreen("Тiльки 1 або 2\n");
                            delShowOnScreen = OutputMethod.simplyOutputOnScreen;
                        }
                        switch (ch)
                        {
                        case 1:
                        {
                            double value;
                            delShowOnScreen("Введiть шуканий радiус: ");
                            while ((value = Utilities.getDoubleFromConsole()) <= 0)
                            {
                                delShowOnScreen = OutputMethod.errorOutputOnScreen;
                                delShowOnScreen("Радiус вписаного кола не може бути вiд'ємною величиною!\n");
                                delShowOnScreen = OutputMethod.simplyOutputOnScreen;
                            }

                            List <CircleInscribedInSquareWithLegend> temp = Utilities.findDoubleIn(figures, value);
                            if (temp.Count != 0)
                            {
                                OutputMethod.outputOnScreen(temp);
                            }
                            else
                            {
                                delShowOnScreen = OutputMethod.errorOutputOnScreen;
                                delShowOnScreen("Кола з заданим радiусом немає у списку об'єктiв!\n");
                            }
                        }
                        break;

                        case 2:
                        {
                            String value;
                            delShowOnScreen("Введiть шуканий рядок: ");
                            while ((value = Console.ReadLine()) == "")
                            {
                                ;
                            }

                            List <CircleInscribedInSquareWithLegend> temp = Utilities.findSubstringIn(figures, value);
                            if (temp.Count != 0)
                            {
                                OutputMethod.outputOnScreen(temp);
                            }
                            else
                            {
                                delShowOnScreen = OutputMethod.errorOutputOnScreen;
                                delShowOnScreen("У списку об'єктiв немає кола з написом, текст якого мiстить заданий рядок!\n");
                            }
                        }
                        break;
                        }
                    }
                    else
                    {
                        delShowOnScreen = OutputMethod.errorOutputOnScreen;
                        delShowOnScreen("Немає даних!\n");
                    }
                    break;

                case 8:
                    //Розрахунку статистичної функцiї, щоб охарактеризувати данi
                    if (figures.List.Count != 0)
                    {
                        Console.WriteLine("Яку функцiю бажаєте розраховувати?");
                        Console.WriteLine("1 - середнє геометричне");
                        Console.WriteLine("2 - середнє гармонiйне");
                        Console.Write("Функцiя: ");
                        int ch;
                        while ((ch = Utilities.getIntFromConsole()) < 1 || ch > 2)
                        {
                            delShowOnScreen = OutputMethod.errorOutputOnScreen;
                            delShowOnScreen("Тiльки 1 або 2\n");
                            delShowOnScreen = OutputMethod.simplyOutputOnScreen;
                        }
                        switch (ch)
                        {
                        case 1:
                            statisticDelegate = Utilities.averageGeometric;
                            break;

                        case 2:
                            statisticDelegate = Utilities.averageGarmonic;
                            break;
                        }
                        statisticDelegate(figures.List);
                    }
                    else
                    {
                        delShowOnScreen = OutputMethod.errorOutputOnScreen;
                        delShowOnScreen("Немає даних для розрахунку функцiї!\n");
                    }
                    break;

                case 9:
                    //Додання об'єкту до поточного списку
                    figures = figures + addNewObject();
                    //Повідомлення спостерігачам, що кількість об'єктів змінено
                    figures.notifyObservers(1);
                    break;
                }
            } while (choice != 0);//Якщо 0 - вихід з програми
        }
Ejemplo n.º 6
0
 private void createNewObjectWithObservers()
 {
     figures = new FiguresOnScreen();
     figures.addObserver(new ConsoleObserver());
     figures.addObserver(new FileObserver());
 }