Untitled
unknown
plain_text
a year ago
15 kB
22
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