-
Notifications
You must be signed in to change notification settings - Fork 0
/
CalculatorJD.java
315 lines (293 loc) · 10.7 KB
/
CalculatorJD.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CalculatorJD {
public static void main(String args[]) {
MyFrame frame = new MyFrame();
}
}
class MyFrame extends JFrame {
private JPanel c;
private int index = 0;
private static double benjin, lilv, nianxian, zhongzhi, dingtou, huankuan,daikuan;
JLabel l1 = new JLabel("计算类型:");
JLabel l2 = new JLabel("本金(元):");
JLabel l3 = new JLabel("年利率(%):");
JLabel l4 = new JLabel("年限(年):");
JLabel l5 = new JLabel("终值(元):");
JTextField t2 = new JTextField(10);
JTextField t3 = new JTextField(10);
JTextField t4 = new JTextField(10);
JTextField t5 = new JTextField(10);
JButton b1 = new JButton("计算");
String[] selectedText = { "复利计算", "单利计算", "本金计算", "利率计算", "年限计算","月等额还款计算" };
JComboBox c1 = new JComboBox(selectedText);
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
DefaultListModel listModel=new DefaultListModel();
JList resultList=new JList(listModel);
MyFrame() {
this.setSize(320,400);
this.setTitle("复利计算器");
Container c = this.getContentPane();
GridLayout f1 = new GridLayout(6, 2, 0, 5);
GridLayout f2 = new GridLayout(1, 1, 5, 5);
FlowLayout f3 = new FlowLayout(FlowLayout.CENTER, 20,20);
c.setLayout(f3);
p1.setLayout(f1);
p2.setLayout(f2);
p3.setLayout(f2);
p1.add(l1);
p1.add(c1);
p1.add(l2);
p1.add(t2);
p1.add(l3);
p1.add(t3);
p1.add(l4);
p1.add(t4);
p1.add(l5);
p1.add(t5);
p2.add(b1);
p3.add(resultList);
c.add(p1);
c.add(p2);
c.add(p3);
b1.setFont(new Font(null, Font.BOLD, 15));
b1.setForeground(Color.BLACK);
resultList.setVisibleRowCount(5);
c.add(new JScrollPane(resultList));
resultList.setForeground(Color.BLACK);
resultList.setBackground(Color.LIGHT_GRAY);
listModel.addElement( "动态资金现值显示中...");
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
b1.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
if(index == 0){
zhongzhi = fulicalcutor();
t5.setText(Double.toString(zhongzhi));
listModel.addElement("复利计算:"+Double.toString(zhongzhi));
t5.setEnabled(true);
}else if(index == 1){
zhongzhi = danlicalcutor();
t5.setText(Double.toString(zhongzhi));
listModel.addElement("单利计算:"+Double.toString(zhongzhi));
t5.setEnabled(true);
}else if(index == 2){
benjin = benjincalcutor();
t2.setText(Double.toString(benjin));
listModel.addElement("本金计算:"+Double.toString(benjin));
t2.setEnabled(true);
}else if(index == 3){
lilv = lilvcalcutor();
t3.setText(Double.toString(lilv));
listModel.addElement("利率计算:"+Double.toString(lilv));
t3.setEnabled(true);
}else if(index == 4){
nianxian = nianxiancalcutor();
t4.setText(Double.toString(nianxian));
listModel.addElement("年限计算:"+Double.toString(nianxian));
t4.setEnabled(true);
}else if(index == 5){
huankuan = yuehuankuanejisuan();
t5.setText(Double.toString(huankuan));
listModel.addElement("还款计算:"+Double.toString(huankuan));
t5.setEnabled(true);
}
}
});
c1.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if(c1.getSelectedIndex()==0){
index = 0;
change();
clear();
t5.setText("计算所得");
t5.setEnabled(false);
//System.out.println("复利计算");
}else if(c1.getSelectedIndex()==1){
index = 1;
change();
clear();
t5.setText("计算所得");
t5.setEnabled(false);
//System.out.println("单利计算");
}else if(c1.getSelectedIndex()==2){
index = 2;
change01();
clear();
t2.setText("计算所得");
t2.setEnabled(false);
//System.out.println("本金计算");
}else if(c1.getSelectedIndex()==3){
index = 3;
change01();
clear();
t3.setText("计算所得");
t3.setEnabled(false);
//System.out.println("利率计算");
}else if(c1.getSelectedIndex()==4){
index = 4;
change01();
clear();
t4.setText("计算所得");
t4.setEnabled(false);
}else if(c1.getSelectedIndex()==5){
index = 5;
change02();
clear();
t5.setText("计算所得");
t5.setEnabled(false);
}
}
});
}
private void clear() {
t2.setText(null);
t3.setText(null);
t4.setText(null);
t5.setText(null);
t2.setEnabled(true);
t3.setEnabled(true);
t4.setEnabled(true);
t5.setEnabled(true);
}
private void change02() {
l2.setText("贷款金额(元):");
l3.setText("年利率(%):");
l4.setText("还款期限(年):");
l5.setText("月还款额(元):");
}
private void change01() {
l2.setText("本金(元):");
l3.setText("年利率(%):");
l4.setText("年限(年):");
l5.setText("终值(元):");
}
private void change() {
l2.setText("本金(元):");
l3.setText("年利率(%):");
l4.setText("年限(年):");
l5.setText("终值(元):");
}
private double yuehuankuanejisuan() {
try {
daikuan = Double.parseDouble(t2.getText());
lilv = Double.parseDouble(t3.getText());
nianxian = Double.parseDouble(t4.getText());
} catch (Exception e) {
JOptionPane.showMessageDialog(c, "请输入正确的数据");
//System.out.println("请输入数据");
}
return yuehuankuan(daikuan,lilv,nianxian);
}
//月还款额的计算公式
public static double yuehuankuan(double daikuan, double lilv, double nianxian) {
huankuan = daikuan * (lilv/12) * Math.pow( 1 + lilv/12 ,12 * nianxian)/(Math.pow(1 + lilv/12, 12 * nianxian)-1);
huankuan = Math.round(huankuan*100)/100;
return huankuan;
}
//年限计算
private double nianxiancalcutor() {
try {
zhongzhi = Double.parseDouble(t5.getText());
lilv = Double.parseDouble(t3.getText());
benjin = Double.parseDouble(t2.getText());
} catch (Exception e) {
JOptionPane.showMessageDialog(c, "请输入正确的数据");
//System.out.println("请输入数据");
}
return nianxian(zhongzhi,lilv,benjin);
}
//年限的计算公式
public static double nianxian(double zhongzhi, double lilv, double benjin) {
nianxian = (Math.log(zhongzhi / benjin) / Math.log(1 + lilv));
nianxian = Math.round(nianxian);
return nianxian;
}
//利率计算
private double lilvcalcutor() {
try {
zhongzhi = Double.parseDouble(t5.getText());
nianxian = Double.parseDouble(t4.getText());
benjin = Double.parseDouble(t2.getText());
} catch (Exception e) {
JOptionPane.showMessageDialog(c, "请输入正确的数据");
//System.out.println("请输入数据");
}
return lilv(zhongzhi,nianxian,benjin);
}
//利率的计算公式
public static double lilv(double zhongzhi, double nianxian, double benjin) {
lilv = Math.pow((zhongzhi / benjin), (1.0 / nianxian)) - 1;
lilv = Math.round(lilv*100)/100.0;
return lilv;
}
//本金计算
private double benjincalcutor() {
try {
zhongzhi = Double.parseDouble(t5.getText());
lilv = Double.parseDouble(t3.getText());
nianxian = Double.parseDouble(t4.getText());
} catch (Exception e) {
JOptionPane.showMessageDialog(c, "请输入正确的数据");
//System.out.println("请输入数据");
}
return benjin(zhongzhi,lilv,nianxian);
}
//本金的计算公式
public static double benjin(double zhongzhi, double lilv, double nianxian) {
benjin = zhongzhi / (Math.pow(1 + lilv, nianxian));
benjin = Math.round(benjin*100)/100;
return benjin;
}
//单利计算
private double danlicalcutor() {
try {
benjin = Double.parseDouble(t2.getText());
lilv = Double.parseDouble(t3.getText());
nianxian = Double.parseDouble(t4.getText());
} catch (Exception e) {
JOptionPane.showMessageDialog(c, "请输入正确的数据");
//System.out.println("请输入数据");
}
return zhongzhi(benjin,lilv,nianxian);
}
//单利的计算公式
public static double zhongzhi(double benjin, double lilv, double nianxian) {
zhongzhi = benjin * (1 + lilv * nianxian);
zhongzhi = Math.round(zhongzhi*100)/100;
return zhongzhi;
}
//复利计算
private double fulicalcutor() {
try {
benjin = Double.parseDouble(t2.getText());
lilv = Double.parseDouble(t3.getText());
nianxian = Double.parseDouble(t4.getText());
} catch (Exception e) {
JOptionPane.showMessageDialog(c, "请输入正确的数据");
//System.out.println("请输入数据");
}
try {
dingtou = Double.parseDouble(t5.getText());
} catch (NumberFormatException e2) {
dingtou = 0;
}
return zhongzhi(benjin,lilv,nianxian,dingtou);
}
//复利的计算公式
public static double zhongzhi(double benjin, double lilv, double nianxian,
double dingtou) {
for(int i = 0;i < nianxian;i++){
benjin = benjin * (1 + lilv);
benjin = benjin + dingtou;
}
zhongzhi = benjin - dingtou;
zhongzhi = Math.round(zhongzhi*100)/100;
return zhongzhi;
}
}