java计算器设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要
本计算器是由java语言所编程设计的标准计算器,可以进行十进制下的四则运算(加、减、乘、除)、开平方、求余、求倒数,还可以实现二进制与十进制之间的转换。

通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。

关键词: java语言,计算器,算法
目录
摘要 (1)
1概述 (3)
设计目的及思路 (3)
功能模块设计 (3)
系统功能图 (3)
2计算器的设计与实现 (4)
程序界面 (4)
程序源代码 (4)
3计算器演示 (10)
4运行调试及讨论分析 (13)
5小结 (14)
参考文献: (14)
1概述
设计目的及思路
通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。

利用Java Applet图形界面首先开始设计一个计算器的界面,定义计算器所需要的按钮并赋给其按钮名称,使得使用计算器时简单明了,清晰可见,操作轻松。

给各个按钮进行算法,利用鼠标点击事件,当鼠标点击某个按钮时就开始执行那个按钮所定义的算法,生成数据并显示。

除数字的输入为直接进行输入外,其他运算例如+、-、*、/、开平方等算法要求计算时通过内部较为复杂的运算将结果显示在显示屏上。

至于其中的进制转换功能的实现则是直接调用Java中进制转换的函数,例如要将十进制转换成二进制则可直接调用函数Integer.toBinaryString(int i)来实现,充分显示了Java语言的简洁性和Java语言功能的强大性。

当然了在输入数据时还要进行异常捕捉,防止越界的现象的发生,这也是Java语言健壮性的体现!
功能模块设计
以下为标准计算器的基本功能:
(1)加法
两个数据进行加操作,可以为小数。

(2)减法
两个数据进行减操作,可以为负数相减。

(3)乘法
两个数相乘操作。

(4)除法
两个数相除操作。

(5)开平方
对任意一个数进行开方运算,可以是小数。

(6)求余
对任意一个数进行求余运算。

(7)倒数
对任意一个数进行倒数运算。

(8)转换
将十进制数转换为二进制以及将二进制转换为十进制。

系统功能图
2计算器的设计与实现
程序源代码
import javax.swing.*;
import javax.swing.text.JTextComponent;
import java.util.StringTokenizer;
import java.awt.*;
import java.awt.event.*;
import java.math.*;
public class Calculator implements ActionListener {
JFrame jf=new JFrame("计算器");
JTextField tf=new JTextField();
JPanel pnl; 计算器
减法运算 加法运算
乘法运算
除法运算
倒数运算 开平方运

求余运算 二进制与
十进制转
JButton jButtonDENG;
JButton jButtonJIAN;
JButton jButtonCHENG;
JButton jButton1;
JButton jButton2;
JButton jButton3;
JButton jButton4;
JButton jButton5;
JButton jButton6;
JButton jButton7;
JButton jButton8;
JButton jButton9;
JButton jButton0;
JButton jButtonCHU;
JButton jButtonQINGKONG;
JButton jButtonJIA;
JButton jButtonQUYU;
JButton jButtonPINGFANG;
JButton jButtonXIAOSHUDIAN;
JButton jButtonBACKSPACE;
JButton jButtonDAOSHU;
JButton jButtonKAIPINGFANG;
JButton jButtonERJINZHI;
JButton jButtonSHIJINZHI;
public Calculator (){ //初始化界面的方法Container c=jf.getContentPane();
tf.setHorizontalAlignment(JTextField.RIGHT);
c.add(tf,"North");
JPanel pnl=new JPanel();
c.add(pnl,"Center");
pnl.setLayout(new GridLayout(6,5));
jButton1=new JButton("1");
jButton1.addActionListener(this);
pnl.add(jButton1);
jButton2=new JButton("2");
jButton2.addActionListener(this);
pnl.add(jButton2);
jButton3=new JButton("3");
jButton3.addActionListener(this);
pnl.add(jButton3);
jButtonBACKSPACE=new JButton("backspace"); jButtonBACKSPACE.addActionListener(this); pnl.add(jButtonBACKSPACE);
jButton4=new JButton("4");
jButton4.addActionListener(this);
pnl.add(jButton4);
jButton5=new JButton("5");
jButton5.addActionListener(this);
pnl.add(jButton5);
jButton6=new JButton("6");
jButton6.addActionListener(this);
pnl.add(jButton6);
jButtonJIA=new JButton("+");
jButtonJIA.addActionListener(this);
pnl.add(jButtonJIA);
jButton7=new JButton("7");
jButton7.addActionListener(this);
pnl.add(jButton7);
jButton8=new JButton("8");
jButton8.addActionListener(this);
pnl.add(jButton8);
jButton9=new JButton("9");
jButton9.addActionListener(this);
pnl.add(jButton9);
jButtonJIAN=new JButton("-");
jButtonJIAN.addActionListener(this);
pnl.add(jButtonJIAN);
jButton0=new JButton("0");
jButton0.addActionListener(this);
pnl.add(jButton0);
jButtonQINGKONG=new JButton("清空"); jButtonQINGKONG.addActionListener(this); pnl.add(jButtonQINGKONG);
jButtonCHENG=new JButton("*"); jButtonCHENG.addActionListener(this);
pnl.add(jButtonCHENG);
jButtonCHU=new JButton("/");
jButtonCHU.addActionListener(this);
pnl.add(jButtonCHU);
jButtonQUYU=new JButton("%"); jButtonQUYU.addActionListener(this);
pnl.add(jButtonQUYU);
jButtonPINGFANG=new JButton("平方");
ener(this);
pnl.add(jButtonPINGFANG); jButtonXIAOSHUDIAN=new JButton("."); jButtonXIAOSHUDIAN.addActionListener(this); pnl.add(jButtonXIAOSHUDIAN);
jButtonDENG=new JButton("=");
jButtonDENG.addActionListener(this);
pnl.add(jButtonDENG);
jButtonDAOSHU=new JButton("倒数");
jButtonDAOSHU.addActionListener(this);
pnl.add(jButtonDAOSHU);
jButtonKAIPINGFANG=new JButton("开平方"); jButtonKAIPINGFANG.addActionListener(this);
pnl.add(jButtonKAIPINGFANG);
jButtonERJINZHI=new JButton("二进制");
jButtonERJINZHI.addActionListener(this);
pnl.add(jButtonERJINZHI);
jButtonSHIJINZHI=new JButton("十进制");
jButtonSHIJINZHI.addActionListener(this);
pnl.add(jButtonSHIJINZHI);
jf.setSize(600,400);
jf.setVisible(true);
}
public void actionPerformed(ActionEvent event){ //检测运算符的方法try {
double wen=0;
String toknizer="+";
String ben;
String wenben=tf.getText()+event.getActionCommand();
tf.setText(wenben); //各运算符的判断运行代码
if(wenben.indexOf("*")!=-1) {
toknizer="*";
}
if(wenben.indexOf("+")!=-1) {
toknizer="+";
}
if(wenben.indexOf("-")!=-1) {
toknizer="-";
}
if(wenben.indexOf("/")!=-1) {
toknizer="/";
}
if(wenben.indexOf("%")!=-1) {
toknizer="%";
}
if(wenben.indexOf("平方")!=-1) {
toknizer="平方";
}
if(wenben.indexOf("倒数")!=-1) {
toknizer="倒数";
}
if(wenben.indexOf("开平方")!=-1) {
toknizer="开平方";
}
if(wenben.indexOf("二进制")!=-1) {
toknizer="二进制";
}
if(wenben.indexOf("十进制")!=-1) {
toknizer="十进制";
}
//各个运算符的运算方法代码
if(event.getSource()==jButtonQINGKONG){ //清空算法wenben="";
tf.setText(wenben);
}
if(event.getSource()==jButtonBACKSPACE){ //清除算法wenben=wenben.substring(0,wenben.length()-10);
tf.setText(wenben);
}
if(event.getSource()==jButtonDENG){ //"="算法
wenben=wenben.substring(0,wenben.length()-1);
double b[]=new double[10];
String a[]=new String[15];
StringTokenizer sun=new StringTokenizer(wenben,toknizer); int i=0;
while(sun.hasMoreTokens()){
a[i++]=sun.nextToken();
}
for(int j=0;j<10;j++){
String s=a[j];
String k=a[j+1];
if(s==null){
break;
}else{
if(toknizer=="*"){ //"*"算法
if(j==0){wen=1;}
b[j]=Double.parseDouble(s);
wen=wen*b[j];
ben=Double.toString(wen);
tf.setText(wenben+"="+ben);
}if(toknizer=="+"){ //"+" 算法
if(j==0){wen=0;}
b[j]=Double.parseDouble(s);
wen=wen+b[j];
ben=Double.toString(wen);
tf.setText(wenben+"="+ben);
}if(toknizer=="-"){ //"-"算法
b[j]=Double.parseDouble(s);
if(j==0){wen=2*b[j];}
wen=wen-b[j];
ben=Double.toString(wen);
tf.setText(wenben+"="+ben);
}
if(toknizer=="/"){ // "/"算法
b[j]=Double.parseDouble(s);
if(j==0){wen=b[j]*b[j];}
wen=wen/b[j];
ben=Double.toString(wen);
tf.setText(wenben+"="+ben);
}
if(toknizer=="平方"){ //平方算法
if(j==0){wen=1;}
b[j]=Double.parseDouble(s);
wen=wen*b[j]*b[j];
ben=Double.toString(wen);
tf.setText(wenben+"="+ben);
}
if(toknizer=="倒数"){ //倒数算法
b[j]=Double.parseDouble(s);
wen=1/b[j];
ben=Double.toString(wen);
tf.setText(wenben+"="+ben);
}
if(toknizer=="开平方"){ //开平方算法
if(j==0){wen=0;}
b[j]=Double.parseDouble(s);
double wen1=sqrt(b[j]);
ben=Double.toString(wen1);
tf.setText(wenben+"="+ben);
}
JTextComponent textAnswer = null;
if (toknizer=="十进制") { //二进制转为十进制代码//b[j]=Integer.parseInt(s);
wen =Integer.parseInt(s,2);
ben=Double.toString(wen);
tf.setText(wenben+"="+ben);
}
if (toknizer=="二进制") { //十进制转换为二进制代码 int den =Integer.parseInt(s);
String daen = Integer.toBinaryString(den);
tf.setText(wenben+"="+daen);
}
if(toknizer=="%"){ //"%"算法
if(j==0){
b[j]=Double.parseDouble(s);
b[j+1]=Double.parseDouble(k);
if(b[j]<b[j+1]){
wen=b[j];
} if(b[j]==b[j+1]) {
wen=0;
}
if(b[j]>b[j+1]) {
wen=b[j]%b[j+1];
}
} if(j>1) {
b[j]=Double.parseDouble(a[j]);
wen=wen%b[j];
}
ben=Double.toString(wen);
tf.setText(wenben+"="+ben);
}
}
}
}
}
catch(Exception e){
e.getMessage();
}
}
private int sqrt(double d) {
// TODO Auto-generated method stub
return 0;
}
//主函数
public static void main(String[]args) {
new Calculator(); //对小程序进行初始化
}
}
3计算器演示
加法减法乘法除法
倒数平方
二进制转换为十进制
十进制转换为二进制
4运行调试及讨论分析
将代码写好之后检查代码的正确性,检查代码无误后将代码进行调试和运行将会出现一个JavaApplet计算器界面。

在调试过程中可能会出现有界面但是不能运行小程序,那是因为没有初始化小程序,那时我们应该在主函数中将小程序进行初始化,这样小程序才能运行!
在调试和运行完全正确后,我们就可以按照自己的医院将小程序进行简单测试,例如输入一些简单数据分别运行各个按钮结果正确后可以初步确定程序师正确的。

有时候我们还要输入不同范围的值进行测试,可能会发现更多的错误,因为有时候我们定义数据的范围可能会过小或输入数据会越界,到时我们就可以改正以适应更多更大的运算。

有时候我们会不自觉的选择一种最优函数方法尽量将自己的代码简单规范而又不缺少题目所要求的功能,那就要求我们翻阅很多参考书和查阅很多资料。

其实javaApplet图形界面的布局也是我们要讨论的范围,如何使得界面更加美
观是我们要探讨的!
有时候我们可能会到书上或网上找到一些满足我们要求的程序代码,在此我们应该取其优秀的简单易理解代码作为我们设计程序的代码,作为初学者参考和借用部分外部程序是不可避免,但是我认为前提我们应该看懂那些程序代码,要知其所以然,那样才达到我们学程序的目的,但不主张完全照搬,否则就会没意义了!
5小结
到此本次课程报告快接近尾声了,通过本次课程设计我学到了好多、也发现了自己的好多不足!
很显然最明显的收获是理解和较熟练的掌握了JavaApplet图形界面的基本方法,尤其在JavaApplet图形界面的布局方面学到颇多,以前布局很乱并且很多布局都是无效的。

在此次课设中通过查阅很多资料和同学的互相帮助,充分发挥了JavaApplet界面布局的优越性。

另外按钮功能的实现也是本次课设的一大难点,怎样实现那些功能是关键。

通过这次课设我又学会了好多Java中的简单便捷的函数,例如Integer.toBinaryString(int i)函数(实现的是将一个十进制数转换成一个二进制的数)。

另外我这次课设部分程序是通过外部资料得到的,这使得我认识到查阅资料和开外多看书籍的重要性。

但不主张照搬,因为那不是我们自己成果,那是不光彩的。

总之通过此次课设我学到了好多,也掌握了好多关于JavaApplet的事件管理和按钮功能实现方法,这次课设给我的感受就是:只要你有心,不怕你完成不了课设。

参考文献:
[1]朱福喜.《Java语言程序设计》(第二版).科学出版社
[2]陈国君等.《Java程序设计基础》(第二版).清华大学出版社
[3] Deitel.《Java大学基础教程》(第六版).电子工业出版社
[4] MaryCampione.《Java语言导学》(第四版).机械工业出版社
[5] Y.Daniel Liang.《Java语言程序设计基础篇》(第六版). 机械工业出版社
[6] Kathy Sierra.《Head First Java》(第二版).东南大学出版社。

相关文档
最新文档