using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Lab1 { class View { private ISubjectIndex index; public View() { index = null; } public View(ISubjectIndex index) { this.index = index; } static View() { Console.WriteLine("Вызыван статический конструктор View"); } public ISubjectIndex Index { get { return index; } set { index = value; } } public Tuple ReadMenuKey(int maxValue = 1) { int value = -1; string input = ""; do { Console.Write("> "); input = Console.ReadLine(); // Если input == ".q", то выходим if (input == ".q") break; // Проверяем на корректность ввода if (!int.TryParse(input, out value) || value < 0 || value > maxValue) { Console.WriteLine("Некорректный ввод. Попробуйте еще раз."); continue; } break; } while (true); return new Tuple(value, input); } public void Show() { do { Console.Clear(); Console.WriteLine("[Главное меню]"); Console.WriteLine("1. Создать предметный указатель"); Console.WriteLine("2. Вывод указателя"); Console.WriteLine("3. Вывод номеров страниц для заданного слова"); Console.WriteLine("4. Удаление элемента из указателя"); Console.WriteLine(".q - выйти"); Console.WriteLine(""); var (value, input) = ReadMenuKey(4); if (input == ".q") break; switch (value) { case 1: CreateSubjectIndexMenu(); break; case 2: PrintSubjectIndex(); break; case 3: PrintPagesForWord(); break; case 4: DeleteSubjectIndex(); break; } } while (true); } public void CreateSubjectIndexMenu() { while (true) { Console.Clear(); Console.WriteLine("[Создать предметный указатель]"); Console.WriteLine("1. C клавиатуры"); Console.WriteLine("2. Из файла"); Console.WriteLine(".q - выйти"); Console.WriteLine(""); var (value, input) = ReadMenuKey(2); if (input == ".q") break; switch (value) { case 1: CreateSubjectIndexFromKeyboardMenu(); break; case 2: CreateSubjectIndexFromFileMenu(); break; } }; } public void CreateSubjectIndexFromKeyboardMenu() { Console.Clear(); Index = new MockedSubjectIndex(); Index.LoadFromKeyboard(); } public void CreateSubjectIndexFromFileMenu() { Console.Clear(); Console.Write("Введите путь к файлу: "); string path = Console.ReadLine(); Index = new MockedSubjectIndex(); try { Index.LoadFromFile(path); } catch (Exception e) { Console.WriteLine(string.Format("Ошибка: {0}", e.Message)); Index = null; Console.WriteLine("Нажмите любую клавишу для продолжения..."); Console.ReadKey(); } } public void PrintSubjectIndex() { Console.Clear(); if (Index != null) { Console.WriteLine("Предметный указатель:"); Index.Print(); } else { Console.WriteLine("Предметный указатель не создан."); } Console.WriteLine("Нажмите любую клавишу..."); Console.ReadKey(); } public void PrintPagesForWord() { Console.Clear(); if (Index != null) { Console.WriteLine("Введите слово:"); var word = Console.ReadLine(); try { Index.PrintPages(word); } catch (Exception e) { Console.WriteLine(string.Format("Ошибка: {0}", e.Message)); } } else { Console.WriteLine("Предметный указатель не создан."); } Console.WriteLine("Нажмите любую клавишу..."); Console.ReadKey(); } public void DeleteSubjectIndex() { Console.Clear(); if (Index != null) { Console.WriteLine("Введите элемент, который нужно удалить"); Console.WriteLine(".q - выйти"); Console.WriteLine(""); Console.Write("> "); string input = Console.ReadLine(); if (input == ".q") return; Index.Delete(input); Console.WriteLine("OK"); } else { Console.WriteLine("Предметный указатель не создан."); } Console.WriteLine("Нажмите любую клавишу..."); Console.ReadKey(); } } }