228 lines
6.5 KiB
C#
228 lines
6.5 KiB
C#
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<int, string> 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<int, string>(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();
|
|
}
|
|
}
|
|
}
|