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();
}
Using an rectangle array to store values
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
@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