Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

I have a method in my main that adds a Library Card to an ArrayList. public stat

ID: 3837411 • Letter: I

Question

I have a method in my main that adds a Library Card to an ArrayList.

public static LibraryCardManager Card;

System.out.println("Enter Your Name");
               String Name = input.next();
               System.out.println("Enter Your ID Number");
               String ID = input.next();
               Card.addLibraryCard(ID, Name);

The LibraryManagerCard class takes a LibraryCard object as the parameter instead of an int and string from the method in main.

private ArrayList<LibraryCard> libraryCards;

public void addLibraryCard(LibraryCard card){

       libraryCards.add(card);
}

How will I be able to change the int and string into a LibraryCard object and use that method. Full code below

Main.java

import java.time.LocalDate;
import java.util.Scanner;

public class main {
  
   //public static Catalog catalog;
   public static LibraryCardManager Card;
  
   public static void main (String[] args) throws java.lang.Exception
   {
           // Set up the menu for the user to choose the action to perform
          
       Catalog catalog = new Catalog();
      
           Scanner input = new Scanner(System.in);
           int selection = 0;
           System.out.println("***************** WElCOME TO THE LIBRARY *******************");
           System.out.println(" Please select one of the following options: ");
           System.out.println("********* ***************************************** *********");
          
           while (selection != 9){
              
               System.out.println("1: Add Books or DVDs to the Library's Catalog");
               System.out.println("2: Add a new LibraryCard");
               System.out.println("3: Display a list of the Library Catalog");
               System.out.println("4: Check-Out a Book or a DVD");
               System.out.println("5: Display a list of Library Materials Checked-Out by you");
               System.out.println("6: Check-In a Book or DVD by Material Title");
               System.out.println("7: Check-out all Books & DVDs Checked-Out by you");
               System.out.println("8: Renew a Book (only)");
               System.out.println("9: Exit");
                  
               selection = input.nextInt();
              
              
              
           switch(selection)
           {
           case 1 :
              
               System.out.println("How many Books or DVDs Would You like to add to the Library's Catalog?");
               int Copies = input.nextInt();
               System.out.println("Enter 1 for Type BOOKS | Enter 2 to type DVDS");
               int C1 = input.nextInt();
              
               System.out.println("Enter the Material's Title");
               String Title = input.next();
               System.out.println("Enter the Material's ISBN");
               String ISBN = input.next();
                  
                   if (C1 == 1){
                       System.out.println("Enter The Book's Author");
                       String Author = input.next();
                       Book b = new Book(Title, ISBN, Author);
                       catalog.add(b, Copies);
                      
                   }else if (C1 == 2){
                       System.out.println("Enter The DVD's Main Actor");
                       String mainActor = input.next();
                       DVD d = new DVD(Title, ISBN, mainActor);
                       catalog.add(d, Copies);
                       }
                  
               break;

              
           case 2 :
                 
               System.out.println("Enter Your Name");
               String Name = input.next();
               System.out.println("Enter Your ID Number");
               String ID = input.next();
               Card.addLibraryCard(ID, Name); //Original Problem
              
               break;
                 
                 
           case 3 :
              
               catalog.availableCopies();

           break;
          
          
          
           case 4 :
              
               System.out.println("Enter Your Library Card ID Number");
               String ID1 = input.next();
               System.out.println("Enter Title of Library Material you want to Check-Out");
               String Title1 = input.next();
              
               LibraryCard CheckOutMaterial = Card.getCardByID(ID1);
               CheckOutMaterial.checkOutLibraryMaterial(Title1); //Same problem here but different object
              
               break;
              
              
              
           case 5 :
              
               System.out.println("Enter Your Library Card ID Number");
               String ID2 = input.next();
               LibraryCard CheckedOutMaterial = Card.getCardByID(ID2);
               CheckedOutMaterial.getLibraryMaterialsSorted();
              
               break;
              
              
           case 6 :
               System.out.println("Enter Your Library Card ID Number");
               String ID3 = input.next();
               System.out.println("Enter Material's Title to be Checked-In");
               String Title2 = input.next();
               LibraryCard ReturnMaterial = Card.getCardByID(ID3);
               ReturnMaterial.returnMaterials(Title2);
  
               break;
              
              
              
           case 7 :
  
               System.out.println("Enter Your Library Card ID Number");
               String ID4 = input.next();
               LibraryCard ReturnMaterial1 = Card.getCardByID(ID4);
              
      
               for(LibraryMaterialCopy m : ReturnMaterial1.getMaterialsCheckedOut())
               {
                   ReturnMaterial1.returnMaterials(m.getTitle());
               }
               break;
              
              
              
           case 8 :
               System.out.println("Enter Your Library Card ID Number");
               String ID5 = input.next();
               System.out.println("Enter the Book's Title to Renew");
               String Title3 = input.next();
               LibraryCard RenewBook = Card.getCardByID(ID5);
               RenewBook.renewLibraryMaterial(Title3);
              
               break;
         
           case 9:
                  
                   System.exit(0);
  
           }
           }
       }
       }

LibraryCard.java

import java.util.List;
import java.util.ArrayList;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
public class LibraryCard {
  
   private String id;
   private String cardholderName;
   private List<LibraryMaterialCopy> libraryMaterialsCheckedOut;
   private double balance;
  
   public LibraryCard(String i, String name) {
      
       id = i;
       cardholderName = name;
       libraryMaterialsCheckedOut = new ArrayList<LibraryMaterialCopy>();
       balance = 0;
   }

   public String getID() {
       return id;
   }

   public String getCardholderName() {
       return cardholderName;
   }

   public List<LibraryMaterialCopy> getlibraryMaterialsCheckedOut() {
       return new ArrayList<LibraryMaterialCopy>(libraryMaterialsCheckedOut);
   }

   public void setCardholderName(String name) {
       cardholderName = name;
   }

   public boolean checkOutLibraryMaterial(LibraryMaterialCopy libraryMaterial, LocalDate todaysDate) {

       if (!libraryMaterial.checkOut(this))
           return false;

       libraryMaterialsCheckedOut.add(libraryMaterial);
       return true;
   }

   public boolean checkOutLibraryMaterial(LibraryMaterialCopy libraryMaterial)
   // default check out, uses today's date
   {
       return checkOutLibraryMaterial(libraryMaterial, LocalDate.now());
   }

   public boolean returnLibraryMaterial(LibraryMaterialCopy libraryMaterial, LocalDate returnDate)
   // returns libraryMaterial and sends message to libraryMaterialCopy to do
   // the same
   // returns false if libraryMaterial is not checked out
   // takes parameter that expresses the date of return
   {
       LocalDate dueDate = libraryMaterial.getDueDate();
      
       if (!libraryMaterial.returnCopy())
           return false;
      
       if (!libraryMaterialsCheckedOut.remove(libraryMaterial))
           return false;
      
       long daysBetween = ChronoUnit.DAYS.between(dueDate, returnDate);
      
       if (daysBetween > 0) // libraryMaterial is returned late
       {
           balance += libraryMaterial.getFinePerDay() * daysBetween;
       }
      
       return true;
   }

   public boolean returnLibraryMaterial(LibraryMaterialCopy libraryMaterial)
   // default method, uses today's date as returns date
   {
       return returnLibraryMaterial(libraryMaterial, LocalDate.now());
   }

   public boolean renewLibraryMaterial(LibraryMaterialCopy libraryMaterial, LocalDate renewalDate)
   // renews libraryMaterial. Returns false if libraryMaterial is not checked
   // out already
   // takes parameter that expresses date of renewal
   // returns false if librayrMaterial is not a book
   {
       if (!libraryMaterialsCheckedOut.contains(libraryMaterial))
           return false;

       if (libraryMaterial.isRenewable()) {
          
           if (!((BookCopy) libraryMaterial).renew(renewalDate))
               return false;
          
           return true;
       }
       return false;
   }

   public boolean renewLibraryMaterial(LibraryMaterialCopy libraryMaterial)
   // default renewal method uses today's date as renewal date.
   {
       return renewLibraryMaterial(libraryMaterial, LocalDate.now());
   }

   public List<LibraryMaterialCopy> getlibraryMaterialsDueBy(LocalDate date)
   // returns an List of libraryMaterials due on or before date
   {

       List<LibraryMaterialCopy> libraryMaterialsDue = new ArrayList<LibraryMaterialCopy>();
  
       for (LibraryMaterialCopy libraryMaterial : libraryMaterialsCheckedOut) {
      
           if (libraryMaterial.getDueDate().isBefore(date) || libraryMaterial.getDueDate().equals(date)) {
               libraryMaterialsDue.add(libraryMaterial);
           }
       }
       return libraryMaterialsDue;
   }

   public List<LibraryMaterialCopy> getLibraryMaterialsOverdue(LocalDate todaysDate) {
       return getlibraryMaterialsDueBy(todaysDate.minusDays(1));
   }

   public ArrayList<LibraryMaterialCopy> getLibraryMaterialsOverdue()
   // default method, returns libraryMaterials overdue as of today, which means
   // that they
   // were due by yesterday
   {
       return (ArrayList<LibraryMaterialCopy>) getLibraryMaterialsOverdue(LocalDate.now());
   }

   public ArrayList<LibraryMaterialCopy> getLibraryMaterialsSorted()
   // returns List of libraryMaterials, sorted by due date (earliest due date
   // first)
   // uses insertion sort
   {
  
       List<LibraryMaterialCopy> libraryMaterials = new ArrayList<LibraryMaterialCopy>(libraryMaterialsCheckedOut);

       for (int i = 1; i < libraryMaterials.size(); i++) {

           int j = i;

           while (j > 0 && libraryMaterials.get(j - 1).getDueDate().isAfter(libraryMaterials.get(j).getDueDate())) {
           // swap elements in positions j and j-1

               LibraryMaterialCopy temp = libraryMaterials.get(j);
               libraryMaterials.set(j, libraryMaterials.get(j - 1));
               libraryMaterials.set(j - 1, temp);
               j = j - 1;
           }
       }  
       return (ArrayList<LibraryMaterialCopy>) libraryMaterials;
   }
}

LibraryCardManager.java

import java.util.ArrayList;

public class LibraryCardManager {
   private ArrayList<LibraryCard> libraryCards;
  
   public LibraryCardManager() {
       new ArrayList<LibraryCard>();
   }

   public void addLibraryCard(LibraryCard card){
       libraryCards.add(card);
   }

   public LibraryCard getCardByID(String id){

       for(LibraryCard card: libraryCards){
           if(card.getID().equals(id))
               return card;
       }
       return null;
   }
}

LibraryMaterial.java

public class LibraryMaterial {

   private String ISBN;
   private String title;

   public LibraryMaterial(String i, String t) {
       ISBN = i;
       title = t;
   }

   public String getISBN() {
       return ISBN;
   }

   public String getTitle() {
       return title;
   }

   public void print() {
       System.out.print("ISBN: " + ISBN + " title: " + title + " ");
   }
  
   public boolean isTitle(String s) {
  
       if(this.title.equals(s))
           return true;
      
       return false;
   }
}

LibraryMaterialCopy.java

import java.time.LocalDate;

public abstract class LibraryMaterialCopy {
   protected LibraryCard card;
   protected LocalDate dueDate;

   public LibraryMaterialCopy() {
       card = null;
       dueDate = null;
   }

   public abstract LibraryMaterial getLibraryMaterial();
   public abstract String getTitle();
   public abstract String getISBN();
   public abstract int getBorrowingWeeks();
   public abstract double getFinePerDay();
   public abstract boolean isRenewable();
   public abstract boolean isTitle(String s);

   public LibraryCard getCard() {
       return card;
   }

   public LocalDate getDueDate() {
       return dueDate;
   }

   public boolean checkOut(LibraryCard borrower, LocalDate dateOfBorrowing)
   /*
   * checks book out by setting card reference to borrower. returns false if
   * book is already checked out sets due date to BORROWING_WEEKS after
   * current date passed
   */
   {
       if (card != null)
           return false;

       card = borrower;
       dueDate = dateOfBorrowing.plusWeeks(getBorrowingWeeks());

       return true;
   }

   public boolean checkOut(LibraryCard borrower)
   // default check out method that uses todays' date
   {
       return checkOut(borrower, LocalDate.now());
   }

   public boolean returnCopy()
   // returns book by removing card reference
   // returns false if there is no reference to a card
   {
       if (card == null)
           return false;

       card = null;

       return true;
   }

   public void print() {
       if (card != null) {
           System.out.println("Checked out to: " + card.getCardholderName() + ", " + card.getID());
           System.out.println("Due: " + dueDate);
       }
   }
}

Book.java

public class Book extends LibraryMaterial {
  
   private String author;
   public Book(String i, String t, String a) {
      
       super(i, t);
       author = a;
   }
  
   public String getAuthor() {
  
       return author;
   }

   public void print() {

       super.print();
       System.out.println("author: " + author);
   }
}

BookCopy.java

import java.time.*;

public class BookCopy extends LibraryMaterialCopy {
  
   private Book book;
   public static final int BORROWING_WEEKS = 3;
   public static final int RENEWAL_WEEKS = 2;
   public static final double FINE_PER_DAY = .10;
   public static final boolean IS_RENEWABLE = true;
  
   public BookCopy(Book b) {

       super();
       book = b;
   }

   @Override
   public LibraryMaterial getLibraryMaterial() {
       return book;
   }

   @Override
   public int getBorrowingWeeks() {
       return BORROWING_WEEKS;
   }

   @Override
   public double getFinePerDay() {
       return FINE_PER_DAY;
   }

   @Override
   public String getTitle() {
       return book.getTitle();
   }

   @Override
   public String getISBN() {
       return book.getISBN();
   }

   public String getAuthor() {
       return book.getAuthor();
   }

   @Override
   public boolean isRenewable() {
       return IS_RENEWABLE;
   }
  
   public boolean renew(LocalDate renewalDate) {
      
       if (card == null)
           return false;
      
       dueDate = renewalDate.plusWeeks(RENEWAL_WEEKS);
       return true;
   }
   public boolean renew()
   // default method uses todays date as renewal date
   {
       return renew(LocalDate.now());
   }

   public void print() {
       book.print();
       super.print();
   }

   @Override
   public boolean isTitle(String s) {
      
       if(this.book.getTitle().equals(s)) {
           return true;
       }
      
       return false;
   }
}

DVD.java

public class DVD extends LibraryMaterial {
  
   private String mainActor;
  
   public DVD(String i, String t, String mA) {
      
       super(i, t);
       mainActor = mA;
   }  

   public String getMainActor() {
       return mainActor;
   }

   public void print() {

   super.print();
   System.out.println("Main actor: " + mainActor);
   }
}

DVDCopy.java

public class DVDCopy extends LibraryMaterialCopy {
  
   public static final int BORROWING_WEEKS = 2;
   public static final double FINE_PER_DAY = 1;
   public static final boolean IS_RENEWABLE = false;
   private DVD dvd;

   public DVDCopy(DVD d) {
      
       super();
       dvd = d;
   }

   @Override
   public LibraryMaterial getLibraryMaterial() {
       return dvd;
   }

   @Override
   public String getTitle() {
       return dvd.getTitle();
   }

   @Override
   public String getISBN() {
       return dvd.getISBN();
   }

   public String getMainActor() {
       return dvd.getMainActor();
   }

   @Override
   public int getBorrowingWeeks() {
       return BORROWING_WEEKS;
   }

   @Override
   public double getFinePerDay() {
       return FINE_PER_DAY;
   }

   @Override
   public boolean isRenewable() {
       return IS_RENEWABLE;
   }

   public void print() {

       dvd.print();
       super.print();
   }

   @Override
   public boolean isTitle(String s) {
  
       if(this.dvd.getTitle().equals(s))
           return true;

       return false;
   }
}

Catalog.java

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;

public class Catalog {
  
   HashMap<LibraryMaterial,ArrayList<LibraryMaterialCopy>> map = new HashMap<LibraryMaterial,ArrayList<LibraryMaterialCopy>>();

   public void add(LibraryMaterial m,int n){
      
       ArrayList<LibraryMaterialCopy> copies = new ArrayList<LibraryMaterialCopy>();
  
       if(m instanceof Book){
          
           for(int i=0;i<n;i++){
          
               LibraryMaterialCopy c = new BookCopy((Book)m);
               copies.add(c);
           }
       }
       else{
          
           for(int i=0;i<n;i++){
              
               LibraryMaterialCopy c = new DVDCopy((DVD)m);
               copies.add(c);
           }
       }

       map.put(m,copies);
   }
  
   public Collection<LibraryMaterialCopy> lookUpByMaterial(LibraryMaterial m){
      
       if(map.containsKey(m))      
           return map.get(m);
  
       return null;
   }
  
   public Collection<LibraryMaterialCopy> lookUpByTitle(String title){
      
       for (LibraryMaterial m : map.keySet()) {
           if(m.getTitle().equals(title)){
               return map.get(m);
           }
       }
       return null;
   }
  
   public Collection<LibraryMaterialCopy> availableCopies(LibraryMaterial m){

       ArrayList<LibraryMaterialCopy> copies = map.get(m);

       ArrayList<LibraryMaterialCopy> availablecopies = new ArrayList<LibraryMaterialCopy>() ;
  
       for(LibraryMaterialCopy c: copies){
      
           if(c.dueDate==null)
               availablecopies.add(c);

       }  
      
       return availablecopies;
   }
   public Collection<LibraryMaterial> availableCopies(){
  
       ArrayList<LibraryMaterial> materials = new ArrayList<LibraryMaterial>(map.keySet());
       return materials;
   }
}

Explanation / Answer

Made changes only in the below two Java programs. Added two new methods to handle return and renew processes.

PROGRAM CODE:

LibraryCard.java

package library;

import java.util.List;
import java.util.ArrayList;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
public class LibraryCard {
  
private String id;
private String cardholderName;
private List<LibraryMaterialCopy> libraryMaterialsCheckedOut;
private double balance;
  
public LibraryCard(String i, String name) {
  
id = i;
cardholderName = name;
libraryMaterialsCheckedOut = new ArrayList<LibraryMaterialCopy>();
balance = 0;
}
public String getID() {
return id;
}
public String getCardholderName() {
return cardholderName;
}
public List<LibraryMaterialCopy> getlibraryMaterialsCheckedOut() {
return new ArrayList<LibraryMaterialCopy>(libraryMaterialsCheckedOut);
}
public void setCardholderName(String name) {
cardholderName = name;
}
public boolean checkOutLibraryMaterial(LibraryMaterialCopy libraryMaterial, LocalDate todaysDate) {
if (!libraryMaterial.checkOut(this))
return false;
libraryMaterialsCheckedOut.add(libraryMaterial);
return true;
}
  

public boolean checkOutLibraryMaterial(LibraryMaterialCopy libraryMaterial)
// default check out, uses today's date
{
return checkOutLibraryMaterial(libraryMaterial, LocalDate.now());
}
public boolean returnLibraryMaterial(LibraryMaterialCopy libraryMaterial, LocalDate returnDate)
// returns libraryMaterial and sends message to libraryMaterialCopy to do
// the same
// returns false if libraryMaterial is not checked out
// takes parameter that expresses the date of return
{
LocalDate dueDate = libraryMaterial.getDueDate();
  
if (!libraryMaterial.returnCopy())
return false;
  
if (!libraryMaterialsCheckedOut.remove(libraryMaterial))
return false;
  
long daysBetween = ChronoUnit.DAYS.between(dueDate, returnDate);
  
if (daysBetween > 0) // libraryMaterial is returned late
{
balance += libraryMaterial.getFinePerDay() * daysBetween;
}
  
return true;
}
  
public boolean returnLibraryMaterial(LibraryMaterialCopy libraryMaterial)
// default method, uses today's date as returns date
{
return returnLibraryMaterial(libraryMaterial, LocalDate.now());
}
public boolean renewLibraryMaterial(LibraryMaterialCopy libraryMaterial, LocalDate renewalDate)
// renews libraryMaterial. Returns false if libraryMaterial is not checked
// out already
// takes parameter that expresses date of renewal
// returns false if librayrMaterial is not a book
{
if (!libraryMaterialsCheckedOut.contains(libraryMaterial))
return false;
if (libraryMaterial.isRenewable()) {
  
if (!((BookCopy) libraryMaterial).renew(renewalDate))
return false;
  
return true;
}
return false;
}
public boolean renewLibraryMaterial(LibraryMaterialCopy libraryMaterial)
// default renewal method uses today's date as renewal date.
{
return renewLibraryMaterial(libraryMaterial, LocalDate.now());
}
public List<LibraryMaterialCopy> getlibraryMaterialsDueBy(LocalDate date)
// returns an List of libraryMaterials due on or before date
{
List<LibraryMaterialCopy> libraryMaterialsDue = new ArrayList<LibraryMaterialCopy>();
  
for (LibraryMaterialCopy libraryMaterial : libraryMaterialsCheckedOut) {
  
if (libraryMaterial.getDueDate().isBefore(date) || libraryMaterial.getDueDate().equals(date)) {
libraryMaterialsDue.add(libraryMaterial);
}
}
return libraryMaterialsDue;
}
public List<LibraryMaterialCopy> getLibraryMaterialsOverdue(LocalDate todaysDate) {
return getlibraryMaterialsDueBy(todaysDate.minusDays(1));
}
public ArrayList<LibraryMaterialCopy> getLibraryMaterialsOverdue()
// default method, returns libraryMaterials overdue as of today, which means
// that they
// were due by yesterday
{
return (ArrayList<LibraryMaterialCopy>) getLibraryMaterialsOverdue(LocalDate.now());
}
public ArrayList<LibraryMaterialCopy> getLibraryMaterialsSorted()
// returns List of libraryMaterials, sorted by due date (earliest due date
// first)
// uses insertion sort
{
  
List<LibraryMaterialCopy> libraryMaterials = new ArrayList<LibraryMaterialCopy>(libraryMaterialsCheckedOut);
for (int i = 1; i < libraryMaterials.size(); i++) {
int j = i;
while (j > 0 && libraryMaterials.get(j - 1).getDueDate().isAfter(libraryMaterials.get(j).getDueDate())) {
// swap elements in positions j and j-1
LibraryMaterialCopy temp = libraryMaterials.get(j);
libraryMaterials.set(j, libraryMaterials.get(j - 1));
libraryMaterials.set(j - 1, temp);
j = j - 1;
}
}
return (ArrayList<LibraryMaterialCopy>) libraryMaterials;
}
   public void returnMaterials(String title2) {
       for(int i=0; i<libraryMaterialsCheckedOut.size(); i++)
       {
           if(libraryMaterialsCheckedOut.get(i).isTitle(title2))
           {
               returnLibraryMaterial(libraryMaterialsCheckedOut.get(i));
               break;
           }
       }
   }
   public void renewLibraryMaterial(String title3) {
       for(int i=0; i<libraryMaterialsCheckedOut.size(); i++)
       {
           if(libraryMaterialsCheckedOut.get(i).isTitle(title3))
           {
               renewLibraryMaterial(libraryMaterialsCheckedOut.get(i));
               break;
           }
       }
      
   }
}

Main.java

package library;

import java.time.LocalDate;
import java.util.Scanner;
public class Main {
  
//public static Catalog catalog;
public static LibraryCardManager Card;
  
public static void main(String args[]) throws Exception
{
// Set up the menu for the user to choose the action to perform
  
Catalog catalog = new Catalog();
  
Scanner input = new Scanner(System.in);
int selection = 0;
System.out.println("***************** WElCOME TO THE LIBRARY *******************");
System.out.println(" Please select one of the following options: ");
System.out.println("********* ***************************************** *********");
  
while (selection != 9){
  
System.out.println("1: Add Books or DVDs to the Library's Catalog");
System.out.println("2: Add a new LibraryCard");
System.out.println("3: Display a list of the Library Catalog");
System.out.println("4: Check-Out a Book or a DVD");
System.out.println("5: Display a list of Library Materials Checked-Out by you");
System.out.println("6: Check-In a Book or DVD by Material Title");
System.out.println("7: Check-out all Books & DVDs Checked-Out by you");
System.out.println("8: Renew a Book (only)");
System.out.println("9: Exit");
  
selection = input.nextInt();
  
  
  
switch(selection)
{
case 1 :
  
System.out.println("How many Books or DVDs Would You like to add to the Library's Catalog?");
int Copies = input.nextInt();
System.out.println("Enter 1 for Type BOOKS | Enter 2 to type DVDS");
int C1 = input.nextInt();
  
System.out.println("Enter the Material's Title");
String Title = input.next();
System.out.println("Enter the Material's ISBN");
String ISBN = input.next();
  
if (C1 == 1){
System.out.println("Enter The Book's Author");
String Author = input.next();
Book b = new Book(Title, ISBN, Author);
catalog.add(b, Copies);
  
}else if (C1 == 2){
System.out.println("Enter The DVD's Main Actor");
String mainActor = input.next();
DVD d = new DVD(Title, ISBN, mainActor);
catalog.add(d, Copies);
}
  
break;
  
case 2 :

System.out.println("Enter Your Name");
String Name = input.next();
System.out.println("Enter Your ID Number");
String ID = input.next();
// creating a library card
LibraryCard card = new LibraryCard(ID, Name);
Card.addLibraryCard(card); //Original Problem
  
break;


case 3 :
  
catalog.availableCopies();
break;
  
  
  
case 4 :
  
System.out.println("Enter Your Library Card ID Number");
String ID1 = input.next();
System.out.println("Enter Title of Library Material you want to Check-Out");
String Title1 = input.next();
System.out.println("1. Book 2. DVD Enter the type");
int type = input.nextInt();
String isbn, author, mainActor;
System.out.println("Enter ISBN");
isbn = input.next();
  
DVD dvd;
Book book;
LibraryMaterialCopy copy;
  
if(type == 1)
{
   System.out.println("Enter the author");
   author = input.next();
   book = new Book(isbn, Title1, author);
   copy = new BookCopy(book);
}
else
{
   System.out.println("Enter the main actor");
   mainActor = input.next();
   dvd = new DVD(isbn, Title1, mainActor);
   copy = new DVDCopy(dvd);
}
  
LibraryCard CheckOutMaterial = Card.getCardByID(ID1);
//made changes here
CheckOutMaterial.checkOutLibraryMaterial(copy); //Same problem here but different object
  
break;
  
  
  
case 5 :
  
System.out.println("Enter Your Library Card ID Number");
String ID2 = input.next();
LibraryCard CheckedOutMaterial = Card.getCardByID(ID2);
CheckedOutMaterial.getLibraryMaterialsSorted();
  
break;
  
  
case 6 :
System.out.println("Enter Your Library Card ID Number");
String ID3 = input.next();
System.out.println("Enter Material's Title to be Checked-In");
String Title2 = input.next();
LibraryCard ReturnMaterial = Card.getCardByID(ID3);
ReturnMaterial.returnMaterials(Title2);
  
break;
  
  
  
case 7 :
  
System.out.println("Enter Your Library Card ID Number");
String ID4 = input.next();
LibraryCard ReturnMaterial1 = Card.getCardByID(ID4);
  
  
for(LibraryMaterialCopy m : ReturnMaterial1.getlibraryMaterialsCheckedOut())
{
ReturnMaterial1.returnMaterials(m.getTitle());
}
break;
  
  
  
case 8 :
System.out.println("Enter Your Library Card ID Number");
String ID5 = input.next();
System.out.println("Enter the Book's Title to Renew");
String Title3 = input.next();
LibraryCard RenewBook = Card.getCardByID(ID5);
RenewBook.renewLibraryMaterial(Title3);
  
break;

case 9:
  
System.exit(0);
  
}
}
}
}