'Calculating year end balance and year end interest with compound interest

I am trying to create a function that calculates year end balance and year end interest based on the monthly deposits and monthly interests that accumulate in the year. For some reason, it is not outputting the correct numbers. Whenever I input 1 for investment, 50 for monthly deposit, %5 for annual interest, and 5 for years. It should output:

Year Year End Balance Year End Earned Interest

1      $617.55               $16.55

2      $1265.65               $48.10

3      $1946.90               $81.25

4      $2663.01               $116.11

5      $3415.76               $152.75

Instead, it is outputting:

Year Year End Balance Year End Earned Interest

1      $600.76               $0.16

2      $1205.65               $0.63

3      $1817.61               $1.39

4      $2440.90               $2.45

5      $3078.92               $3.82

Can someone help with function reportWithMonthlyPay()?

Here is the code I have currently:

// BankingApp.cpp : This file contains the 'main' function. Program execution begins and 
ends there.
//

#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;

class Bank {
public: 
    void dataInput();
    void displayInput();
    void reportWithoutMonthlyPay();
    void reportWithMonthlyPay();

private:
    double investment;
    double deposit;
    int years;
    double interest;
    double monthly_interest;
    double monthly_balance;
    double year_end_balance;
    double year_end_interest;
    vector<int> month_numbers;
    vector<int> year_numbers;
};

void Bank::dataInput() {
    cout << "Initial Investment Amount: " << endl;
    cin >> investment;
    cout << "Monthly Deposit: " << endl;
    cin >> deposit;
    cout << "Annual Interest: " << endl;
    cin >> interest;
    cout << "Number of years: " << endl;
    cin >> years;
    system("pause");       // Windows-specific command that tells 
platform to pause 
program
    cout << endl;
    if (cin.get()) {        // If any key is entered, displayInput 
 function is called
        displayInput();     
    }

}

void Bank::displayInput() {
    cout << "Initial Investment Amount: " << "$" << investment << 
 endl;
    cout << "Monthly Deposit: " << "$" << deposit << endl;
    cout << "Annual Interest: " << interest << "%" << endl;
    cout << "Number of years: " << years << endl;
    system("pause");
    cout << endl;
    reportWithoutMonthlyPay();
   }

  void Bank::reportWithoutMonthlyPay() {
    year_numbers.resize(years);
    interest = interest / 100;
    year_end_balance = investment + (investment * interest);
    year_end_interest = investment * interest;
     cout << "   Balance and Interest Without Additional Monthly 
 Deposit   " << endl;
    cout << "=============================================================" << 
  endl;
    cout << "Year    Year End Balance    Year End Earned Interest" 
  << endl;
    cout << "-------------------------------------------------------------" << endl;
    for (int i = 0; i < year_numbers.size(); i++) {
        year_numbers[i] = i + 1; 
        cout << year_numbers[i] << "        $" << fixed << 
  setprecision(2) << 
    year_end_balance << "               $" << year_end_interest << 
  endl;
        year_numbers[i]++;
        year_end_balance += year_end_interest;
        year_end_interest = year_end_balance * interest;
    }
    cout << endl;
    system("pause");
    reportWithMonthlyPay();
}

 void Bank::reportWithMonthlyPay() {
 year_numbers.resize(years);
 month_numbers.resize(12);
 year_end_interest = 0;
 year_end_balance = investment;
  cout << "   Balance and Interest With Additional Monthly Deposit   
  " << endl;
   cout << 
  "==========================================================" << 
 endl;
   cout << "Year     Year End Balance   Year End Earned Interest" 
  << endl;
   cout << "------------------------------------------------------- 
---" << endl;
   for (int i = 0; i < year_numbers.size(); i++) {
       year_numbers[i] = i + 1;
       for (int j = 0; j < month_numbers.size(); j++) {
        year_end_balance += deposit;
        monthly_interest = year_end_balance * (interest / 
(double)12);
        year_end_balance += monthly_interest;
        year_end_interest += monthly_interest;
        month_numbers[j]++;
    }
    cout << year_numbers[i] << "        $" << fixed << 
   setprecision(2) << year_end_balance << "               $" << 
   year_end_interest << endl;
    year_numbers[i]++;
   }

int main()
{
    Bank userInput;

    userInput.dataInput();
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source