Question

In: Computer Science

Using Java Summary Create a Loan class, instantiate and write several Loan objects to a file,...

Using Java

Summary

Create a Loan class, instantiate and write several Loan objects to a file, read them back in, and format a report.

Project Description

You’ll read and write files containing objects of the Loan class. Here are the details of that class:

Instance Variables: customer name (String)
annual interest percentage (double)
number of years (int)
loan amount (double)
loan date (String)
monthly payment (double)
total payments (double)

Methods:

  • getters for all instance variables
  • setters for all instance variables except monthly payment and total payment
  • calculateMonthlyPayment and calculateTotalPayments

The setters for the annual interest percentage, number of years, and loan amount invoke both “calculate…” methods before they exit

The “calculate…” methods compute the named value, then store that amount in the associated instance variable. They are private (helper) methods.

Constructors:

  • a “no-arg” constructor sets the customer name to a default value, the loan date to “no date”, and all numeric variables to zero. This method invokes the “full” constructor
  • a “full” constructor takes the customer name, annual interest percentage, number of years, loan amount, and loan date. It invokes the appropriate setters, but doesn’t need to invoke the “calculate” methods (why?)

Calculations:

monthly interest rate = annual interest percentage / 1200

monthly payment = (loan amount * monthly interest rate) /
(1 – Math.pow( (1 + monthly interest rate), – (number of years * 12) ) )

total loan payments = monthly payment * number of years * 12

* Note: Round all dollar amounts to 2 decimal places

Here is what you should do in main

Use this data to create five Loan objects

                Annual Interest           Loan
  Customer Name   Percentage    Years    Amount   Loan Date
  Bob Smith             6.5%       30   318,000   Sep 1, 2015
  Alicia Herman         4.2%       15   248,000   Oct 15, 2013
  Julie Franciosa       8.5%       10    30,000   Apr 14, 2010
  Julio Quiros         15.0%        3    50,000   June 23, 2017  
  Frank Larsen          8.9%        5    23,000   Mar 8, 2016

Use this algorithm:

  1. Make the Loan class Serializable (don't forget to import this interface from java.io).
  2. Instantiate Loan objects representing the first three loans above using the “full” constructor
  3. Create an output stream and store the three objects into a binary file using the writeObject method
  4. Instantiate Loan objects representing the last two loans above using the “no-arg” constructor, then use setters to update information about those loans
  5. Append those objects to the output stream created above in step 2
  6. Close the output stream
  7. Create an input stream and read the objects from the binary file above and display in a nicely formatted columnar report
  • Write your code to handle any number of loan objects (i.e., do not assume that there are 5 Loan objects in the file -- use a loop).
  • Include in your report the monthly loan payment and total loan payment amounts
  • Display totals for the amount of the loan amounts, monthly payments, and total loan payments.
  1. Close the input stream

Note: After writing the first three Loan objects to a file (in step 2), close the output stream, then re-open the output stream before step 4 appending the last two Loan objects to the existing file

An example of the output from your program

                    Annual                    Monthly       Total 
    Customer Name   Prcnt  Yrs  Loan-Amount   Payment   Loan Payments   Loan-Date
  ----------------  -----  ---  -----------  ---------  ------------  -------------  
  Bob Smith           6.5   30   318,000.00   2,009.98    723,592.80  Sep 1, 2015
  Alicia Herman       4.2   15   248,000.00   1,859.38    334,688.40  Oct 15, 2013
  Julie Franciosa     8.5   10    30,000.00     446.35     53,562.00  Apr 14, 2010
  Julio Quiros       15.0    3    50,000.00   1,660.72     59,785.92  June 23, 2017
  Frank Larsen        8.9    5    23,000.00     476.33     28.579.80  Mar 8, 2016
                                ===========  =========  ============
                                 669,000.00   6,452.76  1,200,208.92  

Solutions

Expert Solution

//Java code

import java.text.NumberFormat;

public class Loan {
    private String customerName;
    private double annualInterest;
    private int numberOfYears;
    private double loanAmount;
    private String loanDate;
    private double monthlyPayment;
    private double totalPayments;


    //getters

    public String getCustomerName() {
        return customerName;
    }

    public double getAnnualInterest() {
        return annualInterest;
    }

    public int getNumberOfYears() {
        return numberOfYears;
    }

    public double getLoanAmount() {
        return loanAmount;
    }

    public String getLoanDate() {
        return loanDate;
    }

    public double getMonthlyPayment() {
        return monthlyPayment;
    }

    public double getTotalPayments() {
        return totalPayments;
    }

    //setters

    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }

    public void setAnnualInterest(double annualInterest) {

        this.annualInterest = annualInterest;
        calculateMonthlyPayment();
        calculateTotalPayments();
    }

    public void setNumberOfYears(int numberOfYears) {
        this.numberOfYears = numberOfYears;
        calculateMonthlyPayment();
        calculateTotalPayments();
    }

    public void setLoanAmount(double loanAmount) {
        this.loanAmount = loanAmount;
        calculateMonthlyPayment();
        calculateTotalPayments();

    }

    public void setLoanDate(String loanDate) {
        this.loanDate = loanDate;
    }
    private void calculateMonthlyPayment()
    {
        double monthlyInterestRate = annualInterest/1200.0;
        monthlyPayment = (loanAmount*monthlyInterestRate)/(1-Math.pow((1+monthlyInterestRate),-(numberOfYears*12)));

    }
    private void calculateTotalPayments()
    {

       this.totalPayments = this.numberOfYears*this.monthlyPayment*12.0;

    }
    ///no args constructor

    /***
     * a “no-arg” constructor sets the customer name to a default value,
     * the loan date to “no date”, and
     * all numeric variables to zero. This method invokes the “full” constructor
     */
    public Loan()
    {
        this("",0,0,0,"no date");

    }
    //full constructor

    /**
     * a “full” constructor takes the customer name, annual
     * interest percentage, number of years, loan amount,
     * and loan date. It invokes the appropriate setters,
     * @param customerName
     * @param annualInterest
     * @param numberOfYears
     * @param loanAmount
     * @param loanDate
     */
    public Loan(String customerName, double annualInterest, int numberOfYears, double loanAmount, String loanDate) {
       setAnnualInterest(annualInterest);
       setCustomerName(customerName);
       setLoanAmount(loanAmount);
       setLoanDate(loanDate);
       setNumberOfYears(numberOfYears);


    }






    public void display()
    {
        System.out.println(String.format("%16s %5s %6s %15s %17s %17s %17s",customerName,String.format("%.2f",annualInterest),numberOfYears, NumberFormat.getCurrencyInstance().format(loanAmount),NumberFormat.getCurrencyInstance().format(monthlyPayment),NumberFormat.getCurrencyInstance().format(totalPayments),loanDate));
    }
    @Override
    public String toString() {
        return customerName+" "+annualInterest+" "+numberOfYears+" "+loanAmount+" "+loanDate;
    }
}

//==================================

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.NumberFormat;
import java.util.Scanner;

public class LoanTest {
    public static void main(String[] args) throws IOException {
       Loan loan1 = new Loan("Bob Smith",6.5,30,318000,"Sep 1, 2015");
        Loan loan2 = new Loan("Alicia Herman",4.2,15,248000,"Oct 15,2013");
        Loan loan3 = new Loan("Julie Franciosca",8.5,10,30000,"Apr 14,2010");
        PrintWriter printWriter = new PrintWriter(new FileWriter("loan.txt"));
        Loan loan4 = new Loan();
        loan4.setCustomerName("Julio Quiros");
        loan4.setNumberOfYears(3);
        loan4.setLoanAmount(50000);
        loan4.setAnnualInterest(15);
        loan4.setLoanDate("June 23, 2017");
        //============================
        Loan loan5 = new Loan();
        loan5.setCustomerName("Frank Larsen");
        loan5.setNumberOfYears(5);
        loan5.setLoanAmount(23000);
        loan5.setAnnualInterest(8.9);
        loan5.setLoanDate("Mar 8, 2016");



        //write data to file
        printWriter.println(loan1);
        printWriter.println(loan2);
        printWriter.println(loan3);
        printWriter.println(loan4);
        printWriter.println(loan5);
        printWriter.close();
        double totalLoanAmount =0,totalLoanPayment=0,totalMonthlyPayment=0;
        //header
        System.out.println(String.format("%16s %5s %6s %15s %15s %15s %15s","Customer Name","Percent","Years","Loan Amount","Payment","Loan Payments","Loan Date"));
        System.out.println(String.format("%16s %5s %4s %15s %15s %15s %15s","------------","---------","-----","-----------","-------","-------------","---------"));
        //Open stream to read
        Scanner scanFile = new Scanner(new File("loan.txt"));
        while (scanFile.hasNextLine())
        {
            String line  = scanFile.nextLine();
            Scanner words  = new Scanner(line);
            //Create loan
            Loan loan = new Loan(words.next()+" "+words.next(),words.nextDouble(),words.nextInt(),words.nextDouble(),words.nextLine());
            totalLoanAmount+=loan.getLoanAmount();
            totalLoanPayment+=loan.getTotalPayments();
            totalMonthlyPayment+=loan.getMonthlyPayment();
            loan.display();

        }
        System.out.println(String.format("%16s %5s %6s %15s %17s %17s %15s","","","","============","=============","============",""));
        System.out.println(String.format("%16s %5s %6s %15s %17s %17s %15s","","","", NumberFormat.getCurrencyInstance().format(totalLoanAmount),NumberFormat.getCurrencyInstance().format(totalMonthlyPayment),NumberFormat.getCurrencyInstance().format(totalLoanPayment),""));
        scanFile.close();

    }
}

//loan.txt

//Output

//If you need any help regarding this solution .......... please leave a comment ...... thanks


Related Solutions

JAVA Create a support class named RowSumThread.java from which you can instantiate Runnable objects, each of...
JAVA Create a support class named RowSumThread.java from which you can instantiate Runnable objects, each of which will sum one row of the two-dimensional array and then place the sum of that row into the appropriate slot of a one-dimensional, 20-element array. For your applicaiton, create MaxRowSum.java that instantiates a 20x20 two-dimentional array of integers, populates it with random integers drawn from the range 1 to 100, and then output the index of the row with the highest sum along...
java Objective: Create a class. Create objects. Use methods of a class. Create a class BankAccount...
java Objective: Create a class. Create objects. Use methods of a class. Create a class BankAccount to represent a bank account according to the following requirements: A bank account has three attributes: accountnumber, balance and customer name. Add a constructor without parameters. In the initialization of the attributes, set the number and the balance to zero and the customer name to an empty string. Add a constructor with three parameters to initialize all the attributes by specific values. Add a...
Create a Java class file for a Car class. In the File menu select New File......
Create a Java class file for a Car class. In the File menu select New File... Under Categories: make sure that Java is selected. Under File Types: make sure that Java Class is selected. Click Next. For Class Name: type Car. For Package: select csci2011.lab7. Click Finish. A text editor window should pop up with the following source code (except with your actual name): csci1011.lab7; /** * * @author Your Name */ public class Car { } Implement the Car...
Create a Java class file for an Account class. In the File menu select New File......
Create a Java class file for an Account class. In the File menu select New File... Under Categories: make sure that Java is selected. Under File Types: make sure that Java Class is selected. Click Next. For Class Name: type Account. For Package: select csci1011.lab8. Click Finish. A text editor window should pop up with the following source code (except with your actual name): csci1011.lab8; /** * * @author Your Name */ public class Account { } Implement the Account...
Start NetBeans. Create a new project called Lab7. Create a Java main class file using the...
Start NetBeans. Create a new project called Lab7. Create a Java main class file using the class name YourlastnameLab7 with your actual last name. Create a Java class file for a Polygon class. Implement the Polygon class. Add a private instance variable representing the number of sides in the polygon. Add a constructor that takes a single argument and uses it to initialize the number of sides. If the value of the argument is less than three, display an error...
Test all of the methods in the code below: Instantiate several Matrix objects of different sizes....
Test all of the methods in the code below: Instantiate several Matrix objects of different sizes. Make a Matrix copy from an excisting Matrix Test the equals method to show one matrix being equal and one matrix not being equal display 2 matrices using a toString method display a mtrix object before and after multiplying by a scalar after display a matrix object before and after multiplying by 0 test the matrix by matrix multiplication with at least 3 different...
Create a generic method to print objects in java. Include a tester class.
Create a generic method to print objects in java. Include a tester class.
Using JAVA: This assignment is about aggregation and class collaboration. You will create several Classes that...
Using JAVA: This assignment is about aggregation and class collaboration. You will create several Classes that will be part of an overall class named InstrumentDisplay. The classes are FuelGage, Odometer, MilesSinceLastGas, and CruisingRange. The FuelGage should assume a 15 gallon tank of gasoline and an average consumption of 1 gallon every 28 miles. It should increment in 1 gallon steps when you "add gas to the tank". It should decrement by 1 every 28 miles. It should display its current...
[For Java Programming: Objects Class] Write a Java application program that prompts the user to enter...
[For Java Programming: Objects Class] Write a Java application program that prompts the user to enter five floating point values from the keyboard (warning: you are not allowed to use arrays or sorting methods in this assignment - will result in zero credit if done!). Have the program display the five floating point values along with the minimum and maximum values, and average of the five values that were entered. Your program should be similar to (have outputted values be...
Learning Outcomes Using Java, maintain a collection of objects using an array. Construct a class that...
Learning Outcomes Using Java, maintain a collection of objects using an array. Construct a class that contains an array as a private instance variable. Construct methods with arrays as parameters and return values. Use partially filled arrays to implement a class where objects can be dynamically added. Implement searching and sorting algorithms. Instructions For this assignment you will be implementing an application that manages a music collection. The application will allow the user to add albums to the collection and...
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT