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.课程设计目的
通过课程设计把知识形成系统,把自己所学的知识在实际问题中加以运用。如果自己编写的程序能够给更多的人带来方便,并且得到人们的好评,那么自己编写的程序就可以实现商品化,形成产品给更多的人利用,并实现一定的商品价值。
因此本次课程设计有目的有以下几点:
(1)复习巩固java语言的基础知识,进一步加深对java语言的理解和掌控。 (2)提供一个既动手又动脑,实践的机会,将课本上的理论知识和实际有机结合起来,锻炼我们的分析解决实际问题的能力。提高我们适应实际,实践编程的能力。
(3)培养我们在项目开发中创新意识及能力,通过亲身实践,利用所学编写简单的面向对象程序,提高对面向对象及JAVA语言的理解。
2.设计题目分析
2.1 题目简介
设计一个图形界面(GUI)的计算器应用程序,完成简单的算术运算、设计的计算器应用程序可以完成家法、减法、乘法、除法。
2.2 设计要求及需求分析
设计要求:由于现代用户更倾向于由鼠标方便操作的图形用户界面,所以我们采用GUI来实现计算器,并采用Swing组件,AWT事件处理等实现具体功能。
背景需求分析:在我们日常生活中,计算开支、收入时,大额数字或是多倍小数的计算都需要计算器的帮助,而在学习一些科目时,也常常要处理数字。虽然现在的计算器价格比较低廉,但是功能过于简单的不能满足个人需求,功能多的价格较贵,不仅操作不便,很多功能也根本用不到。所以我们想用自己所学设计开发一个属于自己的简单计算器来完成日常学习生活的需求。
2
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分别存储在链表中,最后运算时,可以一一取出来进行运算。
计算器设计外形及结构如下:
系统总体设计框架
Panel2 3
Panel:4*4的数字及运算键
Panel2:输入及运行结果显示及倒退清空键
Panel1 3.2计算器功能模块设计
以下为标准计算器的基本功能: (1)加法
两个数据进行加操作,可以为小数。 (2)减法
两个数据进行减操作,可以为负数相减。 (3)乘法
两个数相乘操作。 (4)除法
两个数相除操作。 (5)清零
清除显示框的数据。
具体的计算器功能模块图如下:
计算器
加 减 乘 除 清零 3.3计算器算法流程设计
计算器的程序设计,必然有数据的输入,当中就包含运算符和数字,都要通过计算器上的button按钮选项按键输入进去,里面录入的为字符型的数据,若要进行运算,要将输入的字符转换成double型,以防运算出错。 实现计算器算法功能的流程图如下所示:
4
用户点击按键或键盘输入 触发事件 文本框接收 调用计算函数 文本框显示结果 开始 主界面 输入 运算数据 运算符号 结果输出 继续 3.4类的设计
class jisuan extends JFrame implements ActionListener {
}//jisuan 是初始化界面,以及响应用户的操作。 jisuan是个内部类,功能是进行进制的转换。
import java.awt.*;
import java.awt.event.*; import javax.swing.*;
这三项是系统初始时需要引入的主类以达到完成界面的目的。
5
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 = -1690684721937857L; 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);
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());
6
5、为各个按键及显示框添加事件监听
}
// 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 (\"01234567.\".indexOf(label) > 0) handleNumber(label); else
handleOperator(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 = \"=\";
public void handleOperator(String key) { if (operator.equals(\"+\"))
7
8、运算功能的实现
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、数字计算演示
以计算(7+45)*23=19182为例,计算过程如下:
8
输入7
与45相加所得结果
输入23并相乘
得到最终结果
点击CE清零
9
最后得到的结果为19182,结果正确,计算器的各个功能均得以实现。
4.设计心得与总结
通过此次的课程设计实践,我们不但进一步理解掌握了课上老师教授的知识,而且通过查找资料学会了课上没有的东西,进一步理解了面向对象的含义,发现了很多它比面向过程突出的地方,第一次接触了图形界面,初步了解了GUI方面的知识。在实践中我们遇到了很多问题,但我们都努力克服,并最终成功的完成了这次课程设计。
通过编写这个相对复杂的程序,我们认识解决实际问题前应先建立模型,再通过建立的模型使问题简单化,从而解决问题。并且这次编写的程序大部分是通过调用各包中的方法来实现的,这也让我们充分理解了包和类的调用关系。由于这次编写的程序比较复杂,所以不能一次性编写、调试,也由此让我们学会把程序分块,逐个编写、调试。
参考文献:
[2]叶乃文,.面向对象程序设计[M].清华大学出版社,2009.
[2]邱桃荣,陈轶,冯缨.JAVA语言程序设计教程[M].机械工业出版社,2009.
[2]於东军,杨静宇,李千目,王国全.JAVA程序设计与应用开发[M].清华大学出版社,
2006.
10
附录:
计算器的完整实现代码:
import java.awt.*;
import java.awt.event.*; import javax.swing.*;
public class jisuan extends JFrame implements ActionListener {
private static final long serialVersionUID = -1690684721937857L;
private class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent we) { System.exit(0); } }
int i;
// Strings for Digit & Operator buttons. private final String[] str = { \"7\", \"8\", \"9\", \"/\", \"4\", \"5\", \"6\", \"*\", \"1\",
\"2\", \"3\", \"-\", \".\", \"0\", \"=\", \"+\" }; // Build buttons.
JButton[] buttons = new JButton[str.length]; // For cancel or reset.
JButton reset = new JButton(\"CE\");
// Build the text field to show the result. JTextField display = new JTextField(\"0\");
public jisuan() { super(\"jisuan\"); // Add a panel.
JPanel panel1 = new JPanel(new GridLayout(4, 4)); // panel1.setLayout(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.setLayout(new BorderLayout()); panel2.add(\"Center\", display); panel2.add(\"East\", reset);
// JPanel panel3 = new Panel();
11
getContentPane().setLayout(new BorderLayout()); getContentPane().add(\"North\", panel2); getContentPane().add(\"Center\", panel1);
// Add action listener for each digit & operator button. 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(); }
public void actionPerformed(ActionEvent e) { Object target = e.getSource();
String label = e.getActionCommand(); if (target == reset) handleReset();
else if (\"01234567.\".indexOf(label) > 0) handleNumber(label); else
handleOperator(label); }
// Is the first digit pressed? 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;
12
}
public void handleReset() { display.setText(\"0\"); isFirstDigit = true; operator = \"=\"; }
double number = 0.0; String operator = \"=\";
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(); }
}
13
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 69lv.com 版权所有 湘ICP备2023021910号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务