Question

    public mainForm()
    {
        InitializeComponent();
    }
    string[,] summary = new string[10, 4];


    private void exitButton_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void calculateButton_Click(object sender, EventArgs e)
    {
            decimal monthlyInvestment =
                    Convert.ToDecimal (monthlyInvestmentTextBox.Text);
            decimal yearlyInterestRate =
                    Convert.ToDecimal (interestRateTextBox.Text);
            int years = 
                Convert.ToInt32(yearsTextBox.Text);

            int months = years * 12;
            decimal monthlyInterestRate = yearlyInterestRate / 12 / 100;

            decimal futureValue = 0;
            for (int i = 0; i < months; i++)
            {
                futureValue = (futureValue + monthlyInvestment)
                        * (1 + monthlyInterestRate);
            }
            futureValueTextBox.Text = futureValue.ToString("c");
            monthlyInvestmentTextBox.Focus();
    }

This program calculates the future values of investments based on rate and years. Once the user hits calculate, I want the program to store up to 10 calculations in an array 10x4. 4 Being Investment, Rate, Years, and Future Value. Upon clicking the exit button, I want a message box to appear with the 10 previous calculations. How would I go about doing this? Thanks.

No correct solution

OTHER TIPS

public class FutureInvestments
{
public decimal monthlyInvestment {get;set;}
public decimal yearlyInterestRate {get;set;}
public decimal futureValue {get;set;}
public decimal monthlyInterestRate {get;set;}
public decimal monthlyInvestment {get;set;}

  public string Calculate()
  {
    int months = years * 12;
    monthlyInterestRate = yearlyInterestRate / 12 / 100;
    for (int i = 0; i < months; i++)
    {
     futureValue = (futureValue + monthlyInvestment)  * (1 + monthlyInterestRate);
    }
    return futureValue.ToString("c");  
  }  
}

public mainForm()
{
    InitializeComponent();
}

List<FutureInvestments> summary = new List<FutureInvestments>();

private void calculateButton_Click(object sender, EventArgs e)
{
   //Instantiate class - passing in ReadOnly parameters
   var futureInv = new FutureInvestment() {monthlyInvestment = Convert.ToDecimal (monthlyInvestmentTextBox.Text), monthlyInvestment = Convert.ToDecimal(monthlyInvestmentTextBox.Text), yearlyInterestRate = Convert.ToDecimal (interestRateTextBox.Text) years =  Convert.ToInt32(yearsTextBox.Text));

   futureInv.Calculate();

   //Store the calculation for showing user when application closes
   summary.Add(futureInv);
 }

private void exitButton_Click(object sender, EventArgs e)
{
    foreach(var item in summary)
    {
        MessageBox.Show("Future value is: " + item.FutureValue.ToString());
    }
    this.Close();
}

@Jeremy Thompson is right; keep your classes focused on what they do - forms are for UI, the Investment class handles everything else.

    public partial class mainForm : Form
{
    private Stack<Investment> Investments;

    public mainForm()
    {
        InitializeComponent();
        Investments = new Stack<Investment>();
    }

    private void calculateButton_Click(object sender, EventArgs e)
    {
        Investment thisInvestment = new Investment(Convert.ToDecimal(monthlyInvestmentTextBox.Text),
                                                   Convert.ToDecimal(interestRateTextBox.Text),
                                                   Convert.ToInt32(yearsTextBox.Text));
        Investments.Push(thisInvestment);
        futureValueTextBox.Text = thisInvestment.futureValue.ToString("c");
        monthlyInvestmentTextBox.Focus();

    }

    private void exitButton_Click(object sender, EventArgs e)
    {
        int count = Math.Min(10, Investments.Count);
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= count; i++)
        {
            sb.AppendLine(Investments.Pop().ToString());
        }
        MessageBox.Show(sb.ToString());
    }
}

public class Investment
{
    public Investment(decimal monthlyInvestment, decimal yearlyInterestRate, int years)
    {
        this.monthlyInvestment = monthlyInvestment;
        this.yearlyInterestRate = yearlyInterestRate;
        this.years = years;
    }

    public decimal monthlyInvestment { get; set; }
    public decimal yearlyInterestRate { get; set; }
    public decimal monthlyInterestRate
    {
        get
        {
            return yearlyInterestRate / 12 / 100;
        }
    }
    public int years { get; set; }
    public int months
    {
        get
        {
            return years * 12;
        }
    }
    public decimal futureValue
    {
        get
        {
            decimal retVal = 0;
            for (int i = 0; i < months; i++)
            {
                retVal = (futureValue + monthlyInvestment)
                        * (1 + monthlyInterestRate);
            }
            return retVal;
        }
    }

    public override string ToString()
    {
        return string.Format("Investment of {0:c} for {1:n} years at {2:p} pa yields {3:c}", monthlyInvestment,years,monthlyInterestRate,futureValue);
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top