переносит код из UniversityProjects
This commit is contained in:
parent
567cc10cc6
commit
f0c3c698d0
6
Lab1/App.config
Normal file
6
Lab1/App.config
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<configuration>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
|
||||||
|
</startup>
|
||||||
|
</configuration>
|
37
Lab1/Controller.cs
Normal file
37
Lab1/Controller.cs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Lab1
|
||||||
|
{
|
||||||
|
class Controller
|
||||||
|
{
|
||||||
|
private View view;
|
||||||
|
|
||||||
|
// Геттеры и сеттеры для view
|
||||||
|
public View View
|
||||||
|
{
|
||||||
|
get { return view; }
|
||||||
|
set { view = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public Controller()
|
||||||
|
{
|
||||||
|
View = new View();
|
||||||
|
View.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Controller(View view)
|
||||||
|
{
|
||||||
|
View = view;
|
||||||
|
View.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
static Controller()
|
||||||
|
{
|
||||||
|
Console.WriteLine("Вызыван статический конструктор Controller");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
26
Lab1/ISubjectIndex.cs
Normal file
26
Lab1/ISubjectIndex.cs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Lab1
|
||||||
|
{
|
||||||
|
interface ISubjectIndex
|
||||||
|
{
|
||||||
|
// Загрузка из клавиатуры
|
||||||
|
void LoadFromKeyboard();
|
||||||
|
|
||||||
|
// Загрузка из файла
|
||||||
|
void LoadFromFile(string filename);
|
||||||
|
|
||||||
|
// Вывод указателя
|
||||||
|
void Print();
|
||||||
|
|
||||||
|
// Вывод номеров страниц для заданного слова
|
||||||
|
void PrintPages(string word);
|
||||||
|
|
||||||
|
// Удаление элемента из указателя
|
||||||
|
void Delete(string word);
|
||||||
|
}
|
||||||
|
}
|
58
Lab1/Lab1.csproj
Normal file
58
Lab1/Lab1.csproj
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{4FF3599C-D978-4EE7-993D-BAAE95E08F8E}</ProjectGuid>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<RootNamespace>Lab1</RootNamespace>
|
||||||
|
<AssemblyName>Lab1</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Controller.cs" />
|
||||||
|
<Compile Include="ISubjectIndex.cs" />
|
||||||
|
<Compile Include="MockedSubjectIndex.cs" />
|
||||||
|
<Compile Include="Program.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="SubjectIndex.cs" />
|
||||||
|
<Compile Include="View.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="App.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
</Project>
|
25
Lab1/Lab1.sln
Normal file
25
Lab1/Lab1.sln
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 16
|
||||||
|
VisualStudioVersion = 16.0.32126.315
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lab1", "Lab1.csproj", "{4FF3599C-D978-4EE7-993D-BAAE95E08F8E}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{4FF3599C-D978-4EE7-993D-BAAE95E08F8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{4FF3599C-D978-4EE7-993D-BAAE95E08F8E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{4FF3599C-D978-4EE7-993D-BAAE95E08F8E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{4FF3599C-D978-4EE7-993D-BAAE95E08F8E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {F0FC7884-21F6-4AD7-851D-C028F7E64151}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
46
Lab1/MockedSubjectIndex.cs
Normal file
46
Lab1/MockedSubjectIndex.cs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Lab1
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Класс MockedSubjectIndex наследует от SubjectIndex и переопределяет методы.
|
||||||
|
* Методы заглушки печают свое название и вызывают метод базового класса.
|
||||||
|
*/
|
||||||
|
class MockedSubjectIndex: SubjectIndex
|
||||||
|
{
|
||||||
|
|
||||||
|
public override void LoadFromKeyboard()
|
||||||
|
{
|
||||||
|
Console.WriteLine("Вызов метода LoadFromKeyboard");
|
||||||
|
base.LoadFromKeyboard();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void LoadFromFile(string filename)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Вызов метода LoadFromFile");
|
||||||
|
base.LoadFromFile(filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Print()
|
||||||
|
{
|
||||||
|
Console.WriteLine("Вызов метода Print");
|
||||||
|
base.Print();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void PrintPages(string word)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Вызов метода PrintPages");
|
||||||
|
base.PrintPages(word);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Delete(string word)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Вызов метода Delete");
|
||||||
|
base.Delete(word);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
16
Lab1/Program.cs
Normal file
16
Lab1/Program.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Lab1
|
||||||
|
{
|
||||||
|
class Program
|
||||||
|
{
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
Controller controller = new Controller();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
36
Lab1/Properties/AssemblyInfo.cs
Normal file
36
Lab1/Properties/AssemblyInfo.cs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// Общие сведения об этой сборке предоставляются следующим набором
|
||||||
|
// набора атрибутов. Измените значения этих атрибутов для изменения сведений,
|
||||||
|
// связанные с этой сборкой.
|
||||||
|
[assembly: AssemblyTitle("Lab1")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("Lab1")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2022")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
|
||||||
|
// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
|
||||||
|
// из модели COM задайте для атрибута ComVisible этого типа значение true.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// Следующий GUID представляет идентификатор typelib, если этот проект доступен из модели COM
|
||||||
|
[assembly: Guid("4ff3599c-d978-4ee7-993d-baae95e08f8e")]
|
||||||
|
|
||||||
|
// Сведения о версии сборки состоят из указанных ниже четырех значений:
|
||||||
|
//
|
||||||
|
// Основной номер версии
|
||||||
|
// Дополнительный номер версии
|
||||||
|
// Номер сборки
|
||||||
|
// Номер редакции
|
||||||
|
//
|
||||||
|
// Можно задать все значения или принять номера сборки и редакции по умолчанию
|
||||||
|
// используя "*", как показано ниже:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
211
Lab1/SubjectIndex.cs
Normal file
211
Lab1/SubjectIndex.cs
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Lab1
|
||||||
|
{
|
||||||
|
public class SubjectIndex : ISubjectIndex
|
||||||
|
{
|
||||||
|
Dictionary<string, List<int>> _data;
|
||||||
|
|
||||||
|
public SubjectIndex()
|
||||||
|
{
|
||||||
|
_data = new Dictionary<string, List<int>>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public SubjectIndex(Dictionary<string, List<int>> data)
|
||||||
|
{
|
||||||
|
_data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Геттеры и сеттеры для поля _data
|
||||||
|
public Dictionary<string, List<int>> Data
|
||||||
|
{
|
||||||
|
get { return _data; }
|
||||||
|
set { _data = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
static SubjectIndex()
|
||||||
|
{
|
||||||
|
Console.WriteLine("Вызыван статический конструктор SubjectIndex");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Загрузка из клавиатуры
|
||||||
|
public virtual void LoadFromKeyboard()
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Введите слово:");
|
||||||
|
Console.WriteLine(".q - выйти");
|
||||||
|
Console.WriteLine("");
|
||||||
|
Console.Write("> ");
|
||||||
|
string input = Console.ReadLine();
|
||||||
|
|
||||||
|
// Если input == ".q", то выходим из цикла
|
||||||
|
if (input == ".q")
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (input == "")
|
||||||
|
{
|
||||||
|
Console.WriteLine("Введена пустая строка!");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
string key = input;
|
||||||
|
|
||||||
|
// Проверяем, что _data содержит слово
|
||||||
|
if (_data.ContainsKey(key))
|
||||||
|
{
|
||||||
|
Console.WriteLine("Предметный указатель содержит данное слово!");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
_data[key] = new List<int>();
|
||||||
|
|
||||||
|
// Вводим номера страниц (максимум 10)
|
||||||
|
while (_data[key].Count < 10)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Введите номер страницы ({0}/10):", _data[key].Count + 1);
|
||||||
|
Console.WriteLine(".q - выйти");
|
||||||
|
Console.WriteLine("");
|
||||||
|
Console.Write("> ");
|
||||||
|
input = Console.ReadLine();
|
||||||
|
|
||||||
|
|
||||||
|
// Если input == ".q" выходим из цикла (выход из ввода страниц)
|
||||||
|
if (input == ".q")
|
||||||
|
break;
|
||||||
|
|
||||||
|
int page;
|
||||||
|
|
||||||
|
// Проверка на корректность ввода
|
||||||
|
if (!int.TryParse(input, out page) || page <= 0)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Некорректный ввод. Попробуйте еще раз.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Добавляем номер страницы в список
|
||||||
|
_data[key].Add(page);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Загрузка из файла
|
||||||
|
public virtual void LoadFromFile(string filename)
|
||||||
|
{
|
||||||
|
// Открываем файл
|
||||||
|
System.IO.StreamReader file = new System.IO.StreamReader(filename);
|
||||||
|
|
||||||
|
int lineNumber = 0;
|
||||||
|
/*
|
||||||
|
* Читаем построчно из файла и добавляем в словарь
|
||||||
|
* Формат файла: слово и номера страниц, разделенные пробелом
|
||||||
|
*/
|
||||||
|
while (!file.EndOfStream)
|
||||||
|
{
|
||||||
|
lineNumber++;
|
||||||
|
string line = file.ReadLine();
|
||||||
|
string[] parts = line.Split(' ');
|
||||||
|
|
||||||
|
// Если массив parts пуст - выкидываем исключение
|
||||||
|
if (parts.Length == 0)
|
||||||
|
{
|
||||||
|
throw new Exception("Строка пустая!");
|
||||||
|
}
|
||||||
|
|
||||||
|
string key = parts[0];
|
||||||
|
|
||||||
|
// Если слово это пустая строка - выкидываем исключение
|
||||||
|
if (key == "")
|
||||||
|
{
|
||||||
|
throw new Exception("Слово пустое!");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Если слово уже есть в словаре - выкидываем исключение
|
||||||
|
if (_data.ContainsKey(key))
|
||||||
|
{
|
||||||
|
throw new Exception("Предметный указатель содержит данное слово!");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<int> value = new List<int>();
|
||||||
|
|
||||||
|
int page;
|
||||||
|
for (int i = 1; i < parts.Length; i++)
|
||||||
|
{
|
||||||
|
// Если parts[i] не является натуральным числом, то вызываем исключение
|
||||||
|
if (!int.TryParse(parts[i], out page) || page <= 0)
|
||||||
|
throw new Exception(String.Format("Некорректный формат файла! {0} - не является натуральным числом", parts[i]));
|
||||||
|
|
||||||
|
// Добавляем страницу в список
|
||||||
|
value.Add(page);
|
||||||
|
}
|
||||||
|
|
||||||
|
_data[key] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Вывод указателя
|
||||||
|
public virtual void Print()
|
||||||
|
{
|
||||||
|
string result = "";
|
||||||
|
foreach (KeyValuePair<string, List<int>> kvp in _data)
|
||||||
|
{
|
||||||
|
result += String.Format("\"{0}\": [", kvp.Key, kvp.Value);
|
||||||
|
result += (String.Join(", ", kvp.Value.ToArray())) + "]\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Вывод номеров страниц для заданного слова
|
||||||
|
public virtual void PrintPages(string word)
|
||||||
|
{
|
||||||
|
Console.WriteLine(string.Join(", ", _data[word]));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Удаление элемента из указателя
|
||||||
|
public virtual void Delete(string word)
|
||||||
|
{
|
||||||
|
_data.Remove(word);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Индексатор
|
||||||
|
public List<int> this[string word]
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _data[word];
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_data[word] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Перечислитель
|
||||||
|
public IEnumerator<KeyValuePair<string, List<int>>> GetEnumerator()
|
||||||
|
{
|
||||||
|
// Итератор
|
||||||
|
foreach (KeyValuePair<string, List<int>> kvp in _data)
|
||||||
|
{
|
||||||
|
yield return kvp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Переопределение метода ToString
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
string result = "SubjectIndex: \n";
|
||||||
|
foreach (KeyValuePair<string, List<int>> kvp in _data)
|
||||||
|
{
|
||||||
|
result += String.Format("\"{0}\": [", kvp.Key, kvp.Value);
|
||||||
|
result += (String.Join(", ", kvp.Value.ToArray())) + "]\n";
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
227
Lab1/View.cs
Normal file
227
Lab1/View.cs
Normal file
@ -0,0 +1,227 @@
|
|||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user