• 0414复利计算结对再升级


    1.这次主要把界面弄好看点,更加方便,不再杂乱无章。

    2.每次输入完数据后,会清除上一次的记录,但会保存到 投资记录 ,可以点击查看。

    搭档:曾昱霖

    博客园地址:http://www.cnblogs.com/Benjen/

    package ch;
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Font;
    import java.awt.GridLayout;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.text.NumberFormat;
    
    import javax.swing.AbstractButton;
    import javax.swing.BorderFactory;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JRadioButtonMenuItem;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    
    public class fuli  extends JFrame
    {
    private JLabel a1;
    private JLabel a2;
    private JLabel a3;
    private JLabel a4;
    private JTextField b1;
    private JTextField b2;
    private JTextField b3;
    private JTextField b4;
    private JButton c1;
    private JButton c2;
    private JButton c3;
    private JTextArea text;
    private JPanel leftpanel = new JPanel();
    private AbstractButton leftpanelr= new JRadioButtonMenuItem("每年添加一定的本金");
    
    public double[] a = new double[100];
    public double[] b = new double[100];
    int input = 0;
    public fuli()
    {
    creatComponents()    ;
    layoutComponents();
    registerHandlers();
    setTitle("复利存款计算器");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
    }
    
     
    
    private void  creatComponents()    
    {
    a1=new JLabel("本  金 ");
    a1.setFont(new Font("宋体",Font.BOLD,18));
    a2=new JLabel("年利率 ");
    a2.setFont(new Font("宋体",Font.BOLD,18));
    a3=new JLabel("年  数 ");
    a3.setFont(new Font("宋体",Font.BOLD,18));
    a4=new JLabel("期望值 ");
    a4.setFont(new Font("宋体",Font.BOLD,18));
    b1=new JTextField(10);
    b2=new JTextField(10);
    b3=new JTextField(10);
    b4=new JTextField(10);
    c1=new JButton("计算");
    c1.setFont(new Font("宋体",Font.BOLD,15));
    c2=new JButton("清除");
    c2.setFont(new Font("宋体",Font.BOLD,15));
    c3=new JButton("投资记录");
    c3.setFont(new Font("宋体",Font.BOLD,15));
    
    
    text=new JTextArea();
    }
    private void layoutComponents()
    { 
    setLayout(new FlowLayout());
    JPanel panel1=new JPanel();
    panel1.add(a1);
    panel1.add(b1);
    JPanel panel2=new JPanel();
    panel2.add(a2);
    panel2.add(b2);
    JPanel panel3=new JPanel();
    panel3.add(a3);
    panel3.add(b3);
    JPanel panel6=new JPanel();
    panel6.add(a4);
    panel6.add(b4);
    JPanel panel4=new JPanel();
    panel4.add(c1);
    panel4.add(c2);
    panel4.add(c3);
    
    JPanel  leftpanel=new JPanel(new GridLayout(5,2));
    leftpanel.add(panel1);
    leftpanel.add(panel2);
    leftpanel.add(panel3);
    leftpanel.add(panel6);
    leftpanel.add(panel4);
    JScrollPane panel5=new JScrollPane(text);
    panel5.setPreferredSize(new Dimension(300,200));
    add(leftpanel);
    add(panel5);
    }
    
    private void registerHandlers() {
        c1ActionEventHander hander1 = new c1ActionEventHander();
        c1.addActionListener(hander1);
        c2ActionEventHander hander2 = new c2ActionEventHander();
        c2.addActionListener(hander2);
        c3ActionEventHander hander4 = new c3ActionEventHander();
        c3.addActionListener(hander4);
    }
    
    
    private class c1ActionEventHander implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            double principal = 0;
            double amount = 0;
            double rate = 0;
            int n = 0;
            NumberFormat currencyformatter = NumberFormat.getCurrencyInstance(); // 字符串转化为数字
            String output = "年" + "/" + "复利存款";
            int year = 1;
            int result;
    
            if (b1.getText().equals("") && b2.getText() != null
                    && b3.getText() != null && b4.getText() != null) { // 计算本金
    
                try {
                    rate = Double.parseDouble(b2.getText());
                    n = Integer.parseInt(b3.getText());
                    amount = Double.parseDouble(b4.getText());
                
                principal = 0;
                while (year <= n) {
                    principal = amount / (Math.pow(1 + rate, year));
                    year = year + 1;
                }
    
                output = "本金" + currencyformatter.format(principal) + "
    ";
                text.setText(output);
                }
                catch (Exception e2) {
                    // TODO: handle exception
                }
            }
    
            else if (b2.getText().equals("") && b1.getText() != null
                    && b3.getText() != null && b4.getText() != null) // 求利率
            {
                try {
                    principal = Double.parseDouble(b1.getText()); // b1本金
                    n = Integer.parseInt(b3.getText()); // b3年份
                    amount = Double.parseDouble(b4.getText()); // b4期望值
                } catch (Exception e2) {
                    // TODO: handle exception
                }
                rate = java.lang.StrictMath.pow(amount / principal, 1.0 / n) - 1;
                output = "利率" + rate + "
    ";
                text.setText(output);
            }
    
            else if (b3.getText().equals("") && b1.getText() != null
                    && b2.getText() != null && b4.getText() != null) // 求年份
            {
                try {
                    principal = Double.parseDouble(b1.getText()); // b1本金
                    amount = Double.parseDouble(b4.getText()); // b4期望值
                    rate = Double.parseDouble(b2.getText());
                } catch (Exception e2) {
                    // TODO: handle exception
                }
    
                double year2 = Math.log(amount / principal) / Math.log(1 + rate);
                output = "至少年数" + year2 + "
    ";
                text.setText(output);
            }
    
            else if (b4.getText().equals("") && b1.getText() != null
                    && b3.getText() != null && b2.getText() != null) // 求期望值
            {
                try {
                    rate = Double.parseDouble(b2.getText());
                    n = Integer.parseInt(b3.getText());
                    principal = Double.parseDouble(b1.getText()); // b1本金
                } catch (Exception e2) {
                    // TODO: handle exception
                }
    
                double tempprincipal = principal;
                result = JOptionPane.showConfirmDialog(null, "是否每年进行投资?");
                if (result == JOptionPane.YES_OPTION) {
                    amount=CalculateA(year,n,principal,rate,tempprincipal);
                    System.out.println("CalculateA(year,n,principal,rate,tempprincipal)"+year+n+principal+rate+tempprincipal);
                    output += String.valueOf(year) + "			"
                            + currencyformatter.format(amount) + "
    ";
                } else {
                    while (year <= n) {
                        amount = principal * Math.pow(1 + rate, year);
                        output += String.valueOf(year) + "			"
                                + currencyformatter.format(amount) + "
    ";
                        year = year + 1;
                    }
                }
    
                text.setText(output);
                int Isinfo = JOptionPane.showConfirmDialog(null, "是否投资?");
                if (Isinfo == JOptionPane.YES_OPTION) {
                    a[input] = principal;
    
                    b[input] = amount;
                    input += 1;
                }
            } else if (b1.getText() != null && b4.getText() != null
                    && b3.getText() != null && b2.getText() != null) {
                JOptionPane.showMessageDialog(null, "请删除一个数据");
            } else {
                JOptionPane.showMessageDialog(null, "请增加数据");
            }
        }
        
        
        public double CalculateA(int years2,int n2,double principal2,double rate2,double tempprincipal2){
            double amount2 = 0;
            while (years2 <= n2) {
                amount2 = principal2 * Math.pow(1 + rate2, years2)
                        + tempprincipal2;
                
                years2 = years2 + 1;
            }
            return amount2;
        }
        }
    
    public double CalculateA1(int years2,int n2,double principal2,double rate2,double tempprincipal2){
        double amount2 = 0;
        while (years2 <= n2) {
            amount2 = principal2 * Math.pow(1 + rate2, years2)
                    + tempprincipal2;
            years2 = years2 + 1;
        }
        return amount2;
    }
    
    private double CalculateA(int year, int n, double principal, double rate,
            double tempprincipal) {
        // TODO 自动生成的方法存根
        return 0;
    }
    
    private class c2ActionEventHander implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            b1.setText("");
            b2.setText("");
            b3.setText("");
            text.setText("");
        }
    }
    
    public static void main(String[] args)
    {
        fuli frame=new fuli();
        frame.setVisible(true);
         int Windowswidth = 500;
         int Windowsheight = 400;
         int width = Toolkit.getDefaultToolkit().getScreenSize().width;
         int height = Toolkit.getDefaultToolkit().getScreenSize().height;
      frame.setResizable(false);
      frame.setLocation((width - Windowswidth) / 2,
              (height - Windowsheight) / 2); // 窗口居中
    }
    private class c3ActionEventHander implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            String output = "交易记录:存入的本金/获得的收益";
            int i = 0;
            while (a[i] != 0) {
                output = output + "		" + a[i] + "/" + b[i] + "
    ";
                i += 1;
            }
            text.setText(output);
        }
    }
    }
    
  • 相关阅读:
    Seminar Schedule
    数学建模之Python操作csv文件
    Pandas之csv文件对列行的相关操作
    Python之文件读写(csv文件,CSV库,Pandas库)
    PATA1028 List Sorting
    19.8.9(全局变量和局部变量的作用域)
    PATA1012The Best Rank(25分)
    DEV-gridview导出Excel
    WPF文本换行
    下拉框--可多选
  • 原文地址:https://www.cnblogs.com/mafu0420/p/5392721.html
Copyright © 2020-2023  润新知