简单计算器
学院
课程设计
设计课程: 信息系统分析与设计
题 目 简单计算器
姓 名 姓 名
学 院
专 业
指导教师
二O一五 年 6月 20 日
目录
一、概述„„„„„„„„„„„„„„„„„„„„„4
1.1 设计名称„„„„„„„„„„„„„„„„„4
1.2
编写目的„„„„„„„„„„„„„„„„„4
1.3 参考资料„„„„„„„„„„„„„„„„„4 二、需求概述„„„„„„„„„„„„„„„„„„„4
2.1 功能需求„„„„„„„„„„„„„„„„„5
2.2
响应需求„„„„„„„„„„„„„„„„„5
2.3 精度需求„„„„„„„„„„„„„„„„„5 2.4 故障处理„„„„„„„„„„„„„„„„„5 三、环境„„„„„„„„„„„„„„„„„„„„„5 3.1 运行环境„„„„„„„„„„„„„„„„„5
3.2
开发环境„„„„„„„„„„„„„„„„„5
四、可行性分析„„„„„„„„„„„„„„„„„„5 五、总体设计„„„„„„„„„„„„„„„„„„„6 5.1 第一层„„„„„„„„„„„„„„„„„„6 5.2 第二层„„„„„„„„„„„„„„„„„„6 5.3 第三层„„„„„„„„„„„„„„„„„„6 六、详细设计„„„„„„„„„„„„„„„„„„„6 6.1 逻辑设计„„„„„„„„„„„„„„„„„7 6.2 总体流程图„„„„„„„„„„„„„„„„7 七、用户界面设计„„„„„„„„„„„„„„„„„9
7.1 界面设计„„„„„„„„„„„„„„„„„9 7.2 操作方式„„„„„„„„„„„„„„„„10 八、调试与测试„„„„„„„„„„„„„„„„„„10 九、源程序清单„„„„„„„„„„„„„„„„„„14 十、小结„„„„„„„„„„„„„„„„„„„„„17
一、概述
1.1 设计名称
简单计算器 1.2 编写目的
设计一个计算器,具有以下功能: 1.2.1 用图形界面设计一个计算器;
1.2.2 系统界面上面一行是数字输入对话框和运算符号的下拉列表; 数字输入框用来编辑并显示所输入的数字,运算符号下拉列表 里面有运算符号+ — * / =,用来实现运算的进行和结束; 1.2.3 系统界面下面是一个文本框,用来显示输入的操作数和参与运 算的运算符号,直到运算符号为等号,输出等号和运算结果。 1.2.4 对操作数与运算符号的逻辑输入和循环输入进行处理,实现四 则运算的连续运算,并且能对各个操作数和运算符号进行有效 的输出;
1.2.5 当运算符号选择为“=”时,算法结束,输出最后一个操作数、 “=”和最终的运算结果。 1.3 参考资料 1.3.1 项目来源
市场上出现的各种计算器虽然具有强大的功能,但是使用操作上也增加了技术性,并且价格较贵,所以有必要用自己学习的知识来开发一个实用的计算器,使之能在界面和功能上尽量模拟windows 操作系统。应用所学的有关知识,将书面知识和实际需求和应用结合起来,以达到学以致用的目的。
1.3.2 引用资料
1.3.2.1 简单计算器的需求分析,百度文库 1.3.2.2 教程
二、需求概述
计算器是日常生活中十分便捷有效的计算工具,能实现加、减、乘、除等功能,可以用Java 编程来解决该问题。
2.1 功能需求
该计算器降低了数字计算的难度,提高了计算的准确度和精确度。该计算器的使用非常简单和方便,对广大用户来说能发挥一定的帮助作用。 2.2 响应需求
用户提交数据录入时,得到返回的结果延时不超过3秒钟。 2.3 精度需求
在合适输入范围内,输出精度保留一位小数点,并且对有效输入数据和输出数据能进行相应的精度转换。 2.4 故障处理
2.4.1 软件故障
若与使用电脑的操作系统不兼容,则不能使用此系统,应参考推荐运行系统 2.4.2 病毒故障
若由于电脑感染病毒而导致该系统不能使用,解决方案是重新安装。
三、环境
3.1 运行环境
Microsoft Windows XP等Windows 系统,不与网络连接。 3.2 开发环境
Eclipse 软件
四、可行性分析
可行性分析是在系统调查的基础上,针对新系统的开发是否具备必要性和可能性,对新系统的开发从技术、经济、社会的方面进行分析和研究,以避免投资失误,保证新系统的开发成功。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。该系统的可行性分析包括以下几个方面的内容。
技术可行性:硬件和软件的要求都不是很高,目前市场上的一般计算机都可以满足系统开发的要求,维护工作也很方便,有一定经验的操作人员可以在短时间内掌握维护工作。
经济可行性:系统开发的成本:开发成本非常低廉,界面友好,操作简单,不需要投入大系统运行维护费用:系统将开发得十分完整,维护费用低。
管理可行性:只需要使用者根据需求使用并进行基本的管理。 社会可行性:随着计算机网络和信息技术,电子商务的发展壮大,计算工作的运算的算法需求多样,有必要根据基本的需求开发一个简单的计算器,使之在Windows 系统界面进行运行。
五、总体设计
简单计算器设计思路 5.1 第一层
5.1.1 创建一个窗口的子类,并且实现ActionListener 接口; 5.1.2 对该类中声明所需要的窗口控件,并进行一定的初始化; 5.1.3 编辑该类的构造方法,设置窗口在屏幕上的基本属性,对窗口
实现的布局、下拉列表等进行具体的创建;将控件添加到窗口 中,对于不同的控件注册监视器。 5.2 第二层
5.2.1 重写ActionListener 接口的方法,对操作数和运算符号进行处 理;
5.2.2 用一个辅助变量来控制操作数和运算符号的先后循环操作,实 现先后一对一的逻辑输入;
5.2.3 对首次操作进行特殊处理处理,使之输入操作数时才有效。对 不同运算符号的处理分别进行编辑,对除号进行特殊处理,即 当除数为0时,结果错误。
5.2.4 对每一个操作数和参与运算的运算符号进行输出,当运算符号 为“=”时,算法结束,输出等号和最终运算结果。 5.3 第三层
5.3.1 写主类,并创建一个计算器。
六、详细设计
6.1 逻辑设计 6.1.1 第一层
6.1.1.1 Calculator 类为JFrame 的子类,并且实现与ActionListener 接口的事件监听器;
6.1.1.2 声明控件choiceFuhao ,声明并创建控件inputNumber 及 textShow;
6.1.1.3 重写Calculator ()构造方法,初始化一个容器,将容器的 布局设置为FlowLayout 布局; 6.1.1.4 声明创建符号数组choice[],用该数组实现下拉列表的创建; 6.1.1.5 在容器内添加控件choiceFuhao 、inputNumber 及textShow , 并且inputNumber 和choiceFuhao 都将this 注册为自己的监 视器;
6.1.1.6 对窗口的大小进行适当的设定,并设置窗口可见。 6.1.2 第二层
6.1.2.1 重写actionPerformed 方法,声明并初始化number 和esult , 添加辅助数flag ,对其进行负值初始化;
6.1.2.2 对flag 进行判断,若其为负值则读取数字操作数number ,保 证第一次输入为操作数,同时将flag 赋值为0;
6.1.2.3 操作数读取之后,开始读取运算符号,即flag 为0时,对运 算符号进行判断;
6.1.2.4 对运算符号的运算分别进行对应的运算操作,将运算结果存 储到result 中,运算后并对操作数和对应的运算符号进行输 出;把inputNumber 清空,将flag 赋值为负值,为下次操作 数的循环读入做准备;
6.1.2.5 对除号和等号进行特殊处理:当运算符号为除号的时候,判 断除数是否为0,若为0,则输出结果错误;当运算符号为等 号的时候,输出操作数、等号和最终结果,算法结束。 6.1.3 第三层
6.1.3.1 写主类,在主类中声明创建一个Calculator 对象,实现上述 操作。 6.2 总体流程图
在程序执行主界面,各执行步骤及其功能如下图: 6.2.1 Calculator类的各主体步骤
图1 Calculator类主体步骤流程图
6.2.2 actionPerformed方法的实现流程
图2 actionPerformed方法流程图
七、用户界面设计
7.1 界面设计
系统用户界面应做到美观性、可靠性、简单性,易于学习使用。
7.2 操作方式
键盘输入
八、调试与测试
8.1 输完程序后运行得主页面
图3 计算器主页面图
8.2 输入第一个操作数
图4 计算器第一个操作数输入图
8.3 选择运算符号
图5 计算器第一个运算符输入图
8.4 输入第二个操作数
图6 计算器第二个操作数输入图
8.5 选择运算符号
图7 计算器第二个运算符输入图
8.6 输入第三个操作数
图8 计算器第三个操作数输入图
8.7 选择运算符号“=”
图9 计算器等号选择图
8.8 当含有除法,并且除数为0时
图10 除数为0结果图
8.9 一个没有异常的运算式子
图11 没有异常式子运算结果图
8.10 当式子里出现除法异常时
图12 异常式子结果图
8.11 实现连续加法
图13 连续加法结果图
8.12 实现连续减法
图14 连续减法结果图
8.13 实现连续乘法
图15 连续乘法结果图
8.14 实现连续除法
图16 连续除法结果图
九、源程序清单
package newText;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Calculator extends JFrame implements ActionListener {
Font font;
JTextField inputNumber=new JTextField(10);
JComboBox choiceFuhao;
JTextArea textShow=new JTextArea(9,30);
public Calculator(){
super("Calculator");
java.awt.Container cp = getContentPane();
cp.setLayout(new FlowLayout());
Box bBox=Box.createHorizontalBox();
String choice[] ={"+","-","*","/","="};
choiceFuhao=new JComboBox(choice);
cp.add(bBox);
add(inputNumber);
add(choiceFuhao);
add(textShow);
inputNumber.addActionListener(this);
choiceFuhao.addActionListener(this);
//textShow.addComponentListener((ComponentListener) this);
setBounds(100,100,390,360);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
double number=0;
double result=0;
int flag=-1;
int ipress;
if(flag
number=Double.parseDouble(inputNumber.getText()); //取出文
本框的内容
flag=0;
}
if(flag==0){
{
{
{
{
{
}
} if(choiceFuhao.getSelectedItem().equals("+")) result+=number; textShow.setText(String.valueOf(""+number+"+")); inputNumber.setText(""); flag=-1; } if(choiceFuhao.getSelectedItem().equals("-")) result-=number; textShow.setText(String.valueOf(""+number+"-")); inputNumber.setText(""); flag=-1; } if(choiceFuhao.getSelectedItem().equals("*")) result*=number; textShow.setText(String.valueOf(""+number+"*")); inputNumber.setText(""); flag=-1; } if(choiceFuhao.getSelectedItem().equals("/")) result/=number; textShow.setText(String.valueOf(""+number+"/")); inputNumber.setText(""); flag=-1; } if(choiceFuhao.getSelectedItem().equals("=")) result=number; textShow.setText(String.valueOf(""+number+"="+""+result)); }
public static void main(String args[])
{
new Calculator();
}
}
十、小结
这次设计一开始遇到了一些问题,好几天努力无果,得到一些教
训,觉得还是对ActionEvent 事件和ItemEvent 事件的概念和方法了
解的不够,再者就是接口实现后的事件触发问题,即对接口方法的调
用没有很深入的认识。
在类很多,每个类中方法也很多的情况下,来回调用容易出现方
法名的错乱,这一点体现了编程的细密性和严谨,对于Java 语言的
学习还需要更深层次的加固,方才能很好地入门并且掌握。
设计过程中主要有以下几点问题:
第一,在对事件源选择监视器的时候,一定要知道什么类型的课
件可以触发什么事件,注册监视器,当事件源触发事件后,得清楚知
道监视器调用接口的什么方法,并且该方法一定是对应接口的方法。
一开始做修改的时候,用了很长时间才意识到这个问题,教训深刻。
第二,由于计算器首次操作是操作数输入才有效,便采用了辅助
数来控制操作数和运算符号先后循环的逻辑操作,并且对异常操作做
出了try-catch 处理。
第三,在对多项四则运算的处理中,采用一个result 存储之前
所有运算的结果,只需要对读入的数与result 进行两项运算即可,
不用更多变量,思路更清晰。
总之,这次程序设计让我灵活地运用了所知所学。面对已有的任
务,动脑思考,遇到问题是一种好事,它会让我们想到怎么去解决,
怎么做到更好。