您的位置:首页 > 其它

复利计算--结对

2016-04-06 22:45 204 查看
一、项目需求:

12. 即要追求利益,又要面对不可预知的金融投资风险, “不能把鸡蛋放在同一个篮子里”,所以有必要进行组合投资。

通过上述计算与对比,可以帮助客户进行投资决策。

客户:那么能否帮我记录下一笔一笔不同类型的投资,并动态显示资金现值呢?

二、实现

主要代码实现:在源代码投资模块中加入文件读写的功能。

package calculator;

import java.util.InputMismatchException;
import java.util.Scanner;

public class calculator {

public static void main(String[] args) {
System.out.print("请选择求单利1,复利2,本金3,时间4,利率5,投资6,贷款月还款计算7,退出8");
Scanner scanner = new Scanner(System.in);
int a = 0;
try {
a = Math.abs(scanner.nextInt());
} catch (InputMismatchException e) {
main(null);
}
input(a);
scanner.close();
}

static void input(int a) {
Scanner scanner = new Scanner(System.in);
int k = a;
String fruit = null;
// record record=new record();
try {
switch (a) {
case 1: {
System.out.print("请输入本金");
double A = Math.abs(scanner.nextDouble());
System.out.print("请输入年利率");
double rate = Math.abs(scanner.nextDouble());
System.out.print("请输入年限");
double C = Math.abs(scanner.nextInt());
double fruit1 = simple_interest(A, rate, C);
System.out.println("单利终值" + fruit1);
main(null);

}
break;
case 2: {
System.out.print("请输入本金");
double A = Math.abs(scanner.nextDouble());
System.out.print("请输入年利率");
double B = Math.abs(scanner.nextDouble());
System.out.print("请输入存入年限");
int C = Math.abs(scanner.nextInt());
fruit = compound_interest(A, B, C);
System.out.println("复利终值" + fruit);
main(null);
}
break;
case 3: {
System.out.print("请输入预期钱数");
double A = Math.abs(scanner.nextDouble());
System.out.print("请输入年利率");
double rate = Math.abs(scanner.nextDouble());
System.out.print("请输入存入年限");
double C = Math.abs(scanner.nextInt());
fruit = capital(A, rate, C);
System.out.println("本金" + fruit);
main(null);
}
break;
case 4: {
int i = 0;
System.out.print("请输入本金");
double A = Math.abs(scanner.nextDouble());
System.out.print("请输入年利率");
double B = Math.abs(scanner.nextDouble());
System.out.print("请输入预期金额");
double C = Math.abs(scanner.nextDouble());
i = time(A, B, C);
System.out.println("需" + i + "年");
main(null);
}
break;
case 5: {
System.out.print("请输入本金");
double A = Math.abs(scanner.nextDouble());
System.out.print("请输入预期金额");
double B = Math.abs(scanner.nextDouble());
System.out.print("请输入存入年限");
double C = Math.abs(scanner.nextDouble());
fruit = rate(A, B, C);
System.out.println("利率为" + fruit);
main(null);
}
break;
case 6: {
System.out.print("请输入投资额");
double A = Math.abs(scanner.nextDouble());
System.out.print("请输入利率");
double B = Math.abs(scanner.nextDouble());
System.out.print("请输入期限");
int C = Math.abs(scanner.nextInt());
double fruit1 = invest(A, B, C);
record.writerecord(A, B, C, fruit1);
main(null);
}
break;
case 7: {
System.out.print("请输入贷款额");
double A = Math.abs(scanner.nextDouble());
System.out.print("请输入贷款利率");
double B = Math.abs(scanner.nextDouble());
System.out.print("请输入贷款年限");
int C = Math.abs(scanner.nextInt());
fruit = repayment(A, B, C);
main(null);

}
break;
case 8:
System.out.print("是否清除投资记录(y/n)");
String A = scanner.next();
if (A.equals("y"))
record.appendMethodB("E:\\JAVA1\\calculator\\invest.txt",
"", false);
scanner.close();
System.out.print("已退出");
break;
default:
System.out.println("请重新输入");
main(null);
}
} catch (InputMismatchException e) {
input(k);
}
}

static double simple_interest(double a, double rate, double c) {
double A = a;
double D = 1;
double C = c;
D = A * rate * C;
return A + D;
}

static String compound_interest(double a2, double b2, int c2) {
double A = a2;
double B = b2;
int C = c2;
double D = 1;
for (int i = 1; i <= C; i++) {
D = D * (1 + B);
}
return String.format("%.4f", A * D);
}

static String capital(double a2, double rate2, double c2) {
// TODO Auto-generated method stub
double A = a2;
double rate = rate2;
double C = c2;
double D = 1;
for (int i = 1; i <= C; i++) {
D = D * (1 + rate);
}

return String.format("%.4f", A / D);
}

static int time(double a2, double b2, double c2) {
double A = a2;
double B = b2;
double C = c2;
double D = 1;
double E = 1;
int i = 1;

while (true) {
D = D * (1 + B);
E = A * D;
if (E <= C)
i++;
else
break;
}
return i;
}

static String rate(double a2, double b2, double c2) {
double A = a2;
double B = b2;
double C = c2;
double D = 1;
D = Math.pow(B / A, 1 / C) - 1;
return String.format("%.4f", D);
}

static double invest(double a2, double b2, int c2) {
// TODO Auto-generated method stub
double A = a2;
double B = b2;
int C = c2;
double D = 0;
for (int i = 1; i <= C; i++) {
D = D + A;
D = D * (1 + B);
}
return D;
}

static String repayment(double a2, double b2, int c2) {
// TODO 自动生成的方法存根
double A = a2;
double B = b2;
int C = c2;
double D = 0;
for (int i = 1; i <= C; i++) {
D = A * Math.pow(1.0 + B, C);
}
double Repayment = D / (C * 12);
double interest = A * B * C;
double sum = A + interest;
double Repayment1 = sum / (C * 12);
System.out.println("每月需要还款(单利)" + Repayment1);
System.out.println("每月需要还款(复利)" + String.format("%.4f", Repayment));
return String.format("%.4f", Repayment);
}

}


package calculator;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class record {

static void printrecord() {
File file = new File("E:\\JAVA1\\calculator\\invest.txt");
BufferedReader reader = null;
try {
// System.out.println("以行为单位读取文件内容,一次读一整行:");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
// 显示行号
System.out.println("第 " + line + "次投资" + tempString);
line++;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}

}

static void writerecord(double a, double b, int c, double fruit1) {
String fileName = "E:\\JAVA1\\calculator\\invest.txt";
String content = connent(a, b, c, fruit1);
appendMethodB(fileName, content, true);
printrecord();
}

static String connent(double a, double b, int c, double fruit1) {

String content1 = String.valueOf(a);
String content2 = String.valueOf(b);
String content3 = String.valueOf(c);
String content4 = String.valueOf(fruit1);
return content1 + "元,利率为" + content2 + ",存入" + content3 + "年,获利"
+ content4 + "元\n";
}

static void appendMethodB(String fileName, String content, boolean change) {
try {
// 打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
FileWriter writer = new FileWriter(fileName, change);
writer.write(content);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}

}
}


运行结果:


预计时间:4h

实际时间:5h

---------------------------------------------------------------------------------------------------------------------------------

201406114237古林萍 http://www.cnblogs.com/moliny/ https://github.com/Moliny

201406114228 郑铭泽 http://www.cnblogs.com/95mz/ https://github.com/zhengmingze

---------------------------------------------------------------------------------------------------------------------------------

在该过程中,我们事先进行了讨论最终决定了使用文件来存储,我的同伴负责代码的审核和找了读写文件的资料,我负责了代码的写入,并将写好的代码交与它测试BUG,我觉得在此过程中反而轻松了一些,因为我只需专注于代码的实现,而在此过程中我的一些代码习惯或代码的不规范交给我的同伴去完成。



资料来源:http://www.cnblogs.com/lovebread/archive/2009/11/23/1609122.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: