摘要本计算器是由java语言所编程设计的标准计算器,可以进行十进制下的四则运算(加、减、乘、除)、开平方、求余、求倒数,还可以实现二进制与十进制之间的转换。
通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。
关键词: java语言,计算器,算法目录摘要 (1)1概述 (3)1.1设计目的及思路 (3)1.2功能模块设计 (3)1.3系统功能图 (3)2计算器的设计与实现 (4)2.1程序界面 (4)2.2程序源代码 (4)3计算器演示 (10)4运行调试及讨论分析 (13)5小结 (14)参考文献: (14)1概述1.1设计目的及思路通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。
利用Java Applet图形界面首先开始设计一个计算器的界面,定义计算器所需要的按钮并赋给其按钮名称,使得使用计算器时简单明了,清晰可见,操作轻松。
给各个按钮进行算法,利用鼠标点击事件,当鼠标点击某个按钮时就开始执行那个按钮所定义的算法,生成数据并显示。
除数字的输入为直接进行输入外,其他运算例如+、-、*、/、开平方等算法要求计算时通过内部较为复杂的运算将结果显示在显示屏上。
至于其中的进制转换功能的实现则是直接调用Java中进制转换的函数,例如要将十进制转换成二进制则可直接调用函数Integer.toBinaryString(int i)来实现,充分显示了Java语言的简洁性和Java语言功能的强大性。
当然了在输入数据时还要进行异常捕捉,防止越界的现象的发生,这也是Java语言健壮性的体现!1.2功能模块设计以下为标准计算器的基本功能:(1)加法两个数据进行加操作,可以为小数。
(2)减法两个数据进行减操作,可以为负数相减。
(3)乘法两个数相乘操作。
(4)除法两个数相除操作。
(5)开平方对任意一个数进行开方运算,可以是小数。
(6)求余对任意一个数进行求余运算。
(7)倒数对任意一个数进行倒数运算。
(8)转换将十进制数转换为二进制以及将二进制转换为十进制。
1.3系统功能图2计算器的设计与实现2.1程序界面2.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("平方"); jButtonPINGFANG.addActionListener(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 stubreturn 0;}//主函数public static void main(String[]args) {new Calculator(); //对小程序进行初始化}}3计算器演示加法减法乘法除法倒数平方二进制转换为十进制十进制转换为二进制4运行调试及讨论分析将代码写好之后检查代码的正确性,检查代码无误后将代码进行调试和运行将会出现一个JavaApplet计算器界面。