Java后端开发——房贷计算器(Ajax版、Json版、等额本息+等额本金)

news2025/1/11 6:50:50

MVC房贷计算器(Ajax版)

1.新建一个JavaWeb项目hslcalweb,设置tomcat10。
2.创建房贷计算器JavaBean:HslCalBean.java,增加以下的属性,并生成Getter/Setter方法。

private double total;     //贷款额度
	private int loanyear;  //贷款年限
	private double rate;      //年利率
	
	private double interest;  //总利息
	private double repayment; //每月还款
	private int loanNumber; //贷款期数
	private double repayTotal; //还款总额
	private StringBuffer results;  //等额本金,还款列表字符串

3.生成默认和带三个已知参数的构造方法。

	public HslCalBean(double total, int loanyear, double rate) {
		super();
		this.total = total;
		this.loanyear = loanyear;
		this.rate = rate;
	}

	public HslCalBean() {
		super();
	}

4.增加计算器的计算方法cal()

public void cal() {
		double mrate=rate/12;            //月利率=年利率/12
		loanNumber=loanyear*12;          //贷款期数=年限*12
		
		//总利息=贷款额*贷款月数*月利率*(1+月利率)贷款月数/[(1+月利率)还款月数 - 1]-贷款额
		interest = (total*10000*loanNumber*mrate*Math.pow(mrate+1,loanNumber))/(Math.pow(mrate+1,loanNumber)-1)-total*10000; 
		
		//还款总额=还款月数*贷款额*月利率*(1+月利率)贷款月数/[(1+月利率)还款月数 - 1]
		repayTotal=(loanNumber* total*10000*mrate*Math.pow(mrate+1,loanNumber))/(Math.pow(mrate+1,loanNumber)-1); 
		
		 //每月还款=贷款本金×[月利率×(1+月利率)^还款月数]÷{[(1+月利率)^还款月数]-1}
        repayment =total*10000*(mrate* Math.pow(mrate+1,loanNumber))/(Math.pow(mrate+1,loanNumber)-1);   
	}

5.增加一个测试类HslTest.java,对JavaBean测试,并对比结果是否正确。
public class HslTest {
	public static void main(String[] args) {
		DecimalFormat df=new DecimalFormat("#.00");
		HslCalBean hslCal= new HslCalBean(50,30, 0.043) ;
		hslCal.cal();
		System.out.println("贷款总额:"+hslCal.getTotal()+"元");
		System.out.println("总利息:"+df.format(hslCal.getInterest())+"元");
		System.out.println("还款总额:"+df.format(hslCal.getRepayTotal())+"元");
		System.out.println("还款期数:"+df.format(hslCal.getLoanNumber())+"月");
		System.out.println("月均还款:"+df.format(hslCal.getRepayment())+"元");
		
	}
}

6.新建一个控制器Servlet:HslCalServlet.java,映射的URL:/hslcal,从浏览器输入参数调用房贷计算器JavaBean。

public class HslCalServlet extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		double total=Double.parseDouble(request.getParameter("total"));
		int loanyear=Integer.parseInt(request.getParameter("loanyear"));
		double rate=Double.parseDouble(request.getParameter("rate"));
		
		DecimalFormat df=new DecimalFormat("#.00");
		HslCalBean hslCal= new HslCalBean(total,loanyear, rate) ;
		hslCal.cal();
		response.setCharacterEncoding("UTF-8");
		response.setHeader("content-type","text/html;charset=UTF-8");
		PrintWriter out=response.getWriter();
		out.println("贷款总额:"+hslCal.getTotal()+"元<hr>");
		out.println("总利息:"+df.format(hslCal.getInterest())+"元<hr>");
		out.println("还款总额:"+df.format(hslCal.getRepayTotal())+"元<hr>");
		out.println("还款期数:"+df.format(hslCal.getLoanNumber())+"月<hr>");
		out.println("月均还款:"+df.format(hslCal.getRepayment())+"元<hr>");
	}
}

7.引入JQuery库,存放在webapp/js/jquery-3.6.4.min.js路径下。
链接:https://pan.baidu.com/s/1_wOpxn6wUBDbGsqx0VSPpw?pwd=2023
提取码:2023
8.新建一个房贷计算器表单页面hslcal_ajax.html,完成表单设计,让用户从网页输入参数,并提交服务器端Servlet小程序计算结果。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>房贷计算器</title>
<script type="text/javascript" src="js/jquery-3.6.4.min.js"></script>
<script type="text/javascript">
$(function(){
	$('#btn_cal').click(function(){
			  	$.ajax({
			 		url:"hslcal",
			 		type:"POST",
			 		data:$("#calform").serialize(),
			 		success:function(data){
			 			$('#result').val(data);
			 		},
			 		error:function(data){
			 			alert("error!")
			 		}	
			 	});   
	});
})
</script> 
</head>
<body>
<h3>房贷计算器2023</h3>
<form id="calform">
<table border=1>
<tr><td>贷款总额:</td><td><input id="total" name="total" type="text" ></td></tr>
<tr><td>按揭年数:</td><td>
  <select id="loanyear" name="loanyear">
  <option value="5">5年(50期)</option>
  <option value="10">10年(120期)</option>
  <option value="20">20年(240期)</option>
  <option value="30">30年(360期)</option>
</select></td></tr>
<tr><td>贷款利率:</td><td>
  <select id="rate" name="rate">
  <option value="0.0365">3.65%(5年及5年以内)</option>
  <option value="0.043">4.3%(5年以上)</option>
</select></td></tr>
<tr><td colspan="2" align="center">
<input type="button" id="btn_cal" value="开始计算"/>
</td></tr>
<tr><td colspan="2" align="center">
<textarea id="result" rows="8" cols="50"></textarea>
</td></tr>
</table>
</form>
</body>
</html>

9.运行效果
在这里插入图片描述

MVC房贷计算器(Json版)

1.引入Java的JSON的工具库jackson,存放于路径webapp/WEB-INF/lib下面。
所需要包链接:https://pan.baidu.com/s/1fPUCBotqCOwYnsUrTyiG8g?pwd=2023
提取码:2023
在这里插入图片描述
2.新建一个房贷计算器表单页面hslcal_json.html,完成表单设计,让用户从网页输入参数,并提交服务器端Servlet小程序计算结果。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>房贷计算器</title>
<script type="text/javascript" src="js/jquery-3.6.4.min.js"></script>
<script type="text/javascript">
$(function(){
	$('#btn_cal').click(function(){
			  	$.ajax({
			 		url:"hslcaljackson",
			 		type:"POST",
			 		dataType:'json',
			 		data:$("#calform").serialize(),
			 		success:function(data){
			 			$('.total').val(data.total);
			 			$('.interest').val(data.interest);
			 			$('.repayTotal').val(data.repayTotal);
			 			$('.loanyear').val(data.loanyear);
			 			$('.repayment').val(data.repayment);
			 		},
			 		error:function(data){
			 			console.log(data);
			 		}	
			 	});   
	});
	
	$('#loanyear').change(function(){

		if($(this).val()>5)
			$('#rate').get(0).value = 0.043;
		else
			$('#rate').get(0).value = 0.0365;
	})
})
</script> 
</head>
<body>
<h3>房贷计算器2023</h3>
<form id="calform">
<table border=1>
<tr><td>贷款总额:</td><td><input id="total" name="total" type="text" ></td></tr>
<tr><td>按揭年数:</td><td>
  <select id="loanyear" name="loanyear">
  <option value="2">2年(24期)</option>
  <option value="5">5年(50期)</option>
  <option value="10">10年(120期)</option>
  <option value="20">20年(240期)</option>
  <option value="30">30年(360期)</option>
</select></td></tr>
<tr><td>贷款利率:</td><td>
  <select id="rate" name="rate">
  <option value="0.0365">3.65%(5年及5年以内)</option>
  <option value="0.043">4.3%(5年以上)</option>
</select></td></tr>
<tr><td colspan="2" align="center">
<input type="button" id="btn_cal" value="开始计算"/>
</td></tr>
<tr><td colspan="2">计算结果</td></tr>
<tr><td>贷款总额</td><td> <input class="total" type="text"></td></tr>
<tr><td>总利息</td><td> <input class="interest" type="text"></td></tr>
<tr><td>还款总额</td><td> <input class="repayTotal" type="text"></td></tr>
<tr><td>还款期数</td><td> <input class="loanyear" type="text"></td></tr>
<tr><td>月均还款</td><td> <input class="repayment" type="text"></td></tr>
</table>
</form>

</body>
</html>

10.新建一个控制器Servlet:HslCalJsonServlet.java,映射的URL:/hslcaljackson,从浏览器输入参数调用房贷计算器JavaBean,利用Jackson生成JSON结果返回。

public class HslCalJacksonServlet extends HttpServlet {

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		double total=Double.parseDouble(request.getParameter("total"));
		int loanyear=Integer.parseInt(request.getParameter("loanyear"));
		double rate=Double.parseDouble(request.getParameter("rate"));
		String repayType=request.getParameter("repayType");
		DecimalFormat df=new DecimalFormat("#.00");
		HslCalBean hslCal= new HslCalBean(total,loanyear, rate) ;
		hslCal.cal();
		response.setCharacterEncoding("UTF-8");
		response.setHeader("content-type","text/html;charset=UTF-8");
		PrintWriter out=response.getWriter();
		ObjectMapper objectMapper = new ObjectMapper();
		String json = objectMapper.writeValueAsString(hslCal);
		out.print(json);
	}
}

11.运行效果
在这里插入图片描述

MVC房贷计算器(等额本息+等额本金)

1.给房贷计算器JavaBean类HslCalBean.java增加等额本金的属性,并设置getter/setter。

private StringBuffer results;  //等额本金,还款列表字符串

2.给房贷计算器JavaBean类HslCalBean.java增加等额本金的计算方法cal2()。

public void cal2() {
		double mrate=rate/12;            //月利率=年利率/12
		loanNumber=loanyear*12;          //贷款期数=年限*12
		interest=  (loanNumber+1)*total*10000*mrate/2;          //总利息=(还款月数+1)×贷款额×月利率/2
		repayTotal=interest+total*10000;          //还款总额= 总利息 + 贷款额
		double totalm=total*10000/loanNumber;      // 每月本金=总本金/还款月数
		                                   
		double totalsum=0;
		results=new StringBuffer("\"");
		DecimalFormat df=new DecimalFormat("#.00");
		for(int i=1;i<=loanNumber;i++) {
			double repayment=totalm+(total*10000-totalsum)*mrate;    // 每月还款= 每月本金 +(本金-累计已还本金)×月利率
			totalsum+=totalm;                               //累计已还本金
			results.append(i+"月,"+df.format(repayment)+"\\n");
		}
		results.append("\"");
	}

3.修改控制器类HslCalServlet.java,通过repayType区分前端选择等额本息还是等额本金,执行相应处理逻辑代码。

String repayType=request.getParameter("repayType");
		if(repayType.equals("1")) {
			hslCal.cal();
			out.print("{");
			out.print("\"total\":"+df.format(hslCal.getTotal())+",");
			out.print("\"interest\":"+df.format(hslCal.getInterest())+",");
			out.print("\"repayTotal\":"+df.format(hslCal.getRepayTotal())+",");
			out.print("\"loanyear\":"+df.format(hslCal.getLoanyear())+",");
			out.print("\"repayment\":"+df.format(hslCal.getRepayment()));
			out.print("}");
		}else if(repayType.equals("2")) {
			hslCal.cal2();
			out.print("{");
			out.print("\"total\":"+df.format(hslCal.getTotal())+",");
			out.print("\"interest\":"+df.format(hslCal.getInterest())+",");
			out.print("\"repayTotal\":"+df.format(hslCal.getRepayTotal())+",");
			out.print("\"loanyear\":"+df.format(hslCal.getLoanyear())+",");
			out.print("\"results\":"+hslCal.getResults());
			out.print("}");
		}

4.修改房贷计算器表单页面hslcal_json.html
1)增加还款方式标记

<tr><td>月均还款</td><td>
<input class="repayment" type="text">
<textarea class="results" cols="20" rows="20" hidden="true"></textarea>
</td></tr>

3)在JQuery的入口函数$(function(){}中增加,两种还款方式的切换代码

$('.repayType').change(function(){
		var radioVal=$(this).val();
		if(radioVal=='1'){
			$('.repayment').show();
			$('.results').hide();
		}else if(radioVal=='2'){
			$('.repayment').hide();
			$('.results').show();
		}
	})

4)在$.ajax函数中的success:function(data){}中,增加对等额本金的标记设置。

$('.results').val(data.results);

6.运行效果
在这里插入图片描述

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

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

相关文章

Linux安装JumpServer

功能简介在线安装 环境要求&#xff1a;准备一台 2核4G &#xff08;最低&#xff09;且可以访问互联网的 64 位 Linux 主机 以 root 用户执行如下命令一键安装 JumpServer curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_st…

JAVA毕业设计102—基于Java+Springboot+vue的个人理财管理系统(源码+数据库)

基于JavaSpringbootvue的个人理财管理系统(源码数据库) 一、系统介绍 本系统前后端分离 管理员功能&#xff1a; 登录、注册、添加账单、导出账单、统计分析、个人信息修改、消费对比 二、所用技术 后端技术栈&#xff1a; SpringbootSpringMvcmybatismysql 前端技术栈…

优维低代码实践:父子模型

导语&#xff1a;优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学…

图片怎么做成动态gif?一招简单又高效

如何将静态图片变成gif动态图片&#xff1f;当下&#xff0c;各种各样的gif表情包充斥着我们的日常生活&#xff0c;但是有些gif动图不符合自己的需求&#xff0c;想要自己制作的时候应该怎么办呢&#xff1f;这时候&#xff0c;可以使用gif图片制作&#xff08;https://www.gi…

session和cookie机制

2023.10.23 域对象 先总结一下到目前位置我所了解的域对象&#xff1a; request&#xff08;对应的类名&#xff1a;HttpServletRequest&#xff09; 请求域&#xff08;请求级别的&#xff09; session&#xff08;对应的类名&#xff1a;HttpSession&#xff09; 会话域&am…

ITSource 分享 第1期【在线考试系统】

项目介绍 本期给大家介绍一个问卷调查系统. 一起来看看吧 ! 一 业务介绍 该系统分为以下几个模块: 1.我的问卷 image.png 可以查看创建的所有问卷, 包括 收集中,编辑中,已关闭等状态 2.创建问卷 image.png 问题类型可以选择有多种选择: 3.发布并填写问卷 问卷编辑完成后,即可保…

国内外CDN的发展

当今互联网世界中&#xff0c;内容交付网络&#xff08;Content Delivery Network&#xff0c;CDN&#xff09;已经成为网络加速的不可或缺的工具。CDN技术在国内外得到广泛应用&#xff0c;为了更好地了解CDN的不同之处以及未来的发展趋势&#xff0c;让我们深入探讨这一领域的…

Spring底层原理(三)

Spring底层原理(三) Bean的生命周期 SpringBootApplication public class Application {public static void main(String[] args) {ConfigurableApplicationContext context SpringApplication.run(Application.class, args);context.close();} } ​ Slf4j Component public…

MySQL身份验证绕过漏洞

搭建 vmihub靶场:vulhub靶场搭建与使用_剁椒鱼头没剁椒的博客-CSDN博客 运行漏洞: # 这里要改成自己的 /vulhub-master 存放目录 cd /etc/docker/vulhub-master/mysql/CVE-2012-2122# 关闭防火墙,不然就要放行3306端口 systemctl stop firewalld# 重启 Docker 服务 servic…

C# | Linq基本功 —— 必学的必熟的10个方法

C# Linq基本功 —— 必学的必熟的10个方法 文章目录 C# Linq基本功 —— 必学的必熟的10个方法1. Linq简介1.1 什么是Linq1.2 Linq的优势 2. Linq基本方法2.1 Where方法2.2 Select方法2.3 OrderBy方法2.4 GroupBy方法2.5 Join方法2.6 Any方法2.7 All方法2.8 First方法2.9 Skip方…

1024勋章

&#x1f338;关于重阳节的一些发疯日常&#xff08;昨天的聊天记录&#xff0c;今天发系列&#xff09;&#x1f605; &#x1f338;没错&#xff0c;发出来单纯觉得好玩儿&#x1f609;(为了1024勋章&#x1f60f;)芜湖&#xff01;

Kepware带你玩转IEC60870-104驱动

随着越来越多电力设备自动化程度的不断提高以及OPC协议的广泛应用&#xff0c;越多客户倾向于使用更为方便、快捷的方式去获取数据&#xff0c;IEC60870-5-104协议作为一个标准的电子自动化协议&#xff0c;在电力自动化现场应用非常广泛。 本文介绍KEPServerEX的IEC-104驱动&…

WeakMap 弱引用 不会被GC所考量

WeakMap是一种特殊的Map数据结构&#xff0c;只能以引用作为key&#xff0c;并且不会阻止其被垃圾回收。WeakMap的使用如下&#xff1a; 1. 创建WeakMap对象&#xff1a; const weakMap new WeakMap();2. 添加键值对&#xff1a;使用set()方法向WeakMap中添加键值对。注意这里…

c++ 模版的一些注意问题

声明和定义不可分离 举个例子&#xff1a; 定义一个Stack.h: 这里放声明 #include<iostream>using namespace std;template<class T> T Add(const T& left, const T& right);定义一个Stack.cpp, 这里面放定义: template<class T> T Add(const T&a…

虚拟机VMware Workstation Pro安装配置使用服务器系统ubuntu-22.04.3-live-server-amd64.iso

虚拟机里安装ubuntu-23.04-beta-desktop-amd64开启SSH(换源和备份)配置中文以及中文输入法等 ​一、获取Ubuntu服务器版 获取Ubuntu服务器版 二、配置虚拟机 选择Custom(advanced)&#xff1a; 选择Workstation 17.x: 选择“I will install the operating system later.”…

HashMap源码解析_jdk1.8(二)

HashMap源码解析_jdk1.8&#xff08;二&#xff09;构造函数put方法resize扩容方法 HashMap源码解析_jdk1.8&#xff08;二&#xff09; 构造函数 HashMap提供了如下几个构造函数&#xff1a; /*** 构造一个具有指定初始容量和负载因子的空HashMap.** param initialCapacit…

Android SystemUI setSystemUiVisibility()参数Flag详解

1&#xff1a;相关 Flag 特性详解 View.SYSTEM_UI_FLAG_LAYOUT_STABLE&#xff1a; 特性&#xff1a;默认状态下 &#xff0c;稳定页面显示布局。 当 StatusBar和 NavigationBar动态显示和隐藏时&#xff0c;系统为 fitSystemWindow“true”的view设置的padding大小都不会变化…

《机器学习实战》学习记录-ch4

4.1 线性回归 import numpy as np import matplotlib.pyplot as plt import pandas as pdX 2 * np.random.rand(100,1) # 生成 [0,1) 之间的数据 y 4 3 * X np.random.randn(100,1) # 生成一组正态分布的数据&#xff0c; 高斯噪声X_b np.c_[np.ones((100,1)), X] X_b[:5…

h265格式怎么转换mp4?一分钟教会你!

H265是一种视频编码标准&#xff0c;也被称为HEVC&#xff08;High Efficiency Video Coding&#xff09;。由联合视频组&#xff08;JVET&#xff09;开发的&#xff0c;是一种专为高清视频设计的压缩标准。播放H265文件&#xff0c;通常需要使用支持H265解码的播放器&#xf…

Docker 网络与Cgroup资源限制

目录 一、Docker 网络实现原理&#xff1a; 二、Docker 的网络模式&#xff1a; 三、网络模式详解&#xff1a; 1. host模式&#xff1a; 2. container模式&#xff1a; 3. none模式: 4&#xff0e;bridge模式: 5&#xff0e;自定义网络: 四、Cgroup资源控制&#xff1a; …