1 import java.util.Scanner;
2
3 public class Compound_int {
4
5 public static void main(String[] args) {
6 tip();
7 while (true) {
8 menu();
9 int n = scanner.nextInt();
10 if (n >= 0 && n <= 7) {
11 if (n == 0)
12 break;
13 switch (n) {
14 case 1:
15 benjin();
16 break;
17 case 2:
18 fuli();
19 break;
20 case 3:
21 danli();
22 break;
23 case 4:
24 years();
25 break;
26 case 5:
27 annual_int_rate();
28 break;
29 case 6:
30 YM_Equal_cast_final();
31 break;
32 case 7:
33 Average_capital_plus_interest();
34 break;
35 case 0:
36 n = 0;
37 break;
38
39 }
40 } else {
41 System.out.println("输入超出范围,请重新输入:");
42
43 }
44 }
45 }
46
47 static Scanner scanner = new Scanner(System.in);
48
49 static void tip()// 计算公式和一些变量的介绍
50 {
51 System.out.printf("复利计算软件\n");
52 System.out.printf(" 复利计算公式:F=P*pow((1+i/m),N*m)\n");
53 System.out.printf(" 单利计算公式:F=P+P*N*i\n");
54 System.out.printf(" 等额投资公式:F=P*12*(1+i)*(pow(1+i,N)-1)/i\n");
55 System.out.printf("\tF:复利终值|年金终值\n");
56 System.out.printf("\tP:本金\n");
57 System.out.printf("\ti:利率\n");
58 System.out.printf("\tN:利率获取时间的整数倍\n");
59 System.out.printf("\tm:年复利次数(一年当中的滚利次数)\n");
60 }
61
62 static void menu()// 菜单
63 {
64 System.out.printf("\t\t|-----------------------------------|\n");
65 System.out.printf("\t\t| welcome |\n");
66 System.out.printf("\t\t|-----------------------------------|\n");
67 System.out.printf("\t\t| 1:计算本金 |\n");
68 System.out.printf("\t\t| 2:计算年复利终值 |\n");
69 System.out.printf("\t\t| 3:单利计算 |\n");
70 System.out.printf("\t\t| 4:计算年份 |\n");
71 System.out.printf("\t\t| 5:计算年利率 |\n");
72 System.out.printf("\t\t| 6:等额定投(年|月) |\n");
73 System.out.printf("\t\t| 7:等额还款 |\n");
74 System.out.printf("\t\t| 0:结束 |\n");
75 System.out.printf("\t\t|-----------------------------------|\n");
76 System.out.printf("请输入你要选择的功能(0~7):");
77
78 }
79
80 static double capital_formula(double F, double i, int N, int m)// 本金计算公式
81 {
82 double P;
83 P = F / Math.pow((1 + i / m), N * m);
84 return P;
85 }
86
87 static void benjin()// 计算本金
88 {
89 int N, m;
90 double i, F, P;
91 System.out.printf("复利终值:");
92 F = scanner.nextDouble();
93 System.out.printf("年利率:");
94 i = scanner.nextDouble();
95 System.out.printf("存入年限:");
96 N = scanner.nextInt();
97 System.out.printf("年复利次数:");
98 m = scanner.nextInt();
99 P = capital_formula(F, i, N, m);
100 System.out.println("年复利终值为" + F + "需要本金为:" + P);
101 }
102
103 static double compound_amount_formla(double P, double i, int N, int m)// 复利计算公式
104 {
105 double F;
106 F = P * Math.pow((1 + i / m), N * m);
107 return F;
108 }
109
110 static void fuli()// 计算复利终值
111 {
112 int N, m;
113 double i, F, P;
114 System.out.printf("存入本金:");
115 P = scanner.nextDouble();
116 System.out.printf("年利率:");
117 i = scanner.nextDouble();
118 System.out.printf("存入年限:");
119 N = scanner.nextInt();
120 System.out.printf("年复利次数:");
121 m = scanner.nextInt();
122 F = compound_amount_formla(P, i, N, m);
123 System.out.println("复利终值:" + F);
124 }
125
126 static double simple_interest_formula(double P, int N, double i)// 单利计算公式
127 {
128 double F;
129 F = P + P * N * i;
130 return F;
131 }
132
133 static void danli()// 单利计算
134 {
135 int N;
136 double i, F, P;
137 System.out.printf("存入本金:");
138 P = scanner.nextDouble();
139 System.out.printf("年利率:");
140 i = scanner.nextDouble();
141 System.out.printf("存入年限:");
142 N = scanner.nextInt();
143 F = simple_interest_formula(P, N, i);
144 System.out.println("本息和为:" + F);
145 }
146
147 static int years_formula(double F, double P, double i, int m)// 根据复利终值求年份
148 {
149 int year;
150 year = (int) (Math.log(F / P) / Math.log(1 + i / m) / m);
151 return year;
152 }
153
154 static void years()// 求年份
155 {
156 int N, m;
157 double i, F, P;
158 System.out.printf("复利终值:");
159 F = scanner.nextDouble();
160 System.out.printf("存入本金:");
161 P = scanner.nextDouble();
162 System.out.printf("年利率:");
163 i = scanner.nextDouble();
164 System.out.printf("年复利次数:");
165 m = scanner.nextInt();
166 N = years_formula(F, P, i, m);
167 System.out.println("从" + P + "到" + F + "需要" + N + "年");
168 }
169
170 static double rate_formula(int m, double F, double P, int N)// 复利的利率计算公式
171 {
172 double rate;
173 rate = m * (Math.pow(F / P, 1.0 / (N * m)) - 1);
174 return rate;
175 }
176
177 static void annual_int_rate()// 计算年利率
178 {
179 int N, m;
180 double i, F, P;
181 System.out.printf("复利终值:");
182 F = scanner.nextDouble();
183 System.out.printf("存入本金:");
184 P = scanner.nextDouble();
185 System.out.printf("存入年限:");
186 N = scanner.nextInt();
187 System.out.printf("年复利次数:");
188 m = scanner.nextInt();
189 i = rate_formula(m, F, P, N);
190 System.out.println("从" + P + "到" + F + "需要" + i);
191 }
192
193 static double according_year_formula(double P, int N, double i)// 按照年份等额投资计算公式
194 {
195 double final_value;
196 final_value = P * (Math.pow(1 + i, N) - 1) / i;
197 return final_value;
198 }
199
200 static double according_month_formula(double P, int N, double i)// 按照月份等额投资计算公式
201 {
202 double final_value;
203 final_value = P * 12 * (1 + i) * (Math.pow(1 + i, N) - 1) / i;
204 return final_value;
205 }
206
207 static void YM_Equal_cast_final()// 计算等额投资
208 {
209 int N, n;
210 double i, F, P;
211 System.out.printf("\t\t1:按年投资\n\t\t2:按月投资\n");
212 System.out.printf("请选择你要的功能<1|2>:");
213 n = scanner.nextInt();
214 if (n == 1) {
215 System.out.printf("存入本金:");
216 P = scanner.nextDouble();
217 System.out.printf("存入年限:");
218 N = scanner.nextInt();
219 System.out.printf("年利率:");
220 i = scanner.nextDouble();
221 F = according_year_formula(P, N, i);
222 System.out.println(N + "年后的总产值:" + F);
223
224 } else if (n == 2) {
225 System.out.printf("存入本金:");
226 P = scanner.nextDouble();
227 System.out.printf("存入年限:");
228 N = scanner.nextInt();
229 System.out.printf("年利率:");
230 i = scanner.nextDouble();
231 F = according_month_formula(P, N, i);
232 System.out.println(N + "年后的总产值:" + F);
233 } else {
234 System.out.printf("输入有误!\n");
235 }
236
237 }
238
239 static double Average_capital_plus_interest_formula(double F, int N,double i)// 等额还款公式
240 {
241 double refund;
242 refund = F * i / (12 * (1 + i) * (Math.pow(1 + i, N) - 1));
243 return refund;
244 }
245
246 static void Average_capital_plus_interest()// 等额还款
247 {
248 int N;
249 double i, F, P;
250 System.out.printf("贷款金额:");
251 F = scanner.nextDouble();
252 System.out.printf("存入年限:");
253 N = scanner.nextInt();
254 System.out.printf("年利率:");
255 i = scanner.nextDouble();
256 P = Average_capital_plus_interest_formula(F, N, i);
257 System.out.println("贷款" + F + "每月需要还款" + P);
258 }
259
260 }