//Головний процес, який викликатиметься в 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 - вихід з програми }
private void createNewObjectWithObservers() { figures = new FiguresOnScreen(); figures.addObserver(new ConsoleObserver()); figures.addObserver(new FileObserver()); }