欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

房贷计算器代码

程序员文章站 2022-05-18 12:03:56
本人尝试着利用C#语言来写一个房贷计算器控制台程序。由于刚开始学,错误与失误之处会很多。希望大家多多批评指正,我会持续改进。谢谢大家。 using System;using System.Collections.Generic;using System.Linq;using System.Text; ......

   本人尝试着利用c#语言来写一个房贷计算器控制台程序。由于刚开始学,错误与失误之处会很多。希望大家多多批评指正,我会持续改进。谢谢大家。

 

using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
using system.drawing;
using system.reflection;
using system.net.networkinformation;

namespace play
{
class program
{
//短期利率与长期利率
double lowrate = 0;
double highrate = 0;

//keyvaluepair<datetime, >;
datetime dt1 = new datetime(2015, 3, 1);
datetime dt2 = new datetime(2015, 5, 11);
datetime dt3 = new datetime(2015, 6, 28);
datetime dt4 = new datetime(2015, 8, 26);
//贷款金额
static double totalmoney, balance;

static string choice;
//期数
int n;
//月供
double paymonth;
double rate;
double interest;
/// <summary>
/// 用来构建欢迎界面
/// </summary>
void paint()
{
console.writeline("***************************");
console.writeline("***************************");
console.writeline("***************************");
console.writeline("欢迎使用房贷计算器");
console.writeline("***************************");
console.writeline("***************************");
console.writeline("***************************");

console.writeline("请按任意键继续");
console.readkey();
console.clear();
}
/// <summary>
/// 按日期选择利率
/// </summary>
/// <param name="dt">输入的日期</param>
void ratechoose(datetime dt)
{
if (dt >= dt4)
{
lowrate = 0.0275;
highrate = 0.0325;
}
else if (dt >= dt3)
{
lowrate = 0.03;
highrate = 0.035;
}
else if (dt >= dt2)
{
lowrate = 0.0325;
highrate = 0.0375;
}
else if (dt >= dt1)
{
lowrate = 0.035;
highrate = 0.04;
}
else
{
console.writeline("你输入的日期不在范围内");
console.readkey();
environment.exit(0);
}
}
/// <summary>
/// 计算月供
/// </summary>
void payment(datetime dt)
{
//设置缓冲区高度,即设置显示的最大行数
console.bufferheight = 1000;
ratechoose(dt);
switch (choice)
{
case "1":
{
//等额本息,月供计算方法
for (n = 1; n <= 360; n++)
{


if (n <= 60)
{
rate = lowrate;
}
else
{
rate = highrate;
}
//计算月供
double p;
p = rate / 12;
paymonth = (p * totalmoney * math.pow((1 + p), n)) / ((math.pow(1 + p, n) - 1));
//利息
interest = n * paymonth;
if (n % 2 == 0)
{
console.foregroundcolor = consolecolor.blue;
}
else
{
console.foregroundcolor = consolecolor.white;
}
console.writeline("{0}期按揭贷款的月供是{1:0.00}元,总利息是{2:0.00}元", n, paymonth, interest);

}
}
break;
case "2":
{
//等额本金,月供计算方法
for (n = 1; n <= 360; n++)
{
if (n <= 60)
{
rate = lowrate;
}
else
{
rate = highrate;
}
//计算月供
double p;
p = rate / 12;
paymonth = (totalmoney / n) + totalmoney * p;
interest = ((totalmoney / n + totalmoney * p) + totalmoney / n * (1 + p)) / 2 * n - totalmoney;
console.writeline("{0}期按揭贷款的首月还款额是{1:0.00}元,总利息是{2:0.00}元", n, paymonth, interest);
}
}
break;
}
}

/// <summary>
/// 月贷计算方法
/// </summary>
/// <param name="n">还款期数</param>
void compute(int n)
{
console.writeline("期次\t\t偿还利息\t\t偿还本金\t\t还款额\t\t剩余本金");
switch (choice)
{

case "1":
//等额本息法计算房贷
{
if (n <= 60)
{
rate = lowrate;
}
else
{
rate = highrate;
}

double p;
p = rate / 12;
paymonth = (p * totalmoney * math.pow((1 + p), n)) / ((math.pow(1 + p, n) - 1));
for (int i = 1; i <= n; i++)
{
//string s = i.tostring();
interest = totalmoney * p;
double capital = paymonth - interest;
totalmoney -= capital;
console.writeline("{0}\t\t{1:0.00}\t\t{2:0.00}\t{3:0.00}\t{4:0.00}", i, interest, capital, paymonth, totalmoney);
}
}
break;
case "2":
//等额本金法计算房贷
{
if (n <= 60)
{
rate = lowrate;
}
else
{
rate = highrate;
}
double p;
p = rate / 12;
double capital = totalmoney / n;
for (int i = 1; i <= n; i++)
{

interest = totalmoney * p;
paymonth = capital + interest;
totalmoney -= capital;

console.writeline("{0}\t\t{1:0.00}\t\t\t{2:0.00}\t\t{3:0.00}\t{4:0.00}", i, interest, capital, paymonth, totalmoney);
}
}
break;

}
}
/// <summary>
/// 计算还款状况
/// </summary>
/// <param name="n0">还款期数</param>
/// <param name="dt">首次还款时间</param>
void repayment(int n0, datetime dt)
{
balance = totalmoney;
datetime dt0 = dt;
double rate0;
double capital;
double p;
console.writeline("还款时间\t\t偿还利息\t\t偿还本金\t\t还款额\t\t剩余本金");
switch (choice)
{
case "1":
{

ratechoose(dt0);
if (n0 <= 60)
{
rate0 = lowrate;
}
else
{
rate0 = highrate;
}
n = n0;
for (int i = 1; i <=n0; i++)
{
ratechoose(dt);
rate = (n0 <= 60 ? lowrate : highrate);

if (dt.year != dt0.year && rate != rate0)//这里应该有问题?
{
double p0 = rate0 / 12;
double paymonth0= (p0 * totalmoney * math.pow((1 + p0), n)) / ((math.pow(1 + p0, n) - 1));
double interest0 = balance * p0;
double capital0 = paymonth0 - interest0;

rate0 = rate;

interest = balance * (rate0/12);
totalmoney = balance;
balance -= capital0;

paymonth = capital0 + interest;
n =n0 - i+1;
console.writeline("{0}\t{1:0.00}\t\t\t{2:0.00}\t\t\t{3:0.00}\t\t{4:0.00}", dt, interest, capital0, paymonth, balance);
dt = dt.addmonths(1);
continue;
}



p = rate0 / 12;
paymonth = (p * totalmoney * math.pow((1 + p), n)) / ((math.pow(1 + p, n) - 1));

interest = balance * p;
capital = paymonth - interest;
balance -= capital;
console.writeline("{0}\t{1:0.00}\t\t\t{2:0.00}\t\t\t{3:0.00}\t\t{4:0.00}", dt, interest, capital, paymonth, balance);
dt = dt.addmonths(1);

}

}
break;
case "2":
{
ratechoose(dt0);
rate0 = (n0 <= 60 ? lowrate : highrate);
n = n0;
for (int i = 0; i < n0; i++)
{
ratechoose(dt);
rate = (n0 <= 60 ? lowrate : highrate);
if (dt.year!=dt0.year&&rate!=rate0)
{
rate0 = rate;
}
p = rate0 / 12;
capital = totalmoney / n0;
interest = balance * p;
paymonth = capital + interest;
balance -= capital;
console.writeline("{0}\t{1:0.00}\t\t\t{2:0.00}\t\t\t{3:0.00}\t\t{4:0.00}", dt, interest, capital, paymonth, balance);
dt = dt.addmonths(1);
}
}
break;
}
}
/// <summary>
///实现提前还款功能
/// </summary>
/// <param name="n">还款总期数</param>
/// <param name="dt1">首次还款时间</param>
/// <param name="dt2">提前还款时间</param>
void prepayment(int n,datetime dt1,datetime dt2)
{

}
static void main(string[] args)
{

{
program p = new program();
p.paint();
console.writeline("请选择您的操作!1.房贷计算 2.月供速算 3.还款状况 4.提前还款");
console.writeline("请选择您的还款方式?1.等额本息 2.等额本金");
choice = console.readline();
console.writeline("请输入你的贷款金额");
totalmoney = convert.todouble(console.readline());
console.writeline("请输入您贷款的期数");
int number = convert.toint32(console.readline());
console.writeline("请输入你的首次贷款时间");
datetime dt = convert.todatetime(console.readline());
//console.writeline("请输入你的提前还款时间");
//datetime dtr = convert.todatetime(console.readline());
//console.writeline("请输入你的还款金额");
//double partmoney = convert.todouble(console.readline());
//console.writeline("你输入的日期是{0},短期利率是{1},长期利率是{2}",dt,p.lowrate,p.highrate);
//dt= dt.addmonths(1);
// console.writeline(dt);
p.repayment(number, dt);
// p.compute(number);
// p.payment(dtr);
console.readkey();
}
}
}
}