/// <summary>
 /// Remove <see cref="Book"/> from list.
 /// </summary>
 /// <param name="b"><see cref="Book"/> instance.</param>
 public void RemoveBook(Book b)
 {
     this.books.Remove(b);
     BookListStorage.RemoveFromFile(this.books);
     Console.WriteLine("The book is successfully remove.");
     Console.WriteLine();
 }
 /// <summary>
 /// Add new <see cref="Book"/> to list..
 /// </summary>
 /// <param name="b"><see cref="Book"/> instance.</param>
 public void AddBook(Book b)
 {
     try
     {
         if (this.books.Find(c => (c.Author == b.Author) && (c.Name == b.Name)) != null)
         {
             throw new BookException("This book is already exist.");
         }
         else
         {
             this.books.Add(b);
             BookListStorage.AddToFile(b);
             Program.Logger.Info("The book is successfully added.");
         }
     }
     catch (BookException ex)
     {
         Program.Logger.Error(ex.Message);
     }
 }
 /// <summary>
 /// Add new <see cref="Book"/> to list..
 /// </summary>
 /// <param name="b"><see cref="Book"/> instance.</param>
 public void AddBook(Book b)
 {
     try
     {
         if (this.books.Find(c => (c.Author == b.Author) && (c.Name == b.Name)) != null)
         {
             throw new BookException("This book is already exist.");
         }
         else
         {
             this.books.Add(b);
             BookListStorage.AddToFile(b);
             Console.WriteLine("The book is successfully added.");
             Console.WriteLine();
         }
     }
     catch (BookException ex)
     {
         Console.WriteLine(ex.Message);
     }
 }
        /// <summary>
        /// Sort list of books by tag.
        /// </summary>
        /// <param name="tag">Tag.</param>
        public void SortByTag(string tag)
        {
            tag = tag.ToLower(CultureInfo.CreateSpecificCulture("en-US"));
            List <string> tags = new List <string> {
                "isbn", "author", "name", "publishing", "year", "pages", "price"
            };

            try
            {
                if (!tags.Contains(tag))
                {
                    throw new BookException("Incorrect tag.");
                }
            }
            catch (BookException ex)
            {
                Console.WriteLine(ex.Message);
                return;
            }

            var a = this.books.ToArray();

            switch (tag)
            {
            case "isbn":
            {
                Array.Sort(a, Book.SortIsbn());
                this.books = a.ToList();
            }

            break;

            case "author":
            {
                Array.Sort(a, Book.SortAuthor());
                this.books = a.ToList();
            }

            break;

            case "name":
            {
                Array.Sort(a, Book.SortName());
                this.books = a.ToList();
            }

            break;

            case "publishing":
            {
                Array.Sort(a, Book.SortPublishing());
                this.books = a.ToList();
            }

            break;

            case "year":
            {
                Array.Sort(a, Book.SortYear());
                this.books = a.ToList();
            }

            break;

            case "pages":
            {
                Array.Sort(a, Book.SortPages());
                this.books = a.ToList();
            }

            break;

            case "price":
            {
                Array.Sort(a, Book.SortPrice());
                this.books = a.ToList();
            }

            break;
            }

            BookListStorage.SaveSortToFile(this.books);
        }
 /// <summary>
 /// Remove <see cref="Book"/> from list.
 /// </summary>
 /// <param name="b"><see cref="Book"/> instance.</param>
 public void RemoveBook(Book b)
 {
     this.books.Remove(b);
     BookListStorage.RemoveFromFile(this.books);
     Program.Logger.Info("The book is successfully remove.");
 }