二期
研究背景:由于一期小程序效果不错,数额准确但输出格式不太美观,与甲方达成协议,继续完成二期工程(在次小声吐槽:二期就35元再次为一抖米折腰(ㄒoㄒ))
研究目的:做出一个小程序,能让用户自定义等额本息贷款信息(eg:本金,利率,周期),方便明了,以文件方式输出所要查询每期应还数额。
研究工具(语言):Visual Studio Code
等额本息介绍: 等额本息是指一种贷款的还款方式,指在还款期内,每月偿还同等数额的贷款(包括本金和利息)。等额本息和等额本金是不一样的概念,虽然刚开始还款时每月还款额可能会低于等额本金还款方式的额度,但是最终所还利息会高于等额本金还款方式,该方式经常被银行使用。
数学计算公式:
所以依据本函数,以数学基础我们知道,这是一个常数函数。
所以以本方法还贷,每月还款数额相同。
// 等额本金project1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>//头文件
#include <ostream>
#include <stdio.h>
#include <math.h>
using namespace std;
extern double round2Point(float oldVal);
int main()
{
int j,i;
int a;//第几月
double b;//第a月的利息;
double c;//每月还下的本金
double m;//等额本金a月还款数
double n;//等额本息a月还款数
double x;//本金
int y;//还款总月数
double z;//年利率
double yue;//月利率中间计算
double lu;
double you;
double zhong=1;
double esum=0;//等额本金总额
double fsum = 0;//等额本息总额
printf("借款总金额:");
scanf("%lf", &x);
printf("还款总月数:");
scanf("%d", &y);
printf("年利率:");
scanf("%lf", &z);
//printf("查询月数:"); 本来是想仅提供查询月份数据 奈何甲方提出
//scanf("%d", &a); 奈何甲方提出要显示 所有周期应归还数额 的需求
//创建文件。
//D:\大一下\lunar\小课题\1.等额本金\VS\等额本金project1\等额本金project1\等额本金project1.cpp
FILE* fp;//涉及到对文件的操作,定义一个文件指针
if ((fp = fopen("D:\\大一下\\lunar\\小课题\\1.等额本金\\VS\\等额本金project1\\等额本金project1\\test.txt", "w")) == NULL)
{
printf("can not open file\n");
exit(0);
}
//等额本息每月还款数额相同
lu = z / 12;
yue =lu+1;
//zhong = power(yue, y);
for (a = 1; a <= y; a++)
{
zhong = zhong * yue;
}
you = lu * zhong * x;
n = you / (zhong - 1);
printf("每期等额本息还款数:");
printf("%.2lf\n", n);
fsum=n*y;
for (a = 1; a<= y; a++)
{
std::cout << "第" << a << "期" << std::endl;
printf("%d", a);
printf("期");
c = x / y;
j = c * (a - 1);
b = (x - j) * z / 12;
double round2Point(b);
m = b + c;
esum = esum + m;
printf("等额本金还款数:");
printf("%.2lf\n", m);
fprintf(fp, "第%d期 等额本金还款数:%.2lf 等额本息还款数:%.2lf\n", a, m,n);
}
printf("等额本金还款总额: %.2lf 等额本息还款数:%.2lf\n ", esum, fsum);
fprintf(fp, "等额本金还款总额: %.2lf 等额本息还款数:%.2lf\n ", esum,fsum);
fclose(fp);
//c = x / y;
//j = c * (a - 1);
//b = (x - j) * z / 12;
//double round2Point(b);
//m = b + c;
// printf("还款数:");
//printf("%.2f", m);
}
double round2Point(float oldVal)//四舍五入函数
{
double newVal = oldVal * 100;
int tmp = newVal;
if (newVal - tmp >= 0.5)
tmp++;
newVal = tmp;
newVal /= 100;
return newVal;
//double newVal = oldVal * 100 + 0.5;
//int tmp = newVal;
//newVal = tmp;
//newVal /= 100.0;
//return newVal;
}
自行放大查看