Collections and Generics
Enhanced Invoice app
Code
Code for the InvoiceApp class
import java.util.Scanner; import java.text.NumberFormat; public class InvoiceApp { private static GenericQueueinvoices = new GenericQueue (); private static Invoice invoice; private static Scanner sc; public static void main(String args[]) { System.out.println("Welcome to the Invoice application.\n"); getInvoices(); displayInvoices(); } public static void getInvoices() { sc = new Scanner(System.in); int invoiceNumber = 1; String anotherInvoice = "y"; while (anotherInvoice.equalsIgnoreCase("y")) { invoice = new Invoice(); System.out.println("\nEnter line items for invoice " + invoiceNumber); getLineItems(); invoices.push(invoice); // see if the user wants to continue anotherInvoice = Validator.getString(sc, "Another invoice? (y/n): "); System.out.println(); invoiceNumber++; } } public static void getLineItems() { String anotherItem = "y"; while (anotherItem.equalsIgnoreCase("y")) { // get the input from the user String productCode = Validator.getString(sc, "Enter product code: "); int quantity = Validator.getInt(sc, "Enter quantity: ", 0, 1000); Product product = ProductDB.getProduct(productCode); invoice.addItem(new LineItem(product, quantity)); // see if the user wants to continue anotherItem = Validator.getString(sc, "Another line item? (y/n): "); System.out.println(); } } public static void displayInvoices() { System.out.println("You entered the following invoices:\n"); System.out.println("Number\tTotal"); System.out.println("------\t-----"); double batchTotal = 0; int invoiceNumber = 1; while (invoices.size() > 0) { Invoice invoice = invoices.pull(); System.out.println(invoiceNumber + "\t" + invoice.getFormattedTotal()); invoiceNumber++; batchTotal += invoice.getInvoiceTotal(); } NumberFormat currency = NumberFormat.getCurrencyInstance(); System.out.println("Total for all invoices: " + currency.format(batchTotal)); } }