**Problem**

Create a program that calculates twelve months’ interest and principal loan balance. Your program will ask the user for the starting principal balance, annual interest rate, and monthly payment amount.

Your program will verify the input is reasonable, as described in the Error Checking section below. After obtaining reasonable input, the program will process 12 months of payments. The output will show the accrued interest and the updated loan balance after each month’s payment. The total interest paid and total payment amounts for the 12 month period will also be calculated and displayed.

Your program output should resemble the output below.

**Solution:**

```
/* Class: ELEC 1520
* Assignment:
* Program author:
* Date:
* Tested on
* C++ Environment:
* Operating system:
* Description: A program that calculates twelve month¿s interest and principle loan balance.
*/
#include
#include
#include
using namespace std;
int main()
{
// Declare the maximum allowed loan amount constant
const int max_loan = 100000;
// Declare the minimum allowed loan amount constant
const int min_loan = 500;
// Declare the user input variables, loan, annual interest rate and monthly payment
double loan, annual_rate, payment;
// Declare calculated variable for the monthly interest rate
double monthly_rate;
// Ask the user for the starting principle balance.
cout << "Enter loan amount [500.00 100000.00]: ";
cin >> loan;
// Check the state of the cin input stream object.
// The fail bit is set when cin fails to read input.Terminate the program when scanf fails.
if (cin.fail() == true) {
cout << "Programming terminating due to input error" << endl;
exit(EXIT_FAILURE);
}
// If the loan is out of the defined range, terminate the program with the error message
else if (loan < min_loan || loan > max_loan) {
cout << "The loan should be in the range of " << min_loan << " to " << max_loan << "." << endl;
exit(EXIT_FAILURE);
}
cout << endl;
// Ask the user for annual interest rate
cout << "Enter annual interest rate: ";
cin >> annual_rate;
// Check the state of the cin input stream object.
// The fail bit is set when cin fails to read input.Terminate the program when scanf fails.
if (cin.fail() == true) {
cout << "Programming terminating due to input error" << endl;
exit(EXIT_FAILURE);
}
// If the annual interest rate is out of the defined range, terminate the program with the error message
else if (annual_rate < 0.00 || annual_rate > 8.99) {
cout << "The annual interest rates should be in the range of 0.00% to 8.99%." << endl;
exit(EXIT_FAILURE);
}
cout << endl;
monthly_rate = annual_rate / 100.00 / 12.0;
// Ask the user for the monthly payment amount
cout << "Enter monthly payment: ";
cin >> payment;
// Check the state of the cin input stream object.
// The fail bit is set when cin fails to read input.Terminate the program when scanf fails.
if (cin.fail() == true) {
cout << "Programming terminating due to input error." << endl;
exit(EXIT_FAILURE);
}
// The monthly payment amounts should be positive.
else if (payment < 0) {
cout << "Monthly payment amounts should be positive." << endl;
exit(EXIT_FAILURE);
}
// The monthly payment amount entered must be greater than the first month's interest.
else if (payment < (loan * monthly_rate)) {
// If the monthly payment input value is not greater than the first month's interest,
// display an appropriate error messageand terminate the program.
cout << "The monthly payment amount entered must be greater than the first month's interest." << endl;
exit(EXIT_FAILURE);
}
cout << endl;
// Print the header for the monthly payment schedule
cout << endl;
cout << " Begin Monthly End" << endl;
cout << " Loan Accrued Payment Loan" << endl;
cout << " Month Balance Interest Amount Balance" << endl;
cout << endl;
// Declare the variable for the monthly interest
double interest;
// Declare the variable for the start of period loan balance
double balance = loan;
// Declare the variable for the end of period loan balanace
double new_balance;
// Declare the variable for the accured interest
double accured_interest = 0;
// Declare the variable for the accured payment
double accured_payment = 0;
// Using the for-loop to iterate to print the 12-month payment schedule
// If the end loan balance is equal or less than 0, exit the loop
for (int i = 0; balance > 0 && i < 12; i++) {
// Compute the monthly interest
// It makes use of round function to correct the amount into 2 decimal place
interest = round( balance * monthly_rate * 100 ) / 100.0;
// Accumulate the interest for the accured interest
accured_interest += interest;
// If the payment is larger than the sum of the balance and interest, correct the payment
// to be the sum of the balance and interest
if ( payment > ( balance + interest ) ) {
payment = balance + interest;
}
// Accumulate the payment for the accured payment
accured_payment += payment;
// Calculate the end of period loan balance
new_balance = balance - payment + interest;
// Display the current period payment schedule
cout << setw(5) << (i + 1)
<< setw(13) << fixed << setprecision(2) << balance
<< setw(14) << interest
<< setw(14) << payment
<< setw(14) << new_balance << endl;
// Update the balance with the calculated end of period loan balance
balance = new_balance;
}
cout << endl;
// Print the total amount for the interest and payment paid
cout << "Amount Total" << setw(20) << accured_interest
<< setw(14) << accured_payment << endl;
cout << endl;
}
```

## Related Samples

On ProgrammingHomeworkHelp.com, we offer a dedicated section for C++ assignments, complete with related sample solutions to guide you through complex programming challenges. Our expertly crafted C++ samples provide invaluable insights and practical examples, ensuring you grasp key concepts effectively. Whether you're struggling with syntax issues, object-oriented programming, or advanced algorithms, our resources are designed to support your academic success. Trust us to help you navigate through your C++ assignments with ease and confidence, making your learning experience both productive and rewarding.

C++

C++

C++

C++

C++

C++

C++

C++

C++

C++

C++

C++

C++

C++

C++

C++

C++

C++

C++

C++