Advertisement
ZhongNi

Book storage (2)

May 20th, 2024 (edited)
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.19 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using static Classes.ConstantsKeeper;
  4.  
  5. namespace Classes
  6. {
  7.     internal class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             Administrator administrator = new Administrator();
  12.             BookStorage bookStorage = new BookStorage();
  13.             Console.CursorVisible = false;
  14.             administrator.WorkMenu(bookStorage);
  15.         }
  16.     }
  17.  
  18.     static class ConstantsKeeper
  19.     {
  20.         public const ConsoleKey MenuUp = ConsoleKey.UpArrow;
  21.         public const ConsoleKey MenuDown = ConsoleKey.DownArrow;
  22.         public const ConsoleKey MenuSelect = ConsoleKey.Enter;
  23.  
  24.         public const int CommandAdd = 1;
  25.         public const int CommandRemove = 2;
  26.         public const int CommandFindAll = 3;
  27.         public const int CommandFindByTitle = 4;
  28.         public const int CommandFindByAuthor = 5;
  29.         public const int CommandFindByPublishingYear = 6;
  30.         public const int CommandExit = 7;
  31.     }
  32.  
  33.     class Administrator
  34.     {
  35.         public void WorkMenu(BookStorage bookStorage)
  36.         {
  37.             bool isRunning = true;
  38.  
  39.             while (isRunning)
  40.             {
  41.                 switch (GetWorkMenuSelection())
  42.                 {
  43.                     case CommandAdd:
  44.                         bookStorage.AddBook();
  45.                         break;
  46.  
  47.                     case CommandRemove:
  48.                         bookStorage.RemoveBook();
  49.                         break;
  50.  
  51.                     case CommandFindAll:
  52.                         bookStorage.FindAll();
  53.                         break;
  54.  
  55.                     case CommandFindByTitle:
  56.                         bookStorage.FindByTitle();
  57.                         break;
  58.  
  59.                     case CommandFindByAuthor:
  60.                         bookStorage.FindByAuthor();
  61.                         break;
  62.  
  63.                     case CommandFindByPublishingYear:
  64.                         bookStorage.FindByPublishingYear();
  65.                         break;
  66.  
  67.                     case CommandExit:
  68.                         isRunning = false;
  69.                         break;
  70.                 }
  71.             }
  72.         }
  73.  
  74.         private int GetWorkMenuSelection()
  75.         {
  76.             bool isSelected = false;
  77.             int selectOption = 1;
  78.  
  79.             while (isSelected == false)
  80.             {
  81.                 int leftPosition = 0;
  82.                 int topPosition = 1;
  83.                 string colorSet = "\u001b[32m";
  84.                 string colorReset = "\u001b[0m";
  85.  
  86.                 Console.SetCursorPosition(leftPosition, topPosition);
  87.  
  88.                 Console.WriteLine($"" +
  89.                     $"{colorReset}" +
  90.                     $"Use \"UpArrow\" and \"DownArrow\" to select, \"Enter\" to confirm\n" +
  91.                     $"\n{(selectOption == CommandAdd ? colorSet + CommandAdd : colorReset + ' ')} Add book" +
  92.                     $"\n{(selectOption == CommandRemove ? colorSet + CommandRemove : colorReset + ' ')} Remove book" +
  93.                     $"\n{(selectOption == CommandFindAll ? colorSet + CommandFindAll : colorReset + ' ')} Show All book" +
  94.                     $"\n{(selectOption == CommandFindByTitle ? colorSet + CommandFindByTitle : colorReset + ' ')} Find By Title" +
  95.                     $"\n{(selectOption == CommandFindByAuthor ? colorSet + CommandFindByAuthor : colorReset + ' ')} Find By Author" +
  96.                     $"\n{(selectOption == CommandFindByPublishingYear ? colorSet + CommandFindByPublishingYear : colorReset + ' ')} Find By Publishing Year" +
  97.                     $"\n{(selectOption == CommandExit ? colorSet + CommandExit : colorReset + ' ')} Exit" +
  98.                     $"{colorReset}");
  99.  
  100.                 selectOption = Select(selectOption, CommandAdd, CommandExit, out isSelected);
  101.             }
  102.  
  103.             return selectOption;
  104.         }
  105.  
  106.         private int Select(int selectOption, int minMenuValue, int maxMenuValue, out bool isSelected)
  107.         {
  108.             ConsoleKeyInfo key = Console.ReadKey(true);
  109.             isSelected = false;
  110.  
  111.             switch (key.Key)
  112.             {
  113.                 case MenuUp:
  114.                     selectOption = (selectOption <= minMenuValue ? maxMenuValue : selectOption - 1);
  115.                     break;
  116.  
  117.                 case MenuDown:
  118.                     selectOption = (selectOption >= maxMenuValue ? minMenuValue : selectOption + 1);
  119.                     break;
  120.  
  121.                 case MenuSelect:
  122.                     isSelected = true;
  123.                     break;
  124.             }
  125.  
  126.             return selectOption;
  127.         }
  128.     }
  129.  
  130.     class BookStorage
  131.     {
  132.         private List<Book> _books = new List<Book>();
  133.  
  134.         private int Count => _books.Count;
  135.  
  136.         public void AddBook()
  137.         {
  138.             Console.CursorVisible = true;
  139.             Console.Write("\nEnter author: ");
  140.             string author = Console.ReadLine();
  141.             Console.Write("\nEnter the title: ");
  142.             string title = Console.ReadLine();
  143.             Console.Write("\nEnter publishing year: ");
  144.             int.TryParse(Console.ReadLine(), out int year);
  145.             Console.CursorVisible = false;
  146.  
  147.             if (title != "" && author != "" && year != 0)
  148.             {
  149.                 _books.Add(new Book(title, author, year));
  150.                 Console.WriteLine($"\u001b[34mBook added: Author {author} - Title: {title} ({year})\u001b[0m");
  151.             }
  152.             else
  153.             {
  154.                 Console.WriteLine("\u001b[34mAll fields must be non - empty\u001b[0m");
  155.             }
  156.  
  157.             Console.WriteLine("Press anything ...");
  158.             Console.ReadKey();
  159.             Console.Clear();
  160.         }
  161.  
  162.         public void RemoveBook()
  163.         {
  164.             if (Count > 0)
  165.             {
  166.                 Console.CursorVisible = true;
  167.                 Console.WriteLine("\nBook with which index should be deleted?");
  168.                 Console.Write("\nEnter index: ");
  169.                 int.TryParse(Console.ReadLine(), out int index);
  170.                 Console.CursorVisible = false;
  171.  
  172.                 if (index > 0 && index <= Count)
  173.                 {
  174.                     index--;
  175.                     Console.WriteLine($"\u001b[34mBook removed: Author {_books[index].Author} - Title: {_books[index].Title} ({_books[index].PublishingYear})\u001b[0m");
  176.                     _books.RemoveAt(index);
  177.                 }
  178.                 else
  179.                 {
  180.                     Console.WriteLine("\u001b[34m Nothing found\u001b[0m");
  181.                 }
  182.  
  183.                 Console.WriteLine("Press anything ...");
  184.                 Console.ReadKey();
  185.                 Console.Clear();
  186.             }
  187.         }
  188.  
  189.         public void FindAll()
  190.         {
  191.             if (Count > 0)
  192.             {
  193.                 for (int i = 0; i < Count; i++)
  194.                 {
  195.                     Console.Write($"{i + 1}. Author {_books[i].Author} - Title: {_books[i].Title} ({_books[i].PublishingYear})\n");
  196.                 }
  197.             }
  198.             else
  199.             {
  200.                 Console.WriteLine("\u001b[34m Nothing found\u001b[0m");
  201.             }
  202.  
  203.             Console.WriteLine("Press anything ...");
  204.             Console.ReadKey();
  205.             Console.Clear();
  206.         }
  207.  
  208.         public void FindByTitle()
  209.         {
  210.             Console.CursorVisible = true;
  211.             Console.Write("Enter the title of the book you want to find: ");
  212.             string userInput = Console.ReadLine().ToUpper();
  213.             Console.CursorVisible = false;
  214.             bool hasValue = false;
  215.  
  216.             foreach (var book in _books)
  217.             {
  218.                 if (book.Title.ToUpper() == userInput)
  219.                 {
  220.                     PrintBookOptions(book);
  221.                     hasValue = true;
  222.                 }
  223.             }
  224.  
  225.             if (hasValue == false)
  226.             {
  227.                 Console.WriteLine("\u001b[34m Nothing found\u001b[0m");
  228.             }
  229.  
  230.             Console.WriteLine("Press anything ...");
  231.             Console.ReadKey();
  232.             Console.Clear();
  233.         }
  234.  
  235.         public void FindByAuthor()
  236.         {
  237.             Console.CursorVisible = true;
  238.             Console.Write("Enter the author of the book you want to find: ");
  239.             string userInput = Console.ReadLine().ToUpper();
  240.             Console.CursorVisible = false;
  241.             bool hasValue = false;
  242.  
  243.             foreach (var book in _books)
  244.             {
  245.                 if (book.Author.ToUpper() == userInput)
  246.                 {
  247.                     PrintBookOptions(book);
  248.                     hasValue = true;
  249.                 }
  250.             }
  251.  
  252.             if (hasValue == false)
  253.             {
  254.                 Console.WriteLine("\u001b[34m Nothing found\u001b[0m");
  255.             }
  256.  
  257.             Console.WriteLine("Press anything ...");
  258.             Console.ReadKey();
  259.             Console.Clear();
  260.         }
  261.  
  262.         public void FindByPublishingYear()
  263.         {
  264.             Console.CursorVisible = true;
  265.             Console.Write("Enter the year of the book you want to find: ");
  266.             int.TryParse(Console.ReadLine(), out int year);
  267.             Console.CursorVisible = false;
  268.             bool hasValue = false;
  269.  
  270.             foreach (var book in _books)
  271.             {
  272.                 if (book.PublishingYear == year)
  273.                 {
  274.                     PrintBookOptions(book);
  275.                     hasValue = true;
  276.                 }
  277.             }
  278.  
  279.             if (hasValue == false)
  280.             {
  281.                 Console.WriteLine("\u001b[34m Nothing found\u001b[0m");
  282.             }
  283.  
  284.             Console.WriteLine("Press anything ...");
  285.             Console.ReadKey();
  286.             Console.Clear();
  287.         }
  288.  
  289.         private void PrintBookOptions(Book book)
  290.         {
  291.             Console.Write($"Author {book.Author} - Title: {book.Title} ({book.PublishingYear})\n");
  292.         }
  293.     }
  294.  
  295.     class Book
  296.     {
  297.         public Book(string title, string author, int publishingYear)
  298.         {
  299.             Title = title;
  300.             Author = author;
  301.             PublishingYear = publishingYear;
  302.         }
  303.  
  304.         public string Title { get; private set; }
  305.         public string Author { get; private set; }
  306.         public int PublishingYear { get; private set; }
  307.     }
  308. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement