复利计算4

  1 package Fuli;
  2 
  3 
  4 import java.awt.BorderLayout;
  5 import java.awt.Dimension;
  6 import java.awt.FlowLayout;
  7 import java.awt.GridLayout;
  8 import java.awt.Toolkit;
  9 import java.awt.event.ActionEvent;
 10 import java.awt.event.ActionListener;
 11 import java.text.NumberFormat;
 12 
 13 import javax.swing.JButton;
 14 import javax.swing.JFrame;
 15 import javax.swing.JLabel;
 16 import javax.swing.JOptionPane;
 17 import javax.swing.JPanel;
 18 import javax.swing.JRadioButtonMenuItem;
 19 import javax.swing.JScrollPane;
 20 import javax.swing.JTextArea;
 21 import javax.swing.JTextField;
 22 
 23 public class Fuli4 extends JFrame {
 24 
 25     private static final long serialVersionUID = 3347254632537686808L;
 26     private JLabel a1; // 标签
 27     private JLabel a2;
 28     private JLabel a3;
 29     private JLabel a4;
 30     private JTextField b1; // 本金
 31     private JTextField b2; // 利率
 32     private JTextField b3; // 年份
 33     private JTextField b4; // 期望值
 34     private JButton c1;
 35     private JButton c2;
 36     private JButton c3;
 37 
 38     private JTextArea text; // 显示纯文本的多行区域
 39 
 40     private JPanel toolbar = new JPanel();
 41 
 42     private JPanel toolbar2 = new JPanel();
 43     boolean isadd = false;
 44     JRadioButtonMenuItem mrButton = new JRadioButtonMenuItem("每年添加一定的本金");
 45 
 46     public Fuli4() {
 47         setTitle("复利存款应用程序");
 48         creatComponents(); // 创建零件
 49         layoutComponents(); // 设计零件
 50         registerHandlers(); // 鼠标监控
 51         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 52         pack();
 53     }
 54 
 55     private void creatComponents() {
 56         a1 = new JLabel("本 金 ");
 57         a2 = new JLabel("年利率 ");
 58         a3 = new JLabel("年 数 ");
 59         a4 = new JLabel("期望值");
 60         b1 = new JTextField(10);
 61         b2 = new JTextField(10);
 62         b3 = new JTextField(10);
 63         b4 = new JTextField(10);
 64         c1 = new JButton("复利");
 65         c2 = new JButton("清除");
 66         c3 = new JButton("单利");
 67         text = new JTextArea();
 68 
 69     }
 70 
 71     private void layoutComponents() {
 72         setLayout(new FlowLayout());
 73         JPanel panel1 = new JPanel();
 74         panel1.add(a1);
 75         panel1.add(b1);
 76         JPanel panel2 = new JPanel();
 77         panel2.add(a2);
 78         panel2.add(b2);
 79         JPanel panel3 = new JPanel();
 80         panel3.add(a3);
 81         panel3.add(b3);
 82         JPanel panel6 = new JPanel();
 83         panel6.add(a4);
 84         panel6.add(b4);
 85 
 86         JPanel leftpanel = new JPanel(new GridLayout(3, 1));
 87         leftpanel.add(panel1);
 88         leftpanel.add(panel2);
 89         leftpanel.add(panel3);
 90 
 91         leftpanel.add(panel6);
 92         JScrollPane panel5 = new JScrollPane(text);
 93         panel5.setPreferredSize(new Dimension(400, 200));
 94 
 95         toolbar.add(c1);
 96         toolbar.add(c2);
 97         toolbar.add(c3);
 98         toolbar2.add(mrButton);
 99 
100         add(leftpanel);
101         // add(mrButton);
102         add(toolbar2, BorderLayout.NORTH);
103         add(panel5);
104         add(toolbar, BorderLayout.EAST);
105     }
106 
107     private void registerHandlers() {
108         c1ActionEventHander hander1 = new c1ActionEventHander();
109         c1.addActionListener(hander1);
110         c2ActionEventHander hander2 = new c2ActionEventHander();
111         c2.addActionListener(hander2);
112         c3ActionEventHander hander3 = new c3ActionEventHander();
113         c3.addActionListener(hander3);
114         mrButtonActionEventHander hander4 = new mrButtonActionEventHander();
115         mrButton.addActionListener(hander4);
116 
117     }
118 
119     private class c1ActionEventHander implements ActionListener {
120         public void actionPerformed(ActionEvent e) {
121             double principal;
122             double amount;
123             double rate;
124             int n;
125             NumberFormat currencyformatter = NumberFormat.getCurrencyInstance(); // 字符串转化为数字
126             String output = "年" + "/" + "复利存款";
127             // int year = 1;
128             //
129             // // principal = Double.parseDouble(b1.getText()); // b1本金
130             // rate = Double.parseDouble(b2.getText()); // b2利率
131             // n = Integer.parseInt(b3.getText()); // b3年份
132             // amount = Double.parseDouble(b4.getText()); // b4期望值
133             int year = 1;
134             // rate = Double.parseDouble(b2.getText());
135             // n = Integer.parseInt(b3.getText());
136             int result;
137             result = JOptionPane.showConfirmDialog(null, "是否每年添加本金");
138             if (isadd==false) {
139                 if (b4.getText().equals("") && b1.getText() != null
140                         && b3.getText() != null && b2.getText() != null) // 求期望值
141                 {
142                     rate = Double.parseDouble(b2.getText());
143                     n = Integer.parseInt(b3.getText());
144                     principal = Double.parseDouble(b1.getText()); // b1本金
145                     double tempprincipal=principal;
146                     while (year <= n) {
147                         amount = principal * Math.pow(1 + rate, year)+tempprincipal;
148                         output += String.valueOf(year) + "			"
149                                 + currencyformatter.format(amount) + "
";
150                         year = year + 1;
151                     }
152 
153                     text.setText(output);
154                 }
155                 else if(b1.getText() != null&&b4.getText()!=null
156                         && b3.getText() != null && b2.getText() != null){
157                     JOptionPane.showMessageDialog(null, "请删除一个数据");
158                 }
159 
160             } 
161             else {
162                 if (b1.getText().equals("") && b2.getText() != null
163                         && b3.getText() != null && b4.getText() != null) {
164 
165                     rate = Double.parseDouble(b2.getText());
166                     n = Integer.parseInt(b3.getText());
167                     amount = Double.parseDouble(b4.getText());
168                     principal = 0;
169                     while (year <= n) {
170                         principal = amount / (Math.pow(1 + rate, year));
171                         year = year + 1;
172                     }
173 
174                     output = "本金" + currencyformatter.format(principal) + "
";
175                     text.setText(output);
176 
177                 }
178 
179                 else if (b2.getText().equals("") && b1.getText() != null
180                         && b3.getText() != null && b4.getText() != null) // 求利率
181                 {
182                     principal = Double.parseDouble(b1.getText()); // b1本金
183                     rate = 0;
184                     n = Integer.parseInt(b3.getText()); // b3年份
185                     amount = Double.parseDouble(b4.getText()); // b4期望值
186                     rate = java.lang.StrictMath
187                             .pow(amount / principal, 1.0 / n) - 1;
188                     output = "利率" + rate + "
";
189                     text.setText(output);
190                 }
191 
192                 else if (b3.getText().equals("") && b1.getText() != null
193                         && b2.getText() != null && b4.getText() != null) // 求年份
194                 {
195                     principal = Double.parseDouble(b1.getText()); // b1本金
196                     amount = Double.parseDouble(b4.getText()); // b4期望值
197                     rate = Double.parseDouble(b2.getText());
198                     int n2 = 1;
199                     while (principal < amount) {
200                         principal = principal * Math.pow(1 + rate, n2);
201                         n2 += 1;
202                     }
203                     output = "至少年数" + n2 + "
";
204                     text.setText(output);
205                 }
206 
207                 else if (b4.getText().equals("") && b1.getText() != null
208                         && b3.getText() != null && b2.getText() != null) // 求期望值
209                 {
210                     rate = Double.parseDouble(b2.getText());
211                     n = Integer.parseInt(b3.getText());
212                     principal = Double.parseDouble(b1.getText()); // b1本金
213                     while (year <= n) {
214                         amount = principal * Math.pow(1 + rate, year);
215                         output += String.valueOf(year) + "			"
216                                 + currencyformatter.format(amount) + "
";
217                         year = year + 1;
218                     }
219 
220                     text.setText(output);
221                 }
222                 else if(b1.getText() != null&&b4.getText()!=null
223                         && b3.getText() != null && b2.getText() != null){
224                     JOptionPane.showMessageDialog(null, "请删除一个数据");
225                 }
226                 else {
227                     JOptionPane.showMessageDialog(null, "请增加数据");
228                 }
229             }
230         }
231 
232     }
233 
234     private class c2ActionEventHander implements ActionListener {
235         public void actionPerformed(ActionEvent e) {
236             b1.setText("");
237             b2.setText("");
238             b3.setText("");
239             text.setText("");
240         }
241     }
242 
243     private class c3ActionEventHander implements ActionListener {
244         public void actionPerformed(ActionEvent e) {
245             double principal;
246             double amount;
247             double rate;
248             int n;
249             NumberFormat currencyformatter = NumberFormat.getCurrencyInstance();
250             String output = "年" + "/" + "单利存款";
251             int year = 1;
252             int result;
253             result = JOptionPane.showConfirmDialog(null, "是否每年添加本金");
254             if (result == JOptionPane.YES_OPTION) {
255                 if (b4.getText().equals("") && b1.getText() != null
256                         && b3.getText() != null && b2.getText() != null) // 求期望值
257                 {
258                     rate = Double.parseDouble(b2.getText());
259                     n = Integer.parseInt(b3.getText());
260                     principal = Double.parseDouble(b1.getText()); // b1本金
261                     double tempprincipal=principal;
262                     while (year <= n) {
263                         amount = principal * (1 + rate * year)+tempprincipal;
264                         output += String.valueOf(year) + "			"
265                                 + currencyformatter.format(amount) + "
";
266                         year = year + 1;
267                     }
268 
269                     text.setText(output);
270                 }
271                 else if(b1.getText() != null&&b4.getText()!=null
272                         && b3.getText() != null && b2.getText() != null){
273                     JOptionPane.showMessageDialog(null, "请删除一个数据");
274                 }
275 
276             } 
277             else {
278                 if (b1.getText().equals("") && b2.getText() != null
279                         && b3.getText() != null && b4.getText() != null) {       //求本金
280 
281                     rate = Double.parseDouble(b2.getText());
282                     n = Integer.parseInt(b3.getText());
283                     amount = Double.parseDouble(b4.getText());
284                     principal = 0;
285                     while (year <= n) {
286                         principal = amount / (1 + rate * year);
287                         year = year + 1;
288                     }
289 
290                     output = "本金" + currencyformatter.format(principal) + "
";
291                     text.setText(output);
292                 }
293 
294                 else if (b2.getText().equals("") && b1.getText() != null
295                         && b3.getText() != null && b4.getText() != null) // 求利率
296                 {
297                     principal = Double.parseDouble(b1.getText()); // b1本金
298                     rate = 0;
299                     n = Integer.parseInt(b3.getText()); // b3年份
300                     amount = Double.parseDouble(b4.getText()); // b4期望值
301                     rate = (amount/principal-1)/n;
302                     output = "利率" + rate + "
";
303                     text.setText(output);
304                 }
305 
306                 else if (b3.getText().equals("") && b1.getText() != null
307                         && b2.getText() != null && b4.getText() != null) // 求年份
308                 {
309                     principal = Double.parseDouble(b1.getText()); // b1本金
310                     amount = Double.parseDouble(b4.getText()); // b4期望值
311                     rate = Double.parseDouble(b2.getText());
312                     double n2=(amount/principal-1)/rate;
313                     double n3=n2;
314                     n=(int) n2;
315                     if(n3-n>0){
316                         n+=1;
317                     output = "至少年数" + n + "
";
318                     text.setText(output);
319                     }
320                     else
321                     {
322                         output = "刚好" + n + "年
";
323                         text.setText(output);
324                     }
325                 }
326 
327                 else if (b4.getText().equals("") && b1.getText() != null
328                         && b3.getText() != null && b2.getText() != null) // 求期望值
329                 {
330                     rate = Double.parseDouble(b2.getText());
331                     n = Integer.parseInt(b3.getText());
332                     principal = Double.parseDouble(b1.getText()); // b1本金
333                     while (year <= n) {
334                         amount = principal * (1 + rate * year);
335                         output += String.valueOf(year) + "			"
336                                 + currencyformatter.format(amount) + "
";
337                         year = year + 1;
338                     }
339 
340                     text.setText(output);
341                 }
342                 else if(b1.getText() != null&&b4.getText()!=null
343                         && b3.getText() != null && b2.getText() != null){
344                     JOptionPane.showMessageDialog(null, "请删除一个数据");
345                 }
346                 else {
347                     JOptionPane.showMessageDialog(null, "请增加数据");
348                 }
349             }
350 
351         }
352     }
353 
354     private class mrButtonActionEventHander implements ActionListener {
355         public void actionPerformed(ActionEvent e) {
356             if (isadd == false) {
357                 isadd = true;
358             }
359             if (isadd == true) {
360                 isadd = false;
361             }
362 
363         }
364     }
365 
366     public static void main(String[] args) {
367 
368         int Windowswidth = 500;
369         int Windowsheight = 410;
370         Fuli4 frame = new Fuli4();
371         frame.setVisible(true);
372         frame.setSize(Windowswidth, Windowsheight);
373         frame.setResizable(false);
374         int width = Toolkit.getDefaultToolkit().getScreenSize().width;
375         int height = Toolkit.getDefaultToolkit().getScreenSize().height;
376         frame.setLocation((width - Windowswidth) / 2,
377                 (height - Windowsheight) / 2); // 窗口居中
378     }
379 }
原文地址:https://www.cnblogs.com/15linzhijie/p/5290811.html