Advertisement
viktarb

Хранилище книг

Dec 21st, 2022 (edited)
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.75 KB | History | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. class Program
  5. {
  6.     static void Main(string[] args)
  7.     {
  8.         Library library = new Library();
  9.         library.Work();
  10.     }
  11. }
  12.  
  13. class Book
  14. {
  15.     public Book(string title, string author, string years, long id)
  16.     {
  17.         Title = title;
  18.         Author = author;
  19.         Years = years;
  20.         Id = id;
  21.     }
  22.  
  23.     public string Title { get; private set; }
  24.     public string Author { get; private set; }
  25.     public string Years { get; private set; }
  26.     public long Id { get; private set; }
  27.  
  28.     public void ShowInfo()
  29.     {
  30.         Console.WriteLine($"Название книги - {Title}, автор - {Author}, год издания - {Years}, уник. индиф. - {Id}");
  31.     }
  32. }
  33.  
  34. class Library
  35. {
  36.     private const int FindBooksByTitleCommand = 1;
  37.     private const int FindBooksByAuthorCommand = 2;
  38.     private const int FindBooksByYearCommand = 3;
  39.     private const int ReturnToPreviousMenuCommand = 9;
  40.  
  41.     private long _id;
  42.     private List<Book> _books = new List<Book>();
  43.  
  44.     public Library()
  45.     {
  46.         _id = 0;
  47.         _books = new List<Book>();
  48.         Fill();
  49.     }
  50.  
  51.     public void Work()
  52.     {
  53.         const int AddBookCommand = 1;
  54.         const int DeleteBookCommand = 2;
  55.         const int ShowAllBooksCommand = 3;
  56.         const int SearchBookCommand = 4;
  57.         const int ExitForProgramCommand = 9;
  58.  
  59.         string userInput;
  60.         bool isCorrectInput;
  61.         bool isWork = true;
  62.  
  63.         while (isWork)
  64.         {
  65.             Console.WriteLine("Библиотека. \nВведите команду:");
  66.             Console.WriteLine($"{AddBookCommand} - Добавить книгу, \n{DeleteBookCommand} - Удалить книгу, \n{ShowAllBooksCommand} - Показать все книги, \n{SearchBookCommand} - Поиск книги, \n{ExitForProgramCommand} - Выход из программы.");
  67.  
  68.             userInput = Console.ReadLine();
  69.             isCorrectInput = int.TryParse(userInput, out int selectMenu);
  70.  
  71.             if (isCorrectInput)
  72.             {
  73.                 switch (selectMenu)
  74.                 {
  75.                     case AddBookCommand:
  76.                         AddBook();
  77.                         break;
  78.  
  79.                     case DeleteBookCommand:
  80.                         DeleteBook();
  81.                         break;
  82.  
  83.                     case ShowAllBooksCommand:
  84.                         ShowAllBooks();
  85.                         break;
  86.  
  87.                     case SearchBookCommand:
  88.                         SearchBooks();
  89.                         break;
  90.  
  91.                     case ExitForProgramCommand:
  92.                         isWork = false;
  93.                         break;
  94.  
  95.                     default:
  96.                         Console.WriteLine($"\aМеню выбора {userInput} не существует!");
  97.                         break;
  98.                 }
  99.             }
  100.             else
  101.             {
  102.                 Console.WriteLine($"\aНужно вводить число для выбора меню.");
  103.             }
  104.  
  105.             Console.WriteLine("Нажмите любую клавишу для продолжения...");
  106.             Console.ReadKey();
  107.             Console.Clear();
  108.         }
  109.     }
  110.  
  111.     private void AddBook()
  112.     {
  113.         string userInputBookTitle;
  114.         string userInputAuthor;
  115.         string userInputYear;
  116.         int thisYear = 2022;
  117.         bool isYearCorrect;
  118.  
  119.         Console.WriteLine("Вы выбрали меню \"Добавить книгу\".");
  120.         Console.Write("Введите имя новой книги: ");
  121.         userInputBookTitle = Console.ReadLine();
  122.         Console.Write("Введите автора новой книги: ");
  123.         userInputAuthor = Console.ReadLine();
  124.         Console.Write("Введите год издания новой книги: ");
  125.         userInputYear = Console.ReadLine();
  126.         isYearCorrect = int.TryParse(userInputYear, out int bookYear);
  127.  
  128.         if (userInputBookTitle != null)
  129.         {
  130.             if (userInputAuthor != null)
  131.             {
  132.                 if (isYearCorrect && bookYear <= thisYear)
  133.                 {
  134.                     _books.Add(new Book(userInputBookTitle, userInputAuthor, userInputYear, GetId()));
  135.                     Console.WriteLine($"Книга {_books[_books.Count - 1].Title} успешно добавлена.");
  136.                 }
  137.                 else
  138.                 {
  139.                     Console.WriteLine($"\aГод издания книги введён не верно!");
  140.                 }
  141.             }
  142.             else
  143.             {
  144.                 Console.WriteLine($"\aАвтор книги не может содержать пустую строку!");
  145.             }
  146.         }
  147.         else
  148.         {
  149.             Console.WriteLine($"\aНазвание книги не может содержать пустую строку!");
  150.         }
  151.     }
  152.  
  153.     private void DeleteBook()
  154.     {
  155.         const int Yes = 1;
  156.         const int No = 2;
  157.  
  158.         string userInput;
  159.  
  160.         Console.WriteLine("Вы выбрали меню \"Удалить книгу\".");
  161.         Book book = SelectBook();
  162.  
  163.         if (book != null)
  164.         {
  165.             Console.Write($"\aВы действительно хотите безвозвратно удалить книгу \"{book.Title}\"? Это действие безвозвратно. {Yes} - Да, {No} - Нет: ");
  166.  
  167.             userInput = Console.ReadLine();
  168.             int.TryParse(userInput, out int result);
  169.  
  170.             if (result != 0 && result == 1)
  171.             {
  172.                 _books.Remove(book);
  173.                 Console.WriteLine("Выполнено успешно.");
  174.             }
  175.             else
  176.             {
  177.                 Console.WriteLine($"Удаление игрока {book.Title} отменено.");
  178.             }
  179.         }
  180.     }
  181.  
  182.     private void ShowAllBooks()
  183.     {
  184.         foreach (Book book in _books)
  185.         {
  186.             book.ShowInfo();
  187.         }
  188.     }
  189.  
  190.     private void SearchBooks()
  191.     {
  192.         GetBooks(out List<Book> foundBooks);
  193.  
  194.         if (foundBooks != null)
  195.         {
  196.             foreach (Book book in foundBooks)
  197.             {
  198.                 book.ShowInfo();
  199.             }
  200.         }
  201.     }
  202.  
  203.     private void GetBooks(out List<Book> foundBooks)
  204.     {
  205.         bool isFoundBook;
  206.         string userInput;
  207.         int selectOptionSearch = SelectOptionSearch();
  208.         foundBooks = new List<Book>();
  209.  
  210.         if (selectOptionSearch != ReturnToPreviousMenuCommand)
  211.         {
  212.             Console.Write($"Введите искомое поле: ");
  213.             userInput = Console.ReadLine();
  214.  
  215.             if (userInput != null)
  216.             {
  217.                 switch (selectOptionSearch)
  218.                 {
  219.                     case FindBooksByTitleCommand:
  220.                         isFoundBook = GetBooksByTitle(foundBooks, userInput);
  221.                         break;
  222.  
  223.                     case FindBooksByAuthorCommand:
  224.                         isFoundBook = GetBooksByAuthor(foundBooks, userInput);
  225.                         break;
  226.  
  227.                     case FindBooksByYearCommand:
  228.                         isFoundBook = GetBooksByYear(foundBooks, userInput);
  229.                         break;
  230.  
  231.                     default:
  232.                         Console.WriteLine("\aТакого типа поиска \"" + selectOptionSearch + "\" не найдено.");
  233.                         isFoundBook = false;
  234.                         break;
  235.                 }
  236.                
  237.                 if (isFoundBook)
  238.                 {
  239.                     Console.WriteLine("Поиск завершён успешно.");
  240.                 }
  241.                 else
  242.                 {
  243.                     Console.ForegroundColor = ConsoleColor.Red;
  244.                     Console.WriteLine("\aКниг/авторов/годов изданий \"" + userInput + "\" в библиотеке не найдено.");
  245.                     Console.ForegroundColor = ConsoleColor.White;
  246.                 }
  247.             }
  248.             else
  249.             {
  250.                 Console.WriteLine($"\aИскомое поле не может быть пустым!");
  251.             }
  252.         }
  253.         else
  254.         {
  255.             Console.WriteLine($"Возврат в предыдущее меню.");
  256.         }
  257.     }
  258.  
  259.     private int SelectOptionSearch()
  260.     {
  261.         string userInput;
  262.         bool isCorrectInput;
  263.  
  264.         Console.Write("Выберите, по какому параметру ищем: ");
  265.         Console.WriteLine($"\n{FindBooksByTitleCommand} - по наименовании книги, \n{FindBooksByAuthorCommand} - по автору, \n{FindBooksByYearCommand} - по году издания, \n{ReturnToPreviousMenuCommand} - Возврат в предыдущее меню. ");
  266.        
  267.         userInput = Console.ReadLine();
  268.         isCorrectInput = int.TryParse(userInput, out int selectOption);
  269.  
  270.         return selectOption;
  271.     }
  272.  
  273.     private long GetId()
  274.     {
  275.         _id++;
  276.         return _id;
  277.     }
  278.  
  279.     private Book SelectBook()
  280.     {
  281.         bool isFoundBook = false;
  282.         Book book = null;
  283.         string userInput;
  284.  
  285.         Console.Write("Введите уникальный идентификатор книги (число): ");
  286.         userInput = Console.ReadLine();
  287.         int.TryParse(userInput, out int id);
  288.  
  289.         for (int i = 0; i < _books.Count; i++)
  290.         {
  291.             if (id == _books[i].Id)
  292.             {
  293.                 isFoundBook = true;
  294.                 book = _books[i];
  295.                 i = _books.Count;
  296.             }
  297.         }
  298.  
  299.         if (isFoundBook)
  300.         {
  301.             Console.WriteLine($"Операция завершена успешно.");
  302.         }
  303.         else
  304.         {
  305.             Console.ForegroundColor = ConsoleColor.Red;
  306.             Console.WriteLine("\aКниги с уникальным идентификатором" + id + " в библиотеке не найдено.");
  307.             Console.ForegroundColor = ConsoleColor.White;
  308.         }
  309.  
  310.         return book;
  311.     }
  312.  
  313.     private bool GetBooksByTitle(List<Book> foundBooks, string userInput)
  314.     {
  315.         bool isFoundBook = false;
  316.  
  317.         foreach (Book book in _books)
  318.         {
  319.             if (book.Title.ToLower().Contains($"{userInput.ToLower()}"))
  320.             {
  321.                 isFoundBook = true;
  322.                 foundBooks.Add(book);
  323.             }
  324.         }
  325.  
  326.         return isFoundBook;
  327.     }
  328.  
  329.     private bool GetBooksByAuthor(List<Book> foundBooks, string userInput)
  330.     {
  331.         bool isFoundBook = false;
  332.  
  333.         foreach (Book book in _books)
  334.         {
  335.             if (book.Author.ToLower().Contains($"{userInput.ToLower()}"))
  336.             {
  337.                 isFoundBook = true;
  338.                 foundBooks.Add(book);
  339.             }
  340.         }
  341.  
  342.         return isFoundBook;
  343.     }
  344.  
  345.     private bool GetBooksByYear(List<Book> foundBooks, string userInput)
  346.     {
  347.         bool isFoundBook = false;
  348.  
  349.         foreach (Book book in _books)
  350.         {
  351.             if (book.Years.ToLower().Contains($"{userInput.ToLower()}"))
  352.             {
  353.                 isFoundBook = true;
  354.                 foundBooks.Add(book);
  355.             }
  356.         }
  357.  
  358.         return isFoundBook;
  359.     }
  360.  
  361.     private void Fill()
  362.     {
  363.         _books.Add(new Book("Агасфер", "Жуковский Василий Андреевич", "1852", GetId()));
  364.         _books.Add(new Book("Адъютант его превосходительства", "Владимир Галактионович Короленко", "1884", GetId()));
  365.         _books.Add(new Book("Алые паруса", "Александр Степанович Грин", "1923", GetId()));
  366.         _books.Add(new Book("Анна Каренина", "Лев Николаевич Толстой", "1926", GetId()));
  367.         _books.Add(new Book("Анна Снегина", "Сергей Александрович Есенин", "1925", GetId()));
  368.     }
  369. }
  370.  
  371. // Создать хранилище книг.
  372. // Каждая книга имеет название, автора и год выпуска (можно добавить еще параметры). В хранилище можно добавить книгу,
  373. // убрать книгу, показать все книги и показать книги по указанному параметру (по названию, по автору, по году выпуска).
  374. // Про указанный параметр, к примеру нужен конкретный автор, выбирается показ по авторам, запрашивается у пользователя
  375. // автор и показываются все книги с этим автором.
Tags: ijunior
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement