基于C++实现一个房贷计算小程序(含代码)

news2024/12/26 11:27:39

房贷计算程序,主要实现以下功能:

  1. 用户友好的界面:使用文本菜单来引导用户选择功能。
  2. 支持不同还款频率:例如每季度还款、每半年还款等。
  3. 支持贷款提前还款:计算提前还款对总支付利息的影响。
  4. 详细的还款计划表:输出每月的本金、利息和总还款额。

完整示例代码免费下载链接

在这里插入图片描述

下面是一个复杂的C++程序示例,涵盖了以上功能:

C++ 程序代码

#include <iostream>
#include <iomanip>
#include <cmath>
#include <vector>

using namespace std;

// Function to validate user input
bool validateInput(double value) {
    return value > 0;
}

// Function to calculate monthly payment for equal principal repayment
double calculateEqualPrincipalPayment(double principal, double annualInterestRate, int years) {
    double monthlyInterestRate = annualInterestRate / 12 / 100;
    int totalMonths = years * 12;
    double totalPayment = 0;

    for (int month = 1; month <= totalMonths; ++month) {
        double remainingPrincipal = principal * (totalMonths - month + 1) / totalMonths;
        double monthlyPayment = (remainingPrincipal * monthlyInterestRate) + (principal / totalMonths);
        totalPayment += monthlyPayment;
    }

    return totalPayment / totalMonths; // Average monthly payment
}

// Function to calculate monthly payment for equal monthly installments
double calculateEqualInstallmentsPayment(double principal, double annualInterestRate, int years) {
    double monthlyInterestRate = annualInterestRate / 12 / 100;
    int totalMonths = years * 12;

    double numerator = monthlyInterestRate * std::pow(1 + monthlyInterestRate, totalMonths);
    double denominator = std::pow(1 + monthlyInterestRate, totalMonths) - 1;
    return principal * (numerator / denominator);
}

// Function to generate a repayment schedule
void generateRepaymentSchedule(double principal, double annualInterestRate, int years, int frequency) {
    double rate = annualInterestRate / frequency / 100;
    int totalPeriods = years * frequency;
    double principalPayment = principal / totalPeriods;

    cout << fixed << setprecision(2);
    cout << "Repayment Schedule:\n";
    cout << setw(10) << "Period" << setw(20) << "Principal Payment" << setw(20) << "Interest Payment" << setw(20) << "Total Payment\n";

    double remainingPrincipal = principal;
    for (int period = 1; period <= totalPeriods; ++period) {
        double interestPayment = remainingPrincipal * rate;
        double totalPayment = principalPayment + interestPayment;
        remainingPrincipal -= principalPayment;

        cout << setw(10) << period
             << setw(20) << principalPayment
             << setw(20) << interestPayment
             << setw(20) << totalPayment
             << endl;
    }
}

// Main function
int main() {
    double principal; // Loan amount
    double annualInterestRate; // Annual interest rate in percentage
    int years; // Loan term in years
    int repaymentOption; // Repayment option (1 for Equal Principal, 2 for Equal Installments)
    int frequency; // Repayment frequency (e.g., 12 for monthly, 4 for quarterly, 2 for semi-annually)

    cout << "Enter the loan amount: ";
    cin >> principal;
    if (!validateInput(principal)) {
        cerr << "Invalid loan amount. Must be greater than zero." << endl;
        return 1;
    }

    cout << "Enter the annual interest rate (in percentage): ";
    cin >> annualInterestRate;
    if (!validateInput(annualInterestRate)) {
        cerr << "Invalid annual interest rate. Must be greater than zero." << endl;
        return 1;
    }

    cout << "Enter the loan term (in years): ";
    cin >> years;
    if (!validateInput(years)) {
        cerr << "Invalid loan term. Must be greater than zero." << endl;
        return 1;
    }

    cout << "Choose repayment option (1 for Equal Principal, 2 for Equal Installments): ";
    cin >> repaymentOption;
    if (repaymentOption != 1 && repaymentOption != 2) {
        cerr << "Invalid option. Choose 1 or 2." << endl;
        return 1;
    }

    cout << "Choose repayment frequency (12 for monthly, 4 for quarterly, 2 for semi-annually): ";
    cin >> frequency;
    if (frequency != 12 && frequency != 4 && frequency != 2) {
        cerr << "Invalid frequency. Choose 12, 4, or 2." << endl;
        return 1;
    }

    double payment;
    if (repaymentOption == 1) {
        payment = calculateEqualPrincipalPayment(principal, annualInterestRate, years);
        cout << "Your average payment (Equal Principal) is: $" << payment << endl;
    } else if (repaymentOption == 2) {
        payment = calculateEqualInstallmentsPayment(principal, annualInterestRate, years);
        cout << "Your monthly payment (Equal Installments) is: $" << payment << endl;
    }

    // Calculate total payment and total interest
    int totalPeriods = years * frequency;
    double totalPayment = payment * totalPeriods;
    double totalInterest = totalPayment - principal;

    cout << "Total payment over the life of the loan: $" << totalPayment << endl;
    cout << "Total interest paid: $" << totalInterest << endl;

    // Generate repayment schedule
    generateRepaymentSchedule(principal, annualInterestRate, years, frequency);

    return 0;
}

扩展说明

  1. 输入验证

    • validateInput 函数检查输入值是否大于零,确保输入的有效性。
  2. 还款方式

    • 等额本金还款:使用 calculateEqualPrincipalPayment 函数计算平均每月还款额。
    • 等额本息还款:使用 calculateEqualInstallmentsPayment 函数计算每月还款额。
  3. 还款频率

    • 通过用户选择的频率(例如每月、每季度、每半年)来调整还款计划。
  4. 详细的还款计划表

    • generateRepaymentSchedule 函数生成详细的还款计划,包括每期的本金支付、利息支付和总支付额。

编译和运行

  1. 保存代码

    • 将代码保存为一个C++源文件,例如 advanced_loan_calculator.cpp
  2. 编译代码

    • 使用C++编译器进行编译,例如使用 g++ 编译器:
      g++ -o advanced_loan_calculator advanced_loan_calculator.cpp
      
  3. 运行程序

    • 执行编译后的程序:
      ./advanced_loan_calculator
      

这个扩展后的程序提供了多种还款方式和详细的还款计划表,可以帮助用户更好地了解其贷款的还款情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2109376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(二)ASP.NET Core WebAPI项目的启动地址设置

上一篇介绍了ASP.NET Core WebAPI项目创建&#xff0c;可参考&#xff1a; 1.webAPI的访问地址 1) 启动时&#xff0c;选择CoreWebAPI(项目名称)运行项目 可以看到打开浏览器后的地址是&#xff1a;applicationUrl"\"launchUrl 2) 启动时&#xff0c;选择IIS Expre…

C++mutable

文章目录 Claude 讲解基本用法mutable的常见用途注意事项 ChatGpt 讲解1. 基本概念2. 使用示例解释&#xff1a; 3. 适用场景4. 注意事项 lambda 讲解基本语法示例捕获方式使用场景 mutable 和 labmda 一起使用代码&#xff1a;代码分析&#xff1a;输出结果&#xff1a; 在C编…

(详细文档!)JavaSwing图书管理系统+mysql数据库

目 录 1.项目概述及需求分析................................ 1 2.系统设计......................................... 1 2.1程序总体设计......................................... 1 2.2数据库设计........................................... 2 2.3公共模块设计...…

论文学习(一):基于遥感技术的凉山州森林火险预测方法研究

文章目录 摘要部分一、绪论二、研究区历史火情分析2.1凉山州森林火灾年际变化特征2.2凉山州森林火灾月际变化特征2.3凉山州森林火灾空间分布特征2.4森林火灾等级与起火原因分析 三、数据与方法3.1数据来源3.2数据预处理3.3研究方法3.3.1逻辑回归&#xff1a;最大似然估计3.3.2决…

iOS——持久化

iOS的数据存储机制 沙盒机制 应用沙盒文件夹包含了&#xff1a; Application(应用程序包)&#xff1a;包含了所有的资源文件和和可执行文件&#xff0c;上架前经过数字签名&#xff0c;上架后不可修改。 Documents&#xff1a;文档目录&#xff0c;要保存程序生成的数据&…

华为OD机试 - 最大相连男生数 - 矩阵(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

[数据集][目标检测]水面垃圾检测数据集VOC+YOLO格式2027张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2027 标注数量(xml文件个数)&#xff1a;2027 标注数量(txt文件个数)&#xff1a;2027 标注…

信创实践(3):基于x2openEuler将CentOS升级成openEuler,享受其带来的创新和安全特性

引言&#xff1a; 在当前的 IT 行业中&#xff0c;创新和安全性是两大关键趋势。随着 CentOS 停止维护&#xff0c;许多用户正在寻找替代方案&#xff0c;以保持其系统的更新和安全。openEuler 作为一个强大的开源操作系统&#xff0c;成为了理想的迁移目标。本教程将指导您如…

大语言模型的上下文窗口(Context Windows):对人工智能应用的影响

大语言模型&#xff08;LLMs&#xff09;极大地提升了人工智能在理解和生成类人文本方面的能力。其中一个影响其效用的基本方面是它们的 “上下文窗口”—— 这个概念直接影响着这些模型接收和生成语言的有效性。我将深入探讨上下文窗口是什么、它们对人工智能应用的影响以及组…

【通俗理解】Baseline在竞赛中的意义——性能比较的标准尺

【通俗理解】Baseline在竞赛中的意义——性能比较的标准尺 关键词提炼 #Baseline #竞赛标准 #算法性能 #性能比较 #改进评估 #魔改基础 #优势彰显 第一节&#xff1a;Baseline的类比与核心概念【尽可能通俗】 1.1 Baseline的类比 Baseline在竞赛中就像是一场跑步比赛的起跑…

【IEEE独立出版 | 最终截稿时间:2024年9月9日23:59】第三届人工智能、物联网和云计算技术国际会议(AIoTC 2024)

【IEEE独立出版 | 最终截稿时间&#xff1a;2024年9月9日23:59】 第三届人工智能、物联网和云计算技术国际会议&#xff08;AIoTC 2024&#xff09; 2024 3rd International Conference on Artificial Intelligence, Internet of Things and Cloud Computing Technology 202…

轻松驾驭开学季,智慧校园综合解决方案!

智慧校园是指运用先进的信息技术手段和智能化系统&#xff0c;对学校内部各种教育资源、管理流程和服务进行数字化、网络化、智能化的整合与优化&#xff0c;提供高效便捷的教育教学和管理服务环境的校园。 智慧校园建设从哪些方面入手呢&#xff1f; 1.智慧食堂管理系统 基于…

[3.4]【机器人运动学MATLAB实战分析】平面RRR机器人正运动学MATLAB计算

本文重点介绍平面RRR机械手结构的正运动学方程的算例,这些是工业机器人中经常遇到的。平面RRR机器人运动学建模如下: 机器人模型: 表1三连杆平面臂的DH参数 由于所有关节都是转动型的,对每一个关节都具有相同的定义的齐次变换矩阵结构,即: 则计算正运动学方程得:

xAI巨无霸超级计算机上线:10万张H100 GPU,计划翻倍至20万张

在短短四个多月的时间里&#xff0c;埃隆马斯克的X公司&#xff08;前身为Twitter&#xff09;推出了世界上最强劲的人工智能训练系统。名为Colossus的超级计算机使用了多达10万张NVIDIA H100 GPU进行训练&#xff0c;并计划在未来几个月内再增加5万张H100和H200 GPU。 “本周末…

时间序列神器Prophet教程-入门教程

公众号&#xff1a;尤而小屋编辑&#xff1a;Peter作者&#xff1a;Peter 大家好&#xff0c;我是Peter~ 今天给大家分享一个时间序列预测神器Prophet的简易入门教程。 什么是Prophet Prophet是一种基于加法模型的时间序列预测工具&#xff0c;由Facebook的数据科学团队开发…

实战训练与源码教程:用Real-ESRGAN对抗生成超分技术实现超高清图像!

目录 前言 超分数据如何构造呢&#xff1f; Real-ESRGAN 1. 高质量细节重建 2. 真实感和自然度 3. 处理真实世界数据 4. 多尺度和多种类型的输入 5. 视觉效果的提升 超分如何退化 1. 模糊处理 2. 噪声处理 3. 压缩失真 4. 训练数据的退化模拟 2.经典退化模型◆退…

【苍穹外卖】Day 7 缓存、购物车相关接口

1 缓存 存在问题&#xff1a; 用户端小程序展示的菜品数据都是通过査询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 >解决&#xff1a; 通过 Redis 来缓存菜品数据&#xff0c;减少数据库查询操作 缓存逻辑分析&#xff1a; 每个分…

PyDracula:用 PySide6 和 PyQt6打造现代感 Python GUI 的利器

PyDracula 是一个基于 PySide6 或 PyQt6 的 Python GUI 库&#xff0c;它以其现代、美观、易于定制的特点而闻名。PyDracula 融合了流行的 Dracula 主题&#xff0c;并提供了丰富的功能&#xff0c;让开发者可以轻松构建出具有吸引力的图形界面。本文将详细介绍 PyDracula 的核…

【Godot4.3】CanvasShape资源化改造

概述 通过把之前自定义的CanvasShape类变成资源类型&#xff0c;将可以同时用于CanvasItem绘图和创建扩展的Node2D和Polygon2D节点等。 本篇就完成CanvasShape类的资源化改造&#xff0c;并记录改造过程和思路。 CanvasShape资源类型体系 CanvasShape仍然为图形基类&#xf…

Android Auto未来可能支持无线电广播

通过Android Auto&#xff0c;可以在车载收音机上使用 Google 地图、音乐、收听播客&#xff0c;还能获取天气等基本信息。最近&#xff0c;国外科技媒体9to5Google通过分析 Android Auto v12.3 和 v12.4的应用程序的代码发现了一些提示信息&#xff0c;特别提到了 AM、FM、HD …