Untitled

 avatar
unknown
plain_text
a year ago
15 kB
23
Indexable
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

// ABSTRACTION: Abstract base class
abstract class LibraryItem {
    // ENCAPSULATION: private fields + getters/setters
    private String title;
    private String author;

    public LibraryItem(String title, String author) {
        this.title = title;
        this.author = author;
    }

    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }

    public String getAuthor() { return author; }
    public void setAuthor(String author) { this.author = author; }

    // Abstract method
    public abstract void displayInfo();

    // Abstract method for genre type
    public abstract String getGenreType();
}

// INHERITANCE: Generalist (a genre type)
class Generalist extends LibraryItem {
    private int pages;

    public Generalist(String title, String author, int pages) {
        super(title, author);
        this.pages = pages;
    }

    public int getPages() { return pages; }

    @Override //POLYMORPHISM in Action: Here the displayInfo is different from the other classes under LibraryItem
    public void displayInfo() {
        System.out.println("[Generalist] " + getTitle() + " by " + getAuthor() +
                ", " + pages + " pages");
    }

    @Override //POLYMORPHISM in Action: This will only show the genres in this class e.g. Generalist
    public String getGenreType() {
        return "Generalist";
    }
}

// INHERITANCE: Literature (another genre type)
class Literature extends LibraryItem {
    private int pages;

    public Literature(String title, String author, int pages) {
        super(title, author);
        this.pages = pages;
    }

    public int getPages() { return pages; }

    @Override
    public void displayInfo() {
        System.out.println("[Literature] " + getTitle() + " by " + getAuthor() +
                ", " + pages + " pages");
    }

    @Override
    public String getGenreType() {
        return "Literature";
    }
}
class Religion extends LibraryItem {
    private int pages;

    public Religion(String title, String author, int pages) {
        super(title, author);
        this.pages = pages;
    }

    public int getPages() { return pages; }

    @Override
    public void displayInfo() {
        System.out.println("[Religion] " + getTitle() + " by " + getAuthor() +
                ", " + pages + " pages");
    }

    @Override
    public String getGenreType() {
        return "Religion";
    }
}
class SocSci extends LibraryItem {
    private int pages;

    public SocSci(String title, String author, int pages) {
        super(title, author);
        this.pages = pages;
    }

    public int getPages() { return pages; }

    @Override
    public void displayInfo() {
        System.out.println("[Social Sciences] " + getTitle() + " by " + getAuthor() +
                ", " + pages + " pages");
    }

    @Override
    public String getGenreType() {
        return "Social Sciences";
    }
}
class Languages extends LibraryItem {
    private int pages;

    public Languages(String title, String author, int pages) {
        super(title, author);
        this.pages = pages;
    }

    public int getPages() { return pages; }

    @Override
    public void displayInfo() {
        System.out.println("[Languages] " + getTitle() + " by " + getAuthor() +
                ", " + pages + " pages");
    }

    @Override
    public String getGenreType() {
        return "Languages";
    }
}
class NatSci extends LibraryItem {
    private int pages;

    public NatSci(String title, String author, int pages) {
        super(title, author);
        this.pages = pages;
    }

    public int getPages() { return pages; }

    @Override
    public void displayInfo() {
        System.out.println("[Natural Science] " + getTitle() + " by " + getAuthor() +
                ", " + pages + " pages");
    }

    @Override
    public String getGenreType() {
        return "Natural Science";
    }
}
class AppSci extends LibraryItem {
    private int pages;

    public AppSci(String title, String author, int pages) {
        super(title, author);
        this.pages = pages;
    }

    public int getPages() { return pages; }

    @Override
    public void displayInfo() {
        System.out.println("[Applied Science] " + getTitle() + " by " + getAuthor() +
                ", " + pages + " pages");
    }

    @Override
    public String getGenreType() {
        return "Applied Science";
    }
}
class Arts extends LibraryItem {
    private int pages;

    public Arts(String title, String author, int pages) {
        super(title, author);
        this.pages = pages;
    }

    public int getPages() { return pages; }

    @Override
    public void displayInfo() {
        System.out.println("[Arts & Recreation] " + getTitle() + " by " + getAuthor() +
                ", " + pages + " pages");
    }

    @Override
    public String getGenreType() {
        return "Arts & Recreation";
    }
}
class Philosophy extends LibraryItem {
    private int pages;

    public Philosophy(String title, String author, int pages) {
        super(title, author);
        this.pages = pages;
    }

    public int getPages() { return pages; }

    @Override
    public void displayInfo() {
        System.out.println("[Philosophy] " + getTitle() + " by " + getAuthor() +
                ", " + pages + " pages");
    }

    @Override
    public String getGenreType() {
        return "Philosophy";
    }
}
class GeoHistory extends LibraryItem {
    private int pages;

    public GeoHistory(String title, String author, int pages) {
        super(title, author);
        this.pages = pages;
    }

    public int getPages() { return pages; }

    @Override
    public void displayInfo() {
        System.out.println("[Geography and History] " + getTitle() + " by " + getAuthor() +
                ", " + pages + " pages");
    }

    @Override
    public String getGenreType() {
        return "Geography and History";
    }
}
class Biography extends LibraryItem {
    private int pages;

    public Biography(String title, String author, int pages) {
        super(title, author);
        this.pages = pages;
    }

    public int getPages() { return pages; }

    @Override
    public void displayInfo() {
        System.out.println("[Biography] " + getTitle() + " by " + getAuthor() +
                ", " + pages + " pages");
    }

    @Override
    public String getGenreType() {
        return "Biography";
    }
}


class Library {
    private List<LibraryItem> items = new ArrayList<>();

    public void addItem(LibraryItem item) {
        items.add(item);
    }

    public void showAllItems() {
        if (items.isEmpty()) {
            System.out.println("Library is empty.");
        } else {
            for (LibraryItem item : items) {
                item.displayInfo();
            }
        }
    }


    public void searchByGenre(String genre) {
        boolean found = false;
        for (LibraryItem item : items) {
            if (item.getGenreType().equalsIgnoreCase(genre)) {
                item.displayInfo();
                found = true;
            }
        }
        if (!found) {
            System.out.println("No items found in genre: " + genre);
        }
    }
}


public class Main {
    public static void main(String[] args) {
        Library library = new Library();
        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("\n--- Library Menu ---");
            System.out.println("1. Add Item to the Library");
            System.out.println("2. Show All Items");
            System.out.println("3. Search by Genre");
            System.out.println("4. Exit");
            System.out.print("Choose an option: ");
            int choice = sc.nextInt();
            sc.nextLine(); // consume newline


            switch (choice) {
                case 1:
                    System.out.println("Select Genre Type:");
                    System.out.println("1. Generalist");
                    System.out.println("2. Literature");
                    System.out.println("3. Religion");
                    System.out.println("4. Social Sciences");
                    System.out.println("5. Languages");
                    System.out.println("6. Natural Science");
                    System.out.println("7. Applied Science");
                    System.out.println("8. Arts & Recreation");
                    System.out.println("9. Philosophy");
                    System.out.println("10. Geography and History");
                    System.out.println("11. Back to Main Menu");
                    System.out.print("Enter your choice (1-10): ");
                    int genreChoice = sc.nextInt();
                    sc.nextLine();

                    if (genreChoice == 11) {
                        break; // back to main menu
                    }
                    if (genreChoice < 1 || genreChoice > 11) {
                        System.out.println("Invalid choice. Please try again.");
                        continue;
                    }

                    System.out.print("Enter title: ");
                    String title = sc.nextLine();
                    System.out.print("Enter author: ");
                    String author = sc.nextLine();

                    if (genreChoice == 1) {
                        System.out.print("Enter number of pages: ");
                        int pages = sc.nextInt();
                        sc.nextLine();
                        library.addItem(new Generalist(title, author, pages));
                        System.out.println("Generalist material added!");
                    } else if (genreChoice == 2) {
                        System.out.print("Enter number of pages: ");
                        int pages = sc.nextInt();
                        sc.nextLine();
                        library.addItem(new Literature(title, author, pages));
                        System.out.println("Literature material added!");
                    } else if (genreChoice == 3) {
                        System.out.print("Enter number of pages: ");
                        int pages = sc.nextInt();
                        sc.nextLine();
                        library.addItem(new Religion(title, author, pages));
                        System.out.println("Religion material added!");
                    } else if (genreChoice == 4) {
                        System.out.print("Enter number of pages: ");
                        int pages = sc.nextInt();
                        sc.nextLine();
                        library.addItem(new SocSci(title, author, pages));
                        System.out.println("Social Sciences material added!");
                    } else if (genreChoice == 5) {
                        System.out.print("Enter number of pages: ");
                        int pages = sc.nextInt();
                        sc.nextLine();
                        library.addItem(new Languages(title, author, pages));
                        System.out.println("Languages material added!");
                    } else if (genreChoice == 6) {
                        System.out.print("Enter number of pages: ");
                        int pages = sc.nextInt();
                        sc.nextLine();
                        library.addItem(new NatSci(title, author, pages));
                        System.out.println("Natural Science material added!");
                    } else if (genreChoice == 7) {
                        System.out.print("Enter number of pages: ");
                        int pages = sc.nextInt();
                        sc.nextLine();
                        library.addItem(new AppSci(title, author, pages));
                        System.out.println("Applied Science material added!");
                    } else if (genreChoice == 8) {
                        System.out.print("Enter number of pages: ");
                        int pages = sc.nextInt();
                        sc.nextLine();
                        library.addItem(new Arts(title, author, pages));
                        System.out.println("Arts and Recreation material added!");
                    } else if (genreChoice == 9) {
                        System.out.print("Enter number of pages: ");
                        int pages = sc.nextInt();
                        sc.nextLine();
                        library.addItem(new GeoHistory(title, author, pages));
                        System.out.println("Geography and History material added!");
                    } else {
                        System.out.print("Enter number of pages: ");
                        int pages = sc.nextInt();
                        sc.nextLine();
                        library.addItem(new Biography(title, author, pages));
                        System.out.println("Biography material added!");
                    }
                    break;

                case 2:
                    library.showAllItems();
                    break;

                case 3:

                    System.out.println("Available genres");
                    System.out.println("Generalist");
                    System.out.println("Literature");
                    System.out.println("Religion");
                    System.out.println("Social Sciences");
                    System.out.println("Languages");
                    System.out.println("Natural Science");
                    System.out.println("Applied Science");
                    System.out.println("Arts & Recreation");
                    System.out.println("Philosophy");
                    System.out.println("Geography and History");
                    System.out.print("\nEnter genre to search: ");


                    String searchGenre = sc.nextLine();
                    library.searchByGenre(searchGenre);
                    break;

                case 4:
                    System.out.println("Exiting...");
                    sc.close();
                    return;

                default:
                    System.out.println("Invalid option. Try again.");
            }
        }
    }
}
Editor is loading...
Leave a Comment