This repository has been archived on 2022-06-26. You can view files and clone it, but cannot push or open issues or pull requests.
dotnet-lab1/Lab1/View.cs

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();
}
}
}