Advertisement
Suslick

Test_40

Jan 7th, 2025
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.83 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace ConsoleApp1
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             const string CommandAddBook = "1";
  11.             const string CommandRemoveBook = "2";
  12.             const string CommandShowAllBooks = "3";
  13.             const string CommandFindBooksWithParameters = "4";
  14.             const string CommandExit = "5";
  15.  
  16.             StorageBook storage = new StorageBook();
  17.  
  18.             bool isWork = true;
  19.  
  20.             while(isWork)
  21.             {
  22.                 Console.WriteLine($"{CommandAddBook} : Добавить книгу в хранилище\n" +
  23.                               $"{CommandRemoveBook} : Убрать книгу в хранилище\n" +
  24.                               $"{CommandShowAllBooks} : Показать все книги в хранилище\n" +
  25.                               $"{CommandFindBooksWithParameters} : Найти книги по указанному параметру (по названию, по автору, по году выпуска)\n" +
  26.                               $"{CommandExit} : Выход из программы\n");
  27.  
  28.                 string userInput = Console.ReadLine();
  29.  
  30.                 switch (userInput)
  31.                 {
  32.                     case CommandAddBook:
  33.                         storage.AddBook();
  34.                         break;
  35.  
  36.                     case CommandRemoveBook:
  37.                         storage.RemoveBook();
  38.                         break;
  39.  
  40.                     case CommandShowAllBooks:
  41.                         storage.ShowAllBooks();
  42.                         break;
  43.  
  44.                     case CommandFindBooksWithParameters:
  45.                         storage.FindBooksWithParameters();
  46.                         break;
  47.  
  48.                     case CommandExit:
  49.                         isWork = false;
  50.                         break;
  51.  
  52.                     default:
  53.                         Console.WriteLine("Нет такой комманды!");
  54.                         break;
  55.                 }
  56.             }
  57.         }
  58.     }
  59.  
  60.     public enum UserCommandByFind
  61.     {
  62.         FindByName = 1,
  63.         FindByAuthor,
  64.         FindByYearRelease
  65.     }
  66.  
  67.     class Book
  68.     {
  69.         public Book(string name, string author, int yearRelease)
  70.         {
  71.             Name = name;
  72.             Author = author;
  73.             YearRelease = yearRelease;
  74.         }
  75.  
  76.         public string Name { get; private set; }
  77.         public string Author{ get; private set; }
  78.         public int YearRelease{ get; private set; }
  79.     }
  80.  
  81.     class StorageBook
  82.     {
  83.         private List<Book> _books;
  84.  
  85.         public StorageBook()
  86.         {
  87.             _books = new List<Book>();
  88.         }
  89.  
  90.         public void AddBook()
  91.         {
  92.             string name;
  93.             string author;
  94.             int yearRelease;
  95.  
  96.             Console.WriteLine("Введите название книги.");
  97.             name = Console.ReadLine();
  98.  
  99.             Console.WriteLine("Введите автора книги.");
  100.             author = Console.ReadLine();
  101.  
  102.             yearRelease = GetYear();
  103.  
  104.             Book book = new Book(name.Trim(),author.Trim(), yearRelease);
  105.  
  106.             _books.Add(book);
  107.  
  108.             Console.WriteLine("Книга добавлена в хранилище");
  109.         }
  110.  
  111.         public void RemoveBook()
  112.         {
  113.             if(_books.Count > 0)
  114.             {
  115.                 ShowBooks(_books);
  116.  
  117.                 Console.WriteLine();
  118.  
  119.                 if (TryGetBook(out Book book))
  120.                 {
  121.                     _books.Remove(book);
  122.  
  123.                     Console.WriteLine("Книга удалена!");
  124.                 }
  125.             }
  126.             else
  127.             {
  128.                 Console.WriteLine("В хранилище нет книг!");
  129.             }
  130.         }
  131.  
  132.         public void FindBooksWithParameters()
  133.         {
  134.             List<Book> findBooks = new List<Book>();
  135.  
  136.             Console.WriteLine($"{(int)UserCommandByFind.FindByName} : Поиск по названию книги\n" +
  137.                 $"{(int)UserCommandByFind.FindByAuthor} : Поиск по автору книги\n" +
  138.                 $"{(int)UserCommandByFind.FindByYearRelease} : Поиск по дате релиза\n");
  139.  
  140.             if(Enum.TryParse<UserCommandByFind>(Console.ReadLine(), out UserCommandByFind userInput))
  141.             {
  142.                 Console.WriteLine("Введите название");
  143.                 string value = Console.ReadLine();
  144.              
  145.                 foreach (var book in _books)
  146.                 {
  147.                    if(IsMatch(userInput, book, value))
  148.                    {
  149.                         findBooks.Add(book);
  150.                    }
  151.                 }
  152.             }
  153.  
  154.             ShowBooks(findBooks);
  155.         }
  156.  
  157.         public void ShowAllBooks()
  158.         {
  159.             ShowBooks(_books);
  160.         }
  161.  
  162.         private void ShowBooks(List<Book> books)
  163.         {
  164.             if(books.Count > 0)
  165.             {
  166.                 for (int i = 0; i < books.Count; i++)
  167.                 {
  168.                     Console.WriteLine($"{i} - {books[i].Name}, {books[i].Author}, {books[i].YearRelease}");
  169.                 }
  170.             }
  171.             else
  172.             {
  173.                 Console.WriteLine("Нет такой книги");
  174.             }
  175.         }
  176.  
  177.         private bool TryGetBook(out Book book)
  178.         {
  179.             book = null;
  180.  
  181.             Console.WriteLine("Введите id книги из списка");
  182.  
  183.             if (int.TryParse(Console.ReadLine(), out int id))
  184.             {
  185.                 if (_books.Count > id && id >= 0)
  186.                 {
  187.                     book = _books[id];
  188.  
  189.                     return true;
  190.                 }
  191.             }
  192.  
  193.             return false;
  194.         }
  195.  
  196.         private bool IsMatch(UserCommandByFind userInput, Book book, string value)
  197.         {
  198.             switch (userInput)
  199.             {
  200.                 case UserCommandByFind.FindByName:
  201.                     return book.Name.ToLower().Equals(value.ToLower(), StringComparison.OrdinalIgnoreCase);
  202.  
  203.                 case UserCommandByFind.FindByAuthor:
  204.                     return book.Author.ToLower().Equals(value.ToLower(), StringComparison.OrdinalIgnoreCase);
  205.  
  206.                 case UserCommandByFind.FindByYearRelease:
  207.                     return book.YearRelease.ToString() == value;
  208.  
  209.                 default:
  210.                     return false;
  211.             }
  212.         }
  213.  
  214.         private int GetYear()
  215.         {
  216.             int year;
  217.  
  218.             Console.WriteLine("Введите год.");
  219.  
  220.             while (int.TryParse(Console.ReadLine(), out year) == false)
  221.             {
  222.                 Console.WriteLine("Неверный ввод");
  223.             }
  224.  
  225.             return year;
  226.         }
  227.     }
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement