视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
java课程设计报告(完整版)
2025-09-24 06:36:41 责编:小OO
文档
1、摘要

  

2、概要设计

3、详细设计

4、测试分析

5、总结

6、参考文献

【前言】

Java不依赖平台的特点使得它受到广泛的关注,Java已成为网络时代最重要的语言之一。Java 语言不仅是一门正在被广泛使用的编程语言,而且已成为软件设计开发者应当掌握的一门基础语言。目前,很多新的技术领域都涉及Java语言,国内外许多大学已将Java语言列入了本科教学计划,掌握Java已经成为共识。

本次课程设计就是利用java语言来编写简单的计算器,能进行加、减、乘、除四则运算,下面给出了该设计的理论分析和具体步骤。

一、摘要

本计算器可以进行简单的四则运算(加、减、乘、除),但仅限于十进制下。“Backspace”按钮表示退格,“CE”按钮表示清除当前文本框内的数据,“C”按钮表示清除文本框内数据,同时var、answer清零。该程序可在JCreator环境下直接运行。

二、概要设计

1、自定义说明

(1)类名:Calculator

     作用:主类

     继承的父类:JFrame类

     实现的接口:ActionListener类

public class Calculator extends JFrame implements ActionListener

{

   

   private static String[] btnTexts = {"0

//定义数组bstTexts来存放计算器上的各个按钮

  

 Button button[] = new Button[16];

   Button BkButton,CeButton,CButton,EqButton;

   boolean clickable;         //控制当前能否按键

   double vard, answerd;     //用来保存double型数据的中间值(vard)和最后结果(answerd)

   short key = -1, prekey = -1;   //key用来保存当前进行何种运算,prekey用来保存前次进行何种运算

   DecimalFormat df;              //设置数据输出精度

   private JTextField displayField = new JTextField(" ");    //计算结果显示区

     public Calculator()

{

    ………

}

public void actionPerformed(ActionEvent event)

{

    ………

}

}

(2)方法名:Calculator

    作用:设置窗体布局

    public Calculator()

   {

      //Frame frame = new Frame("Calculator");

      super("Calculator");                     //显示主窗口标题“Calculator”

    df = new DecimalFormat("0.00000000");  //设置数据输出精度(对于double型值)

     BkButton = new Button("Backspace");

       BkButton.setForeground(Color.red);

     CeButton = new Button("CE");

      tForeground(Color.red);

       CButton = new Button("C");

       CButton.setForeground(Color.red);

      EqButton = new Button("=");

EqButton.setForeground(Color.red);   //将“Backspace”、“CE”、”C”、“=”显示为红色

       BkButton.addActionListener(this);

      nListener(this);

       CButton.addActionListener(this);

      EqButton.addActionListener(this);

     displayField.setHorizontalAlignment(JTextField.RIGHT);   //将计算结果显示在displayField的右面

      JPanel p1 = new JPanel(new FlowLayout());   //以FlowLayout布局p1

      p1.add(BkButton);

      p1.add(CeButton);

      p1.add(CButton);

      p1.add(EqButton);     //设置四个按钮:"Backspace

      JPanel p2 = new JPanel(new GridLayout(2,1)); //以GridLayout布局p2

      p2.add(displayField);

      p2.add(p1);                        //加入显示结果的JTextField和p1

      JPanel p3 = new JPanel(new GridLayout(4,4)); //以GridLayout布局p3

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

      {

button[i] = new Button(btnTexts[i]);   //将数组btnTexts[]的值赋给数组button[]

button[i].setForeground(Color.blue);    //组件button的前景色显示蓝色

          p3.add(button[i]);

          button[i].addActionListener(this);

        }

      Container cp = this.getContentPane();      //采用默认的BorderLayout布局cp

      cp.add(p2,BorderLayout.NORTH);

R);

    }

(3)方法名:actionPerformed

      作用:设置各个按钮的行为

public void actionPerformed(ActionEvent event)

    {

boolean sign = false;    //判断是否是double型数参与运算,是为true,不是为false

        Object temp = event.getSource();

        try

        {

for (int i = 0; i <= 9; i++) //如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后

                if (temp == button[i] && clickable == true)

    displayField.setText(displayField.getText() + Integer.toString(i));

//按下'.'按钮时,判断当前文本框内字符串中含不含'.',如果已含,则不允许再插入'.'

            if (temp == button[14] && clickable == true)

            {

                ……….

            }

            if ( (temp == button[10] || temp == button[11] || temp == button[12] || temp == button[13]) && clickable == true)

            {

               //'+'操作

              if (temp == button[10])

              {

                   …………

              }

              //'-'操作

              if (temp == button[11])

              {

                   …………

              }

              //'*'操作

              if (temp == button[12])

              {

                   …………

              }

              //'/'操作

              if (temp == button[13])

            {

                   …………

              }

            //'='操作

            if (temp == EqButton && clickable == true)

            {

                   …………

              }

            //按下'+/-'按钮时处理

            if (temp == button[15] && clickable == true)

            {

                ………… 

          }

             //按下'Backspace'键,利用循环将当前字符串中的最后一个字母删除

             if (temp == BkButton && clickable == true)

             {

                  …………

              }

              //按下'CE'按钮,将当前文本框内数据清除

              if (temp == CeButton)

              {

                   ………

               }

               //按下'C'按钮,文本框内数据清除,同时var,answer清0

               if (temp == CButton)

               {

                   ………

               }

        }

        //输入中如果有操作非法,比如按下两次'+',捕获异常

        catch (Exception e)

        {

            displayField.setText("操作非法");

            clickable = false;

         }

2、界面设计

   下图为该程序运行时的界面截图:

三、详细设计

  以下为该程序的主要代码:

import javax.swing.*;

import java.awt.*;

import javax.swing.event.*;

import java.awt.event.*;

imalFormat;

public class Calculator extends JFrame implements ActionListener

{

    private static String[] btnTexts = {"0

   Button button[] = new Button[16];

   Button BkButton,CeButton,CButton,EqButton;

   boolean clickable;           //控制当前能否按键

   double vard, answerd;        //用来保存double型数据的中间值(vard)和最后结果(answerd)

   short key = -1, prekey = -1;  //key用来保存当前进行何种运算,prekey用来保存前次进行何种运算

   DecimalFormat df;            //设置数据输出精度

   private JTextField displayField = new JTextField(" ");//计算结果显示区

   public Calculator()

   {

          super("Calculator");               //显示主窗口标题“Calculator”

      df = new DecimalFormat("0.00000000");   //设置数据输出精度(对于double型值)

      BkButton = new Button("Backspace");

        BkButton.setForeground(Color.red);

      CeButton = new Button("CE");

        CeButton.setForeground(Color.red);

        CButton = new Button("C");

        CButton.setForeground(Color.red);

      EqButton = new Button("=");

EqButton.setForeground(Color.red);     //将“Backspace”、“CE”、”C”、“=”显示为红色

       BkButton.addActionListener(this);

       CeButton.addActionListener(this);

       CButton.addActionListener(this);

     EqButton.addActionListener(this);

     displayField.setHorizontalAlignment(JTextField.RIGHT); //将计算结果显示在displayField的右面

      JPanel p1 = new JPanel(new FlowLayout());  //以FlowLayout布局p1

      p1.add(BkButton);

      p1.add(CeButton);

      p1.add(CButton);

      p1.add(EqButton);         //设置三个按钮:"Backspace

      JPanel p2 = new JPanel(new GridLayout(2,1)); //以GridLayout布局p2

      p2.add(displayField);

      p2.add(p1);         //加入显示结果的JTextField和p1

      JPanel p3 = new JPanel(new GridLayout(4,4)); //以GridLayout布局p3

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

      {

button[i] = new Button(btnTexts[i]);    //将数组btnTexts[]的值赋给数组button[]

button[i].setForeground(Color.blue);    //组件button的前景色示蓝色

         p3.add(button[i]);

         button[i].addActionListener(this);

          }

       Container cp = this.getContentPane();    //采用默认的BorderLayout布局cp

       cp.add(p2,BorderLayout.NORTH);

       cp.add(p3,BorderLayout.CENTER);

    }

      //设置各个按钮行为

     public void actionPerformed(ActionEvent event)

    {

boolean sign = false;           //判断是否是double型数参与运算,是为true,不是为false

        Object temp = event.getSource();

        try

        {

for (int i = 0; i <= 9; i++)  //如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后

                if (temp == button[i] && clickable == true)

                  displayField.setText(displayField.getText() + Integer.toString(i));

//按下'.'按钮时,判断当前文本框内字符串中含不含'.',如果已含,则不允许再插入'.'

            if (temp == button[14] && clickable == true)

            {

               boolean isDot = false;

               if (displayField.getText().length() == 0)

                  isDot = true;

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

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

                 {

                     isDot = true;

                     break;

                   }

               if (isDot == false)

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

              }

            if ( (temp == button[10] || temp == button[11] || temp == button[12] || temp == button[13]) && clickable == true)

            {

               //'+'操作

              if (temp == button[10])

              {

                switch (prekey)

                {

                  case 0:

                    answerd += Double.parseDouble(displayField.getText());

                    break;

                  case 1:

                    answerd -= Double.parseDouble(displayField.getText());

                    break;

                  case 2:

                    answerd *= Double.parseDouble(displayField.getText());

                    break;

                  case 3:

                    if (Double.parseDouble(displayField.getText()) == 0)

                    {

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

                        clickable = false;

                    }

                    else

                      answerd /= Double.parseDouble(displayField.getText());

                    break;

                  default:

le(displayField.getText());

                }

                displayField.setText("");

                prekey = key = 0;

              }

              //'-'操作

              if (temp == button[11])

              {

                switch (prekey)

                {

                  case 0:

                    answerd += Double.parseDouble(displayField.getText());

                    break;

                  case 1:

                    answerd -= Double.parseDouble(displayField.getText());

                    break;

                  case 2:

                    answerd *= Double.parseDouble(displayField.getText());

                    break;

                  case 3:

                    if (Double.parseDouble(displayField.getText()) == 0)

                    {

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

                        clickable = false;

                    }

                    else

                      answerd /= Double.parseDouble(displayField.getText());

                    break;

                  default:

                    answerd = Double.parseDouble(displayField.getText());

                }

                displayField.setText("");

                prekey = key = 1;

              }

              //'*'操作

              if (temp == button[12])

              {

                switch (prekey)

                {

                  case 0:

                    answerd += Double.parseDouble(displayField.getText());

                    break;

                  case 1:

                    answerd -= Double.parseDouble(displayField.getText());

                    break;

                  case 2:

                    answerd *= Double.parseDouble(displayField.getText());

                    break;

                  case 3:

                    if (Double.parseDouble(displayField.getText()) == 0)

                    {

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

                      clickable = false;

                    }

                    else

                      answerd /= Double.parseDouble(displayField.getText());

                    break;

                  default:

                    answerd = Double.parseDouble(displayField.getText());

                 }

                displayField.setText("");

                prekey = key = 2;

              }

              //'/'操作

              if (temp == button[13])

              {

                switch (prekey)

                {

                  case 0:

                    answerd += Double.parseDouble(displayField.getText());

                    break;

                  case 1:

                    answerd -= Double.parseDouble(displayField.getText());

                    break;

                  case 2:

                    answerd *= Double.parseDouble(displayField.getText());

                    break;

                  case 3:

                    if (Double.parseDouble(displayField.getText()) == 0)

                    {

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

                      clickable = false;

                    }

                    else

                      answerd /= Double.parseDouble(displayField.getText());

                    break;

                  default:

                    answerd = Double.parseDouble(displayField.getText());

                }

                displayField.setText("");

                prekey = key = 3;

              }

            }

            //'='操作

            if (temp == EqButton && clickable == true)

            {

              //如果连续按'=',则进行连续运算

              if (prekey == 5)

              {

                if (key == 0)

                {

                  answerd += vard;

                  displayField.setText(df.format(answerd));

                }

                if (key == 1)

                {

                  answerd -= vard;

                  displayField.setText(df.format(answerd));

                }

                if (key == 2)

                {

                  answerd *= vard;

                  displayField.setText(df.format(answerd));

                 }

                if (key == 3)

                {

                  if (Double.parseDouble(displayField.getText()) == 0)

                  {

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

                      clickable = false;

                  }

                  else

                  {

                    answerd /= vard;

                    displayField.setText(df.format(answerd));

                  }

                }

              }

              else

              {

                vard = Double.parseDouble(displayField.getText());

                if (key == 0)

                {

                  prekey = -1;

                  answerd += Double.parseDouble(displayField.getText());

                  displayField.setText(df.format(answerd));

                }

                if (key == 1)

                {

                  prekey = -1;

                  answerd -= Double.parseDouble(displayField.getText());

                  displayField.setText(df.format(answerd));

                }

                if (key == 2)

                {

                  prekey = -1;

                  answerd *= Double.parseDouble(displayField.getText());

                  displayField.setText(df.format(answerd));

                }

                if (key == 3)

                {

                  prekey = -1;

                  if (Double.parseDouble(displayField.getText()) == 0)

                  {

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

                    clickable = false;

                  }

                  else

                  {

                    answerd /= Double.parseDouble(displayField.getText());

                    displayField.setText(df.format(answerd));

                  }

                }

              }

              prekey = 5;

            }

            //按下'+/-'按钮时处理

            if (temp == button[15] && clickable == true)

            {

                 boolean isNumber = true;

                 String s = displayField.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) == '-')

                      {

                        displayField.setText("");

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

                        {

                          char a = s.charAt(i);

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

                         }

                       }

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

                       else

                         displayField.setText('-' + s);

                     }

             }

             //按下'Backspace'键,利用循环将当前字符串中的最后一个字母删除

             if (temp == BkButton && clickable == true)

             {

                 String s = displayField.getText();

                 displayField.setText("");

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

                 {

                     char a = s.charAt(i);

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

                 }

              }

              //按下'CE'按钮,将当前文本框内数据清除

              if (temp == CeButton)

              {

                   displayField.setText("");

                   clickable = true;

               }

               //按下'C'按钮,文本框内数据清除,同时var,answer清0

               if (temp == CButton)

               {

                   vard = answerd = 0;

                   displayField.setText("");

                   clickable = true;

               }

        }

        //输入中如果有操作非法,比如按下两次'+',捕获异常

        catch (Exception e)

        {

            displayField.setText("操作非法");

            clickable = false;

         }

     }

    public static void main(String args[])

    {

       Calculator calculator = new Calculator();

       calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       calculator.setSize(300,200);

       calculator.setVisible(true);

    }

}

四、测试分析

   (1)程序运行情况

     该程序正常的响应按钮事件,能进行简单的加、减、乘、除四则运算,在输入之前须先进行清零处理,然后再输入数值进行运算。但输入的数值不宜过大,否则不能正常显示。同时用df来设置数据的输出精度,精确到小数点后八位数字。如果输入中有非法操作时,比如两次按下“+”,就会出现异常情况,我在程序中使用了try—catch捕捉输入中抛出的异常对象,然后进行重置归零的处理。

      (2)程序异常处理

当输入中有非法操作时,比如两次按下“+”运算,会出现异常情况,我在程序中使用了try—catch捕捉输入中抛出的异常对象,然后进行重置归零的处理。相应的程序代码如下:

try

{

……

}

//如果输入中有操作非法,比如两次按下“+”,捕获异常

catch(Exception e)

{

     displayField.setText(“操作非法”);

     clickable = false; 

}

五、总结

18周的java课程设计结束了,虽然选的题目有点儿简单---“用java编程实现一个简单的计算器,能进行四则运算”,但感觉收获还是挺多的,通过学习自己扩充了很多的知识点。刚开始的时候不知道从何处下手,到图书馆借书、从网上查找相关的程序...渐渐的有了思路,虽然设计出来的程序有些是从别处转来的,不是自己写的,但是在转的过程中对出现的问题都能及时得到解决,感觉挺好的....通过这周的课程设计,我意识到好的学习方法的重要性,在学习中要学会主动,不要什么东西都指望别人,要靠自己去细心观察,多问自己一个为什么,多动手查查、看看,这样自己学到手的东西才会更多!

六、参考文献

1、《Java应用与开发案例教程》   徐谡   清华大学出版社

2、《零起点Java应用编程》  Philip Heller  电子工业出版社

3、《Java完美编程(第3版)》  Walter Savitch  清华大学出版社

4、《Java大学英语教程(第六版)》   H.M Deitel  &  P.J Deitel   电子工业出版社下载本文

显示全文
专题