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

Create in Java: A Menu class, which provides the program’s user interface—contai

ID: 3840308 • Letter: C

Question

Create in Java: A Menu class, which provides the program’s user interface—contains a main() method which creates a PhoneBook object, displays the PhoneBook’s methods as different menu selections and invokes the PhoneBook method the user selects.

Please provide comments with info explaining the method/class/values used so that I can understand.

Edit: The PhoneBook class, which represents the phone book. The class contains a hash table as a data field. This table contains the people in the book. The phone book contains the add, delete, find, change, quit, save and restore methods.

Explanation / Answer

import java.awt.Desktop;
import java.io.*;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Font.FontFamily;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfWriter;

//The PhoneBookEntry class is a template for every phonebook entry object
//that will be saved in a file called phonebook.bin
//Each entry has name and phone number
//The PhoneBookEntry must implement the Serializable interface since its object
//will be added to the Hashtable for saving in the file

class PhoneBookEntry implements Serializable{

private String Name;
private String Phone;

//constructor
PhoneBookEntry(String name,String phone){

this.Name=name;
this.Phone=phone;


}
//get name
public String getName(){
return Name;
}


//get phone number
public String getPhone(){
return Phone;
}

//print entry information
public void printInfo(){
System.out.println("Name:"+Name+", Phone:"+Phone);
}
}


public class PhoneBook{
static Hashtable<String,PhoneBookEntry> phonebook;
   public static void main(String[] args){
    phonebook=readList(); //read phonebook
    int ch;
    char con='y';
    Scanner sc=new Scanner(System.in); //create scanner object to receive choice input
  
    while(con=='y'){
     showMenu(); //show menu
     System.out.println("Enter your choice:");
     ch=sc.nextInt();  
     switch(ch){
      case 1:viewAll();break;
      case 2:addToPhoneBook();break;
      case 3:deleteFromPhonebook();break;
      case 4:searchByName();break;
      case 5:createPdf();break;
      case 6:createHTML();break;
      case 7:System.exit(0);break;
      default: System.out.println("Invalid choice");
      }
  
     try{
      //prompt for continuing the program
      InputStreamReader isr=new InputStreamReader(System.in);
      System.out.println("Press y to continue:");
      con=(char)isr.read();
     }catch(IOException ie){}
   
   
    }
  
  
   }
   //The viewAll method displays all entries in the phonebook
   public static void viewAll(){
  
    if(phonebook!=null){
   
     for(Enumeration<String> e=phonebook.keys(); e.hasMoreElements();){
      PhoneBookEntry entry=phonebook.get(e.nextElement());
      entry.printInfo();
     }

    }
  
   }


   //The addToPhoneBook method is able to add each entry to the phonebook
   public static void addToPhoneBook(){
    //If the phonebook null, allocate memory for it so it is ready to get the new item
    if(phonebook==null) phonebook=new Hashtable<String,PhoneBookEntry>();
    try{
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Enter name:");
    String name=br.readLine();  
    System.out.println("Enter phone:");
    String phone=br.readLine();
    PhoneBookEntry st=new PhoneBookEntry(name,phone);
    phonebook.put(name,st); //add new entry to the phonebook
    writeIt(phonebook); //save the update phonebook
    }catch(IOException e){}
   }

   //The deleteFromPhonebook method is able to delete an entry when the name
   //is correctly input
   public static void deleteFromPhonebook(){
    if(phonebook!=null){
     int si=phonebook.size(); //number of entries in the phonebook before an entry is removed
     try{
     BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
     System.out.println("Name:");
     String key=br.readLine();
     phonebook.remove(key); //remove the contact
     if(phonebook.size()<si){ //removing is successful
      writeIt(phonebook);
      System.out.println("The entry has been deleted.");
     }
     else
      System.out.println("Wrong name");
     }catch(IOException ie){}
   
   
    }
}

   //The searchByName method has code to find a phonebook entry by name in the list
   public static void searchByName(){
    if(phonebook!=null){
     try{
     BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
     System.out.println("Search by name:");
     String key=br.readLine();
     PhoneBookEntry cu=phonebook.get(key);
     if(cu!=null)
      cu.printInfo();
    
     else
      System.out.println("Not found");
     }catch(IOException ie){}
   
   
    }
   }

   //Write the Hashtable object representing the phonebook to the file
   public static void writeIt(Hashtable<String,PhoneBookEntry> obj){
    try{
    FileOutputStream fos=new FileOutputStream("phonebook.bin");
    ObjectOutputStream oos=new ObjectOutputStream(fos);
    oos.writeObject(obj);
    oos.flush();
    oos.close();
    }catch(IOException ie){}
  
   }

   //The readList method has code to read phonebook from the file

   public static Hashtable<String,PhoneBookEntry> readList(){

    Hashtable<String,PhoneBookEntry> phbook=null;
    try{
    FileInputStream fis=new FileInputStream("phonebook.bin");
    ObjectInputStream ois=new ObjectInputStream(fis);
    phbook=(Hashtable<String,PhoneBookEntry>)ois.readObject();
    ois.close();

    }catch(Exception ie){}
    return phbook;
  
   }
   //create phonebook pdf file
   public static void createPdf(){

    if(phonebook!=null){
     try{
      //create document object
      Document doc=new Document(PageSize.A4);
      //create a pdf writer object to write text to mypdf.pdf file
      PdfWriter pwriter=PdfWriter.getInstance(doc, new FileOutputStream("phonebook.pdf"));
      //open the document so it is ready to write text to the pdf file
      doc.open();
      //create font objects for table heading column labels to be written to the file
      Font fontBoldRed=new Font(FontFamily.TIMES_ROMAN, 20, Font.BOLD, BaseColor.RED);
      Font fontBold=new Font(FontFamily.TIMES_ROMAN, 15, Font.BOLD, BaseColor.BLACK);
      //create table object that has two columns and two rows
      PdfPTable table = new PdfPTable(2);
      PdfPCell cell;
      cell=new PdfPCell(new Phrase("Phonebook",fontBoldRed));
      cell.setColspan(2);
      cell.setHorizontalAlignment(PdfPTable.ALIGN_CENTER);
      table.addCell(cell);
      cell=new PdfPCell(new Phrase("Name",fontBold));
      table.addCell(cell);
      cell=new PdfPCell(new Phrase("Phone",fontBold));
      table.addCell(cell);
      for(Enumeration<String> e=phonebook.keys(); e.hasMoreElements();){
       PhoneBookEntry entry=phonebook.get(e.nextElement());
       cell=new PdfPCell(new Phrase(entry.getName()));
       table.addCell(cell);
       cell=new PdfPCell(new Phrase(entry.getPhone()));
       table.addCell(cell);
       }
      //add table to the document
      doc.add(table);  
      //close the document when writing finishes
      doc.close();  
      displayReport("phonebook.pdf");
  
    }catch(DocumentException de){ de.printStackTrace();}
    catch(FileNotFoundException fnfe){fnfe.printStackTrace();}
  
    }
   }

   //create phonebook html file
   public static void createHTML(){

    try{
    FileWriter fw=new FileWriter("phonebook.html");
    BufferedWriter bw=new BufferedWriter(fw);
    bw.write("<!Doctype html>");
    bw.newLine();
    bw.write("<html><head><title>Phone Book</title></head>");
    bw.newLine();
    bw.write("<body>");
    bw.newLine();
    bw.write("<p>Phonebook</p>");
    bw.write("<table>");
    bw.newLine();
    bw.write("<tr><th>Name</th><th>Phone</th></tr>");
    if(phonebook!=null){
     Set<String> set=phonebook.keySet();
     Iterator<String> iterator=set.iterator();
     while(iterator.hasNext()){
      PhoneBookEntry cu=phonebook.get(iterator.next());
      bw.write("<tr><td>"+cu.getName()+"</td><td>"+cu.getPhone()+"</td></tr>");
      bw.newLine();
      }
   
     }
    bw.write("</table>");
    bw.newLine();
    bw.write("</body></html>");
    bw.flush();
    bw.close();
    displayReport("phonebook.html");
    }catch(IOException ie){ie.printStackTrace();}
  
   }

   //display the pdf or html report
   public static void displayReport(String src){
    try{

     if(Desktop.isDesktopSupported()){
      File f=new File(src);
      Desktop.getDesktop().open(f);

     }
    }catch(IOException ie){}
   }

   //This method display options menu
   public static void showMenu(){
    System.out.println("1. View all phonebook entries");
    System.out.println("2. Add to phonebook");
    System.out.println("3. Remove from phonebook");
    System.out.println("4. Find an entry");
    System.out.println("5. Create phonebook pdf file");
    System.out.println("6. Create phonebook html file");  
    System.out.println("7. Exit");
   }

}

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