Java带计算过程的计算器课程设计报告

Java程序设计课程设计报告

( 20## -- 20## 年度第 1 学期)

保存计算过程的计算器



1 概    述        

1.1 课程设计目的

课程设计是课程学习的一个重要环节,通过课程设计使学生加深对Java程序设计的理解,掌握Java程序开发的基本方法,把课堂上所学到的多个单元串到一起,提高解决问题和分析问题的能力,具体体现在以下几个方面:

1、了解Java开发一般应用程序的方法和步骤;

2、进一步强化类的定义,掌握类的继承、接口;

3、熟练掌握变量、数组的应用;

4、熟悉图形用户界面中常用组件的使用,掌握事件处理机制;

5、学习掌握一般的软件的设计方法和查阅、运用资料的能力;

6、掌握JAVA程序设计语言,面向对象的软件设计思想、方法。

7、设计一个简单的计算器程序能够实现基本的加、减、乘、除运算,以及其它的辅助功能;界面美观、简洁、适用。

 8掌握JAVA语言编程的基础知识并能熟练运用。

 9.熟悉类声明与对象的使用。

10.运用JAVA SWING编写简单计算器程序,并实现其功能 。

1.2 课程设计内容

 
设计GUI界面的计算机程序,用户可以通过鼠标依次输入参加计算的数值,进行加,减,乘,除,等混合运算。

2 系统需求分析

2.1 系统目标

一个简单的计算器程序。用户可以利用鼠标点击数值或操作符按键完成计算的输入,计算的结果将被显示在窗口上部的文本框中。

2.2 主体功能

(1)使用图形用户界面:一个文本框;0-9数字按钮;加、减、乘、除运算符;“等于”符号;复位按钮;

(2)完成整数、实数的四则运算(加、减、乘、除);

(3)通过按钮点击实现数据的复位(清零);

(4)实数运算中小数位的精度一致。

2.课程设计的主要设计思想

    对于此计算器程序,首先要设计其GUI界面,总体界面有一个文本框,18个按钮,总体界面用BorderLayout布局。

    文本框放置在最NORTH,然后0到9以及+,-,*,/的按钮放置到一个面板Panel中,添加到整体布局的CENTER,界面设计完成。

    布局设计好后再添加按钮事件。对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮的数值设置到文本框中,否则则应把文本框中的内容加上你所点击按钮的数值设置到文本框中。

在进行加、减、乘、除计算时要把点击加、减、乘、除按钮之前的数值保存下来,运算时是这个被保存下来的数值和文本框中的数值加、减、乘、除。

2.3 开发环境

 JDK

3 系统概要设计

3.1 系统的功能模块划分

1主界面模块

2.事件相应模块

3.2 系统流程图

1二 总体方案设计

1.界面设计

界面设计要求用GUI,界面设计中有用到swing组件的TextField和Button,用到awt中的BorderLayout和GridLayout布局管理方式,其图形界面如下:

2.功能介绍

这是计算器中的一种:简单计算器,本项目用到了Java中的GUI界面和swing组件以及awt布局,所以简单易用,它能完成如下的几个小功能:

点击按钮中的数字键和运算符键就能进行简单的加、乘、乘、除求模四则运算 ;

还能通过用户自己在文本框中输入数字,进行简单运算 ;

如果输入有误时可以按Clear撤销后重新输入新数据

三详细设计主题任务

  程序流程图如下:

 

4系统详细设计

1.主界面模块详细设计

   顶层容器:ComputerPad类实现主窗口,顶层容器中包含了1个mainpanel容器,1个结果显示 textfield, 1个centerpanel。

   各组件作用:其中centerpanel容器用于放数字按钮,小数点,运算符按钮;显示区panel用于放清零按钮,退格按钮和一个文本框。文本框用于显示输入数据和计算结果。

   布局方式:顶层容器用BroadLayOut布局,显示区文本框以及清零按钮和退格按钮放在mainpanel容器的north即显示区panel,显示区panel用FlowLayout布局,centerpanel容器 用GridLayOut布局

部分代码如下

数字按钮类:实现数字按钮的定义

public class NumberButton extends Button{}

运算符按钮类:实现运算符号的定义

public class OperationButton extends Button{}

主窗口类实现监视器的注册,窗口布局,组件颜色大小等的设置

public class ComputerPad extends Frame implements ActionListener

   NumberButton numberButton[];                 

   OperationButton oprationButton[];            

   Button 小数点按钮,正负号按钮,退格按钮,

          求倒数按钮,等号按钮,清零按钮;

   Panel panel;                                

   JTextField 显示区

                      

   String 运算符号[]={"+","-","*","/"};

   boolean  是否按下等号=false;                 

   public ComputerPad()

   {

     super("计算器");

   

//进行组件的声明,初始化设置,对数字符和运算符注册监听器

JButton[] buttons = new JButton[18];

{

   buttons[0] = new JButton("1");

   buttons[1] = new JButton("2");

   buttons[2] = new JButton("3");

   buttons[3] = new JButton("+");

   buttons[4] = new JButton("4");

   buttons[5] = new JButton("5");

   buttons[6] = new JButton("6");

   buttons[7] = new JButton("-");

   buttons[8] = new JButton("7");

   buttons[9] = new JButton("8");

   buttons[10] = new JButton("9"); 

   buttons[11] = new JButton("*");

   buttons[12] = new JButton("0");

   buttons[13] = new JButton(".");

   buttons[14] = new JButton("=");

   buttons[15] = new JButton("/");

   buttons[16] = new JButton("CE");

   buttons[17] = new JButton("BACK");

  

}

      centerpanel.setLayout(new GridLayout(4,4,8,8));

   for (int i = 0; i < 16; i++) {

    centerpanel.add(buttons[i]);

    buttons[i].addActionListener(this);

   }

A.setLayout(new FlowLayout());

     A.add(txt);

     对清零按钮和退位按钮  进行监听

      for (int i = 16; i < 18; i++) {

       A.add(buttons[i]);

       buttons[i].addActionListener(this);

      }

;

   

     //对显示过程的文本框进行设置

    JTextField=new JTextField(14);

     process.setEditable(false);

     //对面板进行设置

  this.setTitle("我的计算器");

   this.setDefaultCloseOperation(EXIT_ON_CLOSE);

   this.setContentPane(mainpanel);

   this.setResizable(false);

   BorderLayout bl = new BorderLayout();

   mainpanel.setLayout(bl);

   mainpanel.add(A,BorderLayout.NORTH);

   mainpanel.add(centerpanel,BorderLayout.CENTER);

   txt.setText("0");

2.事件响应模块详细设计

   模块功能:事件响应模块用于实现数据输入,保存,运算以及显示。

   具体实现:将主窗口作为窗口中所有组件的监视器 ,链表用来存储输入的数字以及操作符以便运算时提取出来,  public void actionPerformed(ActionEvent e){

   按下数字按钮时的事件处理

  JButton jb = (JButton)e.getSource();

   char c = jb.getText().charAt(0);

 

   switch(c){

   case '0':

   case '1':

   case '2':

   case '3':

   case '4':

   case '5':

   case '6':

   case '7':

   case '8':

   case '9':{

    addNum(c);

    break;

   }

5 测试

5.1 测试方案

  进行各种情况的输入检测进行加,减,乘,除运算,数字很大,小数,整数以及先按下“=”等非法输入情况。

5.2 测试结果

进行四则运算

Case1  :18+20  预计结果38  实际结果如下

Case2:20-50  预计结果  -30实际结果

Case3:5/3   预计结果 1.67 实际结果如下

Case4   12*8  预计结果96  实际结果如下

Case5   开始数字57   按退位按钮 预计结果5 执行 结果  如下

Case6    开始数字78   按清零按钮  预计结果0 执行结果 如下

 

 

 

 

 

 

 

6 小结

在做本项目是时候,会遇到很多问题,最大的问题的如何保存已经输入的数字或者符号进行运算,如何显示运算过程,经过多次研究和查询发现运可以运用链表进行存储和提取数据,用栈也是可以的。

此次课程设计让我更了解熟悉了Java中的图形用户界面和它的编程方式。在完成课题的过程中也不断充实了自己,学习到了很多以前没有学习到的知识,收获很大。最大的收获是在弯完成过程中培养的解决问题的能力,在做项目时必然会遇到困难,会有不会的东西,重要的不是现在会不会,而是遇到问题知道如何找到解决的途径。还使我对所学知识能够融会贯通,又不断丰富了新知识。Java计算器设计使得我们对所学的专业课有了更为深刻的认识,使得知识得到了巩固和提高。

参考文献

[1]耿祥义,张跃平.  Java2实用教程(第三版)[M] . 北京:清华大学出版社, 20## [2]耿祥义.  Java课程设计(第三版)[M] . 北京:清华大学出版社, 2004

[3]张跃平.Java2实用教程实验指导与习题解答(第三版)[M]. 北京:清华大学出版社, 2004

 

 

 

 

 

 

 

 

 

 


 

第二篇:课程设计报告(java版的计算器源代码)

程序功能简介:从最基本的加、减、乘、除,到基本数学函数处理,再到数的进制转换处理。 代码如下

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Calculator extends Frame implements ActionListener, WindowListener

{

private Container container;

private GridBagLayout layout;

private GridBagConstraints constraints;

private JTextField displayField; //计算结果显示区

private String lastCommand; //保存+,-,*,/,=命令0

private double result; //保存计算结果

private boolean start; //判断是否为数字的开始

private JMenuBar menubar;

private JMenuItem m_exit,m2_ejz,m2_bjz;

private Dialog dialog;

private Label label_dialog;

private JButton button_sqrt,button_plusminus,button_CE,button_cancel,button_1,button_2, button_3,button_4,button_5,button_6,button_7,button_8,button_9,button_0,

button_plus,button_minus,button_multiply,button_divide,button_point,

button_equal,button_log,button_tan,button_cos,button_sin,button_exp;

public Calculator() //构造方法设置布局、为按钮注册事件监听器

{

super("Calculator");

this.setLocation(240,200);

this.setSize(350,300);

this.setResizable(true);

this.setLayout(new GridLayout(7,1));

this.addmyMenu(); //调用成员方法添加菜单

displayField=new JTextField(30);

this.add(displayField);

displayField.setEditable(true);

start=true;

result=0;

lastCommand = "=";

JPanel panel0=new JPanel();

panel0.setLayout(new GridLayout(1,4,4,4));

JPanel panel1=new JPanel();

panel1.setLayout(new GridLayout(1,5,4,4));

this.add(panel1);

button_sqrt=new JButton("sqrt"); button_plusminus=new JButton("+/-"); button_exp=new JButton("exp");

button_CE=new JButton("退格");

button_cancel=new JButton("C");

JPanel panel2=new JPanel();

panel2.setLayout(new GridLayout(1,5,4,4)); this.add(panel2);

button_7=new JButton("7");

button_8=new JButton("8");

button_9=new JButton("9");

button_log=new JButton("log");

button_divide=new JButton("/");

JPanel panel3=new JPanel();

panel3.setLayout(new GridLayout(1,5,4,4)); this.add(panel3);

button_4=new JButton("4");

button_5=new JButton("5");

button_6=new JButton("6");

button_tan=new JButton("tan");

button_multiply=new JButton("*");

JPanel panel4=new JPanel();

panel4.setLayout(new GridLayout(1,5,4,4)); this.add(panel4);

button_1=new JButton("1");

button_2=new JButton("2");

button_3=new JButton("3");

button_cos=new JButton("cos");

button_minus=new JButton("-");

JPanel panel5=new JPanel();

panel5.setLayout(new GridLayout(1,5,4,4)); this.add(panel5);

button_0=new JButton("0");

button_point=new JButton(".");

button_equal=new JButton("=");

button_sin=new JButton("sin");

button_plus=new JButton("+");

panel1.add(button_sqrt);

panel1.add(button_plusminus);

panel1.add(button_exp);

panel1.add(button_CE);

panel1.add(button_cancel);

panel2.add(button_7);

panel2.add(button_8);

panel2.add(button_9);

panel2.add(button_log);

2

panel2.add(button_divide);

panel3.add(button_4);

panel3.add(button_5);

panel3.add(button_6);

panel3.add(button_tan);

panel3.add(button_multiply);

panel4.add(button_1);

panel4.add(button_2);

panel4.add(button_3);

panel4.add(button_cos);

panel4.add(button_minus);

panel5.add(button_0);

panel5.add(button_point);

panel5.add(button_equal);

panel5.add(button_sin);

panel5.add(button_plus);

button_sqrt.addActionListener(this);

button_plusminus.addActionListener(this); button_exp.addActionListener(this); button_CE.addActionListener(this); button_cancel.addActionListener(this); button_7.addActionListener(this);

button_8.addActionListener(this);

button_9.addActionListener(this);

button_log.addActionListener(this); button_divide.addActionListener(this); button_4.addActionListener(this);

button_5.addActionListener(this);

button_6.addActionListener(this);

button_tan.addActionListener(this);

button_multiply.addActionListener(this); button_1.addActionListener(this);

button_2.addActionListener(this);

button_3.addActionListener(this);

button_cos.addActionListener(this); button_minus.addActionListener(this); button_0.addActionListener(this);

button_point.addActionListener(this); button_equal.addActionListener(this); button_sin.addActionListener(this); button_plus.addActionListener(this);

this.addWindowListener(new WinClose()); this.setVisible(true);

}

private void addmyMenu() //菜单的添加 {

JMenuBar menubar=new JMenuBar();

this.add(menubar);

3 注册窗口监听器 //

JMenu m1=new JMenu("选项");

JMenu m2=new JMenu("进制转换");

JMenuItem m1_exit=new JMenuItem("退出");

m1_exit.addActionListener(this);

JMenuItem m2_ejz=new JMenuItem("二进制");

m2_ejz.addActionListener(this);

JMenuItem m2_bjz=new JMenuItem("八进制");

m2_bjz.addActionListener(this);

JMenu m3 = new JMenu(" 帮助");

JMenuItem m3_Help = new JMenuItem("用法");

m3_Help.addActionListener(this);

dialog = new Dialog(this,"提示",true); //模式窗口

dialog.setSize(240,80);

label_dialog = new Label("",Label.CENTER); //标签的字符串为空,居中对齐 dialog.add(label_dialog);

dialog.addWindowListener(this); //为对话框注册窗口事件监听器

m1.add(m1_exit);

menubar.add(m1);

m2.add(m2_ejz);

m2.add(m2_bjz);

menubar.add(m2);

m3.add(m3_Help);

menubar.add(m3); }

public void actionPerformed(ActionEvent e) //按钮的单击事件处理方法 {

if(e.getSource().equals(button_1)||e.getSource().equals(button_2)||

e.getSource().equals(button_3)||e.getSource().equals(button_4)||

e.getSource().equals(button_5)|| e.getSource().equals(button_6)||

e.getSource().equals(button_7)|| e.getSource().equals(button_8)||

e.getSource().equals(button_9) ||e.getSource().equals(button_0)||

e.getSource().equals(button_point)||e.getSource().equals(button_plusminus)|| e.getSource().equals(button_cancel)||e.getSource().equals(button_CE))

{ //非运算符的处理方法

String input=e.getActionCommand();

if (start)

{

displayField.setText("");

start=false;

if(input.equals("+/-"))

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

}

if(!input.equals("+/-"))

{

String str=displayField.getText();

if(input.equals("退格")) //退格键的实现方法

{

if(str.length()>0)

4

displayField.setText(str.substring(0,str.length()-1)); }

else if(input.equals("C")) //清零键的实现方法

{

displayField.setText("0");

start=true;

}

else

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

}

}

else if (e.getActionCommand()=="二进制") //二进制的转换

{

int n=Integer.parseInt(displayField.getText());

displayField.setText(Integer.toBinaryString(n));

}

else if (e.getActionCommand()=="八进制") //八进制的转换

{

int n=Integer.parseInt(displayField.getText());

displayField.setText(Integer.toOctalString(n));

}

else if (e.getActionCommand()=="退出") //选项中退出的处理方法

{

System.exit(0);

}

else if (e.getActionCommand()=="用法") //按下'帮助'菜单栏中用法的处理方法 {

label_dialog.setText("sqrt,exp等键是先输运算符再输数字\n");

dialog.setLocation(400,250);

dialog.setVisible(true);

}

else //各运算符的识别

{

String command=e.getActionCommand();

if(start)

{

lastCommand=command;

}

else

{

calculate(Double.parseDouble(displayField.getText()));

lastCommand=command;

start=true;

}

}

}

public void calculate(double x) //各运算符的具体运算方法

{

double d=0;

if (lastCommand.equals("+"))

5

result+= x;

else if (lastCommand.equals("-"))

result-=x;

else if (lastCommand.equals("*"))

result*=x;

else if (lastCommand.equals("/"))

result/=x;

else if (lastCommand.equals("="))

result=x;

else if (lastCommand.equals("sqrt"))

{

d=Math.sqrt(x);

result=d;

}

else if (lastCommand.equals("exp"))

{

d=Math.exp(x);

result=d;

}

else if (lastCommand.equals("log"))

{

d=Math.log(x);

result=d;

}

else if (lastCommand.equals("tan"))

{

d=Math.tan(x);

result=d;

}

else if (lastCommand.equals("cos"))

{

d=Math.cos(x);

result=d;

}

else if (lastCommand.equals("sin"))

{

d=Math.sin(x);

result=d;

}

displayField.setText(""+ result);

}

public void windowClosing(WindowEvent e)

{

if(e.getSource()==dialog)

dialog.setVisible(false);

else

System.exit(0);

}

public void windowOpened(WindowEvent e) { } 隐藏对话框 6 //

public void windowActivated(WindowEvent e) { }

public void windowDeactivated(WindowEvent e) { }

public void windowClosed(WindowEvent e) { }

public void windowIconified(WindowEvent e) { }

public void windowDeiconified(WindowEvent e) { }

public static void main(String args[])

{

Calculator calculator=new Calculator();

}

}

class WinClose implements WindowListener

{

public void windowClosing(WindowEvent e) //单击窗口关闭按钮时触发并执行实现窗口监听器接口

中的方法

{

System.exit(0); //结束程序运行

}

public void windowOpened(WindowEvent e){}

public void windowActivated(WindowEvent e){}

public void windowDeactivated(WindowEvent e){}

public void windowClosed(WindowEvent e){}

public void windowIconified(WindowEvent e){}

public void windowDeiconified(WindowEvent e){}

}

运行结果截图:

课程设计报告java版的计算器源代码

7

程序功能实现:

1. 运用两个面板的叠加做出界面。

2. 通过在按钮的单击事件处理方法中调用类的成员方法calculate()来进行简易计算器的各种运算,并正确实现运算功能。

3. 调用Math包中的方法实现各函数功能。

4. 添加菜单条,列出‘选项’、‘进制转换’、‘帮助’等菜单选项,并分别实现‘选项’中‘退出’的功能,通过调用Integer包中的方法实现二进制、八进制的转换,‘帮助'菜单栏中‘用法’的提示对话框。

5. 整个程序对话框可实现最小化、最大化、关闭。

设计体会:

在此次的课程设计实践中,我学到了教科书上没有的东西。这次课程设计,我按照课程设计的要求,分块实现程序的功能。在实践中我遇到许多的问题,但我都克服,最终我成功的完成了这次课程设计。从中我充分理解了Java面对对象的特性,并体会到Java与C语言的不同之处

在实践的同时,我又从中成长了许多,特别是在对程序的编译和调试中掌握了许多的技巧和方法,为今后的其他计算机语言的学习奠定了一定的基础。

总结:

(1)通过编写这个相对复杂的程序,让我认识解决实际问题前应现建立模型,再通过建立的模型使问题简单化,从而解决问题。

(2)这次编写的程序大部分是通过调用各包中的方法来实现的,这也让我充分理解了包和类调用的关系。

(3)由于这次编写的程序相对比较复杂,所以不能一次性编写、调试,也由此让我学会把程序分块,逐个编写、调试。

8

相关推荐