复利计算器4

时间:2023-01-09 08:11:48
  1 import java.awt.Color;
  2 import java.awt.Container;
  3 import java.awt.Dimension;
  4 import java.awt.FlowLayout;
  5 import java.awt.Font;
  6 import java.awt.Graphics;
  7 import java.awt.GridLayout;
  8 import java.awt.Image;
  9 import java.awt.Toolkit;
 10 import java.awt.event.ActionEvent;
 11 import java.awt.event.ActionListener;
 12 import java.text.NumberFormat;
 13 
 14 import javax.swing.ImageIcon;
 15 import javax.swing.JButton;
 16 import javax.swing.JFrame;
 17 import javax.swing.JLabel;
 18 import javax.swing.JOptionPane;
 19 import javax.swing.JPanel;
 20 import javax.swing.JScrollPane;
 21 import javax.swing.JTextArea;
 22 import javax.swing.JTextField;
 23 import javax.swing.border.LineBorder;
 24 
 25 public class Fuli2  extends JFrame
 26 {
 27     private JLabel a1;
 28     private JLabel a2;
 29     private JLabel a3;
 30     private JLabel a4;
 31     private JLabel a5;
 32     private JTextField b1;
 33     private JTextField b2;
 34     private JTextField b3;
 35     private JTextField b4;
 36     private JTextField b5;
 37     private JButton c1;
 38     private JButton c2;
 39     private JButton c3;
 40     private JButton c4;
 41     private JButton c5;
 42     private JButton c6;
 43     private JTextArea text;
 44     public Fuli2()
 45     {
 46         creatComponents()    ;
 47         layoutComponents();
 48         registerHandlers();
 49         setTitle("存款应用程序");
 50         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 51         pack();
 52     }
 53     private void  creatComponents()    
 54     {
 55         a1=new JLabel("本  金 ");
 56         a1.setFont(new Font("宋体",Font.BOLD,18));
 57         a2=new JLabel("年利率 ");
 58         a2.setFont(new Font("宋体",Font.BOLD,18));
 59         a3=new JLabel("年 数 ");
 60         a3.setFont(new Font("宋体",Font.BOLD,18));
 61         a4=new JLabel("本息 ");
 62         a4.setFont(new Font("宋体",Font.BOLD,18));
 63         a5=new JLabel("月利率 ");
 64         a5.setFont(new Font("宋体",Font.BOLD,18));
 65         
 66         
 67         
 68         b1=new JTextField(10);//本金
 69         b2=new JTextField(10);//利率
 70         b3=new JTextField(10);//年数
 71         b4=new JTextField(10);//本息
 72         b5=new JTextField(10);//月利率
 73         c1=new JButton("复利");
 74         c1.setFont(new Font("宋体",Font.BOLD,15));
 75         c3=new JButton("单利");
 76         c3.setFont(new Font("宋体",Font.BOLD,15));
 77         c4=new JButton("定投");
 78         c4.setFont(new Font("宋体",Font.BOLD,15));
 79         c2=new JButton("清除");
 80         c2.setFont(new Font("宋体",Font.BOLD,15));
 81         c5=new JButton("复利存期/利率");
 82         c5.setFont(new Font("宋体",Font.BOLD,15));
 83         c6=new JButton("等额还款");
 84         c6.setFont(new Font("宋体",Font.BOLD,15));
 85         text=new JTextArea();
 86     }
 87     private void layoutComponents()
 88     {
 89         //Container c=this.getContentPane();    
 90         setLayout(new FlowLayout());
 91         JPanel panel1=new JPanel();
 92         panel1.add(a1);
 93         panel1.add(b1);
 94         
 95         JPanel panel2=new JPanel();
 96         panel2.add(a2);
 97         panel2.add(b2);
 98         panel2.add(a5);
 99         panel2.add(b5);
100         
101         JPanel panel3=new JPanel();
102         panel3.add(a3);
103         panel3.add(b3);
104         JPanel panel4=new JPanel();
105         panel4.add(a4);
106         panel4.add(b4);
107         
108         JPanel panel5=new JPanel();
109         panel5.add(c1);
110         panel5.add(c3);
111         panel5.add(c4);
112         panel5.add(c5);
113         panel5.add(c2);
114         panel5.add(c6);
115         JPanel  leftpanel=new JPanel(new GridLayout(6,2));
116         leftpanel.add(panel1);
117         leftpanel.add(panel2);
118         leftpanel.add(panel3);
119         leftpanel.add(panel4);
120         leftpanel.add(panel5);
121         JScrollPane panel6=new JScrollPane(text);
122         panel6.setPreferredSize(new Dimension(250,100));
123         add(leftpanel);
124         add(panel6);
125     }
126     private  void registerHandlers()
127     {
128          c1ActionEventHander hander1=new  c1ActionEventHander();
129          c1.addActionListener(hander1);
130          c2ActionEventHander hander2=new  c2ActionEventHander();
131          c2.addActionListener(hander2);
132     c3ActionEventHander hander3=new  c3ActionEventHander();
133         c3.addActionListener(hander3);
134         c4ActionEventHander hander4=new  c4ActionEventHander();
135         c4.addActionListener(hander4);
136         c5ActionEventHander hander5=new  c5ActionEventHander();
137         c5.addActionListener(hander5);
138         c6ActionEventHander hander6=new  c6ActionEventHander();
139         c6.addActionListener(hander6);
140     }
141     private class c1ActionEventHander implements ActionListener
142     {
143         public void actionPerformed(ActionEvent e)
144         {
145             double principal;
146             double amount;
147             double rate;
148             int n;
149             NumberFormat currencyformatter=NumberFormat.getCurrencyInstance();
150             String output="年"+"/t"+"复利存款"+"/n";
151              double year =1;
152            //  principal=Double.parseDouble(b1.getText());
153              rate=Double.parseDouble(b2.getText()); 
154              n=Integer.parseInt(b3.getText());
155              if(b1.getText().equals(""))//本金
156              {
157                  if (b4.getText().equals(""))
158                  {
159                      JOptionPane.showMessageDialog(null, "请输入本金或者本息");
160                 
161                  }
162                  else{
163                 amount = Double.parseDouble(b4.getText());
164                 principal=0;
165                 while (year <= n) {
166                     principal=amount/(Math.pow(1 + rate, year));
167                     year = year + 1;
168                 }
169                 
170                 output="本金"+currencyformatter.format(principal) + "\n";
171                 text.setText(output);
172             }
173         }
174         else {//本息
175             principal = Double.parseDouble(b1.getText()); // 字符串转化为数字
176             
177             if (b4.getText().equals("")) {
178                 while (year <= n) {
179                     amount = principal * Math.pow(1 + rate, year);
180                     output += String.valueOf(year) + "\t"+ currencyformatter.format(amount) + "\n";
181                     year = year + 1;
182                 }
183 
184                 text.setText(output);
185                 
186             }
187             else{
188                 JOptionPane.showMessageDialog(null, "本金和本息输入一个即可");
189             }
190         }
191         }
192 
193 }
194     private class  c2ActionEventHander implements ActionListener
195     {
196         public void actionPerformed(ActionEvent e)
197         {
198             b1.setText("");
199             b2.setText("");
200             b3.setText("");
201             b4.setText("");
202             text.setText("");
203         }
204     }
205     private class c3ActionEventHander implements ActionListener {
206         public void actionPerformed(ActionEvent e) {
207             double principal;
208             double amount;
209             double rate;
210             int n;
211             NumberFormat currencyformatter = NumberFormat.getCurrencyInstance();
212             String output = "年" + "/" + "单利存款";
213             int year = 1;
214             
215             rate = Double.parseDouble(b2.getText());
216             n = Integer.parseInt(b3.getText());
217             if(b1.getText().equals(""))
218             {
219                 if (b4.getText().equals(""))
220                 {
221                     JOptionPane.showMessageDialog(null, "请输入本金或者本息");
222                     
223                 }
224                 else{
225                     amount = Double.parseDouble(b4.getText());
226                     principal=0;
227                     while (year <= n) {
228                         principal = amount / (1 + rate* year);
229                         year = year + 1;
230                     }
231                     
232                     output="本金"+currencyformatter.format(principal) + "\n";
233                     text.setText(output);
234                 }
235             }
236             else {
237                 principal = Double.parseDouble(b1.getText()); // 字符串转化为数字
238                 
239                 if (b4.getText().equals("")) {
240                     while (year <= n) {
241                         amount = principal * (1 + rate* year);
242                         output += String.valueOf(year) + "\t"
243                                 + currencyformatter.format(amount) + "\n";
244                         year = year + 1;
245                     }
246     
247                     text.setText(output);
248                     }
249                 else{
250                     JOptionPane.showMessageDialog(null, "本金和本息输入一个即可");
251                 }
252             }
253             
254         }
255     }
256     private class c4ActionEventHander implements ActionListener
257     {
258     public void actionPerformed(ActionEvent e)
259     {
260          double principal;
261          double amount;
262          double rate;
263          int n;
264          NumberFormat currencyformatter=NumberFormat.getCurrencyInstance();
265          String output="年"+"/t"+"复利存款"+"/n";
266           double year =1;
267         //  principal=Double.parseDouble(b1.getText());
268           rate=Double.parseDouble(b2.getText()); 
269           n=Integer.parseInt(b3.getText());
270           principal = Double.parseDouble(b1.getText()); // 字符串转化为数字
271           
272           if (b4.getText().equals("")) {
273               while (year <= n) {
274                   amount = principal*(Math.pow(1+ rate, year+1)-1)/rate;
275                   output += String.valueOf(year) + "\t"+ currencyformatter.format(amount) + "\n";
276                   year = year + 1;
277               }
278 
279               text.setText(output);
280               
281           }
282           else{
283               JOptionPane.showMessageDialog(null, "请输入每年定投的金额");
284           }
285         
286     }
287     }
288     private class c5ActionEventHander implements ActionListener//计算年份和利率
289     {
290         public void actionPerformed(ActionEvent e)
291         {
292             double amount;
293             double rate;
294             double principal;
295             String output;
296              NumberFormat currencyformatter = NumberFormat.getCurrencyInstance();
297             amount=Double.parseDouble(b4.getText());
298             principal=Double.parseDouble(b1.getText());
299            
300             if(b3.getText().equals("")){
301                 rate=Double.parseDouble(b2.getText());
302                 double year=(int)((Math.log(amount)/Math.log(1+rate))-(Math.log(principal)/Math.log(1+rate)));;
303                 output="年份"+currencyformatter.format(year) + "\n";
304                 text.setText(output);
305             }
306             else{
307                 if(b2.getText().equals("")){
308                     int year=Integer.parseInt(b3.getText());
309                     rate=((Math.pow(amount/principal, 1.0/year))-1);
310                     output="利率"+currencyformatter.format(rate) + "\n";
311                     text.setText(output);
312                 }
313                 else{
314                     JOptionPane.showMessageDialog(null, "利率和存期输入一个即可");
315                 }
316             }
317             
318         }
319     }
320     private class c6ActionEventHander implements ActionListener
321     {
322         public void actionPerformed(ActionEvent e)
323         {
324             double principal;
325             double amount;
326             double rate;
327             double trate;
328            
329             NumberFormat currencyformatter=NumberFormat.getCurrencyInstance();
330             String output="月"+"/t"+"等额还款"+"/n";
331             
332            //  principal=Double.parseDouble(b1.getText());
333              rate=Double.parseDouble(b5.getText()); 
334              double year=Integer.parseInt(b3.getText());
335              principal = Double.parseDouble(b1.getText()); // 字符串转化为数字
336                  if (b4.getText().equals("")) {
337                     
338                          rate=rate/12;
339                          trate=rate+(double)1;
340                          for(int i=1;i<year*12;i++){
341                              trate*=(rate+(double)1);
342                              
343                      }
344                      amount=(principal*trate*rate)/(trate-(double)1);
345                             output +="每月"+ currencyformatter.format(amount) + "\n";
346                             text.setText(output);
347                  }
348                  else{
349                      JOptionPane.showMessageDialog(null, "请输入贷款金额(本金)");
350                  }
351         }
352     }
353     public static void main(String[] args)
354     {
355          Fuli2 frame=new Fuli2();
356         frame.setVisible(true);
357         frame.setSize(600,450); 
358       frame.setResizable(false);
359     }
360 }