目录1.课程设计目的 (2)2.设计题目分析 (2)2.1 题目简介 (2)2.2 设计要求及需求分析 (2)3.课程设计内容 (3)3.1 总体设计 (3)3.2计算器功能模块设计 (4)3.3计算器算法流程设计 (4)3.4类的设计 (5)3.5代码实现: (6)3.5 设计结果与分析 (8)4.设计心得与总结 (10)参考文献: (10)附录: (11)1.课程设计目的通过课程设计把知识形成系统,把自己所学的知识在实际问题中加以运用。
如果自己编写的程序能够给更多的人带来方便,并且得到人们的好评,那么自己编写的程序就可以实现商品化,形成产品给更多的人利用,并实现一定的商品价值。
因此本次课程设计有目的有以下几点:(1)复习巩固java语言的基础知识,进一步加深对java语言的理解和掌控。
(2)提供一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机结合起来,锻炼我们的分析解决实际问题的能力。
提高我们适应实际,实践编程的能力。
(3)培养我们在项目开发中创新意识及能力,通过亲身实践,利用所学编写简单的面向对象程序,提高对面向对象及JAVA语言的理解。
2.设计题目分析2.1 题目简介设计一个图形界面(GUI)的计算器应用程序,完成简单的算术运算、设计的计算器应用程序可以完成家法、减法、乘法、除法。
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 actionPerformed(ActionEvent evt)完成主要的按钮事件的处理。
事件处理分以下几种情况:数字按钮事件(”0”,”1”,”2”…”8”,”9”)、运算符按钮事件(”+”,”-“,”*”,”/”,”%”)、正负号按钮事件(”+/-“)、小数点按钮事件(”.”)、等号按钮事件(”=”)、求倒按钮事件(”1/x”)、退格按钮事件(”退格”)、清楚按钮事件(“C”)。
触发按钮事件时,要进一步分析,是重新开始计算时触发的按钮事件还是计算中间触发的按钮事件。
计算器完成的是一个数学表达式,如:3+2,所以可以采用一个链表(LinkedList类)来存储数字或字符,如3,+,2分别存储在链表中,最后运算时,可以一一取出来进行运算。
计算器设计外形及结构如下:系统总体设计框架Panel1Panel:4*4的数字及运算键Panel2:输入及运行结果显示及倒退清空键3.2计算器功能模块设计以下为标准计算器的基本功能:(1)加法两个数据进行加操作,可以为小数。
(2)减法两个数据进行减操作,可以为负数相减。
(3)乘法两个数相乘操作。
(4)除法两个数相除操作。
(5)清零清除显示框的数据。
具体的计算器功能模块图如下:计算器加减乘除清零3.3计算器算法流程设计计算器的程序设计,必然有数据的输入,当中就包含运算符和数字,都要通过计算器上的button按钮选项按键输入进去,里面录入的为字符型的数据,若要进行运算,要将输入的字符转换成double型,以防运算出错。
实现计算器算法功能的流程图如下所示:3.4类的设计class jisuan extends JFrame implements ActionListener {}//jisuan 是初始化界面,以及响应用户的操作。
jisuan 是个内部类,功能是进行进制的转换。
import java.awt.*;import java.awt.event.*; import javax.swing.*;这三项是系统初始时需要引入的主类以达到完成界面的目的。
用户点击按键或键盘输入触发事件文本框接收调用计算函数 文本框显示结果开始 主界面 输入 运算数据运算符号 结果输出继续3.5代码实现:1、引入主类:import java.awt.*;import java.awt.event.*;import javax.swing.*;public class jisuan extends JFrame implements ActionListener {2、实现计算器界面的关闭与扩展private static final long serialVersionUID = -169068472193786457L;private class WindowCloser extends WindowAdapter {public void windowClosing(WindowEvent we) {System.exit(0);} }3、建立按键并为每个按键赋予相应的字符int i;private final String[] str= { "7", "8", "9", "/", "4", "5", "6", "*", "1","2", "3", "-", ".", "0", "=", "+" };JButton[] buttons = new JButton[str.length];JButton reset = new JButton("CE");JTextField display = new JTextField("0");4、设计计算器界面public jisuan() {super("jisuan");JPanel panel1 = new JPanel(new GridLayout(4, 4));for (i = 0; i < str.length; i++) {buttons[i] = new JButton(str[i]);panel1.add(buttons[i]);}JPanel panel2 = new JPanel(new BorderLayout());panel2.add("Center", display);panel2.add("East", reset);getContentPane().setLayout(new BorderLayout());getContentPane().add("North", panel2);getContentPane().add("Center", panel1);5、为各个按键及显示框添加事件监听for (i = 0; i < str.length; i++)buttons[i].addActionListener(this);// Add listener for "reset" button.reset.addActionListener(this);// Add listener for "display" button.display.addActionListener(this);// The "close" button "X".addWindowListener(new WindowCloser());// Initialize the window size.setSize(800, 800);// Show the window.// show(); Using show() while JDK version is below 1.5.setVisible(true);// Fit the certain size.pack();}6、实现各个功能函数的调度public void actionPerformed(ActionEvent e) {Object target = e.getSource();String label = e.getActionCommand();if (target == reset)handleReset();else if ("0123456789.".indexOf(label) > 0)handleNumber(label);elsehandleOperator(label);}boolean isFirstDigit = true;public void handleNumber(String key) {if (isFirstDigit)display.setText(key);else if((key.equals(".")) && (display.getText().indexOf(".") < 0))display.setText(display.getText() + ".");else if (!key.equals("."))display.setText(display.getText() + key);isFirstDigit = false;}7、重置功能的实现public void handleReset() {display.setText("0");isFirstDigit = true;operator = "=";}double number = 0.0;String operator = "=";8、运算功能的实现public void handleOperator(String key) {if (operator.equals("+"))number += Double.valueOf(display.getText());else if (operator.equals("-"))number -= Double.valueOf(display.getText());else if (operator.equals("*"))number *= 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(String[] args) {new jisuan();}}3.5 设计结果与分析1、运行的初始界面2、数字计算演示以计算(789+45)*23=19182为例,计算过程如下:输入789与45相加所得结果输入23并相乘得到最终结果点击CE清零最后得到的结果为19182,结果正确,计算器的各个功能均得以实现。