//IT215 Week 9 Final
//Bookstore Project Part 6
//
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.text.NumberFormat; //application uses Number Format
import java.util.Locale; //Application uses United States Currenc
public final class Bookstore extends JFrame //Class: Bookstore
{
final int MAX = 5;
Books pt[] = new Books[MAX];
int numBooks; //Keeps track of the number of books in the array
int curBooks;// The current number of books
JPanel detailPanel; //JPanels
JPanel navigation;
JPanel finalButtons;
JLabel lb1, lb2, lb3, lb4, lb5, lb6, lb7; //JLabels 1-7
JTextField tf1, tf2, tf3, tf4, tf5, tf6, tf7; //JTextField 1-7
JButton first, previous, next, last, add, delete, modify, save, search; //JButtons
Bookstore() //Bookstore Constructor
{
super(“Book Store”); //Frame Title
numBooks = 0; //Zero books on initial
curBooks = -1;
detailPanel = new JPanel();
detailPanel.setLayout(null);
first = new JButton(“First”); //Navigation “First” button
previous = new JButton(“Previous”); //Navigation “Previous” button
next = new JButton(“Next”);//Navigation “Next” button
last = new JButton(“Last”);//Navigation “Last” button
first.addActionListener(new ActionHandler()); //Actionlistener “First” event button
previous.addActionListener(new ActionHandler()); //Actionlistener “Previous” event button
next.addActionListener(new ActionHandler()); //Actionlistener “Next” event button
last.addActionListener(new ActionHandler()); //Actionlistener “Last” event button
//Navigation panel
navigation = new JPanel();
navigation.setLayout(new GridLayout(2,2));
navigation.setBounds(150,0,370,150);
navigation.add(first);
navigation.add(previous);
navigation.add(next);
navigation.add(last);
add(navigation);
//JLabels
lb1 = new JLabel(“Title”); //Title Label
lb2 = new JLabel(“ISBN”); //ISBN Label
lb3 = new JLabel(“Price”); //Author’s name Label
lb4 = new JLabel(“Year”); //Year Published Label
lb5 = new JLabel(“Publisher”); //Publisher’s name label
lb6 = new JLabel(“Author”); //Price of the book label
lb7 = new JLabel(“Total”); //Total cost of all books label
//Text fields
tf1 = new JTextField(20); //Title Text field
tf2 = new JTextField(20); //ISBN Text field
tf3 = new JTextField(20); //Author’s name Text field
tf4 = new JTextField(20); //Year Published Text field
tf5 = new JTextField(20); //Publisher’s name Text field
tf6 = new JTextField(20); //Price of the book Text field
tf7 = new JTextField(20); //Total cost of all books Text field
//Additions for Final Project: buttons
finalButtons = new JPanel();
finalButtons.setBounds(0,150,150,350);
finalButtons.setLayout(new GridLayout(5,1));
add = new JButton(“Add”);
delete = new JButton(“Delete”);
modify = new JButton(“Modify”);
save = new JButton(“Save”);
search = new JButton(“Search”);
//Final Project: buttons Actionlisteners
add.addActionListener(new ActionHandler());
delete.addActionListener(new ActionHandler());
modify.addActionListener(new ActionHandler());
save.addActionListener(new ActionHandler());
search.addActionListener(new ActionHandler());
finalButtons.add(add);
finalButtons.add(delete);
finalButtons.add(modify);
finalButtons.add(save);
finalButtons.add(search);
add(finalButtons);
setLayout(null);
//Set Frame Size
setSize(528,533);
setLocation(150,100);
setResizable(false);
//Panel label positions
lb1.setBounds(20,30,200,25);
lb2.setBounds(20,60,200,25);
lb3.setBounds(20,90,200,25);
lb4.setBounds(20,120,200,25);
lb5.setBounds(20,150,200,25);
lb6.setBounds(20,180,200,25);
lb7.setBounds(20,210,200,25);
//Panel Text field positions
tf1.setBounds(240,30,100,25);
tf2.setBounds(240,60,100,25);
tf3.setBounds(240,90,100,25);
tf4.setBounds(240,120,100,25);
tf5.setBounds(240,150,100,25);
tf6.setBounds(240,180,100,25);
tf7.setBounds(240,210,100,25);
//Removing ability to manually edit text fields
editText(false);
//Setting text field BG color to WHITE
tf1.setBackground(Color.WHITE);
tf2.setBackground(Color.WHITE);
tf3.setBackground(Color.WHITE);
tf4.setBackground(Color.WHITE);
tf5.setBackground(Color.WHITE);
tf6.setBackground(Color.WHITE);
tf7.setBackground(Color.WHITE);
//Adding labels to Detail Panel
detailPanel.add(lb1);
detailPanel.add(lb2);
detailPanel.add(lb3);
detailPanel.add(lb4);
detailPanel.add(lb5);
detailPanel.add(lb6);
detailPanel.add(lb7);
//Adding TF to Detail Panel
detailPanel.add(tf1);
detailPanel.add(tf2);
detailPanel.add(tf3);
detailPanel.add(tf4);
detailPanel.add(tf5);
detailPanel.add(tf6);
detailPanel.add(tf7);
//Setting Detail Panel to frame
detailPanel.setBounds(150,150,370,350);
add(detailPanel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
//Total value of all items in inventory
public float total()
{
float total = 0;
for(int i=0; i<numBooks; i++)
{
total += pt[i].getTotal();
}
return total;
}
//bookDisplay method
public void bookDisplay(int index)
{
//Numberformat = US
NumberFormat nfc = NumberFormat.getCurrencyInstance(Locale.US);
tf1.setText( pt[index].getTitle() );
tf2.setText( pt[index].getISBN() + “”);
tf3.setText( nfc.format( pt[index].getPrice() ) );
tf4.setText( pt[index].getYear() + “”);
tf5.setText( nfc.format( pt[index].getPublisher() ) );
tf6.setText( pt[index].getAuthor() );
tf7.setText( nfc.format(pt[index].getTotal) );
}
//this method sorts the array accoding to the names (Sorting technique: Bubble Sort)
public void arraySort(int curBooks)
{
int pass , i;
int temp;
Books s = null;
//sorts books with more than one in array
if(curBooks > 1)
{
//make curBooks – 1 passes through the array
for(pass=1; pass<curBooks; pass++)
{
//in each pass shift largest element to right most position
for(i=0; i<curBooks-pass; i++)
{
//comparing the names of Individuals
temp = (pt[i].getTitle()).compareTo(pt[i+1].getTitle());
if( temp > 0)
{
//if name at i position of array is greater than one at i+1 position than swap
s = pt[i];
pt[i] = pt[i+1];
pt[i+1] = s;
}//if ends
}//second for loop ends
}//first for loop ends
}//if condition ends
}
//Method to enable and disable textfields.
void editText(boolean state)
{
//disable editing of text fields
tf1.setEditable(state);
tf2.setEditable(state);
tf3.setEditable(state);
tf4.setEditable(state);
tf5.setEditable(false);
tf6.setEditable(state);
tf7.setEditable(false);
}
//book search by titles
int searchByTitle(String searchTitle)
{
int i;
for(i=0;i<numBooks;i++)
{
if(pt[i].getTitle().equals(searchTitle)) //case sensative matching of Titles
{
curBooks = i;
bookDisplay(curBooks);
return i; //return index if match is found
}
}
if(i == numBooks) // means no match found
{
return -1; //return -1
}
return -1; // no match found
}
//inner class for handling action events
class ActionHandler implements ActionListener
{
//handle button event
public void actionPerformed( ActionEvent event )
{
// handling events generated by buttons
if(event.getSource() == first) //moving to first record
{
if(numBooks != 0)
{
curBooks = 0;
bookDisplay(curBooks);
}
else
{
JOptionPane.showMessageDialog(null,”No books in program.”);
}
}
else if( event.getSource() == previous ) //moving to previous record
{
if(numBooks != 0) // array is not empty
{
if( curBooks == 0 ) // showing first record
{
curBooks = numBooks-1; // move to last
}
else
{
if(numBooks > 1)
{
curBooks–; // move to previous
}
}
bookDisplay(curBooks); // display in GUI
}
else
{
JOptionPane.showMessageDialog(null,”No books in program.”); // array is empty
}
}
else if( event.getSource() == next ) // moving to next record
{
if(numBooks != 0) // array is not empty
{
if( curBooks == numBooks – 1 ) //showing last record
{
curBooks = 0; // move to first
bookDisplay(curBooks);
}
else
{
curBooks++; // display next
bookDisplay(curBooks);
}
}
else
{
JOptionPane.showMessageDialog(null,”No books in program.”); // array is empty
}
}
else if( event.getSource() == last ) // moving to last record
{
if(numBooks != 0) // array is not empty
{
curBooks = numBooks – 1; // move to last
bookDisplay( curBooks );
}
else
{
JOptionPane.showMessageDialog(null,”No books in program.”); // array is empty
}
}
else if( event.getSource() == add ) // Adds book info to array
{
if(numBooks == MAX)
{
JOptionPane.showMessageDialog(null,”No more room in array.”);
return;
}
//Method to enter book information.
String name = JOptionPane.showInputDialog(null,”Enter Book Name(or QUIT to exit.)”);
name = name.trim();
if(name.equalsIgnoreCase(“quit”))
{
return;
}
while (name.isEmpty()) // Makes sure that field is not left empty
{
name = JOptionPane.showInputDialog(null,”Incorrect Syntax; Enter the Book Name”);
name = name.trim(); // trims any spaces
}
String ISBN = JOptionPane.showInputDialog(null,”Enter the ISBN”);
{
while (ISBN.isEmpty())
{
ISBN = JOptionPane.showInputDialog(null,”Incorrect Syntax; Enter the ISBN”);
ISBN = ISBN.trim();
}
}
float price = 0;
//try catch used to data other than required format
try
{
price = Float.parseFloat(JOptionPane.showInputDialog(null,”Enter the Book’s Price”));
}
catch(HeadlessException | NumberFormatException e)
{
JOptionPane.showMessageDialog(null,”Please enter the correct price.”);
}
while (price <= 0)
{
try
{
price = Float.parseFloat(JOptionPane.showInputDialog(null,”Please enter the correct price.”));
}
catch(HeadlessException | NumberFormatException e)
{
JOptionPane.showMessageDialog(null,”Please enter the correct price.”);
}
}
String Year = JOptionPane.showInputDialog(null,”Enter the Year of publishing.”);
{
while (Year.isEmpty())
{
Year = JOptionPane.showInputDialog(null,”Incorrect Syntax; Enter the correct Year.”);
Year = Year.trim();
}
}
String Publisher = JOptionPane.showInputDialog(null,”Enter the Publisher’s Name.”);
{
while (Publisher.isEmpty())
{
Publisher = JOptionPane.showInputDialog(null,”Incorrect Syntax; Enter the Publisher’s Name.”);
Publisher = Publisher.trim();
}
}
String Author = JOptionPane.showInputDialog(null,”Enter the Author’s Name.”);
{
while (Author.isEmpty())
{
Author = JOptionPane.showInputDialog(null,”Incorrect Syntax; Enter the Author’s Name.”);
Author = Author.trim();
}
}
//prompts the user to input units in stock
int Total = 0;
//try catch used to data other than required format
try
{
Total = Integer.parseInt(JOptionPane.showInputDialog(null,”Enter the total number of books.”));
}
catch(HeadlessException | NumberFormatException e)
{
JOptionPane.showMessageDialog(null,”Please enter a positive number”);
}
while ( Total <= 0) //Makes sure user inputs a positive number.
{
try
{
Total = Integer.parseInt(JOptionPane.showInputDialog(null,”Please enter a positive number.”));//Tells user to input a positve number.
}
catch(HeadlessException | NumberFormatException e)
{
JOptionPane.showMessageDialog(null,”Please enter a positive number.”);
}
}
//create new Books object
Books book = new Books();
//add book to array
pt[numBooks] = book;
//increment total
numBooks++;
//display in GUI
curBooks = numBooks -1;
bookDisplay(curBooks);
// buttons will not be enabled unless user enters at least one detail
if(numBooks > 0)
{
first.setEnabled(true);
previous.setEnabled(true);
next.setEnabled(true);
last.setEnabled(true);
}
//sort the array
arraySort(numBooks);
}
else if(event.getSource() == delete) // handle events from dlt button
{
if(numBooks>=1) // array is not empty
{
int index;
String deleteByTitle=null;
// prompt for name to delete
deleteByTitle = JOptionPane.showInputDialog(null,”Enter the name to delete”);
if(deleteByTitle == null)
{
return;
}
index = searchByTitle(deleteByTitle); //search name in the array
if(index != -1)
{
//found
if(numBooks==1) // present at first position
{
pt[0] = null; //delete
}
else
{
for(int i=index;i<numBooks-1;i++) //shift all to right
{
pt[i]=pt[i+1];
}
}
pt[numBooks-1] = null; // delete
numBooks–; //one deleted
if(numBooks!=0) // check array is not empty
{
curBooks=0;
bookDisplay(curBooks); // display first
}
else // empty so make text fields empty
{
tf1.setText(“”);
tf2.setText(“”);
tf3.setText(“”);
tf4.setText(“”);
tf5.setText(“”);
tf6.setText(“”);
tf7.setText(“”);
}
JOptionPane.showMessageDialog(null,”Record deleted successfully”);
}
else //not found
{
JOptionPane.showMessageDialog(null,”Record not available in Array.”);
}
}
else // array is empty
{
JOptionPane.showMessageDialog(null,”No Record Available!!!”);
}
}
//modify button is used for modification
//first it displays “Modify” when user presses it, it changes
// to “Update” to update the changes made
else if(event.getSource() == modify && modify.getText().equals(“Modify”)) //modify a record
{
if(numBooks != 0) //array is not empty
{
int index;
String modifyTitle=null;
// prompt for Title
modifyTitle = JOptionPane.showInputDialog(null,”Enter Title to Modify”);
//search in array
if(modifyTitle == null)
{
return;
}
index = searchByTitle(modifyTitle);
if(index != -1) //found in array
{
//display in GUI
curBooks = index;
bookDisplay(curBooks);
JOptionPane.showMessageDialog(null,”Record found. Now you can modify the details in textfields. nAfter you are done, please press the Update button.”);
//change “Modify” to “Update”
modify.setText(“Update”);
//enable editing of text fields
editText(true);
}
else //not found
{
JOptionPane.showMessageDialog(null,”Record not found.”);
}
}
else // array is empty
{
JOptionPane.showMessageDialog(null,”No Record Available!!!”);
}
}
else if(event.getSource() == modify && modify.getText().equals(“Update”)) //user presses “Update”
{
modify.setText(“Modify”); //change to “Modify”
editText(false); //disable textfields
//use setter functions to update all the data
pt[curBooks].setTitle(tf1.getText());
pt[curBooks].setISBN(tf2.getText());
pt[curBooks].setPrice(Float.parseFloat(tf3.getText().substring(1)));
pt[curBooks].setYear(tf4.getText());
pt[curBooks].setPublisher(tf5.getText());
pt[curBooks].setAuthor(tf6.getText());
pt[curBooks].setTotal((long) Float.parseFloat(tf7.getText().substring(1)));
bookDisplay(curBooks);
}
else if(event.getSource() == save) //events from save button
{
if(numBooks != 0) // array is not empty
{
try
{
//first create the directory
File f = new File(“c:\data\it215\”);
f.mkdir();
//now create the file in that directory
FileOutputStream outputFile = new FileOutputStream(“c:\data\it215\bookinventory.dat”);
try (ObjectOutputStream ob = new ObjectOutputStream(outputFile)) {
for(int i=0;i<numBooks;i++)
{
//one object at time to file
ob.writeObject(pt[i]);
} }
JOptionPane.showMessageDialog(null,”Save successful.”);
}
catch(IOException | HeadlessException e)
{
JOptionPane.showMessageDialog(null,”Error opening file.”);
}
}
else
{
JOptionPane.showMessageDialog(null,”Array is Empty”);
}
}
else if(event.getSource() == search) //search button
{
String searchTitle=null;
if(numBooks==0) //empty array
{
JOptionPane.showMessageDialog(null,”Array is Empty”);
}
else //prompt fot name to search
{
searchTitle = JOptionPane.showInputDialog(null,”Enter the Title to search”);
if(searchTitle==null)
{
return;
}
//method searchByName displays the detail to GUI if found and returns its index
if(searchByTitle(searchTitle)!= -1)
{
JOptionPane.showMessageDialog(null,”Record available in Array.”);
}
else
{
JOptionPane.showMessageDialog(null,”Record not available in Array.”);
}
}
}
}
}
// main method execution starts here
public static void main(String[] args)
{
//creates new Bookstore object
Bookstore tip = new Bookstore();
} //Ends main method.
class Books extends Book implements Serializable
{
private Object getTotal;
Books()
{
super();
}
Books(String Title, String ISBN, float Price, String Year, String Publisher, String Author, long Total)
{
super();
}
}//class ends
class Book implements Serializable
{
//Variable specifications
private String Title; // Variable that stores the title
private String ISBN; // Variable that stores the product ID/number
private float Price; // Variable that stores the unit price of the product
private String Year;
private String Publisher;
private String Author;
private long Total; // Variable that stores the number of product units in stock
// Constructor for a product that is not specified
Book()
{
setTitle(“UNKNOWN”);
setISBN(“UNKNOWN”);
setPrice(0);
setTotal(0);
}
// Constructor for a product with a Title, ID/number, unit price, and number of units in stock
Book(String Title, String ISBN, float Price, String Year, String Publisher, String Author, long Total)
{
setTitle(Title);
setISBN(ISBN);
setPrice(0);
setYear(Year);
setPublisher(Publisher);
setAuthor(Author);
setTotal(0);
}
//Setters
public void setTitle (String Title)
{
this.Title = Title;
}
public void setISBN (String ISBN)
{
this.ISBN = ISBN;
}
public void setPrice (float Price)
{
this.Price = Price;
}
public void setYear (String Year)
{
this.Year = Year;
}
public void setPublisher (String Publisher)
{
this.Publisher = Publisher;
}
public void setAuthor (String Author)
{
this.Author = Author;
}
public void setTotal (long Total)
{
this.Total = Total;
}
//Getters
public String getTitle()
{
return Title;
}
public String getISBN()
{
return ISBN;
}
public float getPrice()
{
return Price;
}
public String getYear()
{
return Year;
}
public String getPublisher()
{
return Publisher;
}
public String getAuthor()
{
return Author;
}
public long getTotal()
{
return Total;
}
//Computes and Returns total price of all objects
public float getTotal2()
{
return (Total * Price);
}
} // end class Product
} //Ends class Bookstore
Why Choose Us
Quality Papers
We value our clients. For this reason, we ensure that each paper is written carefully as per the instructions provided by the client. Our editing team also checks all the papers to ensure that they have been completed as per the expectations.
Professional Academic Writers
Over the years, our Acme Homework has managed to secure the most qualified, reliable and experienced team of writers. The company has also ensured continued training and development of the team members to ensure that it keep up with the rising Academic Trends.
Affordable Prices
Our prices are fairly priced in such a way that ensures affordability. Additionally, you can get a free price quotation by clicking on the "Place Order" button.
On-Time delivery
We pay strict attention on deadlines. For this reason, we ensure that all papers are submitted earlier, even before the deadline indicated by the customer. For this reason, the client can go through the work and review everything.
100% Originality
At Essay USA, all papers are plagiarism-free as they are written from scratch. We have taken strict measures to ensure that there is no similarity on all papers and that citations are included as per the standards set.
Customer Support 24/7
Our support team is readily available to provide any guidance/help on our platform at any time of the day/night. Feel free to contact us via the Chat window or support email: support@acmehomework.com.
Try it now!
How it works?
Follow these simple steps to get your paper done
Place your order
Fill in the order form and provide all details of your assignment.
Proceed with the payment
Choose the payment system that suits you most.
Receive the final file
Once your paper is ready, we will email it to you.
Our Services
Essay USA has stood as the world’s leading custom essay writing services providers. Once you enter all the details in the order form under the place order button, the rest is up to us.
Essays
At Essay USA, we prioritize on all aspects that bring about a good grade such as impeccable grammar, proper structure, zero-plagiarism and conformance to guidelines. Our experienced team of writers will help you completed your essays and other assignments.
Admissions
Admission and Business Papers
Be assured that you’ll definitely get accepted to the Master’s level program at any university once you enter all the details in the order form. We won’t leave you here; we will also help you secure a good position in your aspired workplace by creating an outstanding resume or portfolio once you place an order.
Editing
Editing and Proofreading
Our skilled editing and writing team will help you restructure you paper, paraphrase, correct grammar and replace plagiarized sections on your paper just on time. The service is geared toward eliminating any mistakes and rather enhancing better quality.
Coursework
Technical papers
We have writers in almost all fields including the most technical fields. You don’t have to worry about the complexity of your paper. Simply enter as much details as possible in the place order section.