public void RemoveBookTests(int removeYear) { var removeItem = new Book(removeYear, removeYear.ToString()); var collection = new Book[] { new Book(4, "4"), new Book(2, "2"), new Book(1, "1"), new Book(3, "3"), new Book(6, "6"), new Book(7, "7"), new Book(5, "5") }; var comparer = new BookComparer(); var tree = new BinarySearchTree<Book>(collection, comparer.Compare); Assert.IsTrue(tree.Constains(removeItem)); var result = tree.Remove(removeItem); Assert.IsTrue(result); Assert.IsFalse(tree.Constains(removeItem)); foreach (var item in collection) { if (comparer.Compare(item, removeItem) != 0) { Assert.IsTrue(tree.Constains(item)); } } }
public void BinarySearchTree_Book_Comparer_TraverseTest() { var book1 = new Book("a", "author", "001", "pub", 2000, 50, 15); var book2 = new Book("aa", "author", "002", "pub", 2000, 50, 15); var book3 = new Book("aaa", "author", "003", "pub", 2000, 50, 15); var book4 = new Book("aaaa", "author", "004", "pub", 2000, 50, 15); var book5 = new Book("aaaaa", "author", "005", "pub", 2000, 50, 15); var book6 = new Book("aaaaaa", "author", "006", "pub", 2000, 50, 15); Book[] items = { book2, book3, book1, book4, book5, book6 }; var comparer = new BookComparer(); var testTree = new BinarySearchTree <Book>(items, comparer); var inOrderTree = new Book[testTree.Count]; int i = 0; foreach (var item in testTree.InOrder()) { inOrderTree[i] = item; i++; } var preOrderTree = new Book[testTree.Count]; i = 0; foreach (var item in testTree.PreOrder()) { preOrderTree[i] = item; i++; } var postOrderTree = new Book[testTree.Count]; i = 0; foreach (var item in testTree.PostOrder()) { postOrderTree[i] = item; i++; } CollectionAssert.AreEqual(new Book[] { book1, book2, book3, book4, book5, book6 }, inOrderTree); CollectionAssert.AreEqual(new Book[] { book2, book1, book3, book4, book5, book6 }, preOrderTree); CollectionAssert.AreEqual(new Book[] { book1, book6, book5, book4, book3, book2 }, postOrderTree); }
private async void sortingTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) { BookComparer bookComparer = new BookComparer(); List <Book> books = await Book.GetAll(); string selectedSortingType = sortingTypeComboBox.GetItemText(sortingTypeComboBox.SelectedItem); if (selectedSortingType == "Author desc") { bookComparer.sortBy = BookComparer.CompareType.authorDesc; } else if (selectedSortingType == "Title asc") { bookComparer.sortBy = BookComparer.CompareType.titleAsc; } else if (selectedSortingType == "Title desc") { bookComparer.sortBy = BookComparer.CompareType.titleDesc; } else if (selectedSortingType == "Date asc") { bookComparer.sortBy = BookComparer.CompareType.dateAsc; } else if (selectedSortingType == "Date desc") { bookComparer.sortBy = BookComparer.CompareType.dateDesc; } else { bookComparer.sortBy = BookComparer.CompareType.authorAsc; } books.Sort(bookComparer); BookListView.Items.Clear(); PopulateTable(); }
static void Main(string[] args) { bool isRunning = true; List <Book> books = new List <Book> { new Book { Id = 0, ISBN = "1-61-729453-5", Author = "Jon Skeet", Name = "C# in Depth", NumberOfPages = 528, Price = 43m, Publisher = "Manning Publications", Year = 2019 }, new Book { Id = 1, ISBN = "9-78-149198-6", Author = "Joseph Albahari", Name = "C# 7.0 in a Nutshell", NumberOfPages = 1088, Price = 65m, Publisher = "O'Reilly Media", Year = 2017 }, new Book { Id = 2, ISBN = "1-48-423017-5", Author = "Andrew Troelsen, Phil Japikse", Name = "Pro C# 7: With .NET and .NET Core", NumberOfPages = 1372, Price = 32.82m, Publisher = "Apress", Year = 2017 }, new Book { Id = 3, ISBN = "0-73-566745-4", Author = "Jeffrey Richter", Name = "CLR via C#", NumberOfPages = 896, Price = 49.17m, Publisher = "Microsoft Press", Year = 2012 }, new Book { Id = 4, ISBN = "9-78-026203-8", Author = "Thomas Cormen, Ronals Rivest", Name = "Introduction to Algorithms", NumberOfPages = 1320, Price = 87.67m, Publisher = "The MIT Press", Year = 2009 }, new Book { Id = 5, ISBN = "9-78-032157-1", Author = "Mario Hewardt", Name = "Advanced .NET Debugging", NumberOfPages = 552, Price = 44.95m, Publisher = "Addison-Wesley Professional", Year = 2008 } }; IStorage <Book> storage = new BinaryStorage(books); IRepository <Book> repository = new BookRepository(storage); BookService bookService = new BookService(repository); while (isRunning) { Console.WriteLine("!!!BooksApp!!!"); Console.WriteLine("1- Get all books"); Console.WriteLine("2- Get book by ID"); Console.WriteLine("3- Add book"); Console.WriteLine("4- Remove book"); Console.WriteLine("5- Edit book"); Console.WriteLine("6- Sort books"); Console.WriteLine("7- Find book by tag"); //Console.WriteLine("8- To XML file"); //Console.WriteLine("9- To JSON file"); Console.WriteLine("0- Exit"); Console.WriteLine("Select operation:"); bool res = int.TryParse(Console.ReadLine(), out int operation); if (res) { switch (operation) { case 0: isRunning = false; break; case 1: bookService.GetAll().ToList().ForEach(b => Console.WriteLine(b.ToString())); break; case 2: { Console.WriteLine("Enter ID:"); try { int id = int.Parse(Console.ReadLine()); Console.WriteLine(bookService.Get(id).ToString("G")); } catch (Exception ex) { Console.WriteLine(ex.Message); } break; } case 3: { Console.WriteLine(); Console.WriteLine("Enter ISBN:"); string isbn = Console.ReadLine(); Console.WriteLine("Enter Author:"); string author = Console.ReadLine(); Console.WriteLine("Enter Name:"); string name = Console.ReadLine(); Console.WriteLine("Enter Publisher:"); string publisher = Console.ReadLine(); Console.WriteLine("Enter Year:"); int year = int.Parse(Console.ReadLine()); Console.WriteLine("Enter Pages:"); int pages = int.Parse(Console.ReadLine()); Console.WriteLine("Enter Price:"); decimal price = decimal.Parse(Console.ReadLine()); bookService.Create(new Book { ISBN = isbn, Author = author, Name = name, Publisher = publisher, Year = year, NumberOfPages = pages, Price = price }); break; } case 4: { Console.WriteLine("Enter ID to remove book:"); try { int id = int.Parse(Console.ReadLine()); bookService.Delete(id); } catch (Exception ex) { Console.WriteLine(ex.Message); } break; } case 5: { Console.WriteLine("Enter book's tag(name of the author, isbn, book name etc) which you want to edit:"); try { string bookTag = Console.ReadLine(); Book book = bookService.FindBookByTag(bookTag); if (book != null) { Console.WriteLine("What field do you want to change?(field name):"); string fieldName = Console.ReadLine(); switch (fieldName) { case "ISBN": { Console.WriteLine("Enter new ISBN:"); string isbn = Console.ReadLine(); book.ISBN = isbn; break; } case "Author": { Console.WriteLine("Enter new Author:"); string author = Console.ReadLine(); book.Author = author; break; } case "Name": { Console.WriteLine("Enter new book Name:"); string name = Console.ReadLine(); book.Name = name; break; } case "Publisher": { Console.WriteLine("Enter new Publisher:"); string publisher = Console.ReadLine(); book.Publisher = publisher; break; } default: break; } bookService.Update(book); } break; } catch (Exception ex) { Console.WriteLine(ex.Message); } break; } case 6: { Console.WriteLine("Sort by:\n1 - ISBN\n2 - Author\n3 - Name\n4 - Publisher\n5 - Year\n6 - Pages\n7 - Price\n:"); bool isSucceeded = int.TryParse(Console.ReadLine(), out int num); if (isSucceeded) { BookComparer cmp = null; switch (num) { case 1: { cmp = new BookComparer { Comparer = SortBy.ISBN }; break; } case 2: { cmp = new BookComparer { Comparer = SortBy.Author }; break; } case 3: { cmp = new BookComparer { Comparer = SortBy.Name }; break; } case 4: { cmp = new BookComparer { Comparer = SortBy.Publisher }; break; } case 5: { cmp = new BookComparer { Comparer = SortBy.Year }; break; } case 6: { cmp = new BookComparer { Comparer = SortBy.Pages }; break; } case 7: { cmp = new BookComparer { Comparer = SortBy.Price }; break; } default: { cmp = new BookComparer(); break; } } bookService.SortByTag(cmp); } break; } case 7: { Console.WriteLine("Enter tag name:"); string tag = Console.ReadLine(); Console.WriteLine(bookService.FindBookByTag(tag)); break; } //case 8: // { // bookService.ToXML(); // break; // } //case 9: // { // bookService.ToJSON(); // break; // } default: break; } } Console.WriteLine("Press Enter to continue!!!"); Console.ReadLine(); Console.Clear(); } Console.ReadLine(); }