public class MainFrame extends JFrame {

     /**
* 文本框
*/
private TextField[] texts = new TextField[5]; /**
* 标签
*/
private JLabel[] labels = new JLabel[5]; /**
* 标签值
*/
private String[] labelTexts = {"存入本金:","年利率(%):","存入年限:","年复利次数:","复利终值:"}; /**
* 确定按钮
*/
private JButton jbtOk = new JButton("确定"); /**
* 退出按钮
*/
private JButton jbtExit = new JButton("退出"); /**
* 利率获取时间的整数倍
*/
private double N; /**
* 复利终值
*/
private double F; /**
* 存入年限
*/
private double Y; /**
* 本金
*/
private double P; /**
* 利率
*/
private double R; /**
* 本金计算方式
*/
private boolean pFlag; /**
* 复利计算方式
*/
private boolean fFlag; /**
* 主窗体
*/
public MainFrame() {
this.setTitle("复利计算器");
this.setBoundAtCenter();
this.setResizable(true);
//this.setLayout(new VFlowLayout());
this.add(this.createTextPanel(), BorderLayout.CENTER);
this.add(this.createButtonPanel(), BorderLayout.SOUTH);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
} /**
* 居中窗体
*/
private void setBoundAtCenter() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension dim = toolkit.getScreenSize();
this.setSize(245, 350);
int width = dim.width - this.getWidth() >> 1;
int hight = (dim.height - this.getHeight() >> 1) - 32;
this.setLocation(width, hight);
} /**
* 初始化文本框与标签位置以及标签值
*/
private void initTextField() {
int x = 90;
int y = 50;
int w = 130;
int h = 20;
for (int i = 0; i < texts.length; i++) {
texts[i] = new TextField(x, y, w, h);
labels[i] = new JLabel(labelTexts[i]);
labels[i].setBounds(x-80, y, w, h);
y += 28;
}
} /**
* 创建面板存放TextField和label
*/
private JPanel createTextPanel() {
JPanel panel = new JPanel();
panel.setLayout(null);
this.initTextField();
for (int i = 0; i < texts.length; i++) {
panel.add(texts[i]);
panel.add(labels[i]);
}
return panel;
} /**
* 设置按钮以及监听
*/
private JPanel createButtonPanel(){ JPanel btnPanel = new JPanel(new VFlowLayout());
JPanel btnPanel1 = new JPanel(new FlowLayout()); //----------设置jbtOk的监听------------------
this.jbtOk.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
if(!pFlag) {
texts[0].setText(String.valueOf(calculatePrincipal()));
}else {
texts[4].setText(String.valueOf(calculateCInterest()));
}
} }); btnPanel1.add(this.jbtOk); //----------设置jbtExit的监听------------------
this.jbtExit.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(EXIT_ON_CLOSE); }
}); btnPanel1.add(this.jbtExit);
//先添加ButtonGroup
btnPanel.add(this.createButtonGroup());
btnPanel.add(btnPanel1);
return btnPanel;
} /**
* 设置jradio按钮以及监听
*/
private JPanel createButtonGroup() {
JPanel grpPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
ButtonGroup btnGrp = new ButtonGroup();
JRadioButton jrb1 = new JRadioButton("本金");
//----------设置jrb1的监听------------------
jrb1.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
pFlag = false;
fFlag = true;
changeType();
}
});
btnGrp.add(jrb1);
JRadioButton jrb2 = new JRadioButton("复利");
//----------设置jrb2的监听------------------
jrb2.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
pFlag = true;
fFlag = false;
changeType();
}
});
btnGrp.add(jrb2);
grpPanel.add(jrb1);
grpPanel.add(jrb2);
return grpPanel;
} private void changeType() {
this.texts[0].setEnabled(pFlag);
this.texts[4].setEnabled(fFlag);
if(pFlag) {
this.texts[4].setText("由此得出数值");
this.texts[0].setText(null);
} else {
this.texts[0].setText("由此得出数值");
this.texts[4].setText(null);
}
} /**
* F=P*(1+i)N(次方)
* F:复利终值
* P:本金
* R:利率
* N:利率获取时间的整数倍
* Y: 存入年限
*
* 计算本金
*/
private double calculatePrincipal(){
this.R = Double.parseDouble(this.texts[1].getText().trim());
this.Y = Double.parseDouble(this.texts[2].getText().trim());
this.N = Double.parseDouble(this.texts[3].getText().trim());
this.F = Double.parseDouble(this.texts[4].getText().trim());
System.out.println(Math.pow((1+R),N));
return F/Math.pow((1+R),N); } /**
* 计算复利
*/
private double calculateCInterest(){
this.P = Double.parseDouble(this.texts[0].getText().trim());
this.R = Double.parseDouble(this.texts[1].getText().trim());
this.Y = Double.parseDouble(this.texts[2].getText().trim());
this.N = Double.parseDouble(this.texts[3].getText().trim());
return P*Math.pow((1+R),N);
}
}

复利计算器v1的更多相关文章

  1. 自己动手写计算器v1.0

    今天突发奇想,想着看了还几个设计模式了,倒不如写点东西来实践它们.发现计算器这种就比较合适,打算随着设计模式的学习,会对计算器不断的做改进. 包括功能的增加和算法的改进.初学者难免犯错,希望大家不吝指 ...

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

    一.分工 这次终于可以跟小伙伴合作了,经过讨论,我负责界面的美化和输入框自动补全,小伙伴擅长安卓,于是将复利计算器弄成app的任务就交给了小伙伴.为了我们两人团队,我们都好奋斗哈哈哈!! 二.界面美化 ...

  3. java版复利计算器升级

    github地址:https://github.com/iamcarson/Carson 伙伴:彭宏亮 学号:201406114148 与伙伴工作帅照: 本次升级的地方: 1.改善了界面显示,让界面整 ...

  4. 0406.复利计算器5.0版-release

    复利计算器5.0-release 目录 项目简介 Github链接推送 客户需求 新增需求分析 项目设计 效果演示 操作说明 程序结构 结对分工 合作照片 总结 1.项目简介 项目名称:复利计算器 目 ...

  5. 单利 复利计算器程序1.0 2.0 3.0 [ 合 ] 之 WEB

    对单复利计算器程序进行改进 更新为网页版的. 界面不太美观 请谅解 由于时间问题暂未完善好! 计算部分的主要源代码:

  6. 复利计算器app发布

    复利计算器app发布 抱歉:由于无法实现服务端的持续开启,发布的app仅为简单的单机版,暂时舍弃了c/s版本的一些功能,如:投资动态管理功能. 应用详情博客:请点击这里 apk下载地址1(百度手机助手 ...

  7. 复利计算器4.0之再遇JUnit

    复利计算器4.0之再遇JUnit 前言    虽然之前的复利计算器版本已经尝试过使用JUnit单元测试,但由于没有系统性地学习过JUnit的使用,用得并不好,主要问题表现在测试的场景太少,并没有达到测 ...

  8. 03-c#入门(简易存款利息计算器v1.0)

    本想把练习题做了的结果放上来,不过发现附录是有答案的,就算了吧,自己做了没问题就行了哈.之前提到过,要是有朋友有想法,需要做小工具我可以帮忙实现,不过貌似大家都很忙.SO,自己学完第4章后,决定做一个 ...

  9. 自己动手写计算器v1.1

    这个改动主要是使用工厂模式替代了简单工厂模式,这样做的好处是如果以后我们要扩充其他运算时,就不用总是去修改工厂类, 这是可以采取工厂模式,主要是将原来简单工厂类的逻辑判断分离出来,将它作为一个借口,与 ...

随机推荐

  1. PAT (BL) 1001

    链接:http://pat.zju.edu.cn/contests/pat-b-practise/1001 /* 1001. 害死人不偿命的(3n+1)猜想 (15) 卡拉兹(Callatz)猜想: ...

  2. oracle sql别名

    为sql的字段起一个别名,常以为是可有可无的,但是有时候是必要的. 例如在ibatis中 <!-- 获取已发或待发送的彩信记录列表 --> <resultMap id="m ...

  3. Linux下使用vsftp

    参考网址: http://wenku.baidu.com/view/4339434bc850ad02de80419c.html?re=view root用户无法ftp登录,显示530 Permissi ...

  4. Java集合框架学习总结

    转自:http://www.cnblogs.com/oubo/archive/2012/01/07/2394639.html Oubo的博客 以下介绍经常使用的集合类,这里不介绍集合类的使用方法,只介 ...

  5. Codeforces Round #248 (Div. 2) A. Kitahara Haruki's Gift

    解决思路是统计100的个数为cnt1,200的个数为cnt2 则 cnt1    cnt2 奇数      奇数 奇数      偶数 偶数      奇数 偶数     偶数 当cnt1为奇数时一定 ...

  6. ACM: HDU 1874 畅通工程续-Dijkstra算法

    HDU 1874 畅通工程续 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Desc ...

  7. 彻底弄明白之java多线程中的volatile

    一. volatite 简述 Java 语言提供了一种稍弱的同步机制,即 volatile 变量.用来确保将变量的更新操作通知到其他线程,保证了新值能立即同步到主内存,以及每次使用前立即从主内存刷新. ...

  8. sublime text 3 的在文件夹中查找的快捷键没有反应 的bug冲突

    11:19 2015/11/18 sublime text 3 的在文件夹中查找的快捷键没有反应 的bug冲突 在文件夹查找的快捷键:ctrl shift f没有反应,后来发现是百度输入法与它有问题, ...

  9. jquery中prop()方法和attr()方法的区别浅析

    官方例举的例子感觉和attr()差不多,也不知道有什么区别,既然有了prop()这个新方法,不可能没用吧,那什么时候该用attr(),什么时候该用prop()呢 jquery1.6中新加了一个方法pr ...

  10. checkbox全选与反选

    用原生js跟jquery实现checkbox全选反选的一个例子 原生js: <!DOCTYPE html> <html lang="en"> <hea ...