程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 用C#寫個人住房貸款計算器(6)

用C#寫個人住房貸款計算器(6)

編輯:關於C語言

在該類中同樣也覆蓋了基類的 Calculate 虛方法,在主循環中逐月計算還款計劃表。

等本金法的月還本金是固定的,並且在調整貸款利率時也不變,等於貸款金額除以總期數。

但是,在貸款利率不變的情況下,每月還款額卻是遞減的,所以也稱為“遞減法”。

月還利息等於上月剩余貸款余額乘以月利率,月還款額等於月還本金加上月還利息。

然後,本月剩余貸款余額等於上月剩余貸款余額減去月還本金。

最後,由於計算時需要進行捨入處理,到最後一期還款後可能剩余的貸款余額不為零,這就需要在保持月還利息不變的情況下調整月還本金和月還款額。

最後,MainForm.cs 文件中的 MainForm 類如下:

using System;
using System.Data;
using System.Windows.Forms;

namespace Skyiv.Ben.LoanCalculator
{
 public sealed partial class MainForm : Form
 {
  Config cfg;

  public MainForm()
  {
   InitializeComponent();
  }

  private void MainForm_Load(object sender, EventArgs e)
  {
   btnCalculte.Enabled = false;
   try
   {
    cfg = new Config("LoanCalculator.XML");
    tbxBalance.Text = cfg.Balance.ToString();
    tbxMonths.Text = cfg.Months.ToString();
    dtpBegin.Value = cfg.Date;
    rbnDesc.Checked = !(rbnEq.Checked = cfg.IsEq);
    lbxType.DataSource = cfg.Items;
    lbxType.SelectedIndex = lbxType.FindStringExact(cfg.Item);
    btnCalculate.Enabled = true;
   }
   catch (Exception ex)
   {
    tbxOut.Text = Pub.GetMessage(ex);
   }
  }

  private void lbxType_SelectedIndExchanged(object sender, EventArgs e)
  {
   cfg.SetRates(lbxType.SelectedValue.ToString());
   dgvRate.Rows.Clear();
   foreach (var kvp in cfg.Rates)
    dgvRate.Rows.Add(new object[] { kvp.Key.ToString("yyyy-MM-dd"), kvp.Value.X, kvp.Value.Y });
  }

  private void btnCalculate_Click(object sender, EventArgs e)
  {
   btnCalculate.Enabled = false;
   try
   {
    tbxOut.Text = "";
    var isEq = rbnEq.Checked;
    var date = dtpBegin.Value;
    int months;
    decimal balance;
    if (!int.TryParse(tbxMonths.Text, out months) || months <= 0) throw new Exception("貸款期數必須是正整數");
    if (!decimal.TryParse(tbxBalance.Text, out balance) || balance <= 0) throw new Exception("貸款金額必須是正數");
    balance *= 10000; // 貸款金額單位是萬元
    var loan = isEq ? (new LoanEq(balance, months, date, cfg.Rates) as LoanBase) :
     (new LoanDesc(balance, months, date, cfg.Rates) as LoanBase);
    dgvOut.Rows.Clear();
    foreach (DataRow row in loan.Table.Rows) dgvOut.Rows.Add(row.ItemArray);
   }
   catch (Exception ex)
   {
    tbxOut.Text = Pub.GetMessage(ex);
   }
   btnCalculate.Enabled = true;
  }
 }
}

當用戶改變貸款種類時,調用該類的 lbxType_SelectedIndExchanged 方法來相應改變貸款利率。

當用戶點擊“計算”按鈕時,就調用該類的 btnCalculate_Click 方法來計算還款計劃表。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved