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

This is in Java. I\'m stuck and I don\'t know what I\'m doing wrong...I\'m messi

ID: 3683279 • Letter: T

Question

This is in Java. I'm stuck and I don't know what I'm doing wrong...I'm messing up somewhere towards the end of my code.

Please help!

1. BookTest will have method createInstances that opens file books.txt, reads the data to create the instances, and returns an ArrayList of book instances. BookTest will have method writeFile which accepts the Book arraylist and writes the instance data and the total charge per book to file, updatebooks.txt.

2. BookTest will print to a dialog box the total number of books sold, how many books were signed, and the grand total.

import java.io.*;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Formatter;
import java.util.Scanner;

import javax.swing.JOptionPane;

public class BookTest
{
   public static void main (String[] args)
    {
       ArrayList <Book>list = createInstances();
       writeFile(list);
       }


       public static ArrayList<Book> createInstances()
       {
       ArrayList<Book> bookArray = new ArrayList<Book>();
       String inputArray[] = new String [10];
       int i = 0;
      
       Scanner input;
       SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");


       try
       {
               input = new Scanner( new File("books.txt"));
               input.useDelimiter(" ");
               while (input.hasNext())
               {
                   inputArray[i]=input.next();
                   i++;
               }

  
               String dataArray [] [] = new String [10] [11];

               for (int k =0; k<inputArray.length; k++)
               {
                   String getLine = inputArray[k];
                   String[] eachLine = getLine.split(" ");
                   int length = eachLine.length;


                   for ( int j = 0; j < length; j++)
                     {
                            dataArray [k][j]= eachLine[j];
                    }
               }

               for (int l = 0; l < 10; l++)
               {
                       if (dataArray[l][0].equals("Fiction"))
                      {
                           Publisher p = new Publisher(dataArray[l][3], dataArray[l][4]);

                           String[] dateSplit = (dataArray[l][10]).split("/");
                           Date date = new Date(Integer.parseInt(dateSplit[0]), Integer.parseInt(dateSplit[1]),Integer.parseInt(dateSplit[2]));

                           bookArray.add(new Fiction(dataArray[l][1], dataArray[l][2], dataArray[l][5],
                           p, Double.parseDouble(dataArray[l][6]), dataArray[l][7], l, date));
                       }

                       else
                       {
                   NonFiction.CategoryCode categoryCode = NonFiction.CategoryCode.valueOf(dataArray[l][7]);
                           Publisher p = new Publisher(dataArray[l][3], dataArray[l][4]);
                           String[] dateSplit = (dataArray[l][9]).split("/");
                           Date date = new Date(Integer.parseInt(dateSplit[0]), Integer.parseInt(dateSplit[1]),Integer.parseInt(dateSplit[2]));
                           bookArray.add(new NonFiction(dataArray[l][1], dataArray[l][2],dataArray[l][5],
                           p, Double.parseDouble(dataArray[l][6]), categoryCode, l,date));
                       }
               }

   }

            catch (FileNotFoundException e)
           {
                   e.printStackTrace();
           }
           return bookArray;
           }


           public static void writeFile(ArrayList<Book> arrayOfBook)
       {
           Formatter output ;
           try
           {
                    output = new Formatter("updatebooks.txt");
                   for ( Book t : arrayOfBook)
                   {
                       output.format("%s %s %s %s %s %s %s %s %s %s ","Title:", t.getTitle(),"        Author:", t.getAuthor(),"       Isbn:", t.getIsbn(),"       Publisher:",t.getPublisher(),"      Price:",t.getPrice());
                   }
                   output.close();
               } catch (IOException e)
               {
                       e.printStackTrace();
           }

   String message = "";
   int total = 0;


   for (int k = 0; k <=(ArrayList<Book>); k++)
   {
           total = arrayOfBook[k].calculateCharge(arrayOfBook[k]);
           message += String.format("%s%s %s%s %s$%.2f%n","Title: ", bookArray[k].getTitle(),"Isbn: ", bookArray[k].getIsbn(),"Total: ",total);
           grandTotal+= total;
   }

   message += String.format("%S$%.2f%n", "Your grand total is:", grandTotal);

   JOptionPane.showMessageDialog(null,message);    

           }

        


        String message ="";
   int count = 0;
   for (Book book : arrayOfBook)
   {
       message += String.format("%s ", book.calculateCharge());
       if(book instanceof Fiction)
       {
               Fiction f = (Fiction) book;
       }
       if(f.isSignedByAuthor() ==true)
       {
           count++;
            }
           //message += String.format("%s %s ", P ", f.isSignedByAuthor());
    }
     }
       JOptionPane.showMessageDialog(null, "Total Signed Fiction : " + message);

      
}
   }

Explanation / Answer

//BookTest.java

import java.io.*;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Formatter;
import java.util.Scanner;

import javax.swing.JOptionPane;

public class BookTest
{
     public static void main (String[] args)
        {
         ArrayList <Book>list = createInstances();
         writeFile(list);
         }


         public static ArrayList<Book> createInstances()
         {
         ArrayList<Book> bookArray = new ArrayList<>();
         String inputArray[] = new String [10];
         int i = 0;
        
         Scanner input;
         SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");


         try
         {
                 input = new Scanner( new File("books.txt"));
                 input.useDelimiter(" ");
                 while (input.hasNext())
                 {
                     inputArray[i]=input.next();
                     i++;
                 }

   
                 String dataArray [] [] = new String [10] [11];

                for (int k =0; k<inputArray.length; k++)
                 {
                     String getLine = inputArray[k];
                     String[] eachLine = getLine.split(" ");
                     int length = eachLine.length;


                     for ( int j = 0; j < length; j++)
                       {
                              dataArray [k][j]= eachLine[j];
                      }
                 }

                for (int l = 0; l < 10; l++)
                 {
                         if (dataArray[l][0].equals("Fiction"))
                        {
                             Publisher p = new Publisher(dataArray[l][3], dataArray[l][4]);

                            String[] dateSplit = (dataArray[l][10]).split("/");
                             Date date = new Date(Integer.parseInt(dateSplit[0]), Integer.parseInt(dateSplit[1]),Integer.parseInt(dateSplit[2]));

                            bookArray.add(new Fiction(dataArray[l][1], dataArray[l][2], dataArray[l][5],
                             p, Double.parseDouble(dataArray[l][6]), dataArray[l][7], l, date));
                         }

                        else
                         {
                     NonFiction.category = NonFiction.valueOf(dataArray[l][7]);
                             Publisher p = new Publisher(dataArray[l][3], dataArray[l][4]);
                             String[] dateSplit = (dataArray[l][9]).split("/");
                             Date date = new Date(Integer.parseInt(dateSplit[0]), Integer.parseInt(dateSplit[1]),Integer.parseInt(dateSplit[2]));
                             bookArray.add(new NonFiction(dataArray[l][1], dataArray[l][2],dataArray[l][5],
                             p, Double.parseDouble(dataArray[l][6]), NonFiction.category, l,date));
                         }
                 }

    }

               catch (FileNotFoundException e)
               {
                     e.printStackTrace();
             }
             return bookArray;
             }


             public static void writeFile(ArrayList<Book> arrayOfBook)
         {
             Formatter output ;
             try
             {
                      output = new Formatter("updatebooks.txt");
                     for ( Book t : arrayOfBook)
                     {
                         output.format("%s %s %s %s %s %s %s %s %s %s ","Title:", t.getTitle(),"        Author:", t.getAuthor(),"       Isbn:", t.getIsbn(),"       Publisher:",t.getPublisher(),"      Price:",t.getPrice());
                     }
                     output.close();
                 } catch (IOException e)
                 {
             }

    String message = "";
     double total = 0, grandTotal=0;

     for (int k = 0; k <=arrayOfBook.size(); k++)
     {
             total = arrayOfBook.get(k).calculateCharge(arrayOfBook.get(k));
             message += String.format("%s%s %s%s %s$%.2f%n","Title: ", arrayOfBook.get(k).getTitle(),"Isbn: ", arrayOfBook.get(k).getIsbn(),"Total: ",total);
             grandTotal+= total;
     }  

    message += String.format("%S$%.2f%n", "Your grand total is:", grandTotal);

    JOptionPane.showMessageDialog(null,message);     

            }  

}


/*****************************************************************************/

//Book.java

public class Book {
String Title;
String Author;
String Isbn;
String Publisher;
double Price;
public Book(){
}
public Book(String t, String a, String I, String p, double cost)
{
    Title=t;
    Author=a;
    Isbn=I;
    Publisher=p;
    Price=cost;
}
public String getTitle()
{
    return Title;
}
public String getAuthor()
{
    return Author;
}
public String getIsbn()
{
    return Isbn;
}
public String getPublisher()
{
    return Publisher;
}
public double getPrice()
{
    return Price;
}

    int calculateCharge(Book get) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}
/*****************************************************************************/
//Publisher.java
class Publisher {
String publisherName;
String Isbn;
    Publisher(String name, String isbn) {
        publisherName=name;
        Isbn=isbn;
    }
    public String getPublisherName()
    {
        return publisherName;
    }
    public String getIsbn()
    {
        return Isbn;
    }
}
/***********************************************************/
class Fiction extends Book {
String type;
int n;
Date date;
    public Fiction(String t, String a, String I, Publisher p, double cost, String tt, int l, Date d) {
        super(t,a,I,p.getPublisherName(),cost);
        type=tt;
        n=l;
        date=d;
    }

}
/***********************************************************/
import java.util.Date;

public class NonFiction extends Book{
public static CategoryCode category;

    static CategoryCode valueOf(String dataArray) {
        return category;
    }
int n;
Date date;
    NonFiction(String t, String a, String I, Publisher p, double cost, CategoryCode c, int l, Date d) {
         super(t,a,I,p.getPublisherName(),cost);
        category=c;
        n=l;
        date=d;
    }

    private static class CategoryCode {

        public CategoryCode() {
        }
    }

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote