复利计算器(2)

一、实验任务

实验1:

(1)、计算:本金为100万,利率或者投资回报率为3%,投资年限为30年,那么,30年后所获得的利息收入:按复利计算公式来计算就是:1,000,000×(1+3%)^30

实验2:

(1)、如果按照单利计算,本息又是多少呢?

(2)、假如30年之后要筹措到300万元的养老金,平均的年回报率是3%,那么,现在必须投入的本金是多少呢?

(3)、完成23功能,并成功PUSH到github上。

实验3:

(1)、利率这么低,复利计算收益都这么厉害了,如果拿100万元去买年报酬率10%的股票,若一切顺利,过多长时间,100万元就变成200万元呢? 

(2)、如果我希望在十年内将100万元变成200万元,应该找到报酬率在多少的投资工具来帮助我达成目标?如果想在5年后本金翻倍,报酬率就应至少为多少才行呢?

(3)、统计前两次实验提交的代码数据:所用语言,代码行,工作量(人时)。

(4)、估计完成4、5所需代码行与工作量,并做记录。

 二、效果图

 

三、写复利计算器实验三前准备工作

1.复利计算器代码量和工作量进行预计

2.思考实现思路:这次的任务跟之前的实验任务的实现是一样的,同样是通过异步请求实现,只是改变相对应得计算公式

3.考虑代码的健壮性:如果输入不合法或者输入为空,应当给予弹框提示

4.美化界面

 

           复利计算器代码数据统计表

实验 语言 预计代码行 实际代码行  预计工作量(人时)

实际工作量(人时)

           

第一次

java   300行 约150     2h

                          4h

第二次

java

  50行 约50     3h 4h

第三次

java 

200行 

约 200

3h

                         1.5h

java

550

约400

8h

9.5

 
四、问题与解决
1. 问题:如何判断输入的数据不合法以及输入的数据为空
 解决:判断输入数据为空的时候,需要在提交数据之前判断,本来是想独立写个js方法,可是在按“提交”按钮的时候,同时执行判断和计算的方法,返回数据是错误的,所以我将判断的方法中的代码写在异步请求中,但是这样做代码的重用率比较高,也许会有更好地解决方案~~
function onBenjin()
{	
if($("#annualRate").val().trim()=="")
{
alert("请输入年利率");
return false;
}

if($("#year").val().trim()=="")
{
alert("请输入年限");
return false;
}
if($("#compoundAmount").val().trim()=="")
{
alert("请输入复利金额!");
return false;
}

	$.ajax({
		url:"<%=path%>/Calculator/Calculator2",
		data: {"a":1,"compoundAmount":$("#compoundAmount").val(),"year": $("#year").val(),"annualRate":$("#annualRate").val()},
		success : function(data) {
			alert("55555555555555");
			document.all.principal.disabled = true;
			$("#principal").val(data);
		}
	});
	
}

  

/*判断只能输入数字  */
function onlyNum(d)
{
if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)||(event.keyCode==8)))
//考虑小键盘上的数字键
{
alert("请输入数字");
event.returnvalue=false;
this.Text=null;
}

  


 
2. 问题:前台输入的数据传不到后台
解决:
(1)由于ajax传递的数据给后台是String类型,但是我在action中将属性设置为double类型,才拿不到值 ,所以只需要将action中设置的“本金”,“年限”等等设置为String类型
(2)用math函数的时候是用double类型的,但是我拿到的参数是String类型,这时候需要用到强转
(3)将后台的数据返回给前台,数据类型应该是String类型,需要将计算得出来的结果是double类型,需要转化为String类型
private String annualRate;// 年利率
public void calculate() throws IOException 
{
if(a!=null&&a.equals("3"))
    {
             annualRate=(StrictMath.pow(Double.parseDouble(compoundAmount)/Double.parseDouble(principal),1.0/ Double.parseDouble(year))-1)+""; PrintWriter writer = respond.getWriter(); writer.write(annualRate+"");     } }

3.  问题:在开发“等额本息”功能的时候,label要将“存入本金”改为“贷款本金”,将“复利金额”改为“等额本息”

解决:label标签在JS和Jquery中使用不能像其他标签一样value获取它的值

//其他标签赋值
//var benjinLabel=$("#benjinLabel").val("贷款本金");
//var fuliLabel=$("#fuliLabel").val("等额本息");
//label标签赋值
$("#benjinLabel").html("贷款本金");
$("#fuliLabel").html("等额本息");

最后发现总是不能改变值,主要是自己粗心同一个JSP页面出现相同的id值

 

 
五、总结
1.善于用百度查找自己需要的内容!!
2.一个小作品是不断在基础上不断完善,一步步来,不要操之过急~
3.该作品在代码上还需要不断优化
 
 
 
 
原文地址:https://www.cnblogs.com/jackeicao/p/5288535.html