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) + "\t\t\t"
149 + currencyformatter.format(amount) + "\n";
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) + "\n";
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 + "\n";
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 + "\n";
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) + "\t\t\t"
216 + currencyformatter.format(amount) + "\n";
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) + "\t\t\t"
265 + currencyformatter.format(amount) + "\n";
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) + "\n";
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 + "\n";
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 + "\n";
318 text.setText(output);
319 }
320 else
321 {
322 output = "刚好" + n + "年\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) + "\t\t\t"
336 + currencyformatter.format(amount) + "\n";
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 }