zoukankan      html  css  js  c++  java
  • 复利计算器(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代码的方法,待这个小项目做完之后,请教下老师或者其他大神自己写的代码需要在哪里优化...

  • 相关阅读:
    【Nginx】ngx_event_core_module模块
    ELMAH--Using HTTP Modules and Handlers to Create Pluggable ASP.NET Components 77 out of 90 rated th
    nyist oj 214 单调递增子序列(二) (动态规划经典)
    java 入门书籍(java7)
    ARCGIS将WGS84坐标投影到高斯平面
    【linux】linux下对java程序生成dump文件,并使用IBM Heap Analyzer进行分析,查找定位内存泄漏的问题代码
    【springboot】【socket】spring boot整合socket,实现服务器端两种消息推送
    【linux】linux修改open file 大小
    【docker】docker限制日志文件大小的方法+查看日志文件的方法
    【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志
  • 原文地址:https://www.cnblogs.com/jackeicao/p/5359945.html
Copyright © 2011-2022 走看看