复利计算器4.1

package com.fulijisuanqi.swing;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/*
 * 本次更新主要更新了在输入过程中输入负数或者零的处理方法,
 * 更新以后如果输入的数小于或等于零会弹框提示,并且不会输出结果
 */

public class calcutor extends JFrame{

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        calcutor frame = new calcutor();
        frame.setVisible(true);
        frame.setBounds(100, 100, 400, 400);
        frame.setTitle("计算器3.1");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private JPanel jpanel;
    private JLabel label,label00,label01,label02,label03,label04,label05;
    private JComboBox<Object> box;
    private JTextField field01,field02,field03,field04,field05;
    private JButton button;
    private static double benjin,lilv,nianxian,zhongzhi,dingtou,huankuan,daikuan;
    private int index = 0;

    public calcutor(){

        jpanel = new JPanel();
        jpanel.setBounds(0, 0, 400, 400);
        jpanel.setLayout(null);
        add(jpanel);

        label = new JLabel("计算类型:");
        label.setFont(new Font(null, Font.BOLD, 15));
        label.setBounds(10, 10, 80, 30);
        jpanel.add(label);

        label00 = new JLabel("@113wangzekai");
        label00.setFont(new Font(null, Font.BOLD, 15));
        label00.setBounds(260, 320, 200, 30);
        jpanel.add(label00);

        label01 = new JLabel("本金:");
        label01.setFont(new Font(null, Font.BOLD, 15));
        label01.setBounds(30, 80, 80, 30);
        jpanel.add(label01);

        label02 = new JLabel("年利率%:");
        label02.setFont(new Font(null, Font.BOLD, 15));
        label02.setBounds(30, 130, 80, 30);
        jpanel.add(label02);

        label03 = new JLabel("年限:");
        label03.setFont(new Font(null, Font.BOLD, 15));
        label03.setBounds(30, 180, 80, 30);
        jpanel.add(label03);

        label04 = new JLabel("定投金额:");
        label04.setFont(new Font(null, Font.BOLD, 15));
        label04.setBounds(30, 230, 80, 30);
        jpanel.add(label04);

        label05 = new JLabel("终值:");
        label05.setFont(new Font(null, Font.BOLD, 15));
        label05.setBounds(30, 280, 80, 30);
        jpanel.add(label05);

        //文本框
        field01 = new JTextField();
        field01.setBounds(120, 80, 150, 30);
        jpanel.add(field01);

        field02 = new JTextField();
        field02.setBounds(120, 130, 150, 30);
        jpanel.add(field02);

        field03 = new JTextField();
        field03.setBounds(120, 180, 150, 30);
        jpanel.add(field03);

        field04 = new JTextField();
        field04.setBounds(120, 230, 150, 30);
        jpanel.add(field04);

        field05 = new JTextField();
        field05.setBounds(120, 280, 150, 30);
        jpanel.add(field05);

        //初始化文本框
        field05.setText("计算所得");
        field05.setEnabled(false);

        //计算按钮
        button = new JButton("计算");
        button.setBounds(250, 10, 80, 30);
        button.setFont(new Font(null, Font.BOLD, 15));
        jpanel.add(button);
        //按钮监听
        button.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e){
                if(index == 0){
                    zhongzhi = fulicalcutor();
                    if(zhongzhi != -1){
                        field05.setText(Double.toString(zhongzhi));
                        field05.setEnabled(true);
                    }
                }else if(index == 1){
                    zhongzhi = danlicalcutor();
                    if(zhongzhi != -1){
                        field04.setText(Double.toString(zhongzhi));
                        field04.setEnabled(true);
                    }
                }else if(index == 2){
                    benjin = benjincalcutor();
                    if(benjin != -1){
                        field01.setText(Double.toString(benjin));
                        field01.setEnabled(true);
                    }
                }else if(index == 3){
                    lilv = lilvcalcutor();
                    if(lilv != -1){
                        field02.setText(Double.toString(lilv));
                        field02.setEnabled(true);
                    }
                }else if(index == 4){
                    nianxian = nianxiancalcutor();
                    if(nianxian != -1){
                        field03.setText(Double.toString(nianxian));
                        field03.setEnabled(true);
                    }
                }else if(index == 5){
                    huankuan = yuehuankuanejisuan();
                    if(huankuan != -1){
                        field04.setText(Double.toString(huankuan));
                        field04.setEnabled(true);
                    }
                }
            }
        });

        //下拉菜单
        box = new JComboBox<>();
        box.setFont(new Font(null, Font.BOLD, 15));
        box.setModel(new DefaultComboBoxModel<Object>(new Object[]{"复利计算","单利计算","本金计算","利率计算","年限计算","月还款额计算"}));
        box.setBounds(90, 10, 130, 30);
        jpanel.add(box);
        box.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                if(box.getSelectedIndex()==0){
                    index = 0;
                    change01();
                    clear();
                    field05.setText("计算所得");
                    field05.setEnabled(false);
                    //System.out.println("复利计算");
                }else if(box.getSelectedIndex()==1){
                    index = 1;
                    change();
                    clear();
                    field04.setText("计算所得");
                    field04.setEnabled(false);
                    //System.out.println("单利计算");
                }else if(box.getSelectedIndex()==2){
                    index = 2;
                    change();
                    clear();
                    field01.setText("计算所得");
                    field01.setEnabled(false);
                    //System.out.println("本金计算");
                }else if(box.getSelectedIndex()==3){
                    index = 3;
                    change();
                    clear();
                    field02.setText("计算所得");
                    field02.setEnabled(false);
                    //System.out.println("利率计算");
                }else if(box.getSelectedIndex()==4){
                    index = 4;
                    change();
                    clear();
                    field03.setText("计算所得");
                    field03.setEnabled(false);
                }else if(box.getSelectedIndex()==5){
                    index = 5;
                    change02();
                    clear();
                    field04.setText("计算所得");
                    field04.setEnabled(false);
                }
            }

        });
    }

    //清除数据
    private void clear() {
        field01.setText(null);
        field02.setText(null);
        field03.setText(null);
        field04.setText(null);
        field05.setText(null);
        field01.setEnabled(true);
        field02.setEnabled(true);
        field03.setEnabled(true);
        field04.setEnabled(true);
        field05.setEnabled(true);
    }

    //改变内容
    private void change02() {
        label01.setText("贷款金额:");
        label02.setText("年利率%:");
        label03.setText("还款期限:");
        label04.setText("月还款额:");
        label05.setText("");
        field05.setVisible(false);
    }
    private void change01() {
        label01.setText("本金:");
        label02.setText("年利率%:");
        label03.setText("年限:");
        label04.setText("定投金额:");
        label05.setText("终值:");
        field05.setVisible(true);
    }
    private void change() {
        label01.setText("本金:");
        label02.setText("年利率%:");
        label03.setText("年限:");
        label04.setText("终值:");
        label05.setText("");
        field05.setVisible(false);
    }

    //月还款额计算
    private double yuehuankuanejisuan() {
        try {
            daikuan = Double.parseDouble(field01.getText());
            lilv = Double.parseDouble(field02.getText());
            nianxian = Double.parseDouble(field03.getText());

            //小于或等于0的处理
            if(daikuan <= 0 || lilv <= 0 || nianxian <= 0){
                JOptionPane.showMessageDialog(jpanel, "你输入的数据不能小于或等于零\n"
                        + "               请重新输入");
            }else{
                return yuehuankuan(daikuan,lilv,nianxian);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(jpanel, "请输入正确的数据");
            //System.out.println("请输入数据");
        }
        return -1;

    }
    //月还款额的计算公式
    public final 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(field04.getText());
            lilv = Double.parseDouble(field02.getText());
            benjin = Double.parseDouble(field01.getText());

            //小于或等于0的处理
            if(zhongzhi<=0 || lilv<=0 || benjin<=0){
                JOptionPane.showMessageDialog(jpanel, "你输入的数据不能小于或等于零\n"
                        + "               请重新输入");
            }else{
                return nianxian(zhongzhi,lilv,benjin);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(jpanel, "请输入正确的数据");
            //System.out.println("请输入数据");
        }
        return -1;
    }
    //年限的计算公式
    public final 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(field04.getText());
            nianxian = Double.parseDouble(field03.getText());
            benjin = Double.parseDouble(field01.getText());

            //小于或等于0的处理
            if(zhongzhi <= 0 || benjin <= 0 || nianxian <= 0){
                JOptionPane.showMessageDialog(jpanel, "你输入的数据不能小于或等于零\n"
                        + "               请重新输入");
            }else{
                return lilv(zhongzhi,nianxian,benjin);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(jpanel, "请输入正确的数据");
            //System.out.println("请输入数据");
        }
        return -1;
    }
    //利率的计算公式
    public final 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(field04.getText());
            lilv = Double.parseDouble(field02.getText());
            nianxian = Double.parseDouble(field03.getText());

            //小于或等于0的处理
            if(zhongzhi <= 0 || lilv <= 0 || nianxian <= 0){
                JOptionPane.showMessageDialog(jpanel, "你输入的数据不能小于或等于零\n"
                        + "               请重新输入");
            }else{
                return benjin(zhongzhi,lilv,nianxian);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(jpanel, "请输入正确的数据");
            //System.out.println("请输入数据");
        }
        return -1;
    }
    //本金的计算公式
    public final 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(field01.getText());
            lilv = Double.parseDouble(field02.getText());
            nianxian = Double.parseDouble(field03.getText());

            //小于或等于0的处理
            if(benjin<=0 || lilv<=0 || nianxian<=0){
                JOptionPane.showMessageDialog(jpanel, "你输入的数据不能小于或等于零\n"
                        + "               请重新输入");
            }else{
                return zhongzhi(benjin, lilv, nianxian);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(jpanel, "请输入正确的数据");
            //System.out.println("请输入数据");
        }
        return -1;

    }
    //单利的计算公式
    public final 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(field01.getText());
            lilv = Double.parseDouble(field02.getText());
            nianxian = Double.parseDouble(field03.getText());
            try {
                dingtou = Double.parseDouble(field04.getText());
                } catch (NumberFormatException e2) {
                    dingtou = 0;
            }

            //小于或等于0的处理
            if(benjin<=0 || lilv<=0 || nianxian<=0){
                JOptionPane.showMessageDialog(jpanel, "你输入的数据不能小于或等于零\n"
                        + "               请重新输入");
            }else{
                return zhongzhi(benjin, lilv, nianxian, dingtou);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(jpanel, "请输入正确的数据");
            //System.out.println("请输入数据");
        }

        return -1;
    }
    //复利的计算公式
    public final 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;
    }

}

时间: 2024-08-02 18:53:52

复利计算器4.1的相关文章

0329单元测试--复利计算器(组员:冯铭杰 梁毅乾)

测试要求: 对我们和复利计算程序,写单元测试. 有哪些场景? 期待的返回值 写测试程序 运行测试 场景测试: 1.测试输入值是否为空 2.测试输入值是否为负数 3.输出结果是否正确? 期待值: 1.提示输入错误 2.提示输入错误,重新输入 3.提示输出正确 功能模块  数据类型  具体数据  运行结果  复利计算  (本金,利率,年限)  (100,0.03,5)  115.9274  测试输入值为空  (本金,利率,年限)  (0,0,0)  错误 测试输入值为负数 (本金,利率,年限) (-

复利计算器4.0之再遇JUnit

复利计算器4.0之再遇JUnit 前言    虽然之前的复利计算器版本已经尝试过使用JUnit单元测试,但由于没有系统性地学习过JUnit的使用,用得并不好,主要问题表现在测试的场景太少,并没有达到测试所需的全面性,没能体现JUnit这一神器的精髓所在,为此本版本的复利计算器在JUnit单元测试方面做了一些完善. 源代码包结构 如上图所示,我把测试类统一放在新建的test源码文件下(test打错了,已改),以便和程序代码分离,方便操作. 细心看你就能发现,test目录下的包和程序SRC目录下相应

复利计算器(软件工程)及Junit测试———郭志豪

计算:1.本金为100万,利率或者投资回报率为3%,投资年限为30年,那么,30年后所获得的利息收入:按复利计算公式来计算就是:1,000,000×(1+3%)^30 客户提出: 2.如果按照单利计算,本息又是多少呢? 3.假如30年之后要筹措到300万元的养老金,平均的年回报率是3%,那么,现在必须投入的本金是多少呢? 4.利率这么低,复利计算收益都这么厉害了,如果拿100万元去买年报酬率10%的股票,若一切顺利,过多长时间,100万元就变成200万元呢? 5.如果我希望在十年内将100万元变

复利计算器(软件工程)———郭志豪

计算:本金为100万,利率或者投资回报率为3%,投资年限为30年,那么,30年后所获得的利息收入:按复利计算公式来计算就是:1,000,000×(1+3%)^30 客户提出: 2.如果按照单利计算,本息又是多少呢? 3.假如30年之后要筹措到300万元的养老金,平均的年回报率是3%,那么,现在必须投入的本金是多少呢? 代码如下: 1 public static void main(String[] args) { 2 // TODO Auto-generated method stub 3 Sy

复利计算器3.01

1 此版本的复利计算器对输入的数据进行了限制,只能输入数字字符,并对输入的数据进行判断是否完整 2 package JSQ; 3 4 import java.awt.EventQueue; 5 6 import javax.swing.JFrame; 7 import javax.swing.JPanel; 8 import javax.swing.border.EmptyBorder; 9 import javax.swing.ButtonGroup; 10 import javax.swin

对复利计算器和股票投资的总结

这两次的实验都是用eclipse工具.java语言来写的,编写复利计算器时一共写了70行代码, 在复利计算器的基础上再进行修改和增加功能,最后得到的股票投资程序一共是82行代码. 编写复利计算器时预计是用3~4个小时,实际上却用了5个小时左右,可能是因为刚开始编写的 时候有很多java语言都忘记怎么写了,所以就花了比较多的时间去复习回以前的东西,其实 编写复利计算器程序也并不是很难,只要懂得java输出输入语言怎么写和计算复利终值的公式, 那么问题就变得简单很多了:关于股票投资的程序我本来是预计

java版复利计算器升级

github地址:https://github.com/iamcarson/Carson 伙伴:彭宏亮 学号:201406114148 与伙伴工作帅照: 本次升级的地方: 1.改善了界面显示,让界面整体看起来比较的简洁 2.原本使用Stringbuffer来存储结果然后显示的,升级后使用数据库显示 3.实现了一个清空的功能 效果如下: : 本次使用MVC的模式,有数据层,控制层,显示层 总结:复利计算器原理不难,但是想做好却不是那么的简单,好像这一次,还有分页的功能.删除某条记录等功能还没有能力

复利计算器(4)——界面美化、自动补全

一.分工 这次终于可以跟小伙伴合作了,经过讨论,我负责界面的美化和输入框自动补全,小伙伴擅长安卓,于是将复利计算器弄成app的任务就交给了小伙伴. 二.界面美化 1.弹框提示 思路:弹框提示显示是浏览器自带,所以难免会难看些(如图一),因此引进一些jQuery的插件,将弹框美化(如图二) 图一 图二 实现:从网上下载相应的插件的jar包,将jar包引用到相应的项目中,只要在项目中写就可以实现layer.alert("请在复利金额输入框输入正数(保留两位小数)!", {icon: 100

0316复利计算器3.0

#include<stdio.h> #include<math.h> double benjin=0,W=0; double year=0; int N=1; double lilv; void danli(){ printf("请输入要存入的本金:"); scanf("%lf",&benjin); printf("请输入年利率:"); scanf("%lf",&lilv); print

复利计算器--结对编程

import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; public class calcutor extends JFrame { private static final long serialVersionUID = 1L; File file1 = new File("fuli.txt"); File file2 = new File("danli.txt&