SIGN UP MEMBER LOGIN:    
ARTICLE

Financial Loan Calculations using C#

Posted by Shashi Menon Articles | Current Affairs February 17, 2002
This C# Application calculates the monthly payment for a loan, given the loan amount, interest rate and the loan period.
Reader Level:

Here is a C# Application I developed for calculating the monthly payment for a loan, given the loan amount, interest rate and the loan period.

I have used four labels, four text boxes and two buttons on a simple Windows form as shown below. In addition, a status bar along the bottom of the form is used to describe what is expected in each text field. The Calculate button computes the monthly payment and displays the result in the fourth text box. Clicking the Exit button quits the application. Tool tips are also displayed when the mouse hovers over each text box. A timer control is used to display the right message in the status bar.

The text boxes prevent non-numeric entry, by filtering out characters other than 0-9 and the decimal point. The user is not allowed to edit the fourth text box (Payment). See the event handler under the textBox1.KeyPress for details of how non-numeric keys are handled. The KeyPressEventHandler takes care of this. The calculation for monthly payments is performed by the static method calcPayment that is invoked by the click event of the Calculate button. The use of both the status bar and tooltips may appear to be an overkill. However, I left them both in simply to illustrate the use of the tooltips and the status bar messages for helping the user with data input. Comments are welcome.

//C# Code for the Financial Loan Calculation Application
using System;
using System.Drawing;
using System.Windows.Forms;
namespace PMTApp
{
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox textBox3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox textBox4;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.StatusBar statusBar1;
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.ToolTip toolTip1;
private System.ComponentModel.IContainer components;
public
Form1()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.textBox4 = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.textBox2 = new System.Windows.Forms.TextBox();
this.textBox3 = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.statusBar1 = new System.Windows.Forms.StatusBar();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.SuspendLayout();
//
// textBox4
//
this.textBox4.BackColor = System.Drawing.Color.Gainsboro;
this.textBox4.Location = new System.Drawing.Point(136, 144);
this.textBox4.Name = "textBox4";
this.textBox4.ReadOnly = true;
this.textBox4.Size = new System.Drawing.Size(80, 20);
this.textBox4.TabIndex = 4;
this.textBox4.TabStop = false;
this.textBox4.Text = "";
this.toolTip1.SetToolTip(this.textBox4, "Monthly payment");
//
// label1
//
this.label1.Location = new System.Drawing.Point(32, 24);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(96, 24);
this.label1.TabIndex = 0;
this.label1.Text = "Present value-$";
//
// label2
//
this.label2.Location = new System.Drawing.Point(40, 64);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(96, 24);
this.label2.TabIndex = 0;
this.label2.Text = "Interest rate-%";
//
// label3
//
this.label3.Location = new System.Drawing.Point(40, 112);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(96, 24);
this.label3.TabIndex = 0;
this.label3.Text = "Period";
//
// button1
//
this.button1.BackColor = Color.FromArgb(((System.Byte)(0)),
((System.Byte)(192)), ((System.Byte)(192)));
this.button1.Location = new System.Drawing.Point(72, 216);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(72, 24);
this.button1.TabIndex = 5;
this.button1.Text = "Calculate";
this.toolTip1.SetToolTip(this.button1, "Calculate the monthly payment");
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.BackColor = Color.FromArgb(((System.Byte)(0)), ((System.Byte)(192)), ((System.Byte)(192)));
this.button2.Location = new System.Drawing.Point(168, 216);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(72, 24);
this.button2.TabIndex = 6;
this.button2.Text = "E&xit";
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// textBox2
//
this.textBox2.BackColor = System.Drawing.Color.White;
this.textBox2.Location = new System.Drawing.Point(136, 64);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(80, 20);
this.textBox2.TabIndex = 2;
this.textBox2.Text = "10.00";
this.toolTip1.SetToolTip(this.textBox2, "Interest rate per year");
this.textBox2.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txt_KeyPress);
this.textBox2.TextChanged += new System.EventHandler(this.txt_TextChanged);
//
// textBox3
//
this.textBox3.BackColor = System.Drawing.Color.White;
this.textBox3.Location = new System.Drawing.Point(136, 104);
this.textBox3.Name = "textBox3";
this.textBox3.Size = new System.Drawing.Size(80, 20);
this.textBox3.TabIndex = 3;
this.textBox3.Text = "60";
this.toolTip1.SetToolTip(this.textBox3, "Period in months");
this.textBox3.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txt_KeyPress);
this.textBox3.TextChanged += new System.EventHandler(this.txt_TextChanged);
//
// label4
//
this.label4.Location = new System.Drawing.Point(40, 152);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(96, 24);
this.label4.TabIndex = 0;
this.label4.Text = "Payment PMT - $";
//
// textBox1
//
this.textBox1.BackColor = System.Drawing.Color.White;
this.textBox1.Location = new System.Drawing.Point(136, 24);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(80, 20);
this.textBox1.TabIndex = 1;
this.textBox1.Text = "25000";
this.toolTip1.SetToolTip(this.textBox1, "Loan amount");
this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txt_KeyPress);
this.textBox1.TextChanged += new System.EventHandler(this.txt_TextChanged);
//
// statusBar1
//
this.statusBar1.Location = new System.Drawing.Point(0, 253);
this.statusBar1.Name = "statusBar1";
this.statusBar1.Size = new System.Drawing.Size(292, 20);
this.statusBar1.TabIndex = 8;
this.statusBar1.Text = "Ready";
//
// timer1
//
this.timer1.Enabled = true;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(176)), ((System.Byte)(231)), ((System.Byte)(216)));
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(textBox1);
this.Controls.Add(textBox2);
this.Controls.Add(textBox3);
this.Controls.Add(textBox4);
this.Controls.Add(label1 );
this.Controls.Add(label2);
this.Controls.Add(label3);
this.Controls.Add(label4);
this.Controls.Add(button1);
this.Controls.Add(button2);
this.Controls.Add(statusBar1);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "Form1";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "PMT Calculator";
this.ResumeLayout(false);
}
// The main entry point for the application.
static void Main()
{
Application.Run(
new Form1());
}
private void button2_Click(object sender, System.EventArgs e)
{
Application.Exit();
}
static bool CheckForNumeric(char ch)
{
//allow only numbers and a decimal point and backspace key
int keyInt = (int)ch ;
if (( keyInt < 48 || keyInt > 57) && keyInt != 46 && keyInt != 8)
return false;
else
return true ;
}
private void txt_TextChanged(object sender, EventArgs e)
{
textBox4.Text ="" ;
}
private void txt_KeyPress(object sender, KeyPressEventArgs e)
{
//allow only numbers and a decimal point and backspace key
if (CheckForNumeric(e.KeyChar) == false)
e.Handled =
true ;
}
private void button1_Click(object sender, System.EventArgs e)
{
double pv = Convert.ToDouble(textBox1.Text);
double intrate = Convert.ToDouble(textBox2.Text) ;
double period = Convert.ToDouble(textBox3.Text) ;
double pmt = calcPayment( pv,period, intrate) ;
string str = pmt.ToString( "f2" );
textBox4.Text = str ;
} 
public static double calcPayment(double presentValue, double financingPeriod,double interestRatePerYear)
{
double a, b, x;
double monthlyPayment;
a = (1 + interestRatePerYear / 1200);
b = financingPeriod;
x = Math.Pow(a, b);
x = 1 / x;
x = 1 - x;
monthlyPayment = (presentValue ) * (interestRatePerYear / 1200) / x;
return(monthlyPayment);

private void timer1_Tick(object sender, System.EventArgs e)
{
if(textBox1.Focused == true)
{

statusBar1.Text =" Enter the annual interest rate - %" ;
else if(textBox3.Focused == true)
statusBar1.Text =" Enter the number of months financed" ;
else if(textBox4.Focused == true)
statusBar1.Text =" Calculated Monthly Loan Payment -$" ;
else
statusBar1.Text =" " ;
}
}
}
//End of namespace PMTApp

Login to add your contents and source code to this article
share this article :
post comment
 
Nevron Gauge for SharePoint
Become a Sponsor
PREMIUM SPONSORS
  • Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
    The leading .NET charting control now features PDF, Flash and Silverlight export, visualization of large datasets and more. Deliver true charting functionality to your BI, Scorecard, Presentation or Scientific apps. Download evaluation now.
Nevron Gauge for SharePoint
Become a Sponsor