您的当前位置:首页正文

计算器java程序设计

2022-05-06 来源:钮旅网
目录

1. 课程设计目的 .............................................. 2 2. 设计题目分析 .............................................. 2

2. 1题目简介 ............................................ 2 2. 2设计要求及需求分析 .................................. 3. 课程设计内容 .............................................. 3. 1总体设计 ............................................ 3.2计算器功能模块设计 ................................... 3.3计算器算法流程设计 .................................... 3.4类的设计 .............................................. 3. 5代码实现: .......................................... 3. 5设计结果与分析 ...................................... 4. 设计心得与总结 ........................................... 参考文献: ................................................. 附录: ..................................................... 2 3

3 4 4 5 6 8 101011

1.课程设计目的

通过课程设计把知识形成系统,把自己所学的知识在实际问题中加以运

用。如果自己编写的程序能够给更多的人带来方便,

并且得到人们的好评,那么

自己编写的程序就可以实现商品化,形成产品给更多的人利用,并实现一定的商 品价值。

因此本次课程设计有目的有以下几点:

(1) 复习巩固java语言的基础知识,进一步加深对java语言的理解和掌控。

(2) 提供一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际 有机结合起来,锻炼我们的分析解决实际问题的能力。 提高我们适应实际,实践 编程的能力。

(3) 培养我们在项目开发中创新意识及能力, 通过亲身实践,利用所学编写 简单的面向对象程序,提高对面向对象及 JAVA语言的理解。

2•设计题目分析

2 . 1题目简介

设计一个图形界面(GU)的计算器应用程序,完成简单的算术运算、 设计的计

算器应用程序可以完成家法、减法、乘法、除法。

2 . 2设计要求及需求分析

设计要求:由于现代用户更倾向于由鼠标方便操作的图形用户界面,

所以我

们采用GUI来实现计算器,并采用Swing组件,AWT事件处理等实现具体功能。

背景需求分析:在我们日常生活中,计算开支、收入时,大额数字或是多倍 小数的计算都需要计算器的帮助, 而在学习一些科目时,也常常要处理数字。虽 然现在的计算器价格比较低廉,但是功能过于简单的不能满足个人需求,功能多 的价格较贵,不仅操作不便,很多功能也根本用不到。所以我们想用自己所学设 计开发一个属于自己的简单计算器来完成日常学习生活的需求。

3.课程设计内容

3. 1总体设计

本应用程序继承自框架类(Frame),此程序 使用Frame布局管理器 BorderLayout,将单行文本框加入到“ North ”区域,包含各种按钮的面板 Panel p加入到” Center”区域。包含各种按钮的面板Panel p采用4行4列的网格布 局,然后将数字按钮和运算符按钮以及控制按钮添加到面板中。

件监听器。如:Button b=new Button();b.addActionListener(

同时注册按钮事 事件监听器);

完成主

事件监听器中的事件处理方法 void actio nPeformed(Actio nEve nt evt)

要的按钮事件的处理。事件处理分以下几种情况:数字按钮事件( ” 0”,” 1”,” 2” …”

8”,” 9”)、运算符按钮事件(” +”,”一

“,”* ”,”/”,”% )、正负号按钮事件(” +/- “)、小数点按钮事件(”.”)、 等号按钮事件(”=”)、求倒按钮事件(” 1/x ”)、退格按钮事件(”退格”)、 清楚按钮事件(“ C”)。

触发按钮事件时,要进一步分析,是重新开始计算时触发的按钮事件还是计 算中间触发的按钮事件。计算器完成的是一个数学表达式,如:

3+ 2,所以可以

采用一个链表(LinkedList类)来存储数字或字符,如3,+, 2分别存储在链 表中,最后运算时,可以 -------------- 取出来进行运算。

计算器设计外形及结构如下:

系统总体设计框架

Pan el2

Pan ell

Panel: 4*4的数字及运算键

Panel2 :输入及运行结果显示及倒退清空键

3.2计算器功能模块设计

以下为标准计算器的基本功能: (1) 加法

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

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

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

两个数相除操作。

5)清零 清除显示框的数据。 具体的计算器功能模块图如下:

3.3计算器算法流程设计

计算器的程序设计,必然有数据的输入,当中就包含运算符和数字,都要通 过计算器上的butt on按钮选项按键输入进去,里面录入的为字符型的数据,若 要进行运算,要将输入的字符转换成 double型,以防运算出错。 实现计算器算法功能的流程图如下所示:

3.4类的设计

class jisua n exte nds JFrame impleme nts Actio nListe ner { }//jisuan

是初始化界面,以及响应用户的操作。

jisuan是个内部类,功能是进行进制的转换。

import java.awt.*; import java.awt.event.*; import javax.swi ng.*;

这三项是系统初始时需要引入的主类以达到完成界面的目的。

3 . 5代码实现:

1、引入主类:

import java.awt.*; import java.awt.event.*; import javax.swi ng.*; public class jisuan

extends JFrame implements ActionListener {

2、实现计算器界面的关闭与扩展

private static final long serialVersio nUID = -169068472193786457L; private class WindowCloser extends WindowAdapter {

public void windowClosing(WindowEvent we) {System. }

\"5\" \"0\"

int i ;

private final \"1 \"2\" \"3

II

exit (0);}

\"6\"

String[]

II II

II II

3、建立按键并为每个按键赋予相应的字符

JButton[]

buttons = new JButton[

str = { \"7\" , \"8\" , \"9\" , \"/\"

\"+

}; \"

I! __ I!

\"4\"

str . length ];

JTextField display new JTextField( \"0\");

4、设计计算器界面

public jisua n()

{ super (\"jisuan\" ); JPa nel pan el1 = new JPa nel( new GridLayout(4, 4));

i < str . length ; i ++) {

for ( i = 0;

JButton reset = new JButton( \"CE\");

new buttons [ i ]=

JButt panel1.add( buttons [ i ]);

}

JPa nel pan el2 =

str [ i ]);

new JPa nel( new BorderLayout());

pan el2.add( \"Ce nter\" , display ); panel2.add( \"East\" , reset ); getC onten tPa ne().setLayout( getCo nten tPa ne().add( getCo nten tPa ne().add(

new BorderLayout());

\"North\" , pan el2); \"Cen ter\" , pan el1);

5、为各个按键及显示框添加事件监听

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

buttons [ i ].addActionListener( // Add liste ner for \"reset\" butt on. reset .addActionListener( display .addActionListener(

this );

this );

// Add liste ner for \"display\" butt on.

this );

// The \"close\" button \"X\".

addWi ndowListe ner( new Win dowCloser());

//In itialize the win dow size. setSize(800, 800); // Show the wi ndow.

// show(); Usi ng show() while JDK vers ion is below 1.5. setVisible( true ); // Fit the certa in size. pack(); }

6实现各个功能函数的调度

public void action Performed(Act ion Eve nt e) {

Object target = e.getSource();

Stri ng label = e.getAct ion Comma nd(); if (target == reset )

han dleReset(); else if (\"0123456789.\"

.indexOf(label) > 0)

han dleNumber(label); else

han dleOperator(label);

}

boolea n isFirstDigit

=true

public void handleNumber(String key) { if ( isFirstDigit )

display .setText(key); else if ((key.equals(

\".\"))

&& (display .getText().i ndexOf(

0))

display .setText( display .getText() +

\".\");

else if (!key.equals(

\".\"))

display .setText( .getText() + key);

display isFirstDigit = false ; }

7、 重置功能的实现

public void handleReset() { display .setText( \"0\"); isFirstDigit = true ; operator =\"=\"; }

double nu mber = 0.0; String operator =\"=\";

8、 运算功能的实现

public void handleOperator(String key) { if ( operator .equals( \"+\"))

\".\")<

nu mber += Double valueOf (display .getText()); else if ( operator . equals(\"-\" ))

nu mber -= Double. valueOf (display .getText());

else if ( operator . equals( \"*\" ))

nu mber *= Double. valueOf (display .getText());

else if ( operator . equals( \"/\" ))

number /= Double. valueOf (display .getText());

else if ( operator .

(number)); operator = key; isFirstDigit = true ; }

equals(\"=\" ))

number = Double. valueOf ( display .getText()); display .setText(String. valueOf

public static void main( Stri ng[] args) { new jisua n(); } }

3 . 5设计结果与分析

1、运行的初始界面

2、数字计算演示

以计算(789+45) *23=19182为例,计算过程如下:

输入789

与45相加所得结果

输入23并相乘

得到最终结果

点击CE清零

最后得到的结果为19182,结果正确,计算器的各个功能均得以实现

4.设计心得与总结

通过此次的课程设计实践,我们不但进一步理解掌握了课上老师教授的知 识,而且通过查找资料学会了课上没有的东西,进一步理解了面向对象的含义, 发现了很多它比面向过程突出的地方,第一次接触了图形界面,初步了解了 GUI 方面的知识。在实践中我们遇到了很多问题,但我们都努力克服,并最终成功的 完成了这次课程设计。

通过编写这个相对复杂的程序,我们认识解决实际问题前应先建立模型, 再 通过建立的模型使问题简单化,从而解决问题。并且这次编写的程序大部分是通 过调用各包中的方法来实现的,这也让我们充分理解了包和类的调用关系。由于 这次编写的程序比较复杂,所以不能一次性编写、调试,也由此让我们学会把程 序分块,逐个编写、调试。

参考文献:

[2]叶乃文,王丹.面向对象程序设计 [2 ]邱桃荣,陈轶,冯缨.

2006.

[2]於东军,杨静宇,李千目,王国全.

[M].清华大学出版社,2009.

JAVA程序设计与应用开发[M].清华大学出版社,

JAVA语言程序设计教程[M].机械工业出版社,2009.

附录:

计算器的完整实现代码:

import java.awt.*; import java.awt.event.*; import javax.swi ng.*; public class jisuan

extends JFrame implements ActionListener {

= -169068472193786457L;

private static final long serialVersio nUID private class WindowCloser

} } int i ; private \"1

II

extends WindowAdapter {

public void windowClosing(WindowEvent we) { System. exit (0);

final Stri ng[]

II

II II

str = { \"7\" , \"8\" , \"9\" , \"/\"

II II

I! __ I!

\"4\"

\"5\" \"6\"

\"0\" \"2 \"3\"

// Strings for Digit & Operator butt ons. // Build butto ns.

JButto n[] butt ons =new JButt on[ // For can cel or reset.

JButton reset = new JButton( \"CE\"); // Build the text field to show the result. JTextField display = new JTextField( \"0\"); public jisua n() {

super (\"jisuan\" ); // Add a pan el. JPa nel pan el1 =

\"+\" };

str . length ];

new JPa nel( new GridLayout(4, 4));

// pan el1.setLayout( new GridLayout(4,4));

for ( i = 0; i < str . length ; i ++) { buttons [ i ] = new JButton( str [ i ]);

panel1.add( buttons [ i ]); }

JPa nel pan el2 =

new JPa nel( new BorderLayout());

// pan el2.setLayout (new BorderLayout()); pan el2.add( \"Ce nter\" , display ); panel2.add( \"East\" , reset ); // JPa nel pan el3 = new Pan el(); getC onten tPa ne().setLayout( getCo nten tPa ne().add(

new BorderLayout());

\"North\" , pan el2);

getCo nten tPa ne().add( \"Cen ter\" , pan el1);

// Add action liste ner for each digit & operator butt on. for ( i = 0; i < str . length ; i ++)

buttons [ i ].addActionListener( this );

// Add liste ner for \"reset\" butt on. reset .addActionListener( this ); // Add liste ner for \"display\" butt on.

display .addActionListener( this );

// The \"close\" button \"X\".

addWi ndowListe ner( new Win dowCloser()); //In itialize the win dow size. setSize(800, 800); // Show the wi ndow.

// show(); Usi ng show() while JDK vers ion is below 1.5. setVisible( true ); // Fit the certa in size. pack(); }

public void action Performed(Act ion Eve nt e) {

Object target = e.getSource();

Stri ng label = e.getAct ion Comma nd(); if (target == reset ) han dleReset();

else if (\"0123456789.\" .indexOf(label) > 0) han dleNumber(label); else

han dleOperator(label);

}

// Is the first digit pressed? boolea n isFirstDigit = true

public void handleNumber(String key) { if ( isFirstDigit )

display .setText(key);

else if ((key.equals( \".\"))

&& (display .getText().i ndexOf(

0))

display .setText( display .getText() + \".\");

else if (!key.equals( \".\"))

display .setText( display .getText() + key);

isFirstDigit = false J

public void handleReset() { display .setText( \"0\"); isFirstDigit = true ; operator =\"=\";

}

double nu mber = 0.0; String

operator =\"=\";

public void handleOperator(String key) { if ( operator .equals( \"+\"))

\".\")<

nu mber += Double valueOf (display .getText()); else if ( operator . equals(\"-\" ))

nu mber -= Double. valueOf (display .getText());

else if ( operator . equals( \"*\" ))

nu mber *= Double. valueOf (display .getText());

else if ( operator . equals( \"/\" ))

number /= Double. valueOf (display .getText());

else if ( operator . equals(\"=\" ))

number = Double. valueOf ( display .getText()); display .setText(String. valueOf (number)); operator = key; isFirstDigit = true ; }

public static void main( Stri ng[] args) { new jisua n(); }

}

因篇幅问题不能全部显示,请点此查看更多更全内容