Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**************************************************************************************************
- * Program Name: Programming Project 5.7: Bookshelf
- * Class Name: pp5_7.Bookshelf
- * Author: Terry Weiss
- * Date Written: October 15, 2015
- * Program Description:
- * This class contains instance data for a bookshelf that is full of `Book`s. It allows the
- * User to store a book, browse the list of books, view the details of a particular book and
- * take a book off the shelf.
- **************************************************************************************************/
- package pp5_7;
- //import pp5_7.Book;
- import java.util.Scanner;
- import java.util.ArrayList;
- import java.util.Collections;
- /**
- *
- * @author Terry Weiss
- * @see pp5_7.Book
- * @see pp5_7.Librarian
- */
- public class Bookshelf {
- private final String DEFAULT_NAME = "Bookshelf";
- private ArrayList<Book> bookList = new ArrayList();
- private ArrayList<String> genreList = new ArrayList();
- private ArrayList<String> authorList = new ArrayList();
- private final String name;
- Bookshelf() {
- name = DEFAULT_NAME;
- }
- Bookshelf( String name ) {
- this.name = name;
- }
- public int getNumberOfBooks() {
- return bookList.size();
- }
- public String getName() {
- return name;
- }
- Book addBook( Book book ) {
- bookList.add(book);
- String genre = book.getGenre();
- if (!genreList.contains(genre)) {
- genreList.add(genre);
- }
- String author = book.getAuthor();
- if (!authorList.contains(author)) {
- authorList.add(author);
- }
- return book;
- }
- boolean removeBook( Book book ) {
- // If it's the only book of that genre or author, remove the genre/author from its list
- String genre = book.getGenre();
- if (numBooksWithGenre(genre) == 1) {
- genreList.remove(genre);
- }
- String author = book.getAuthor();
- if (numBooksWithAuthor(author) == 1) {
- authorList.remove(author);
- }
- return bookList.remove(book);
- }
- Book removeBook( int position ) {
- String genre = bookList.get(position).getGenre();
- if (numBooksWithGenre(genre) == 1) {
- genreList.remove(genre);
- }
- String author = bookList.get(position).getAuthor();
- if (numBooksWithGenre(genre) == 1) {
- authorList.remove(author);
- }
- return bookList.remove(position);
- }
- boolean removeBook( String title ) {
- if (numBooksWithTitle(title) == 1) {
- removeBook(findBook(title));
- return true;
- }
- else {
- return false;
- }
- }
- String viewBook( int position ) {
- String ret;
- if (position < 0 || position >= bookList.size()) {
- ret = "That book isn't on the shelf.";
- }
- else {
- ret = bookList.get(position).displayDetails();
- }
- return ret;
- }
- String viewBook( String title ) {
- String details = "";
- for (Book currentBook : bookList) {
- if (currentBook.getTitle().equalsIgnoreCase(title)) {
- if (details.length() > 0) { // Separate each entry by a blank line in cases
- details += "\n\n"; // of duplicate titles
- }
- details += currentBook.displayDetails();
- }
- }
- if (details.length() == 0) {
- details = title + " isn't on the shelf.";
- }
- return details;
- }
- public void sortBooksByTitle() {
- Collections.sort(bookList, Book.sortByTitle);
- }
- /**
- * Sort the Books by Author first and then by Title
- */
- public void sortBooksByAuthor() {
- sortBooksByTitle();
- Collections.sort(bookList, Book.sortByAuthor);
- }
- /**
- * Sort the Books by Genre first and then by Title
- */
- public void sortBooksByGenre() {
- sortBooksByTitle();
- Collections.sort(bookList, Book.sortByGenre);
- }
- /**
- * Sort the Books by size first and then by Title
- */
- public void sortBooksBySize() {
- sortBooksByTitle();
- Collections.sort(bookList);
- }
- /**
- * Returns the index of the first occurrence of the Book in this list, or -1 if this list
- * does not contain the Book.
- *
- * @param book Book object to search for
- * @return the index of the first Book, or -1 if it's not there
- */
- public int findBook( Book book ) {
- return bookList.indexOf(book);
- }
- /**
- * Returns the index of the first occurrence of the Book of the same title in this list,
- * or -1 if this list does not contain the Book.
- *
- * @param title Title of the book to search for
- * @return the index of the first Book, or -1 if it's not there
- */
- public int findBook( String title ) {
- for (int currentBook = 0; currentBook < bookList.size(); currentBook++) {
- String currentTitle = bookList.get(currentBook).getTitle();
- if (currentTitle.equalsIgnoreCase(title)) {
- return currentBook;
- }
- }
- return -1;
- }
- public int numBooksWithGenre( String genre ) {
- int books = 0;
- for (Book book : bookList ) {
- if (book.getGenre().equalsIgnoreCase(genre)) {
- books++;
- }
- }
- return books;
- }
- public int numBooksWithAuthor( String author ) {
- int books = 0;
- for (Book book : bookList ) {
- if (book.getAuthor().equalsIgnoreCase(author)) {
- books++;
- }
- }
- return books;
- }
- public int numBooksWithTitle( String title ) {
- int books = 0;
- for (Book book : bookList ) {
- if (book.getTitle().equalsIgnoreCase(title)) {
- books++;
- }
- }
- return books;
- }
- public String browse() {
- String list = "";
- for (Book currentBook : bookList ) {
- list += currentBook + "\n";
- }
- return list;
- }
- public String browseByTitle() {
- sortBooksByTitle();
- return browse();
- }
- public String browseByAuthor() {
- sortBooksByAuthor();
- return browse();
- }
- public String browseByGenre() {
- sortBooksByGenre();
- return browse();
- }
- public String browseBySize() {
- sortBooksBySize();
- return browse();
- }
- public String browseBooksOfGenre( String genre ) {
- String list = "";
- // Make the genre Capitalized to match format of genres and be case-insensitive
- genre = genre.substring(0, 1).toUpperCase() + genre.substring(1).toLowerCase();
- if (genreList.indexOf(genre) == -1) {
- list = "There are no books of that genre.\n";
- }
- else {
- sortBooksByGenre();
- int i = 0;
- // Find first book with the genre
- while (!bookList.get(i).getGenre().equalsIgnoreCase(genre)) {
- i++;
- }
- // Display all books until the genre changes or until it's the last book of the shelf
- while (i < bookList.size() && bookList.get(i).getGenre().equalsIgnoreCase(genre)) {
- list += bookList.get(i) + "\n";
- i++;
- }
- }
- return list;
- }
- public String browseBooksOfAuthor( String author ) {
- String list = "";
- // Make the genre Capitalized to match format of genres and be case-insensitive
- author = author.substring(0, 1).toUpperCase() + author.substring(1).toLowerCase();
- if (authorList.indexOf(author) == -1) {
- list = "There are no books by that author.\n";
- }
- else {
- sortBooksByAuthor();
- int i = 0;
- // Find first book with the genre
- while (!bookList.get(i).getAuthor().equalsIgnoreCase(author)) {
- i++;
- }
- // Display all books until the genre changes or until it's the last book of the shelf
- while (i < bookList.size() && bookList.get(i).getAuthor().equalsIgnoreCase(author)) {
- list += bookList.get(i) + "\n";
- i++;
- }
- }
- return list;
- }
- public String browseByCategory( String category ) {
- String list = "";
- if (category.equalsIgnoreCase("author")) {
- for (String author : authorList) {
- list += author + ":\n"
- + browseBooksOfAuthor(author) + "\n";
- }
- }
- else if (category.equalsIgnoreCase("genre")) {
- for (String genre : genreList) {
- list += genre + ":\n"
- + browseBooksOfGenre(genre) + "\n";
- }
- }
- else {
- list = "No such category.\n";
- }
- return list;
- }
- @Override
- public String toString() {
- return getName();
- }
- /**
- * @param args the command line arguments
- */
- public static void main(String[] args) {
- Scanner user_input = new Scanner(System.in);
- Bookshelf myShelf = new Bookshelf();
- myShelf.addBook(new Book("book1", 321, "martin", "fiction"));
- myShelf.addBook(new Book("book2", 123, "Martin", "non-fiction"));
- myShelf.addBook(new Book("book3", 852, "Peter", "sci-fi"));
- myShelf.addBook(new Book("book4", 753, "Martin", "fiction"));
- myShelf.addBook(new Book("book5", 159, "Ralph", "non-fiction"));
- myShelf.addBook(new Book("book6", 349, "MartIn", "fiction"));
- myShelf.removeBook("book2");
- System.out.print(myShelf.browseByCategory("author"));
- System.out.println(myShelf.viewBook("book1"));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment