首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

用 C# 寫個人住房貸款計算機(六)

     編輯:關於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