Java Library

***************This is first part and is done. Please read below **************** Java Library Sort Specification: Consider a Library that contains Books written by Authors. Implement a program to read and search the text database for a Library. The project will be graded according the criteria for the final project – see below. Elaboration: Use the following classes: Library Book Title Genre Author Address Use the ArrayList class to hold instances of Book and Author. Be sure to use generics appropriately. Use a text data file with the following format – which you may extend, and may be extended in the later projects B:index:Title:Genre:price:index of Author A:index:name:street address:city:state:zip:phone 4. All the classes should be provided with appropriate: constructors toString implementations additional methods instance variables connecting the class to appropriate instances of other classe 5. A GUI that will display allow the user to minimally: search on book or author index search on Title seach on Genre 6. The GUI class(es) should be distinct from the other classes in the program. Deliverables Java source code files any configuration files used a well-written Word document describing: your overall design, including a UML class diagram showing the type of the class relationships description of how to set up your application your test plan, including test data and results, with screen snapshots of each of your test cases your approach, lessons learned, design strengths and limitations, and suggestions for future improvement and alternative approaches Format Documentation format and length. The documentation describing and reflecting on your design and approach should be written using Microsoft Word, and should be no more than five pages in length and no less than two pages. The font size should be 12 point. The page margins should be one inch. The paragraphs should be double spaced. All figures, tables, equations, and references should be properly labeled and formatted using APA style. Code format: header comment block appropriate comments within the code appropriate variable and function names correct indentation ********This is the part I need help with*********************************** Extend assignment above to use advanced data structures and support sorting on various keys. The assignment will be graded according the criteria for the final project – see below. Elaboration: Use the Map class to support efficient searching on book and author indices. Implement comparators to support sorting by title, genre, price and index Extend the GUI from assignment above to allow the user to: sort by title, genre, price and index Again, the GUI elements should be distinct from the other classes in the program.

Save Time On Research and Writing
Hire a Pro to Write You a 100% Plagiarism-Free Paper.
Get My Paper

library.txt
A:0:Author Name:Street One:Washi:DC:20002:(202)635-0000
B:0:Java One:technica:50.59:0
A:1:Author Name Two:Street Two:New York:NY:12122:(508)123-0000
B:1:Java Two:action:6.14:1

Address.java
Address.java
package
 
Book
;

//import Book.Address;

//import Library2.Genre;

Save Time On Research and Writing
Hire a Pro to Write You a 100% Plagiarism-Free Paper.
Get My Paper

public
 
class
 
Address
 
{

    
String
 street
;
 
// street address

    
String
 city
;
   
// city

    
String
 state
;
  
// state

    
String
 zip
;
    
// zip

    
String
 phone
;
  
// phone

    
/*

     * Constructor with empty set of arguments – create empty strings

     */

    
public
 
Address
(){

        street
=
 
new
 
String
();

        city  
=
 
new
 
String
();

        state 
=
 
new
 
String
();

        zip   
=
 
new
 
String
();

        phone 
=
 
new
 
String
();

    
}

    
/*

     * Constructor with all arguments

     */

    
public
 
Address
(
String
 s
,
 
String
 c
,
 
String
 z
,
 
String
 st
,
 
String
 p
){

        street 
=
 s
;

        city   
=
 c
;

        zip    
=
 z
;

        state  
=
 st
;

        phone  
=
 p
;

    
}

    

    
/* 

     * setStreet – set street address

     */

    
public
 
void
 setStreet 
(
String
 s
){

        street 
=
 s
;

    
}

    
/*

     * getStreet – return street address

     */

    
public
 
String
 getStreet
(){

        
return
 street
;

    
}

    
/* 

     * setCity – set city

     */

    
public
 
void
 setCity 
(
String
 c
){

        city 
=
 c
;

    
}

    
/*

     * getCity – return city

     */

    
public
 
String
 getCity
(){

        
return
 city
;

    
}

    
/* 

     * setZip – set zip code

     */

    
public
 
void
 setZip 
(
String
 z
){

        zip 
=
 z
;

    
}

    
/*

     * getZip – return zip code

     */

    
public
 
String
 getZip
(){

        
return
 zip
;

    
}

    
/*

     * setState – set state

     */

    
public
 
void
 setState
(
String
 st
){

        state 
=
 st
;

    
}

    
/*

     * getState – get state

     */

    
public
 
String
 getState
(){

        
return
 state
;

    
}

    

    
/* 

     * setPhone – set phone number

     */

    
public
 
void
 setPhone 
(
String
 p
){

        phone 
=
 p
;

    
}

    
/*

     * getPhone – return phone number

     */

    
public
 
String
 getPhone
(){

        
return
 phone
;

    
}

    
/* Return true if address matches */

    
public
 
boolean
 isAddress
(
String
 s
,
 
String
 c
,
 
String
 z
,
 
String
 st
){

        
return
 
(
s
.
equalsIgnoreCase
(
street
)
 
&&
 c
.
equalsIgnoreCase
(
city
)
 
&&

                z
.
equalsIgnoreCase
(
zip
)
 
&&
 st
.
equalsIgnoreCase
(
state
));

    
}

    

    
/*

     * Return address in format street addr:city:zip:phone

     */

    
//@Override

    
public
 
String
 toString
(){

        
return
 street
+
“:”
+
city
+
“:”
+
zip
+
“:”
+
state
+
“:”
+
phone
;

    
}

    

}

Author.java
Author.java

package
 
Book
;

/* 

 * Author class – represents an author 

 * 

 */

public
 
class
 
Author
 
{

    
Address
 addr
;

    
String
  name
;
 
/* Author’s name */

    
int
     index
;
  
/* index */

    

    
/*

     * Constructor with no args

     */

    
public
 
Author
(){

        addr 
=
 
new
 
Address
();

        name 
=
 
new
 
String
();

        index 
=
 

1
;
 
/* unspecified */

    
}

    

    
/* 

     * Constructor with 1 argument – name

     */

    
public
 
Author
(
String
 n
)
 
{

        name 
=
 n
;

        addr 
=
 
new
 
Address
();

        index 
=
 

1
;

    
}

    

    
/*

     * Constructor with 2 arguments – name and address

     */

    
public
 
Author
(
String
 n
,
 
int
 ind
,
 
Address
 a
){

        name 
=
 n
;

        index 
=
 ind
;

        addr  
=
 a
;

    
}

    

    
/* Return true if the author has the same  name */

    
public
 
boolean
 isName
(
String
 n
){

        
return
 n
.
equalsIgnoreCase
(
name
);

    
}

    
/* Return true if author’s index is i */

    
public
 
boolean
 isIndex
(
int
 i
){

        
return
 getIndex
()
 
==
 i
;

    
}

    
/*

     * Return true if string ‘n’ matches author’s name substring

     */

    
public
 
boolean
 matchName
(
String
 n
){

        
return
 name
.
matches
(
n
);

    
}

    
/*

     * Return true if author’s index matches i, same as isAuthorIndex

     */

    
public
 
boolean
 matchIndex
(
int
 i
){

        
return
 isIndex
(
i
);

    
}

    
/*

     * getName – get name

     */

    
public
 
String
 getName
(){

        
return
 name
;

    
}

    
/*

     * setName – set  name

     */

    
public
 
void
 setName
(
String
 n
){

        name 
=
 n
;

    
}

    
/*

     * setIndex – set author’s index

     */

    
public
 
void
 setIndex
(
int
 ind
){

        index 
=
 ind
;

    
}

    
/*

     * getIndex – get author’s index

     */

    
public
 
int
 getIndex
(){

        
return
 index
;

    
}

    
/* 

     * getAddress – get address

     */

    
public
 
Address
 getAddress
(){

        
return
 addr
;

    
}

    
/*

     * setAddress – set address

     */

    
public
 
void
 setAddress
(
Address
 a
){

        addr 
=
 a
;

    
}

    

    
/*

     * Return author in format first last:street address:city:zip:phone

     */

    @
Override

    
public
 
String
 toString
(){

        
return
 name 
+
 
“:”
 
+
 addr
;
 
// will use addr.toString()

    
}

}

Book.java
Book.java
package
 
Book
;

//This Class represents a book

public
 
class
 
Book
 
{

    
Author
 author
;

    
Title
 title
;

    
Gendre
 gendre
;

    
int
 index
;
 

    
float
 price
;

    

    
/*

     * Constructor with no arguments – initialize members

     */

    
public
 
Book
(){

        author 
=
 
new
 
Author
();

        title  
=
 
new
 
Title
();

        gendre 
=
 
new
 
Gendre
();

        price  
=
 
0
;

        index  
=
 

1
;
 
/* unspecified */

    
}

    
/* 

     * Constructor with all arguments

     */

    
public
 
Book
(
int
 i
,
 
Title
 t
,
 
Author
 a
,
 
Gendre
 g
,
 
float
 p
){

        author 
=
 a
;

        title 
=
 t
;

        gendre 
=
 g
;

        price  
=
 p
;

        index 
=
 i
;

    
}

    

    
/*

     * setPrice – set the book price

     */

    
public
 
void
 setPrice
(
float
 p
){

        price 
=
 p
;

    
}

    
/*

     * getPrice – get the book price

     */

    
public
 
float
 getPrice
(){

        
return
 price
;

    
}

    

    
/*

     * setAuthor – set the book’s author

     */

    
public
 
void
 setAuthor 
(
Author
 a
){

        author 
=
 a
;

    
}

    
/*

     * getAuthor – get author

     */

    
public
 
Author
 getAuthor
(){

        
return
 author
;

    
}

    

    
/*

     * setTitle – set the book title

     */

    
public
 
void
 setTitle
(
 
Title
 t
){

        title 
=
 t
;

    
}

    
/*

     * getTitle – get the book title

     */

    
public
 
Title
 getTitle
(){

        
return
 title
;

    
}

    

    
/*

     * setGendre – set gendre

     */

    
public
 
void
 setGendre
(
Gendre
 g
){

        gendre 
=
 g
;

    
}

    
/*

     * getGendre – get gendre

     */

    
public
 
Gendre
 getGendre
(){

        
return
 gendre
;

    
}

    

    
/*

     * setIndex – set index

     */

    
public
 
void
 setIndex
(
int
 ind
){

        index 
=
 ind
;

    
}

    
/*

     * getIndex – get index

     */

    
public
 
int
 getIndex
(){

        
return
 index
;

    
}

    

    
/* Book match functions (used for search)

     * isAuthorName – if the author exactly as specified

     * isGendre – if the gendre exactly matches

     * isTitle – if the title exactly matches

     * matchAuthorName – if author matches partially

     * matchTitle – if title matches partially

     * matchGendre – if gendre matches partially

     */

    
public
 
boolean
 isAuthorName
(
String
 a
){

        
return
 author
.
isName
(
a
);

    
}

    
public
 
boolean
 isGendre
(
String
 g
){

        
return
 gendre
.
isGendre
(
g
);

    
}

    
public
 
boolean
 isTitle
(
String
 t
){

        
return
 title
.
isTitle
(
t
);

    
}

    
public
 
boolean
 matchAuthorName
(
String
 a
){

        
return
 author
.
matchName
(
a
);

    
}

    
public
 
boolean
 matchAuthorIndex
(
int
 i
){

        
return
 author
.
matchIndex
(
i
);

    
}

    
public
 
boolean
 matchTitle
(
String
 t
){

        
return
 title
.
matchTitle
(
t
);

    
}

    
public
 
boolean
 matchGendre
(
String
 g
){

        
return
 gendre
.
matchGendre
(
g
);

    
}

    
/*

     * toString – return in format title:gendre:price

     */

   
// @Override

    
public
 
String
 toString
(){

        
return
 title 
+
 
“:”
 
+
 gendre 
+
 
“:”
 
+
 price
;

    
}

}

Final.java
Final.java
package
 demo
;

public
 
class
 
Final
 
extends
 javax
.
swing
.
JFrame
 
{

    
public
 
Final
()
 
{

        initComponents
();

    
}

    
/**

     * This method is called from within the constructor to initialize the form.

     * WARNING: Do NOT modify this code. The content of this method is always

     * regenerated by the Form Editor.

     */

    @
SuppressWarnings
(
“unchecked”
)

    
// //GEN-BEGIN:initComponents

    
private
 
void
 initComponents
()
 
{

        firstNameLabel 
=
 
new
 javax
.
swing
.
JLabel
();

        firstNameField 
=
 
new
 javax
.
swing
.
JTextField
();

        lastNameLabel 
=
 
new
 javax
.
swing
.
JLabel
();

        lastNameField 
=
 
new
 javax
.
swing
.
JTextField
();

        emailLabel 
=
 
new
 javax
.
swing
.
JLabel
();

        emailField 
=
 
new
 javax
.
swing
.
JTextField
();

        jScrollPane1 
=
 
new
 javax
.
swing
.
JScrollPane
();

        availableList 
=
 
new
 javax
.
swing
.
JList
();

        jScrollPane2 
=
 
new
 javax
.
swing
.
JScrollPane
();

        selectedList 
=
 
new
 javax
.
swing
.
JList
();

        cancelButton 
=
 
new
 javax
.
swing
.
JButton
();

        okButton 
=
 
new
 javax
.
swing
.
JButton
();

        availableLabel 
=
 
new
 javax
.
swing
.
JLabel
();

        selectedLabel 
=
 
new
 javax
.
swing
.
JLabel
();

        jLabel1 
=
 
new
 javax
.
swing
.
JLabel
();

        jTextField1 
=
 
new
 javax
.
swing
.
JTextField
();

        jPanel1 
=
 
new
 javax
.
swing
.
JPanel
();

        unselectAllButton 
=
 
new
 javax
.
swing
.
JButton
();

        selectAllButton 
=
 
new
 javax
.
swing
.
JButton
();

        unselectButton 
=
 
new
 javax
.
swing
.
JButton
();

        selectButton 
=
 
new
 javax
.
swing
.
JButton
();

        setDefaultCloseOperation
(
javax
.
swing
.
WindowConstants
.
EXIT_ON_CLOSE
);

        firstNameLabel
.
setText
(
“First Name:”
);

        lastNameLabel
.
setText
(
“Last Name:”
);

        emailLabel
.
setText
(
“E-mail:”
);

        availableList
.
setModel
(
new
 javax
.
swing
.
AbstractListModel
()
 
{

            
String
[]
 strings 
=
 
{
 
“Mathematics”
,
 
“Physics”
,
 
“Chemistry”
,
 
“Biology”
,
 
“Architecture”
,
 
“Geology”
 
};

            
public
 
int
 getSize
()
 
{
 
return
 strings
.
length
;
 
}

            
public
 
Object
 getElementAt
(
int
 i
)
 
{
 
return
 strings
[
i
];
 
}

        
});

        jScrollPane1
.
setViewportView
(
availableList
);

        selectedList
.
setModel
(
new
 javax
.
swing
.
AbstractListModel
()
 
{

            
String
[]
 strings 
=
 
{
 
“Philosophy”
,
 
“Astronomy”
,
 
“Religion”
,
 
“Psychology”
 
};

            
public
 
int
 getSize
()
 
{
 
return
 strings
.
length
;
 
}

            
public
 
Object
 getElementAt
(
int
 i
)
 
{
 
return
 strings
[
i
];
 
}

        
});

        jScrollPane2
.
setViewportView
(
selectedList
);

        cancelButton
.
setText
(
“Cancel”
);

        okButton
.
setText
(
“OK”
);

        availableLabel
.
setText
(
“Available Topics:”
);

        selectedLabel
.
setText
(
“Selected Topics:”
);

        jLabel1
.
setText
(
“Middle Name:”
);

        unselectAllButton
.
setText
(
“<<" );         selectAllButton . setText ( ">>”
);

        unselectButton
.
setText
(
“<" );         selectButton . setText ( ">”
);

        javax
.
swing
.
GroupLayout
 jPanel1Layout 
=
 
new
 javax
.
swing
.
GroupLayout
(
jPanel1
);

        jPanel1
.
setLayout
(
jPanel1Layout
);

        jPanel1Layout
.
setHorizontalGroup
(

            jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

            
.
addGroup
(
jPanel1Layout
.
createSequentialGroup
()

                
.
addGap
(
0
,
 
0
,
 
0
)

                
.
addGroup
(
jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                    
.
addComponent
(
selectAllButton
)

                    
.
addComponent
(
selectButton
)

                    
.
addComponent
(
unselectButton
)

                    
.
addComponent
(
unselectAllButton
))

                
.
addGap
(
0
,
 
0
,
 
0
))

        
);

        jPanel1Layout
.
linkSize
(
javax
.
swing
.
SwingConstants
.
HORIZONTAL
,
 
new
 java
.
awt
.
Component
[]
 
{
selectAllButton
,
 selectButton
,
 unselectAllButton
,
 unselectButton
});

        jPanel1Layout
.
setVerticalGroup
(

            jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

            
.
addGroup
(
jPanel1Layout
.
createSequentialGroup
()

                
.
addContainerGap
(
javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 
Short
.
MAX_VALUE
)

                
.
addComponent
(
selectAllButton
)

                
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                
.
addComponent
(
selectButton
)

                
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                
.
addComponent
(
unselectButton
)

                
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                
.
addComponent
(
unselectAllButton
)

                
.
addContainerGap
(
javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 
Short
.
MAX_VALUE
))

        
);

        javax
.
swing
.
GroupLayout
 layout 
=
 
new
 javax
.
swing
.
GroupLayout
(
getContentPane
());

        getContentPane
().
setLayout
(
layout
);

        layout
.
setHorizontalGroup
(

            layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

            
.
addGroup
(
layout
.
createSequentialGroup
()

                
.
addContainerGap
()

                
.
addGroup
(
layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                    
.
addGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
TRAILING
,
 layout
.
createSequentialGroup
()

                        
.
addGap
(
0
,
 
0
,
 
Short
.
MAX_VALUE
)

                        
.
addComponent
(
okButton
)

                        
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                        
.
addComponent
(
cancelButton
))

                    
.
addGroup
(
layout
.
createSequentialGroup
()

                        
.
addGroup
(
layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                            
.
addGroup
(
layout
.
createSequentialGroup
()

                                
.
addComponent
(
jScrollPane1
)

                                
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                                
.
addComponent
(
jPanel1
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
)

                                
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
))

                            
.
addComponent
(
availableLabel
))

                        
.
addGroup
(
layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                            
.
addGroup
(
layout
.
createSequentialGroup
()

                                
.
addComponent
(
selectedLabel
)

                                
.
addGap
(
0
,
 
0
,
 
Short
.
MAX_VALUE
))

                            
.
addComponent
(
jScrollPane2
)))

                    
.
addGroup
(
layout
.
createSequentialGroup
()

                        
.
addGroup
(
layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                            
.
addComponent
(
firstNameLabel
)

                            
.
addComponent
(
lastNameLabel
)

                            
.
addComponent
(
emailLabel
)

                            
.
addComponent
(
jLabel1
))

                        
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                        
.
addGroup
(
layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                            
.
addComponent
(
firstNameField
)

                            
.
addComponent
(
lastNameField
)

                            
.
addComponent
(
emailField
)

                            
.
addComponent
(
jTextField1
))))

                
.
addContainerGap
())

        
);

        layout
.
linkSize
(
javax
.
swing
.
SwingConstants
.
HORIZONTAL
,
 
new
 java
.
awt
.
Component
[]
 
{
cancelButton
,
 okButton
});

        layout
.
setVerticalGroup
(

            layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

            
.
addGroup
(
layout
.
createSequentialGroup
()

                
.
addContainerGap
()

                
.
addGroup
(
layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
BASELINE
)

                    
.
addComponent
(
firstNameLabel
)

                    
.
addComponent
(
firstNameField
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
))

                
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                
.
addGroup
(
layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
BASELINE
)

                    
.
addComponent
(
jLabel1
)

                    
.
addComponent
(
jTextField1
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
))

                
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                
.
addGroup
(
layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
BASELINE
)

                    
.
addComponent
(
lastNameLabel
)

                    
.
addComponent
(
lastNameField
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
))

                
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                
.
addGroup
(
layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
BASELINE
)

                    
.
addComponent
(
emailLabel
)

                    
.
addComponent
(
emailField
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
))

                
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                
.
addGroup
(
layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
BASELINE
)

                    
.
addComponent
(
availableLabel
)

                    
.
addComponent
(
selectedLabel
))

                
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                
.
addGroup
(
layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                    
.
addComponent
(
jScrollPane1
)

                    
.
addComponent
(
jScrollPane2
)

                    
.
addComponent
(
jPanel1
,
 javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 
Short
.
MAX_VALUE
))

                
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
UNRELATED
)

                
.
addGroup
(
layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
BASELINE
)

                    
.
addComponent
(
cancelButton
)

                    
.
addComponent
(
okButton
))

                
.
addContainerGap
())

        
);

        pack
();

    
}
// //GEN-END:initComponents

    
/**

     * 
@param
 args the command line arguments

     */

    
public
 
static
 
void
 main
(
String
 args
[])
 
{

        
/* Set the Nimbus look and feel */

        
//

        
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.

         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 

         */

        
try
 
{

            
for
 
(
javax
.
swing
.
UIManager
.
LookAndFeelInfo
 info 
:
 javax
.
swing
.
UIManager
.
getInstalledLookAndFeels
())
 
{

                
if
 
(
“Nimbus”
.
equals
(
info
.
getName
()))
 
{

                    javax
.
swing
.
UIManager
.
setLookAndFeel
(
info
.
getClassName
());

                    
break
;

                
}

            
}

        
}
 
catch
 
(
ClassNotFoundException
 ex
)
 
{

            java
.
util
.
logging
.
Logger
.
getLogger
(
Final
.
class
.
getName
()).
log
(
java
.
util
.
logging
.
Level
.
SEVERE
,
 
null
,
 ex
);

        
}
 
catch
 
(
InstantiationException
 ex
)
 
{

            java
.
util
.
logging
.
Logger
.
getLogger
(
Final
.
class
.
getName
()).
log
(
java
.
util
.
logging
.
Level
.
SEVERE
,
 
null
,
 ex
);

        
}
 
catch
 
(
IllegalAccessException
 ex
)
 
{

            java
.
util
.
logging
.
Logger
.
getLogger
(
Final
.
class
.
getName
()).
log
(
java
.
util
.
logging
.
Level
.
SEVERE
,
 
null
,
 ex
);

        
}
 
catch
 
(
javax
.
swing
.
UnsupportedLookAndFeelException
 ex
)
 
{

            java
.
util
.
logging
.
Logger
.
getLogger
(
Final
.
class
.
getName
()).
log
(
java
.
util
.
logging
.
Level
.
SEVERE
,
 
null
,
 ex
);

        
}

        
//

        
/* Create and display the form */

        java
.
awt
.
EventQueue
.
invokeLater
(
new
 
Runnable
()
 
{

            @
Override

            
public
 
void
 run
()
 
{

                
new
 
Final
().
setVisible
(
true
);

            
}

        
});

    
}

    
// Variables declaration – do not modify//GEN-BEGIN:variables

    
private
 javax
.
swing
.
JLabel
 availableLabel
;

    
private
 javax
.
swing
.
JList
 availableList
;

    
private
 javax
.
swing
.
JButton
 cancelButton
;

    
private
 javax
.
swing
.
JTextField
 emailField
;

    
private
 javax
.
swing
.
JLabel
 emailLabel
;

    
private
 javax
.
swing
.
JTextField
 firstNameField
;

    
private
 javax
.
swing
.
JLabel
 firstNameLabel
;

    
private
 javax
.
swing
.
JLabel
 jLabel1
;

    
private
 javax
.
swing
.
JPanel
 jPanel1
;

    
private
 javax
.
swing
.
JScrollPane
 jScrollPane1
;

    
private
 javax
.
swing
.
JScrollPane
 jScrollPane2
;

    
private
 javax
.
swing
.
JTextField
 jTextField1
;

    
private
 javax
.
swing
.
JTextField
 lastNameField
;

    
private
 javax
.
swing
.
JLabel
 lastNameLabel
;

    
private
 javax
.
swing
.
JButton
 okButton
;

    
private
 javax
.
swing
.
JButton
 selectAllButton
;

    
private
 javax
.
swing
.
JButton
 selectButton
;

    
private
 javax
.
swing
.
JLabel
 selectedLabel
;

    
private
 javax
.
swing
.
JList
 selectedList
;

    
private
 javax
.
swing
.
JButton
 unselectAllButton
;

    
private
 javax
.
swing
.
JButton
 unselectButton
;

    
// End of variables declaration//GEN-END:variables

}

Gendre.java
Gendre.java
package
 
Book
;

import
 java
.
util
.
ArrayList
;

/* 

 * This class represents one 

 * or more (not yet implemented)

 * book gendre (s) 

 */

public
 
class
 
Gendre
 
{

    
ArrayList
< String >
 list
;

    
/*

     * Constructor – create empty set of gendres

     */

    
public
 
Gendre
()
 
{

        list 
=
 
new
 
ArrayList
< String >
();
 
// create new list

    
}

    
/* 

     * Constructor with 1 argument – gendre

     */

    
public
 
Gendre
(
String
 g
)
 
{

        list 
=
 
new
 
ArrayList
< String >
();
 
// create new list

        list
.
add
(
g
);

    
}

    
/* 

     * setGendre() – set gendre

     * 

     */

    
public
 
void
 setGendre
(
ArrayList
 gendre
){

            list 
=
 gendre
;

    
}

    
/* 

     * getGendre() – get a list of gendres of this book 

     */

    
public
 
ArrayList
< String >
 getGendre
(){

        
return
 list
;

    
}

    

    
/* 

     * 

     * isGendre – return true if this gendre is already in a list of gendres 

     */

    
public
 
boolean
 isGendre
(
String
 gendre
)
 
{

        
for
 
(
int
 i
=
0
;
 i
< list . size ();  i ++ )   {              if   ( list . get ( i ). equalsIgnoreCase ( gendre ))   return   true ;          }          return   false ;      }           /*       * matchGendre - return true if 'n' matches any gendre substring      */      public   boolean  matchGendre ( String  g ){          for   ( int  i = 0 ;  i < list . size ();  i ++ ){              if   ( list . get ( i ). matches ( g ))   return   true ;          }          return   false ;      }           /* convert list of gendres to gendre1,gendre2,gendre3,.. string */     @ Override      public   String  toString (){          String  result = new   String ();          if   ( list . size () >
0
)
 result 
=
 list
.
get
(
0
);

        
for
 
(
int
 i 
=
 
1
;
 i
< list . size ();  i ++ )   {             result = result + "," + list . get ( i );          }          return  result ;      } } LibrartyUI.java LibrartyUI.java /*  * Use separate package for GUI  * import our 'books' classes  */ import  java . io . * ; public   class   LibrartyUI   extends  javax . swing . JFrame   {      static   Library  lib ;         /**      * Creates new form BookStoreUI      */      public   LibrartyUI ()   {          super ();         initComponents ();      }      /**      * This method is called from within the constructor to initialize the form.      * WARNING: Do NOT modify this code. The content of this method is always      * regenerated by the Form Editor.      */     @ SuppressWarnings ( "unchecked" )      // //GEN-BEGIN:initComponents

    
private
 
void
 initComponents
()
 
{

        jMenuBar1 
=
 
new
 javax
.
swing
.
JMenuBar
();

        jMenu1 
=
 
new
 javax
.
swing
.
JMenu
();

        jMenu2 
=
 
new
 javax
.
swing
.
JMenu
();

        buttonGroup1 
=
 
new
 javax
.
swing
.
ButtonGroup
();

        buttonGroup2 
=
 
new
 javax
.
swing
.
ButtonGroup
();

        jPanel1 
=
 
new
 javax
.
swing
.
JPanel
();

        jLabel1 
=
 
new
 javax
.
swing
.
JLabel
();

        jRadioButtonAuthorIndex 
=
 
new
 javax
.
swing
.
JRadioButton
();

        jRadioButtonBookIndex 
=
 
new
 javax
.
swing
.
JRadioButton
();

        jRadioButtonBookTitle 
=
 
new
 javax
.
swing
.
JRadioButton
();

        jRadioButtonGendre 
=
 
new
 javax
.
swing
.
JRadioButton
();

        jLabel2 
=
 
new
 javax
.
swing
.
JLabel
();

        jTextFieldSearch 
=
 
new
 javax
.
swing
.
JTextField
();

        jButtonSearch 
=
 
new
 javax
.
swing
.
JButton
();

        jLabel3 
=
 
new
 javax
.
swing
.
JLabel
();

        jScrollPane1 
=
 
new
 javax
.
swing
.
JScrollPane
();

        jTextArea1 
=
 
new
 javax
.
swing
.
JTextArea
();

        jMenuBar2 
=
 
new
 javax
.
swing
.
JMenuBar
();

        jMenu3 
=
 
new
 javax
.
swing
.
JMenu
();

        jMenuItem1 
=
 
new
 javax
.
swing
.
JMenuItem
();

        jMenu1
.
setText
(
“File”
);

        jMenuBar1
.
add
(
jMenu1
);

        jMenu2
.
setText
(
“Edit”
);

        jMenuBar1
.
add
(
jMenu2
);

        setDefaultCloseOperation
(
javax
.
swing
.
WindowConstants
.
EXIT_ON_CLOSE
);

        jLabel1
.
setText
(
“Search on:”
);

        buttonGroup1
.
add
(
jRadioButtonAuthorIndex
);

        jRadioButtonAuthorIndex
.
setSelected
(
true
);

        jRadioButtonAuthorIndex
.
setText
(
“Author Index”
);

        jRadioButtonAuthorIndex
.
addActionListener
(
new
 java
.
awt
.
event
.
ActionListener
()
 
{

            
public
 
void
 actionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{

                jRadioButtonAuthorIndexActionPerformed
(
evt
);

            
}

        
});

        buttonGroup1
.
add
(
jRadioButtonBookIndex
);

        jRadioButtonBookIndex
.
setText
(
“Book Index”
);

        jRadioButtonBookIndex
.
addActionListener
(
new
 java
.
awt
.
event
.
ActionListener
()
 
{

            
public
 
void
 actionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{

                jRadioButtonBookIndexActionPerformed
(
evt
);

            
}

        
});

        buttonGroup1
.
add
(
jRadioButtonBookTitle
);

        jRadioButtonBookTitle
.
setText
(
“Book Title”
);

        jRadioButtonBookTitle
.
addActionListener
(
new
 java
.
awt
.
event
.
ActionListener
()
 
{

            
public
 
void
 actionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{

                jRadioButtonBookTitleActionPerformed
(
evt
);

            
}

        
});

        buttonGroup1
.
add
(
jRadioButtonGendre
);

        jRadioButtonGendre
.
setText
(
“Gendre”
);

        jLabel2
.
setText
(
“Search for:”
);

        jButtonSearch
.
setText
(
“Search ”
);

        jButtonSearch
.
addActionListener
(
new
 java
.
awt
.
event
.
ActionListener
()
 
{

            
public
 
void
 actionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{

                jButtonSearchActionPerformed
(
evt
);

            
}

        
});

        javax
.
swing
.
GroupLayout
 jPanel1Layout 
=
 
new
 javax
.
swing
.
GroupLayout
(
jPanel1
);

        jPanel1
.
setLayout
(
jPanel1Layout
);

        jPanel1Layout
.
setHorizontalGroup
(

            jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

            
.
addGroup
(
jPanel1Layout
.
createSequentialGroup
()

                
.
addGroup
(
jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                    
.
addGroup
(
jPanel1Layout
.
createSequentialGroup
()

                        
.
addGap
(
10
,
 
10
,
 
10
)

                        
.
addComponent
(
jLabel1
))

                    
.
addGroup
(
jPanel1Layout
.
createSequentialGroup
()

                        
.
addContainerGap
()

                        
.
addGroup
(
jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                            
.
addComponent
(
jRadioButtonGendre
)

                            
.
addComponent
(
jRadioButtonBookTitle
)

                            
.
addComponent
(
jRadioButtonBookIndex
)

                            
.
addComponent
(
jRadioButtonAuthorIndex
))))

                
.
addGap
(
36
,
 
36
,
 
36
)

                
.
addGroup
(
jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                    
.
addComponent
(
jLabel2
)

                    
.
addComponent
(
jTextFieldSearch
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 
246
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
)

                    
.
addComponent
(
jButtonSearch
))

                
.
addContainerGap
(
809
,
 
Short
.
MAX_VALUE
))

        
);

        jPanel1Layout
.
setVerticalGroup
(

            jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

            
.
addGroup
(
jPanel1Layout
.
createSequentialGroup
()

                
.
addGroup
(
jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
BASELINE
)

                    
.
addComponent
(
jLabel1
)

                    
.
addComponent
(
jLabel2
))

                
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                
.
addGroup
(
jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
BASELINE
)

                    
.
addComponent
(
jRadioButtonAuthorIndex
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 
23
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
)

                    
.
addComponent
(
jTextFieldSearch
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
))

                
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                
.
addGroup
(
jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                    
.
addGroup
(
jPanel1Layout
.
createSequentialGroup
()

                        
.
addComponent
(
jRadioButtonBookIndex
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 
23
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
)

                        
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                        
.
addComponent
(
jRadioButtonBookTitle
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 
23
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
))

                    
.
addComponent
(
jButtonSearch
))

                
.
addGap
(
2
,
 
2
,
 
2
)

                
.
addComponent
(
jRadioButtonGendre
))

        
);

        jLabel3
.
setText
(
“Search result:”
);

        jTextArea1
.
setColumns
(
20
);

        jTextArea1
.
setRows
(
5
);

        jScrollPane1
.
setViewportView
(
jTextArea1
);

        jMenu3
.
setText
(
“File”
);

        jMenuItem1
.
setText
(
“Exit”
);

        jMenuItem1
.
addActionListener
(
new
 java
.
awt
.
event
.
ActionListener
()
 
{

            
public
 
void
 actionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{

                jMenuItem1ActionPerformed
(
evt
);

            
}

        
});

        jMenu3
.
add
(
jMenuItem1
);

        jMenuBar2
.
add
(
jMenu3
);

        setJMenuBar
(
jMenuBar2
);

        javax
.
swing
.
GroupLayout
 layout 
=
 
new
 javax
.
swing
.
GroupLayout
(
getContentPane
());

        getContentPane
().
setLayout
(
layout
);

        layout
.
setHorizontalGroup
(

            layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

            
.
addGroup
(
layout
.
createSequentialGroup
()

                
.
addContainerGap
()

                
.
addGroup
(
layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                    
.
addGroup
(
layout
.
createSequentialGroup
()

                        
.
addComponent
(
jPanel1
,
 javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 
Short
.
MAX_VALUE
)

                        
.
addContainerGap
())

                    
.
addGroup
(
layout
.
createSequentialGroup
()

                        
.
addGap
(
10
,
 
10
,
 
10
)

                        
.
addGroup
(
layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                            
.
addComponent
(
jLabel3
)

                            
.
addComponent
(
jScrollPane1
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 
634
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
))

                        
.
addGap
(
552
,
 
552
,
 
552
))))

        
);

        layout
.
setVerticalGroup
(

            layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

            
.
addGroup
(
layout
.
createSequentialGroup
()

                
.
addContainerGap
()

                
.
addComponent
(
jPanel1
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
)

                
.
addGap
(
23
,
 
23
,
 
23
)

                
.
addComponent
(
jLabel3
)

                
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                
.
addComponent
(
jScrollPane1
,
 javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 
159
,
 
Short
.
MAX_VALUE
)

                
.
addContainerGap
())

        
);

        pack
();

    
}
// //GEN-END:initComponents

    
private
 
void
 jMenuItem1ActionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{
//GEN-FIRST:event_jMenuItem1ActionPerformed

        
// TODO add your handling code here:

        
System
.
exit
(
0
);

    
}
//GEN-LAST:event_jMenuItem1ActionPerformed

    
private
 
void
 jRadioButtonBookTitleActionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{
//GEN-FIRST:event_jRadioButtonBookTitleActionPerformed

        
// TODO add your handling code here:

    
}
//GEN-LAST:event_jRadioButtonBookTitleActionPerformed

    
private
 
void
 jRadioButtonAuthorIndexActionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{
//GEN-FIRST:event_jRadioButtonAuthorIndexActionPerformed

        
// TODO add your handling code here:

    
}
//GEN-LAST:event_jRadioButtonAuthorIndexActionPerformed

    
private
 
void
 jButtonSearchActionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{
//GEN-FIRST:event_jButtonSearchActionPerformed

        
// TODO add your handling code here

       

     

        
String
 strAuthorame
=
 
“”
;

        
if
 
(
jRadioButtonAuthorIndex
.
isSelected
()){

            
// Search by Author Index

            
int
 index
;

            index 
=
 
Integer
.
parseInt
(
jTextFieldSearch
.
getText
());

            
if
 
(
lib
.
searchOnAuthorIndex
(
index
))
 
{

                
// Update Author’s information

                
Author
 author 
=
 lib
.
getAuthorOnIndex
(
index
);

                jTextArea1
.
setText
(
author
.
toString
());

            
}

            
else
 
{
 
// author not found – setup empty fields

                  strAuthorame 
=
 
“*** NOT FOUND ***”
;

             jTextArea1
.
setText
(
strAuthorame
);

            
}

            
/* After searching on Author Index we also setup currentBook Index */

            
if
 
(
lib
.
getCurrentBookIndex
()
 
!=
 

1
)
 
{

                
Book
 book
;

                book 
=
 lib
.
getBookOnIndex
(
lib
.
getCurrentBookIndex
());

              jTextArea1
.
setText
(
book
.
toString
());

            
}

            
else
 
{
 
// no more books not found with this author

            strAuthorame
=
 
“”
;

          jTextArea1
.
setText
(
“*** NOT FOUND ***”
);

            
}

        
}

        
/* Search by Book Index */

        
else
 
if
 
(
jRadioButtonBookIndex
.
isSelected
())
 
{

            
// Search by Author Index

            
int
 index
;

            index 
=
 
Integer
.
parseInt
(
jTextFieldSearch
.
getText
());

            
if
 
(
lib
.
searchOnBookIndex
(
index
))
 
{

                
// Update Book information

                
Book
 book 
=
 lib
.
getBookOnIndex
(
index
);

                
String
 bk 
=
 book
.
toString
()
+
“\n”
;

                
Author
 author 
=
 lib
.
getAuthorOnIndex
(
lib
.
getCurrentAuthorIndex
());

              bk 
+=
 author
.
toString
();

               jTextArea1
.
setText
(
bk
);

            
}

            
else
 
{
 
// Book not found

                  
String
 strTitle 
=
(
“*** NOT FOUND ***”
);

          jTextArea1
.
setText
(
strTitle
);

            
}

        
}

        
/*

         * Search by BOOK TITLE 

         */

        
else
 
if
 
(
jRadioButtonBookTitle
.
isSelected
()){

            
String
 title 
=
 jTextFieldSearch
.
getText
();

            
/* If book found */

            
if
 
(
lib
.
searchOnBookTitle
(
title
)){

                
int
 index 
=
 lib
.
getCurrentBookIndex
();

                
// Update Book information

                
Book
 book 
=
 lib
.
getBookOnIndex
(
index
);

               
String
 strTitle 
=
(
book
.
getTitle
().
toString
())
+
“\n”
;

               strTitle 
+=
 
(
book
.
getGendre
().
toString
())
+
“\n”
;

                
Author
 author 
=
 lib
.
getAuthorOnIndex
(
lib
.
getCurrentAuthorIndex
());

                strTitle 
+=
 author
.
toString
()
+
“\n”
;

                
Address
 address 
=
 author
.
getAddress
();

                strTitle 
+=
 address
.
toString
();

                jTextArea1
.
setText
(
strTitle
);

            
}

            
else
 
{
 
// Book not found (no more books found)

                
String
 strTitle 
=
(
“*** NOT FOUND ***”
);

                    jTextArea1
.
setText
(
strTitle
);

            
}

        
}

        
/*

         * Search by BOOK GENDRE

         */

        
else
 
if
 
(
jRadioButtonGendre
.
isSelected
()){

            
String
 gendre 
=
 jTextFieldSearch
.
getText
();

            
/* If book found */

            
if
 
(
lib
.
searchOnBookGendre
(
gendre
)){

                
int
 index 
=
 lib
.
getCurrentBookIndex
();

                
// Update Book information

                
Book
 book 
=
 lib
.
getBookOnIndex
(
index
);

                
String
  strTitle 
=
(
book
.
toString
())
 
+
 
“\n”
;

                
Author
 author 
=
 lib
.
getAuthorOnIndex
(
lib
.
getCurrentAuthorIndex
());

                  strTitle 
+=
(
author
.
toString
())
 
+
 
“\n”
;

                
Address
 address 
=
 author
.
getAddress
();

                strTitle 
+=
(
address
.
toString
())
 
+
 
“\n”
;

               strTitle 
+=
(
book
.
getGendre
().
toString
())
 
+
 
“\n”
;

              jTextArea1
.
setText
(
strTitle
);

            
}

            
else
 
{
 
// Book not found (no more books found)

                  
String
 strTitle 
=
(
“*** NOT FOUND ***”
);

                    jTextArea1
.
setText
(
strTitle
);

            
}

        
}

        

    
}
//GEN-LAST:event_jButtonSearchActionPerformed

    
private
 
void
 jRadioButtonBookIndexActionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{
//GEN-FIRST:event_jRadioButtonBookIndexActionPerformed

        
// TODO add your handling code here:

}
//GEN-LAST:event_jRadioButtonBookIndexActionPerformed

    
/*

     * Reset search results

     */

    
/**

     * 
@param
 args the command line arguments

     */

    
public
 
static
 
void
 main
(
String
 args
[])
 
throws
 
IOException
 
{

        
/*

         * Read library file

         */

        lib 
=
 
new
 
Library
();
 
// use constructor without filename

        lib
.
readLibrary
();
 
// try to read and parse data file

        

        
/*

         * Set the Nimbus look and feel

         */

        
//

        
/*

         * If Nimbus (introduced in Java SE 6) is not available, stay with the

         * default look and feel. For details see

         * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html

         */

        
try
 
{

            
for
 
(
javax
.
swing
.
UIManager
.
LookAndFeelInfo
 info 
:
 javax
.
swing
.
UIManager
.
getInstalledLookAndFeels
())
 
{

                
if
 
(
“Nimbus”
.
equals
(
info
.
getName
()))
 
{

                    javax
.
swing
.
UIManager
.
setLookAndFeel
(
info
.
getClassName
());

                    
break
;

                
}

            
}

        
}
 
catch
 
(
ClassNotFoundException
 ex
)
 
{

            java
.
util
.
logging
.
Logger
.
getLogger
(
LibrartyUI
.
class
.
getName
()).
log
(
java
.
util
.
logging
.
Level
.
SEVERE
,
 
null
,
 ex
);

        
}
 
catch
 
(
InstantiationException
 ex
)
 
{

            java
.
util
.
logging
.
Logger
.
getLogger
(
LibrartyUI
.
class
.
getName
()).
log
(
java
.
util
.
logging
.
Level
.
SEVERE
,
 
null
,
 ex
);

        
}
 
catch
 
(
IllegalAccessException
 ex
)
 
{

            java
.
util
.
logging
.
Logger
.
getLogger
(
LibrartyUI
.
class
.
getName
()).
log
(
java
.
util
.
logging
.
Level
.
SEVERE
,
 
null
,
 ex
);

        
}
 
catch
 
(
javax
.
swing
.
UnsupportedLookAndFeelException
 ex
)
 
{

            java
.
util
.
logging
.
Logger
.
getLogger
(
LibrartyUI
.
class
.
getName
()).
log
(
java
.
util
.
logging
.
Level
.
SEVERE
,
 
null
,
 ex
);

        
}

        
//

        
/*

         * Create and display the form

         */

        java
.
awt
.
EventQueue
.
invokeLater
(
new
 
Runnable
()
 
{

            
public
 
void
 run
()
 
{

                
new
 
LibrartyUI
().
setVisible
(
true
);

            
}

        
});

    
}

    
// Variables declaration – do not modify//GEN-BEGIN:variables

    
private
 javax
.
swing
.
ButtonGroup
 buttonGroup1
;

    
private
 javax
.
swing
.
ButtonGroup
 buttonGroup2
;

    
private
 javax
.
swing
.
JButton
 jButtonSearch
;

    
private
 javax
.
swing
.
JLabel
 jLabel1
;

    
private
 javax
.
swing
.
JLabel
 jLabel2
;

    
private
 javax
.
swing
.
JLabel
 jLabel3
;

    
private
 javax
.
swing
.
JMenu
 jMenu1
;

    
private
 javax
.
swing
.
JMenu
 jMenu2
;

    
private
 javax
.
swing
.
JMenu
 jMenu3
;

    
private
 javax
.
swing
.
JMenuBar
 jMenuBar1
;

    
private
 javax
.
swing
.
JMenuBar
 jMenuBar2
;

    
private
 javax
.
swing
.
JMenuItem
 jMenuItem1
;

    
private
 javax
.
swing
.
JPanel
 jPanel1
;

    
private
 javax
.
swing
.
JRadioButton
 jRadioButtonAuthorIndex
;

    
private
 javax
.
swing
.
JRadioButton
 jRadioButtonBookIndex
;

    
private
 javax
.
swing
.
JRadioButton
 jRadioButtonBookTitle
;

    
private
 javax
.
swing
.
JRadioButton
 jRadioButtonGendre
;

    
private
 javax
.
swing
.
JScrollPane
 jScrollPane1
;

    
private
 javax
.
swing
.
JTextArea
 jTextArea1
;

    
private
 javax
.
swing
.
JTextField
 jTextFieldSearch
;

    
// End of variables declaration//GEN-END:variables

}

Library.java
Library.java
package
 
Book
;

import
 java
.
io
.
*
;

import
 java
.
util
.
ArrayList
;

import
 java
.
util
.
HashMap
;

import
 java
.
util
.
Map
;

//Library class represents a library of the books 

public
 
class
 
Library
 
{

    
String
 datafile
;
 

    
ArrayList
 
< Author >
 authors
;

    
Map
 authorsMap
;

    
ArrayList
 
< Book >
 books
;

    
Map
 booksMap
;

    
int
 currentAuthor
;

    
int
 currentBook
;

    
int
 lastSearchType
;
 

    
boolean
 exactSearch
;

    

    
//Constructor with no arguments    

    
public
 
Library
(){

        datafile 
=
 
“C:\\Documents and Settings\\brenda_handy\\My Documents\\NetBeansProjects\\Form2\\src\\Book\\library.txt”
;

        lastSearchType 
=
 
0
;

        currentBook 
=
 

1
;

        currentAuthor 
=
 

1
;

        exactSearch 
=
 
true
;

        authors 
=
 
new
 
ArrayList
 
<>
 
();

        books   
=
 
new
 
ArrayList
 
<>
 
();

        booksMap 
=
 
new
 
HashMap
();

        authorsMap 
=
 
new
 
HashMap
();

    
}

    
//Creating constructor with argument 

        
public
 
Library
(
String
 filename
){

        datafile 
=
 filename
;

        lastSearchType 
=
 
0
;

        currentBook 
=
 

1
;

        currentAuthor 
=
 

1
;

        exactSearch 
=
 
true
;

        authors 
=
 
new
 
ArrayList
 
<>
 
();

        books   
=
 
new
 
ArrayList
 
<>
 
();

         booksMap 
=
 
new
 
HashMap
();

        authorsMap 
=
 
new
 
HashMap
();

    
}

    
//readLibrary method

    
public
 
boolean
 readLibrary
()
 
throws
 
IOException
  
{

        

        
File
 f 
=
 
new
 
File
(
datafile
);

        
try
 
(
BufferedReader
 in 
=
 
new
 
BufferedReader
(
new
 
FileReader
(
f
)))
 
{

            
String
 buffer
;

            

    

            
while
 
(
in
.
ready
()){

                buffer 
=
 in
.
readLine
();

                
if
 
(
buffer
.
equals
(
“”
)){

                    
break
;
 
// parse Book

                
}

                
else
 
{

                    
// Split the string on ‘:’

                    
String
 str
[];
                

                    str 
=
 buffer
.
split
(
“:”
);

                    
switch
 
(
str
[
0
].
charAt
(
0
))
 
{

                    
case
 
‘A’
:
 
// parse Author

                        
Author
 author
=
new
 
Author
();

                        author
.
setName
(
str
[
2
]);

                        author
.
setIndex
(
Integer
.
parseInt
(
str
[
1
]));

                        
// parse Address

                        
Address
 address
=
new
 
Address
();

                        address
.
setStreet
(
str
[
3
]);

                        address
.
setCity
(
str
[
4
]);

                        address
.
setState
(
str
[
5
]);

                        address
.
setZip
(
str
[
6
]);

                        address
.
setPhone
(
str
[
7
]);

                        
// Assign address to the Author

                        author
.
setAddress
(
address
);

                        
// Add author to the global author’s list

                        authors
.
add
(
author
);

                         
// Add author to the global author’s map using index

                        authorsMap
.
put
(
str
[
1
],
 author
);

                        
break
;

                    
case
 
‘B’
:

                        
Book
 book     
=
 
new
 
Book
();

                        
Title
 title   
=
 
new
 
Title
(
str
[
2
]);

                        book
.
setTitle
(
title
);

                        
Gendre
 gendre 
=
 
new
 
Gendre
(
str
[
3
]);

                        book
.
setGendre
(
gendre
);

                        
// Locate author by index and link to this book

    

                        book
.
setAuthor
(
authors
.
get
(
Integer
.
parseInt
(
str
[
5
])));

                        book
.
setIndex
(
Integer
.
parseInt
(
str
[
1
]));

                        book
.
setPrice
(
Float
.
parseFloat
(
str
[
4
]));

                        
// Add the book to global book’s list

                        books
.
add
(
book
);

                         
// Add book to the global author’s map using index

                        booksMap
.
put
(
str
[
1
],
 book
);

                        
break
;
 

                    
}

                
}

            
}

        
}

        
return
 
true
;

    
}

    

    
/*

     * writeLibrary – write all data to datafile

     *          return  true on success

     *                  false on error

     */

    
public
 
boolean
 writeLibrary
()
 
throws
 
IOException
 
{

        
FileOutputStream
 fos 
=
 
new
 
FileOutputStream
(
datafile
);

        
Writer
 out 
=
 
new
 
OutputStreamWriter
(
fos
,
 
“UTF-8”
);

        
String
 buffer
;

        
Author
 author
;

        
Book
 book
;

        

        
/* 

         * Write authors, then books

         */

        
for
 
(
int
 i
=
0
;
 i
< authors . size ();  i ++ )   {             author  =  authors . get ( i );             buffer = "A:"   +  author . getIndex ()   +   ":"   +  author  +   "\n" ;   // .toString() is here             out . write ( buffer );          }          /*          * Write books          */          for   ( int  i = 0 ;  i < books . size ();  i ++ )   {             book  =  books . get ( i );             buffer  =   "B:"   +  book . getIndex ()   +   ":"   +  book  +   "\n" ;   // .toString is auto             out . write ( buffer );          }          // close output stream and file         out . close ();         fos . close ();          return   true ;      }           /*      * setSearchType - set type of the next search      */      public   void  setSearchType ( int  type ){         lastSearchType  =  type ;      }      /*      * getSearchType - get type of the last search      */      public   int  getSearchType (){          return  lastSearchType ;      }           /*       * searchOnAuthorIndex - search author on index,      *   return true if found      *   set 'currentAuthor' to ind      *   set 'currentBook' to first book of this author or -1 if not found      */      public   boolean  searchOnAuthorIndex ( int  ind )   {                   if   ( authors  ==   null   ||  authors . size () <= ind  ||  ind < 0 )   return   false ;          /*          * Now decide if we 'continue' search just starting a new one          */          if   ( currentAuthor  ==  ind  &&  currentBook >=
0
)
 
{

            currentBook
++
;

        
}
 

        
else
 
{

            currentBook
=
0
;

        
}

        

        currentAuthor
=
ind
;

        

        
for
 
(;
 currentBook
< books . size ();  currentBook ++ ){              if   ( books . get ( currentBook ). getAuthor (). getIndex ()   ==  ind )   {                  return   true ;   // author found and book found              }          }         currentBook  =   - 1 ;          return   true ;   // book not found, but author found      }           /*       * searchOnBookIndex - search book on index,      *   return true if found      *   set 'currentBook' to ind of the book found      *   set 'currentAuthor' to the book's author      */      public   boolean  searchOnBookIndex ( int  ind )   {                   if   ( books  ==   null   ||  books . size () <= ind  ||  ind < 0 )   return   false ;         currentBook = ind ;         currentAuthor  =  books . get ( ind ). getAuthor (). getIndex ();          return   true ;      }      /*      * getAuthorOnIndex - return author by index      * ind should be valid      */      public   Author  getAuthorOnIndex ( int  ind ){          return   ( Author ) authorsMap . get ( ind + "" );      }           /*       * getCurrentBookIndex - return current book index      */      public   int  getCurrentBookIndex (){          return  currentBook ;      }                /*       * searchOnBookTitle - search on book title      * title - title to search      * exactMatch - should we compare the title exactly or not      * return true if book found      * on success, setup currentBook and currentAuthor      * on failure - both set to -1      */      public   boolean  searchOnBookTitle ( String  title ){          if   ( currentBook >=
0
){

            currentBook
++
;

        
}

        
else
 
{

            currentBook
=
0
;

        
}

        
for
 
(
currentBook
=
0
;
currentBook
< books . size (); currentBook ++ ){                  if   ( books . get ( currentBook ). isTitle ( title ))   {                      break ;    /* found */                  }              else   {                  if   ( books . get ( currentBook ). matchTitle ( title ))   {                      break ;   /* found */                  }              }          }          /* Not found */          if   ( currentBook >=
books
.
size
())
 
{

            currentBook
=-
1
;

            
return
 
false
;

        
}

        
/* Now find the author */

        currentAuthor 
=
 books
.
get
(
currentBook
).
getAuthor
().
getIndex
();

        
return
 
true
;

    
}

    
/* 

     * searchOnBookGendre – search on book gendre

     * gendre – gendre to search

     * exactMatch – should we compare the gendre exactly or not

     * return true if book found

     * on success, setup currentBook and currentAuthor

     * on failure – both set to -1

     */

    
public
 
boolean
 searchOnBookGendre
(
String
 gendre
){

        
if
 
(
currentBook
>=
0
){

            currentBook
++
;

        
}

        
else
 
{

            currentBook
=
0
;

        
}

        
for
 
(
currentBook
=
0
;
currentBook
< books . size (); currentBook ++ ){                  if   ( books . get ( currentBook ). isGendre ( gendre ))   {                      break ;    /* found */                  }              else   {                  if   ( books . get ( currentBook ). matchGendre ( gendre ))   {                      break ;   /* found */                  }              }          }          /* Not found */          if   ( currentBook >=
books
.
size
())
 
{

            currentBook
=-
1
;

            
return
 
false
;

        
}

        
/* Now find the author */

        currentAuthor 
=
 books
.
get
(
currentBook
).
getAuthor
().
getIndex
();

        
return
 
true
;

    
}

    

    
/*

     * Search from the beginning

     */

    
public
 
void
 searchReset
()
 
{

        currentBook 
=
 

1
;

        currentAuthor 
=
 

1
;

    
}

    
/* 

     * getCurrentAuthorIndex – return current author index

     */

    
public
 
int
 getCurrentAuthorIndex
(){

        
return
 currentAuthor
;

    
}

    
//Returns book on index

     
public
 
Book
 getBookOnIndex
(
int
 ind
){

       
return
 
(
Book
)
booksMap
.
get
(
ind
+
“”
);

    
}

}

LibraryUI.java
LibraryUI.java

/*

 * Use separate package for GUI

 * import our ‘books’ classes

 */

package
 
Book
;

import
 java
.
io
.
IOException
;

public
 
class
 
LibraryUI
 
extends
 javax
.
swing
.
JFrame
 
{

    
static
 
Library
 lib
;

 

    
// Creates new form BookStoreUI

     

    
public
 
LibraryUI
()
 
{

        initComponents
();

    
}

    
/**

     * This method is called from within the constructor to initialize the form.

     * WARNING: Do NOT modify this code. The content of this method is always

     * regenerated by the Form Editor.

     */

    @
SuppressWarnings
(
“unchecked”
)

    
// //GEN-BEGIN:initComponents

    
private
 
void
 initComponents
()
 
{

        jMenuBar1 
=
 
new
 javax
.
swing
.
JMenuBar
();

        jMenu1 
=
 
new
 javax
.
swing
.
JMenu
();

        jMenu2 
=
 
new
 javax
.
swing
.
JMenu
();

        buttonGroup1 
=
 
new
 javax
.
swing
.
ButtonGroup
();

        buttonGroup2 
=
 
new
 javax
.
swing
.
ButtonGroup
();

        jPanel1 
=
 
new
 javax
.
swing
.
JPanel
();

        jLabel1 
=
 
new
 javax
.
swing
.
JLabel
();

        jRadioButtonAuthorIndex 
=
 
new
 javax
.
swing
.
JRadioButton
();

        jRadioButtonBookIndex 
=
 
new
 javax
.
swing
.
JRadioButton
();

        jRadioButtonBookTitle 
=
 
new
 javax
.
swing
.
JRadioButton
();

        jRadioButtonGendre 
=
 
new
 javax
.
swing
.
JRadioButton
();

        jLabel2 
=
 
new
 javax
.
swing
.
JLabel
();

        jTextFieldSearch 
=
 
new
 javax
.
swing
.
JTextField
();

        jButtonSearch 
=
 
new
 javax
.
swing
.
JButton
();

        jLabel3 
=
 
new
 javax
.
swing
.
JLabel
();

        jScrollPane1 
=
 
new
 javax
.
swing
.
JScrollPane
();

        jTextArea1 
=
 
new
 javax
.
swing
.
JTextArea
();

        jMenuBar2 
=
 
new
 javax
.
swing
.
JMenuBar
();

        jMenu3 
=
 
new
 javax
.
swing
.
JMenu
();

        jMenuItem1 
=
 
new
 javax
.
swing
.
JMenuItem
();

        jMenu1
.
setText
(
“File”
);

        jMenuBar1
.
add
(
jMenu1
);

        jMenu2
.
setText
(
“Edit”
);

        jMenuBar1
.
add
(
jMenu2
);

        setDefaultCloseOperation
(
javax
.
swing
.
WindowConstants
.
EXIT_ON_CLOSE
);

        jLabel1
.
setText
(
“Search on:”
);

        buttonGroup1
.
add
(
jRadioButtonAuthorIndex
);

        jRadioButtonAuthorIndex
.
setSelected
(
true
);

        jRadioButtonAuthorIndex
.
setText
(
“Author Index”
);

        jRadioButtonAuthorIndex
.
addActionListener
(
new
 java
.
awt
.
event
.
ActionListener
()
 
{

            
public
 
void
 actionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{

                jRadioButtonAuthorIndexActionPerformed
(
evt
);

            
}

        
});

        buttonGroup1
.
add
(
jRadioButtonBookIndex
);

        jRadioButtonBookIndex
.
setText
(
“Book Index”
);

        jRadioButtonBookIndex
.
addActionListener
(
new
 java
.
awt
.
event
.
ActionListener
()
 
{

            
public
 
void
 actionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{

                jRadioButtonBookIndexActionPerformed
(
evt
);

            
}

        
});

        buttonGroup1
.
add
(
jRadioButtonBookTitle
);

        jRadioButtonBookTitle
.
setText
(
“Book Title”
);

        jRadioButtonBookTitle
.
addActionListener
(
new
 java
.
awt
.
event
.
ActionListener
()
 
{

            
public
 
void
 actionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{

                jRadioButtonBookTitleActionPerformed
(
evt
);

            
}

        
});

        buttonGroup1
.
add
(
jRadioButtonGendre
);

        jRadioButtonGendre
.
setText
(
“Gendre”
);

        jLabel2
.
setText
(
“Search for:”
);

        jButtonSearch
.
setText
(
“Search ”
);

        jButtonSearch
.
addActionListener
(
new
 java
.
awt
.
event
.
ActionListener
()
 
{

            
public
 
void
 actionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{

                jButtonSearchActionPerformed
(
evt
);

            
}

        
});

        javax
.
swing
.
GroupLayout
 jPanel1Layout 
=
 
new
 javax
.
swing
.
GroupLayout
(
jPanel1
);

        jPanel1
.
setLayout
(
jPanel1Layout
);

        jPanel1Layout
.
setHorizontalGroup
(

            jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

            
.
addGroup
(
jPanel1Layout
.
createSequentialGroup
()

                
.
addGroup
(
jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                    
.
addGroup
(
jPanel1Layout
.
createSequentialGroup
()

                        
.
addGap
(
10
,
 
10
,
 
10
)

                        
.
addComponent
(
jLabel1
))

                    
.
addGroup
(
jPanel1Layout
.
createSequentialGroup
()

                        
.
addContainerGap
()

                        
.
addGroup
(
jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                            
.
addComponent
(
jRadioButtonGendre
)

                            
.
addComponent
(
jRadioButtonBookTitle
)

                            
.
addComponent
(
jRadioButtonBookIndex
)

                            
.
addComponent
(
jRadioButtonAuthorIndex
))))

                
.
addGap
(
36
,
 
36
,
 
36
)

                
.
addGroup
(
jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                    
.
addComponent
(
jLabel2
)

                    
.
addComponent
(
jTextFieldSearch
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 
246
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
)

                    
.
addComponent
(
jButtonSearch
))

                
.
addContainerGap
(
809
,
 
Short
.
MAX_VALUE
))

        
);

        jPanel1Layout
.
setVerticalGroup
(

            jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

            
.
addGroup
(
jPanel1Layout
.
createSequentialGroup
()

                
.
addGroup
(
jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
BASELINE
)

                    
.
addComponent
(
jLabel1
)

                    
.
addComponent
(
jLabel2
))

                
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                
.
addGroup
(
jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
BASELINE
)

                    
.
addComponent
(
jRadioButtonAuthorIndex
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 
23
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
)

                    
.
addComponent
(
jTextFieldSearch
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
))

                
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                
.
addGroup
(
jPanel1Layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                    
.
addGroup
(
jPanel1Layout
.
createSequentialGroup
()

                        
.
addComponent
(
jRadioButtonBookIndex
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 
23
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
)

                        
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                        
.
addComponent
(
jRadioButtonBookTitle
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 
23
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
))

                    
.
addComponent
(
jButtonSearch
))

                
.
addGap
(
2
,
 
2
,
 
2
)

                
.
addComponent
(
jRadioButtonGendre
))

        
);

        jLabel3
.
setText
(
“Search result:”
);

        jTextArea1
.
setColumns
(
20
);

        jTextArea1
.
setRows
(
5
);

        jScrollPane1
.
setViewportView
(
jTextArea1
);

        jMenu3
.
setText
(
“File”
);

        jMenuItem1
.
setText
(
“Exit”
);

        jMenuItem1
.
addActionListener
(
new
 java
.
awt
.
event
.
ActionListener
()
 
{

            
public
 
void
 actionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{

                jMenuItem1ActionPerformed
(
evt
);

            
}

        
});

        jMenu3
.
add
(
jMenuItem1
);

        jMenuBar2
.
add
(
jMenu3
);

        setJMenuBar
(
jMenuBar2
);

        javax
.
swing
.
GroupLayout
 layout 
=
 
new
 javax
.
swing
.
GroupLayout
(
getContentPane
());

        getContentPane
().
setLayout
(
layout
);

        layout
.
setHorizontalGroup
(

            layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

            
.
addGroup
(
layout
.
createSequentialGroup
()

                
.
addContainerGap
()

                
.
addGroup
(
layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                    
.
addGroup
(
layout
.
createSequentialGroup
()

                        
.
addComponent
(
jPanel1
,
 javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 
Short
.
MAX_VALUE
)

                        
.
addContainerGap
())

                    
.
addGroup
(
layout
.
createSequentialGroup
()

                        
.
addGap
(
10
,
 
10
,
 
10
)

                        
.
addGroup
(
layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

                            
.
addComponent
(
jLabel3
)

                            
.
addComponent
(
jScrollPane1
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 
634
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
))

                        
.
addGap
(
552
,
 
552
,
 
552
))))

        
);

        layout
.
setVerticalGroup
(

            layout
.
createParallelGroup
(
javax
.
swing
.
GroupLayout
.
Alignment
.
LEADING
)

            
.
addGroup
(
layout
.
createSequentialGroup
()

                
.
addContainerGap
()

                
.
addComponent
(
jPanel1
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
,
 javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 javax
.
swing
.
GroupLayout
.
PREFERRED_SIZE
)

                
.
addGap
(
23
,
 
23
,
 
23
)

                
.
addComponent
(
jLabel3
)

                
.
addPreferredGap
(
javax
.
swing
.
LayoutStyle
.
ComponentPlacement
.
RELATED
)

                
.
addComponent
(
jScrollPane1
,
 javax
.
swing
.
GroupLayout
.
DEFAULT_SIZE
,
 
159
,
 
Short
.
MAX_VALUE
)

                
.
addContainerGap
())

        
);

        pack
();

    
}
// //GEN-END:initComponents

    
private
 
void
 jMenuItem1ActionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{
//GEN-FIRST:event_jMenuItem1ActionPerformed

        
// TODO add your handling code here:

        
System
.
exit
(
0
);

    
}
//GEN-LAST:event_jMenuItem1ActionPerformed

    
private
 
void
 jRadioButtonBookTitleActionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{
//GEN-FIRST:event_jRadioButtonBookTitleActionPerformed

        
// TODO add your handling code here:

    
}
//GEN-LAST:event_jRadioButtonBookTitleActionPerformed

    
private
 
void
 jRadioButtonAuthorIndexActionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{
//GEN-FIRST:event_jRadioButtonAuthorIndexActionPerformed

        
// TODO add your handling code here:

    
}
//GEN-LAST:event_jRadioButtonAuthorIndexActionPerformed

    
private
 
void
 jButtonSearchActionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{
//GEN-FIRST:event_jButtonSearchActionPerformed

        
// TODO add your handling code here

       

     

        
String
 strAuthorame
=
 
“”
;

        
if
 
(
jRadioButtonAuthorIndex
.
isSelected
()){

            
// Search by Author Index

            
int
 index
;

            index 
=
 
Integer
.
parseInt
(
jTextFieldSearch
.
getText
());

            
if
 
(
lib
.
searchOnAuthorIndex
(
index
))
 
{

                
// Update Author’s information

                
Author
 author 
=
 lib
.
getAuthorOnIndex
(
index
);

                jTextArea1
.
setText
(
author
.
toString
());

            
}

            
else
 
{
 
// author not found – setup empty fields

                  strAuthorame 
=
 
“*** NOT FOUND ***”
;

             jTextArea1
.
setText
(
strAuthorame
);

            
}

            
/* After searching on Author Index we also setup currentBook Index */

            
if
 
(
lib
.
getCurrentBookIndex
()
 
!=
 

1
)
 
{

                
Book
 book
;

                book 
=
 lib
.
getBookOnIndex
(
lib
.
getCurrentBookIndex
());

              jTextArea1
.
setText
(
book
.
toString
());

            
}

            
else
 
{
 
// no more books not found with this author

            strAuthorame
=
 
“”
;

          jTextArea1
.
setText
(
“*** NOT FOUND ***”
);

            
}

        
}

        
/* Search by Book Index */

        
else
 
if
 
(
jRadioButtonBookIndex
.
isSelected
())
 
{

            
// Search by Author Index

            
int
 index
;

            index 
=
 
Integer
.
parseInt
(
jTextFieldSearch
.
getText
());

            
if
 
(
lib
.
searchOnBookIndex
(
index
))
 
{

                
// Update Book information

                
Book
 book 
=
 lib
.
getBookOnIndex
(
index
);

                
String
 bk 
=
 book
.
toString
()
+
“\n”
;

                
Author
 author 
=
 lib
.
getAuthorOnIndex
(
lib
.
getCurrentAuthorIndex
());

              bk 
+=
 author
.
toString
();

               jTextArea1
.
setText
(
bk
);

            
}

            
else
 
{
 
// Book not found

                  
String
 strTitle 
=
(
“*** NOT FOUND ***”
);

          jTextArea1
.
setText
(
strTitle
);

            
}

        
}

        
/*

         * Search by BOOK TITLE 

         */

        
else
 
if
 
(
jRadioButtonBookTitle
.
isSelected
()){

            
String
 title 
=
 jTextFieldSearch
.
getText
();

            
/* If book found */

            
if
 
(
lib
.
searchOnBookTitle
(
title
)){

                
int
 index 
=
 lib
.
getCurrentBookIndex
();

                
// Update Book information

                
Book
 book 
=
 lib
.
getBookOnIndex
(
index
);

               
String
 strTitle 
=
(
book
.
getTitle
().
toString
())
+
“\n”
;

               strTitle 
+=
 
(
book
.
getGendre
().
toString
())
+
“\n”
;

                
Author
 author 
=
 lib
.
getAuthorOnIndex
(
lib
.
getCurrentAuthorIndex
());

                strTitle 
+=
 author
.
toString
()
+
“\n”
;

                
Address
 address 
=
 author
.
getAddress
();

                strTitle 
+=
 address
.
toString
();

                jTextArea1
.
setText
(
strTitle
);

            
}

            
else
 
{
 
// Book not found (no more books found)

                
String
 strTitle 
=
(
“*** NOT FOUND ***”
);

                    jTextArea1
.
setText
(
strTitle
);

            
}

        
}

        
/*

         * Search by BOOK GENDRE

         */

        
else
 
if
 
(
jRadioButtonGendre
.
isSelected
()){

            
String
 gendre 
=
 jTextFieldSearch
.
getText
();

            
/* If book found */

            
if
 
(
lib
.
searchOnBookGendre
(
gendre
)){

                
int
 index 
=
 lib
.
getCurrentBookIndex
();

                
// Update Book information

                
Book
 book 
=
 lib
.
getBookOnIndex
(
index
);

                
String
  strTitle 
=
(
book
.
toString
())
 
+
 
“\n”
;

                
Author
 author 
=
 lib
.
getAuthorOnIndex
(
lib
.
getCurrentAuthorIndex
());

                  strTitle 
+=
(
author
.
toString
())
 
+
 
“\n”
;

                
Address
 address 
=
 author
.
getAddress
();

                strTitle 
+=
(
address
.
toString
())
 
+
 
“\n”
;

               strTitle 
+=
(
book
.
getGendre
().
toString
())
 
+
 
“\n”
;

              jTextArea1
.
setText
(
strTitle
);

            
}

            
else
 
{
 
// Book not found (no more books found)

                  
String
 strTitle 
=
(
“*** NOT FOUND ***”
);

                    jTextArea1
.
setText
(
strTitle
);

            
}

        
}

        

    
}
//GEN-LAST:event_jButtonSearchActionPerformed

    
private
 
void
 jRadioButtonBookIndexActionPerformed
(
java
.
awt
.
event
.
ActionEvent
 evt
)
 
{
//GEN-FIRST:event_jRadioButtonBookIndexActionPerformed

        
// TODO add your handling code here:

}
//GEN-LAST:event_jRadioButtonBookIndexActionPerformed

    
/*

     * Reset search results

     */

    
/**

     * 
@param
 args the command line arguments

     */

    
public
 
static
 
void
 main
(
String
 args
[])
 
throws
 
IOException
 
{

        
/*

         * Read library file

         */

        lib 
=
 
new
 
Library
();
 
// use constructor without filename

        lib
.
readLibrary
();
 
// try to read and parse data file

        

        
/*

         * Set the Nimbus look and feel

         */

        
//

        
/*

         * If Nimbus (introduced in Java SE 6) is not available, stay with the

         * default look and feel. For details see

         * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html

         */

        
try
 
{

            
for
 
(
javax
.
swing
.
UIManager
.
LookAndFeelInfo
 info 
:
 javax
.
swing
.
UIManager
.
getInstalledLookAndFeels
())
 
{

                
if
 
(
“Nimbus”
.
equals
(
info
.
getName
()))
 
{

                    javax
.
swing
.
UIManager
.
setLookAndFeel
(
info
.
getClassName
());

                    
break
;

                
}

            
}

        
}
 
catch
 
(
ClassNotFoundException
 ex
)
 
{

            java
.
util
.
logging
.
Logger
.
getLogger
(
LibraryUI
.
class
.
getName
()).
log
(
java
.
util
.
logging
.
Level
.
SEVERE
,
 
null
,
 ex
);

        
}
 
catch
 
(
InstantiationException
 ex
)
 
{

            java
.
util
.
logging
.
Logger
.
getLogger
(
LibraryUI
.
class
.
getName
()).
log
(
java
.
util
.
logging
.
Level
.
SEVERE
,
 
null
,
 ex
);

        
}
 
catch
 
(
IllegalAccessException
 ex
)
 
{

            java
.
util
.
logging
.
Logger
.
getLogger
(
LibraryUI
.
class
.
getName
()).
log
(
java
.
util
.
logging
.
Level
.
SEVERE
,
 
null
,
 ex
);

        
}
 
catch
 
(
javax
.
swing
.
UnsupportedLookAndFeelException
 ex
)
 
{

            java
.
util
.
logging
.
Logger
.
getLogger
(
LibraryUI
.
class
.
getName
()).
log
(
java
.
util
.
logging
.
Level
.
SEVERE
,
 
null
,
 ex
);

        
}

        
//

        
/*

         * Create and display the form

         */

        java
.
awt
.
EventQueue
.
invokeLater
(
new
 
Runnable
()
 
{

            
public
 
void
 run
()
 
{

                
new
 
LibraryUI
().
setVisible
(
true
);

            
}

        
});

    
}

    
// Variables declaration – do not modify//GEN-BEGIN:variables

    
private
 javax
.
swing
.
ButtonGroup
 buttonGroup1
;

    
private
 javax
.
swing
.
ButtonGroup
 buttonGroup2
;

    
private
 javax
.
swing
.
JButton
 jButtonSearch
;

    
private
 javax
.
swing
.
JLabel
 jLabel1
;

    
private
 javax
.
swing
.
JLabel
 jLabel2
;

    
private
 javax
.
swing
.
JLabel
 jLabel3
;

    
private
 javax
.
swing
.
JMenu
 jMenu1
;

    
private
 javax
.
swing
.
JMenu
 jMenu2
;

    
private
 javax
.
swing
.
JMenu
 jMenu3
;

    
private
 javax
.
swing
.
JMenuBar
 jMenuBar1
;

    
private
 javax
.
swing
.
JMenuBar
 jMenuBar2
;

    
private
 javax
.
swing
.
JMenuItem
 jMenuItem1
;

    
private
 javax
.
swing
.
JPanel
 jPanel1
;

    
private
 javax
.
swing
.
JRadioButton
 jRadioButtonAuthorIndex
;

    
private
 javax
.
swing
.
JRadioButton
 jRadioButtonBookIndex
;

    
private
 javax
.
swing
.
JRadioButton
 jRadioButtonBookTitle
;

    
private
 javax
.
swing
.
JRadioButton
 jRadioButtonGendre
;

    
private
 javax
.
swing
.
JScrollPane
 jScrollPane1
;

    
private
 javax
.
swing
.
JTextArea
 jTextArea1
;

    
private
 javax
.
swing
.
JTextField
 jTextFieldSearch
;

    
// End of variables declaration//GEN-END:variables

}

Title.java
Title.java
package
 
Book
;

/*

 * class Title – represents a book title

 */

public
 
class
 
Title
 
{

    
String
 title
;

    
/*

     * Title() – empty constructor 

     */

    
public
 
Title
(){

        title 
=
 
new
 
String
();

    
}

    
/*

     * Title(string) – initialize title with string

     */

    
public
 
Title
(
String
 t
){

        title 
=
 t
;

    
}

    
/*

     * getTitle – get title

     */

    
public
 
String
 getTitle
(){

        
return
 title
;

    
}

    
/* 

     * setTitle – set title

     */

    
public
 
void
 setTitle
(
String
 t
){

        title 
=
 t
;

    
}

    
/* 

     * isTitle – return true ig title matches

     */

    
public
 
boolean
 isTitle
(
String
 s
){

        
return
 s
.
equalsIgnoreCase
(
title
);

    
}

    
/*

     * matchTitle – return true if ‘n’ is a substring of title

     */

    
public
 
boolean
 matchTitle
(
String
 n
){

        
return
 title
.
matches
(
n
);

    
}

    @
Override

    
public
 
String
 toString
(){

        
return
 title
;

    
}

}

Still stressed from student homework?
Get quality assistance from academic writers!

Order your essay today and save 25% with the discount code LAVENDER