JAVA实训报告--计算器

时间:2024.4.20

《Java实训》设计报告

计算器

计算机技术与工程学院

20##年7月11日

项目名称

一、项目需求

  本程序的主要功能:

(1)单击“计算器”上的数字按钮(0~9)可以设置参与计算的运算数。

(2)单击“计算器”上的运算符按钮(+、-、*、/、1/x、sqrt、%)可以选择运算符号。

(3)单击“计算器”上的“=”按钮显示计算结果。

(4)单击“计算器”上的“复位”按钮清空计算结果。

(5)单击“计算器”上的“删除”按钮删除输入的最后一个数字。

二、项目分析与设计

在设计计算器时,编写2个Java源文件:CalculatorWindow.java、NumberButton.java计算器除了上述Java源文件所给出的类外,还需要Java系统提供的一些重要类,如JButton,JTextField等。

下面是2个Java源文件的总体设计。

(1)CalculatorWindow.java(主类)

CalculatorWindow类负责创建计算器的主窗口,该类含有main方法,计算器从该类开始执行。CalculatorWindow类有4种类型的对象,分别是:LinkedList<String>、NumberButton、JButton、JTextField。

(2)NumberButton.java

NumberButton类创建的对象是主类CalculatorWindow窗口的一个“数字”按钮。NumberButton有一个int类型的成员temp,用于标明所创建的按钮所含有的运算符号。NumberButton所创建的22个按钮被添加到CalculatorWindow窗口中。

    1、CalculatorWindow类(主类)

(1)数据和方法

CalculatorWindow类是javax.swing包中JFrame的一个字类,并实现了ActionListener接口。类中有关数据和方法的详细说明。

1)成员变量

jbArray是NumberButton型数组,每个单元是一个NumberButton类创建的“数字按钮”对象,该数组长度为10。numberButton数组中的“数字按钮”含有的数字依次为0~9。每个“数字按钮”都注册有ActionEvent事件监听器。

2)方法

main(String args[])方法是计算器程序运行的入口方法。

CalculatorWindow()是构造方法,负责完成窗口的初始化。

三、 源代码

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class jisuanqi extends JFrame implements ActionListener

{

      private JTextField jtResult=new JTextField();

      private JButton jb_clear=new JButton("复位");

      private JButton jb_delete=new JButton("删除");

      private static JButton[][] jbArray={{new JButton("7"),new JButton("4"),new JButton("1"),new JButton("0")},

                                         {new JButton("8"),new JButton("5"),new JButton("2"),new JButton("+/-")},

                                         {new JButton("9"),new JButton("6"),new JButton("3"),new JButton(".")},

                                         {new JButton("/"),new JButton("*"),new JButton("-"),new JButton("+")},

                                         {new JButton("sqrt"),new JButton("%"),new JButton("1/x"),new JButton("=")}                               

      };

      int first=0;

      double qian;

    String fuhao;

    boolean clear=true,clickable=true;  

      public jisuanqi()

      {

             setFrame();

             addListener();

      }

      public void setFrame()

      {

             this.setLayout(null);

             this.setTitle("计算器");

             jtResult.setBounds(120,100,310,30);

             jtResult.setEditable(false);

             jtResult.setHorizontalAlignment(JTextField.RIGHT);

             this.add(jtResult);

             jb_clear.setBounds(290,150,60,30);

             this.add(jb_clear);

             for(int i=0;i<jbArray.length;i++)

             {

                    for(int j=0;j<jbArray[0].length;j++)

                    {

                           jbArray[i][j].setBounds(50+80*i,200+60*j,60,30);

                           this.add(jbArray[i][j]);

                    }

             }

             jb_delete.setBounds(370,150,60,30);

             this.add(jb_delete);

             this.setBounds(430,130,500,500);

             this.setVisible(true);

      }

      public void addListener()

      {

             jtResult.addActionListener(this);

             jb_clear.addActionListener(this);

             jb_delete.addActionListener(this);

             for(int i=0;i<jbArray.length;i++)

             {

                    for(int j=0;j<jbArray[0].length;j++)

                    {

                           jbArray[i][j].addActionListener(this);

                    }

             }

      }

      public void actionPerformed(ActionEvent e)

      {

             Object temp=e.getSource();

             if(temp==jb_clear)

             {

                    jtResult.setText("");

             }

             if(temp==jb_delete)

             {

                    String s = jtResult.getText();

                    jtResult.setText("");

                    for (int i = 0; i < s.length() - 1; i++)

                    {

                           char a = s.charAt(i);

                           jtResult.setText(jtResult.getText() + a);

                    }

             }

             if(temp==jbArray[0][3])//点击"0"按钮

             {

                    if(clear==false)//判断是否点击了符号位

                    jtResult.setText("");

                    jtResult.setText(jtResult.getText()+"0");

             }

             if(temp==jbArray[0][2])//点击"1"按钮

             {

                    if(clear==false)

                    jtResult.setText("");

                    jtResult.setText(jtResult.getText()+"1");

                    clear=true;//第二次不在清空

             }

             if(temp==jbArray[1][2])//点击"2"按钮

             {

                    if(clear==false)

                    jtResult.setText("");

                    jtResult.setText(jtResult.getText()+"2");

                    clear=true;

             }

             if(temp==jbArray[2][2])//点击"3"按钮

             {

                    if(clear==false)

                    jtResult.setText("");

                    jtResult.setText(jtResult.getText()+"3");

                    clear=true;

             }

             if(temp==jbArray[0][1])//点击"4"按钮

             {

                    if(clear==false)

                    jtResult.setText("");

                    jtResult.setText(jtResult.getText()+"4");

                    clear=true;

             }

             if(temp==jbArray[1][1])//点击"5"按钮

             {

                    if(clear==false)

                    jtResult.setText("");

                    jtResult.setText(jtResult.getText()+"5");

                    clear=true;

             }

             if(temp==jbArray[2][1])//点击"6"按钮

             {

                    if(clear==false)

                    jtResult.setText("");

                    jtResult.setText(jtResult.getText()+"6");

                    clear=true;

             }

             if(temp==jbArray[0][0])//点击"7"按钮

             {

                    if(clear==false)

                    jtResult.setText("");

                    jtResult.setText(jtResult.getText()+"7");

                    clear=true;

             }if(temp==jbArray[1][0])//点击"8"按钮

             {

                    if(clear==false)

                    jtResult.setText("");

                    jtResult.setText(jtResult.getText()+"8");

                    clear=true;

             }

             if(temp==jbArray[2][0])//点击"9"按钮

             {

                    if(clear==false)

                    jtResult.setText("");

                    jtResult.setText(jtResult.getText()+"9");

                    clear=true;

             }

             if(temp==jbArray[2][3])//点击"."按钮

             {

                    clickable=true;

                    for (int i = 0; i < jtResult.getText().length(); i++)

                    if ('.' == jtResult.getText().charAt(i))

                    {

                           clickable=false;

                           break;

                    } //第一层判断是否里面含有小数点;

                    if(clickable==true)//第二坛判断

                    jtResult.setText(jtResult.getText()+".");

             }

             try

             {

                    if(temp==jbArray[3][3])//点击"+"按钮

                    {

                           qian=Double.parseDouble(jtResult.getText());

                           fuhao="+";

                           clear=false;

                    }

                    if(temp==jbArray[3][2])//点击"-"按钮

                    {

                           qian=Double.parseDouble(jtResult.getText());

                           fuhao="-";

                           clear=false;

                    }

                    if(temp==jbArray[3][1])//点击"*"按钮

                    {

                           qian=Double.parseDouble(jtResult.getText());

                           fuhao="*";

                           clear=false;

                    }

                    if(temp==jbArray[3][0])//点击"/"按钮

                    {

                           qian=Double.parseDouble(jtResult.getText());

                           fuhao="/";

                           clear=false;

                    }

                    if(temp==jbArray[4][3])//点击"="按钮

                    {

                           double ss=Double.parseDouble(jtResult.getText());

                           jtResult.setText("");

                           if(fuhao=="+")

                           jtResult.setText(qian+ss+"");

                           if(fuhao=="-")

                           jtResult.setText(qian-ss+"");

                           if(fuhao=="*")

                           jtResult.setText(qian*ss+"");

                           if(fuhao=="/")

                           jtResult.setText(qian/ss+"");

                           clear=false;//要清空前一次的数据

                    }

                    if(temp==jbArray[4][0])//点击"sqrt"按钮

                    {

                           String s = jtResult.getText();

                           if(s.charAt(0) == '-')

                           {

                                  jtResult.setText("负数不能开根号");

                           }

                           else

                           jtResult.setText(Double.toString(java.lang.Math.sqrt(Double.parseDouble(jtResult.getText()))));

                           clear=false;

                    }

                    if(temp==jbArray[4][2])//点击"1/x"按钮

                    {

                           if (jtResult.getText().charAt(0) == '0'&&jtResult.getText().length() == 1)

                           {

                                  jtResult.setText("除数不能为零");

                           }

                           else

                           {

                                  boolean isDec = true;

                                  int i, j, k;

                                  String s = Double.toString(1 / Double.parseDouble(jtResult.getText()));

                                  for (i = 0; i < s.length(); i++)

                                  if (s.charAt(i) == '.')

                                  break;

                                  for (j = i + 1; j < s.length(); j++)

                                  if (s.charAt(j) != '0')

                                  {

                                         isDec = false;

                                         break;

                                  }

                                  if (isDec == true)

                                  {

                                         String stemp = "";

                                         for (k = 0; k < i; k++)

                                         stemp += s.charAt(k);

                                         jtResult.setText(stemp);

                                  }

                                  else

                                  jtResult.setText(s);

                           }

                           clear=false;

                    }

                    if(temp==jbArray[4][1])//点击"%"按钮

                    {

                           jtResult.setText("0");

                           clear=false;

                    }

                    if (temp == jbArray[1][3]) //点击"+/-"按钮

                    {

                           boolean isNumber = true;

                           String s = jtResult.getText();

                           for (int i = 0; i < s.length(); i++)

                           if (! (s.charAt(i) >= '0'&&s.charAt(i) <= '9'||s.charAt(i) == '.'||s.charAt(i) == '-'))

                           {

                                  isNumber = false;

                                  break;

                           }

                           if (isNumber == true)

                           {

                                  //如果当前字符串首字母有'-'号,代表现在是个负数,再按下时,则将首符号去掉

                                  if(s.charAt(0) == '-')

                                  {

                                         jtResult.setText("");

                                         for (int i = 1; i < s.length(); i++)

                                         {

                                                char a = s.charAt(i);

                                                jtResult.setText(jtResult.getText() + a);

                                         }

                                  }

                                  //如果当前字符串第一个字符不是符号,则添加一个符号在首字母处

                                  else

                                  jtResult.setText('-' + s);

                           }

                    }

             }

             catch(Exception eee)

             {

                    System.out.println("运算时,首先输入数字或字符");

                    jtResult.setText("运算出错");

                    clear=false;

             }

      }

      public static void main(String args[])

      {

             new jisuanqi();

      }

}

四、运行结果截图

      1、CalculatorWindow创建的窗口效果如图1所示。

2、加法测试   8+7=15

 

3、减法测试  9-5=4

 

4、乘法测试  2*3=6

 

5、除法测试  15/5=3

 

6、用复位实现清空功能

7、用删除实现退格功能

8、开根号

五、  1)项目总结

本程序为JAVA中简单的计算器,主要实现简单的数学计算,删除,复位等功能。运用JAVA中的类,数组,成员变量等知识,有简单的界面,按钮等。

本程序还存在一定的缺陷,功能简单,界面还需美化等。

2)    心得体会

编写一个程序,无论会实现什么功能,都必须掌握这门语言的要领、基本知识及工具的运用,同时别的辅助工具也要有一定的了解。因此要更好的运用Java语言编程还需更深入的学习,这样才能把一个程序的功能实现的淋漓尽致,界面才会更加美观。

同时编写这个程序让我更好的理解了数组、类的运用及事件的监听和获取等功能。

3)参考文献

1、    苗春义.Java项目开发全程实录.北京:清华大学出版社.2008.6

2、    潘浩,李福玲.Java程序设计.北京交通大学出版社 .2011.5

3、    沈泽刚,秦玉平.Java语言程序设计.清华大学出版社.2009.8

更多相关推荐:
计算器实训报告

报告编号第3组综合课程设计报告嵌入式计算器实训学生姓名指导教师所在系电子工程系所学专业电子信息工程年级20xx级201年6月1设计题目描述与总体要求22设计研究的主要工作23系统概述24设计原理与方法35小结9...

实训报告参考(计算器)

实训项目一Java电子计算器需求分析在日常生活中经常需要用到计算器比如科学计算数值计算会计业务等在Applet中实现一个精巧实用的计算器可以让用户在使用网站服务的同时可以很方便地进行数据运算可增加页面的实用性同...

JAVA实训报告--计算器

Java实训设计报告专业班级学号姓名计算器软件技术0923090123037范付明石家庄科技信息职业学院信息工程系20xx年10月15日Java实训设计报告Java实训设计报告项目名称一项目需求本程序的主要功能...

计算器单片机实训报告

重庆电力高等专科学校单片机实训报告简易计算器专业电子信息工程技术班级信息1212组员张忠艳学号20xx03020xx7组员王传胜学号20xx03020xx3组员汤承练学号20xx03020xx2指导老师李景明任...

计算器实验报告

目录一系统开发的背景1二系统分析与设计1一二计算器的主要功能1系统模块结构设计1三系统的设计与实现2一二计算器的初始界面2一般计算3三解一元二次方程5四计算银行本利和5四系统测试7一二测试主函数MAIN7测试一...

简单的计算器实验报告

HUNANUNIVERSITY程序设计训练简单的计算器报告学生姓名田博鑫学生学号专业班级指导老师20xx年6月16日至20xx年7月10日1吴蓉晖1程序设计目的和要求目的此次程序设计的目的主要是为了我们能更好的...

计算器实验报告 (1)

HTML网页实验报告院系计算机控制与工程学院班级计1241学号姓名完成日期1一实验名称设计一个网页计算器二需求分析计算器是日常生活中十分便捷有效的工具能实现加减乘除开方求倒数等简单运算的工具要实现计算功能可以用...

汇编计算器程序实验报告

《汇编语言程序设计》综合程序设计实验报告题目:计算器一、项目简介在我们生活中无时不刻不用到计算,虽说计算并不是很麻烦,但有的时候复杂的运算仍需要花费我们大量的时间去解决。所以要有这样一个程序解决这个问题。基于这…

C#计算器实验报告

C计算器实验报告班级学号20xx13432姓名蔡启林一实验目的和要求设计一个简单计算器具有一般计算功能能进行基本的加减乘除运算还具有求根号倒数等功能特点是能进行不同进制的运算和不同进制间的转换主要的工作主要是操...

java计算器实验报告

广东海洋大学学生实验报告书实验名称:JAVA计算器程序设计课程名称:JAVA程序设计1)实验总结:刚做之前,勉强还能做些小程序,但在进行了计算器程序设计的时候,才发现很多语句还不能联系运用,大部分还是通过百度和…

简易计算器实验报告

目录1概述12系统软件设计121设计目标和实现方法122整体方案论证13系统硬件的设计231复位电路的设计232时钟振荡器电路的设计333输入电路的设计434输出电路的设计74系统程序的设计与介绍941读键输入...

java计算器实验报告

实验报告实验名称课程名称Java程序设计学生姓名号成绩指导教师实验日期专业班级学一实验目的综合应用所学的知识分析问题解决问题提高实际编程能力及程序调试能力二实验内容及要求三实验仪器与设备Eclipse四问题分析...

计算器实训报告(34篇)