package Fuli;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Fuli extends JFrame {
private static final long serialVersionUID = 3347254632537686808L;
private JLabel a1; // 标签
private JLabel a2;
private JLabel a3;
private JLabel a4;
private JTextField b1; // 本金
private JTextField b2; // 利率
private JTextField b3; // 年份
private JTextField b4; // 期望值
private JButton c1;
private JButton c2;
private JButton c3;
private JTextArea text; // 显示纯文本的多行区域
private JPanel toolbar = new JPanel();
private JPanel toolbar2 = new JPanel();
boolean isadd = false;
JRadioButtonMenuItem mrButton = new JRadioButtonMenuItem("每年添加一定的本金");
public Fuli() {
setTitle("复利存款应用程序");
creatComponents(); // 创建零件
layoutComponents(); // 设计零件
registerHandlers(); // 鼠标监控
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
}
private void creatComponents() {
a1 = new JLabel("本 金 ");
a2 = new JLabel("年利率 ");
a3 = new JLabel("年 数 ");
a4 = new JLabel("期望值");
b1 = new JTextField(10);
b2 = new JTextField(10);
b3 = new JTextField(10);
b4 = new JTextField(10);
c1 = new JButton("复利");
c2 = new JButton("清除");
c3 = new JButton("单利");
text = new JTextArea();
}
private void layoutComponents() {
setLayout(new FlowLayout());
JPanel panel1 = new JPanel();
panel1.add(a1);
panel1.add(b1);
JPanel panel2 = new JPanel();
panel2.add(a2);
panel2.add(b2);
JPanel panel3 = new JPanel();
panel3.add(a3);
panel3.add(b3);
JPanel panel6 = new JPanel();
panel6.add(a4);
panel6.add(b4);
JPanel leftpanel = new JPanel(new GridLayout(3, 1));
leftpanel.add(panel1);
leftpanel.add(panel2);
leftpanel.add(panel3);
leftpanel.add(panel6);
JScrollPane panel5 = new JScrollPane(text);
panel5.setPreferredSize(new Dimension(400, 200));
toolbar.add(c1);
toolbar.add(c2);
toolbar.add(c3);
toolbar2.add(mrButton);
add(leftpanel);
// add(mrButton);
add(toolbar2, BorderLayout.NORTH);
add(panel5);
add(toolbar, BorderLayout.EAST);
}
private void registerHandlers() {
c1ActionEventHander hander1 = new c1ActionEventHander();
c1.addActionListener(hander1);
c2ActionEventHander hander2 = new c2ActionEventHander();
c2.addActionListener(hander2);
c3ActionEventHander hander3 = new c3ActionEventHander();
c3.addActionListener(hander3);
mrButtonActionEventHander hander4 = new mrButtonActionEventHander();
mrButton.addActionListener(hander4);
}
private class c1ActionEventHander implements ActionListener {
public void actionPerformed(ActionEvent e) {
double principal;
double amount;
double rate;
int n;
NumberFormat currencyformatter = NumberFormat.getCurrencyInstance(); // 字符串转化为数字
String output = "年" + "/" + "复利存款";
// int year = 1;
//
// // principal = Double.parseDouble(b1.getText()); // b1本金
// rate = Double.parseDouble(b2.getText()); // b2利率
// n = Integer.parseInt(b3.getText()); // b3年份
// amount = Double.parseDouble(b4.getText()); // b4期望值
int year = 1;
// rate = Double.parseDouble(b2.getText());
// n = Integer.parseInt(b3.getText());
if (b1.getText().equals("")&& b2.getText() != null
&& b3.getText() != null && b4.getText() != null) {
rate = Double.parseDouble(b2.getText());
n = Integer.parseInt(b3.getText());
amount = Double.parseDouble(b4.getText());
principal = 0;
while (year <= n) {
principal = amount / (Math.pow(1 + rate, year));
year = year + 1;
}
output = "本金" + currencyformatter.format(principal) + "\n";
text.setText(output);
}
else if (b2.getText().equals("") && b1.getText() != null
&& b3.getText() != null && b4.getText() != null) // 求利率
{
principal = Double.parseDouble(b1.getText()); // b1本金
rate =0;
n = Integer.parseInt(b3.getText()); // b3年份
amount = Double.parseDouble(b4.getText()); // b4期望值
rate = java.lang.StrictMath.pow(amount / principal, 1.0 / n) - 1;
output = "利率" + rate + "\n";
text.setText(output);
}
else if (b3.getText().equals("") && b1.getText() != null
&& b2.getText() != null && b4.getText() != null) // 求年份
{
principal = Double.parseDouble(b1.getText()); // b1本金
amount = Double.parseDouble(b4.getText()); // b4期望值
rate = Double.parseDouble(b2.getText());
int n2=1;
while(principal<amount){
principal=principal * Math.pow(1 + rate, n2);
n2+=1;
}
output = "至少年数" + n2+"\n";
text.setText(output);
}
else if (b4.getText().equals("") && b1.getText() != null
&& b3.getText() != null && b2.getText() != null) // 求期望值
{
rate = Double.parseDouble(b2.getText());
n = Integer.parseInt(b3.getText());
principal = Double.parseDouble(b1.getText()); // b1本金
while (year <= n) {
amount = principal * Math.pow(1 + rate, year);
output += String.valueOf(year) + "\t\t\t"
+ currencyformatter.format(amount) + "\n";
year = year + 1;
}
text.setText(output);
}
}
}
private class c2ActionEventHander implements ActionListener {
public void actionPerformed(ActionEvent e) {
b1.setText("");
b2.setText("");
b3.setText("");
text.setText("");
}
}
private class c3ActionEventHander implements ActionListener {
public void actionPerformed(ActionEvent e) {
double principal;
double amount;
double rate;
int n;
NumberFormat currencyformatter = NumberFormat.getCurrencyInstance();
String output = "年" + "/" + "单利存款";
int year = 1;
rate = Double.parseDouble(b2.getText());
n = Integer.parseInt(b3.getText());
if (b1.getText().equals("")) {
if (b4.getText().equals("")) {
JOptionPane.showMessageDialog(null, "请输入本金或者期望值");
} else {
amount = Double.parseDouble(b4.getText());
principal = 0;
while (year <= n) {
principal = amount / (1 + rate * year);
year = year + 1;
}
output = "本金" + currencyformatter.format(principal) + "\n";
text.setText(output);
}
} else {
principal = Double.parseDouble(b1.getText()); // 字符串转化为数字
if (b4.getText().equals("")) {
while (year <= n) {
amount = principal * (1 + rate * year);
output += String.valueOf(year) + "\t\t\t"
+ currencyformatter.format(amount) + "\n";
year = year + 1;
}
text.setText(output);
} else {
JOptionPane.showMessageDialog(null, "本金和期望值输入一个即可");
}
}
}
}
private class mrButtonActionEventHander implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (isadd == false) {
isadd = true;
}
if (isadd == true) {
isadd = false;
}
}
}
public static void main(String[] args) {
int Windowswidth = 500;
int Windowsheight = 400;
Fuli frame = new Fuli();
frame.setVisible(true);
frame.setSize(Windowswidth, Windowsheight);
frame.setResizable(false);
int width = Toolkit.getDefaultToolkit().getScreenSize().width;
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
frame.setLocation((width - Windowswidth) / 2,
(height - Windowsheight) / 2); // 窗口居中
}
}