• 0405复利5.0震撼来袭


    前注:

    结对同伴的学号:201406114205

    姓名:陈嘉慧

    博客地址:http://www.cnblogs.com/hui1005039632/

    一、项目简介

    项目名称:复利计算软件

        5.0

    版本类型:java

    使用工具:eclipse+swing插件

    主要功能:复利单利的计算、贷款的计算以及投资的计算三大功能

        :本代码仅作为学习交流用途,更多功能及后续开发请关注本博客园

     二、新的功能需求

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

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

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

    、设计

           在久功能的基础上加入一个新的类,创建新的界面

     

    、估算。

            估计用时:3h

            估计代码行:70

            实际用时:5h

            实际代码行:250行

    五、任务分配

        陈嘉慧这次的主要任务:1、设计界面,将新的投资界面设计出来

                                      2、查阅相关资料,提出需求,包括需要的数据个数及公式

                                      3、复审代码,包括风格规范和代码设计规范,让代码更加简明易读无二义性

        我这次做的主要任务:1、将投资界面用代码尽可能地实现出来

                                    2、检阅代码,进行单元测试,尽可能地减少bug

    六、源代码主要功能介绍

    private void CreateWindows()   //创建窗体

    private void CreateComponent()   //创建窗口的零件

    private void LayoutComponent()   //设计窗口

    private void MouseLinsten()                               //鼠标 监控

    public void InitjtextArea()             //初始化文本区域框

     

    public void ReadFile(){
            File file1=new File("principal.txt");
            if(file1.exists()){
                
                try {
                                       //文件读取三流不能少
                    FileInputStream fis=new FileInputStream(file1);
                    InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
                    BufferedReader br=new BufferedReader(isr);
                    
                    String line;
                    String outup="本金"+"/"+"期限"+"/"+"期末价值"+"
    ";
                    while((line=br.readLine())!=null){
                        //System.out.println(line);
                        outup=outup+line;
                    }
                    jtextArea.setText(outup);
                                  //先创建的后关闭,后创建的先关闭
                    br.close();
                    isr.close();
                    fis.close();
                } catch (UnsupportedEncodingException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                } catch (FileNotFoundException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }
                
            }
        }
        
        
        
        public void WriteFile(){
            File newfile=new File("principal.txt");
            FileOutputStream fos;
            try {
    
                             //文件写入三流,不可少
                fos = new FileOutputStream(newfile);
                OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
                BufferedWriter bw=new BufferedWriter(osw);
                for(int i=0;i<input;i++){
                     bw.write(Pricinal[i]+"
    ");
                }
                bw.close();
                osw.close();
                fos.close();
            } catch (FileNotFoundException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            
        }

     

     

    七、Junit测试减少bug而修改的代码

    源代码:

    private class C2Action implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                
                b1.setText("");
                b2.setText("");
                b3.setText("");
                b6.setText("");
                InitjtextArea();
                
            }
        }

     

    捕捉到空指针异常,以下是改进的代码:

    private class C2Action implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                try {
                    b1.setText("");
                    b2.setText("");
                    b3.setText("");
                    b6.setText("");
                } catch (NullPointerException e2) {
                    // TODO: handle exception
                }
                InitjtextArea();
                
            }
        }

    源代码:

        private class C1Action implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                double principal = 0;         //b1
                double amount = 0;            //b3
                double rate = 0;              //b6
                double time=0;                //b2
                if(b3.getText().equals("") && b1.getText() != null
                        && b6.getText() != null && b2.getText() != null)
                {
                   
                        rate = Double.parseDouble(b6.getText());
                        principal = Double.parseDouble(b1.getText());
                        time = Double.parseDouble(b2.getText());
                        amount=principal*(1+rate);
                        b3.setText(""+amount);
                        Amount[input]=amount;
                        Day[input]=time;
                        Pricinal[input]=principal;
                        input+=1;
                }
                else if(b3.getText()!=null && b1.getText() != null
                        && b6.getText() != null && b2.getText() != null)
                {
                    JOptionPane.showMessageDialog(null, "请删除期末价值");
                }
                else {
                    JOptionPane.showMessageDialog(null, "请输入数据");
                }
            }
        }

    捕捉到空指针异常。以下是改进的代码

     

        private class C1Action implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                double principal = 0;         //b1
                double amount = 0;            //b3
                double rate = 0;              //b6
                double time=0;                //b2
                if(b3.getText().equals("") && b1.getText() != null
                        && b6.getText() != null && b2.getText() != null)
                {
                    try {
                        rate = Double.parseDouble(b6.getText());
                        principal = Double.parseDouble(b1.getText());
                        time = Double.parseDouble(b2.getText());
                    } catch (Exception e2) {
                        // TODO: handle exception
                        rate=0;
                        principal=0;
                        time=0;
                    }
                    
                    
                    amount=principal*(1+rate);
                    b3.setText(""+amount);
                    Amount[input]=amount;
                    Day[input]=time;
                    Pricinal[input]=principal;
                    input+=1;
                }
                else if(b3.getText()!=null && b1.getText() != null
                        && b6.getText() != null && b2.getText() != null)
                {
                    JOptionPane.showMessageDialog(null, "请删除期末价值");
                }
                else {
                    JOptionPane.showMessageDialog(null, "请输入数据");
                }
            }
        }

     

    这样即使误输入也能输出一个为0的结果。

    八、主界面及运行结果截图

    这是主界面

     

     

    这是投资模块界

     

     

    这三张是运行结果截图

     

     

     

    九、总结

    1、代码规范使读起来节省很多时间

    2、结对合作由于有另一个队友有所要求,不像之前的任意式,能够提高代码的质量

     

     

    十、资源

    github:https://github.com/hellolaona/Fuli5.0

     

  • 相关阅读:
    常用SQL语句
    H5内嵌原生app
    github 从一个仓库换到另一个仓库
    vue使用install函数把组件做成插件方便全局调用
    git 支持tree命令
    vue---vue2.x自定义plugin,给vue添加全局方法,原型上增加全局方法
    vue 生命周期函数
    登录拦截设置白名单-坑
    vue
    vue实现滚动条滚到相应高度触发动画的操作
  • 原文地址:https://www.cnblogs.com/15linzhijie/p/5353048.html
Copyright © 2020-2023  润新知