• 复利计算器(3)——数据库


    由于这星期我生病请假回家,所以没办法和我的同伴进行结对开发,而我只在自己做的项目上完善前端数据校验还有数据库存储,由于在用hibernate进行开发时候被卡住了,问题一直解决不了,所以任务并不能如期完成,所以该篇博客待完善!

    一、要求

      即要追求利益,又要面对不可预知的金融投资风险, “不能把鸡蛋放在同一个篮子里”,所以有必要进行组合投资。

         通过上述计算与对比,可以帮助客户进行投资决策。 

         客户:那么能否帮我记录下一笔一笔不同类型的投资,并动态显示资金现值呢?

     

    二、完善数据校验

    1.实现过程及问题

    一开始前端数据校验准备用ascii码值进行校验,用了onblue()、onclick()等js方法,但是总是会出现各种各样的问题,这种校验方式非常麻烦,比如限制只能输入数字且只能输入小数点后两位 ,代码如下(改代码只能限制输入数字,但是不能限制保留几位小数)

    function only_Point_zhengNumber() {          
                if (!((event.keyCode >= 48 && event.keyCode <= 57) || event.keyCode == 46||event.keyCode ==8))
                  { 
                  alert("请输入正整数");
                   $("#year").val("");
                   event.returnValue = false;
                   }
            }
            
    

      最后决定用正则表达式,需要的时候直接到网上去找,而且能同时实现多种限制,点击“计算”,如果不符合要就就会弹出提示框,代码如下(其他的功能实现相似,不一一列举)

    //计算本金
    function onBenjin()
    {	
    var r=/^(0\.(0[1-9]{1}|[1-9]\d?)|1(\.0{1,2})?)$/ //年利率:只能输入0-1的小数,保留小数后两位
    var t=/^-?\d+\.?\d{0,2}$/; //复利金额:只能输入两位小数
    var s=/^[0-9]*[1-9][0-9]*$/;//年限:只能输入正整数
    if($("#annualRate").val().trim()=="")
    {
    alert("请输入年利率,年利率不能为空!");
    return false;
    }
    if(r.test(annualRate.value)!=true && $("#annualRate").val().trim()!="")
    {
    alert("请在年利率输入框输入0-1(保留两位小数)!");
    return false;
    }
    if($("#year").val().trim()=="")
    {
    alert("请输入年限,年限不能为空!");
    return false;
    }
    if(s.test(year.value)!=true && $("#year").val().trim()!="")
    {
    alert("请在年限输入框输入正整数!");
    return false;
    }
    if($("#compoundAmount").val().trim()=="")
    {
    alert("请输入复利金额,复利金额不能为空!");
    return false;
    }
    if(t.test(compoundAmount.value)!=true&&$("#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) {
    		var data= eval_r('(' + data +')');
    			document.all.principal.disabled = true;
    			$("#principal").val(data);
    		}
    	});
    	
    }
    

    2.效果展示

    年利率限制只能输入0.01-1.00的数值,所以当超过该数值,就会弹出提示框

    三、存储数据库

    1.设计数据库,如下图

    2.实现过程以及问题:弄了一整天,数据总是存不进数据库,页面经常出现下面的问题,后来通过打断点,知道在映射文件出现了问题(细节问题)和hibernate的jar包出现问题

    Data.hbm.xml映射表的小细节修改后以及导入新的hibernate的jar包,数据库就存入对应的数据

    3.代码

    action:

    public void calculate() throws IOException 
    
    {   
    	showDataModel s=new showDataModel();
    	showDataService Service=new showDataServiceImpl();
    	if(a!=null&&a.equals("1"))
    	{
    			principal= (Double.parseDouble(compoundAmount)/ (Math.pow((1 + Double.parseDouble(annualRate)), Double.parseDouble(year))))+"";
    			PrintWriter writer = respond.getWriter();
    			writer.write(principal+"");
    			System.out.println(principal);
    			s.setInvestmentType("本金计算");
    			s.setRevenueType("存入本金");
    			s.setData(principal);
    			Service.add(s);
    			
    	}
    

      

    serviceImpl:

    public void add(showDataModel s) {
    		showDataDao dao=new showDataDao();
    		dao.save(s);
    	}
    

    model:

    package com.test.model;
    
    public class showDataModel {
    	private long id;//自增id号
    	private String investmentType;//投资类型
    	private String revenueType;//收益类型
    	private String data;//计算结果
    
    	public long getId() {
    		return id;
    	}
    	public void setId(long id) {
    		this.id = id;
    	}
    	public String getInvestmentType() {
    		return investmentType;
    	}
    	public void setInvestmentType(String investmentType) {
    		this.investmentType = investmentType;
    	}
    	public String getRevenueType() {
    		return revenueType;
    	}
    	public void setRevenueType(String revenueType) {
    		this.revenueType = revenueType;
    	}
    	public String getData() {
    		return data;
    	}
    	public void setData(String data) {
    		this.data = data;
    	}
    }
    

      

    dao:

    public class showDataDao {
    	public void save(showDataModel s)
    	{
    		   Configuration configuration=new Configuration().configure();//单例,管理配置文件
    		    SessionFactory factory=configuration.buildSessionFactory();
    		    Session session=factory.openSession();//session是客户端请求的服务   单例(暂时理解为connection)
    		    //开启事务
    		    Transaction transaction=session.beginTransaction();
    		    session.save(s);
    		    //提交事务
    		    transaction.commit();
    		    session.close();
    	}
    	
    }
    

      

    Data.hbm.xml映射表

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping>
    	<class name="com.test.model.showDataModel" table="t_showdata">
    		<id name="id" column="f_id" type="long">
    		<generator class="increment"/>
    		</id>
    		<property name="investmentType" column="f_investment_type" />
    		<property name="revenueType" column="f_revenue_type"/>
    		<property name="data" column="f_data"/>
        </class>
    	
    </hibernate-mapping>
    

      

    四、显示数据表

    1.实现过程及问题

    问题一:该功能主要是显示之前做过的操作的对应数据存储,通过异步请求初始化界面,将数据库的数据显示出来,但是在实现该功能的时候页面显示json数据乱码,百度之后只需要在后台将编码改为UTF-8就可以

    respond.setContentType("text/html;charset=UTF-8");  
    

      

    问题二:点击“计算”后,数据库里已经更新数据,但是页面上动态显示的还是更新前的数据,只有刷新一次后才显示出新数据。(待解决)

    问题三:点击删除,弹出提示框,用异步请求删除并且刷新页面(待解决)

    2.效果显示

    3.代码

     respond.setContentType("text/html;charset=UTF-8"); 
    

      

    五、总结

    1.分工

    这次由于我生病请假回家一个多星期,沟通不方便,连累了小伙伴,所以这次结对子只能暂时各自做各自的,只能下次再合作,所以也就没有合作时的照片

    小伙伴的博客地址:http://www.cnblogs.com/liangzhilin/p/5359581.html

    2.用时

     预计用时:12小时

     实践用时:10小时

    3.心得

      由于自己只是刚刚学hibernate,想用这个项目来练下手,自己的不熟练以及粗心导致花了比较多的时间,但是功能还未完善,有时候觉得别人一两句话能解决的问题,到我这里来就是要花很多的时间而且未必能解决,自己花的时间总是别人的两倍,但是心急吃不了热豆腐,只有自己不断的训练才能往上爬。

      还有一点,就是觉得自己的在写js代码重复的太多,但是又找不出其他的能优化js代码的方法,待这个小项目做完之后,请教下老师或者其他大神自己写的代码需要在哪里优化...

  • 相关阅读:
    Mac-修改hosts文件(映射IP,取代网络DNS功能)
    iOS-内购及订阅
    Win-Navicat Premium 15 Window安装激活教程(学习研究)
    iOS-KLGenerateSpamCode(记录图片配参)
    iOS-Button 图片与文字位置
    iOS-关于GCD信号量那些事儿
    Mac-MacOS降级(Mac系统降级,系统回退)
    Xcode-一些小问题(配置包路径,配置文件路径。。。)
    Mac-App Store 购买过程中出错 请求超时
    2019 工作总结(APP组)
  • 原文地址:https://www.cnblogs.com/jackeicao/p/5359945.html
Copyright © 2020-2023  润新知