计 算 机 科 学 系
目录
第一章 绪论.................................................................................................. 2
1.1 开发环境............................................................................................... 2
1.2 基本功能介绍...................................................................................... 2
第二章 系统设计......................................................................................... 3
2.1 系统流程图.......................................................................................... 3
2.2 系统功能框图...................................................................................... 3
2.3 需求分析............................................................................................... 4
第三章 软件设计......................................................................................... 5
3.1 界面设计............................................................................................... 5
3.2 代码设计............................................................................................... 5
第四章 测试分析....................................................................................... 10
3.1 程序运行情况:................................................................................... 10
3.2 程序异常处理:................................................................................... 10
3.3 测试用例............................................................................................ 11
3.3.1 加法测试................................................................................. 11
3.3.2 减法测试................................................................................. 11
3.3.3 乘法测试................................................................................. 12
3.3.4 除法测试................................................................................. 13
第五章 结束语........................................................................................... 14
第六章 参考文献....................................................................................... 15
第一章 绪论
1.1 开发环境
本系统是利用Java语言在NetBeans IDE6.5环境下开发的,Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。
为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。
通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。
1.2 基本功能介绍
本系统实现了一个简单而实用的计算器,通过这个计算器我们可以进行一些基本的运算操作,它可以进行简单的四则运算(加、减、乘、除)但仅限于十进制下,还可以进行(八进制,十进制,十六进制)之间的相互转换,八进制最多可以输入19位数,十进制最多可以输入18位数,十六进制最多可以输入14位数,backspace表示退格,clear表示初始化,在window下直接运行(Jsp2003.bat)即可,界面为灰白对称。它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;醒目美观的软件封面。使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
第二章 系统设计
2.1 系统流程图
2.2 系统功能框图
说明:在程序中构建类testZ,在其中封装起界面、文本框、按钮、数字、运算符等等成员,再引入成员函数testZ()进行计算器的模拟界面设计;其次设计出事件处理函数,如:运算事件、符号事件、等号事件等等;最后设计运算函数的响应事件。这样设计的好处在于使得程序的实现思维更清晰,易懂,可读性增强。反之则不然。
2.3 需求分析
首先分析这个说要完成的功能,它的主要任务是完成十六进制、十进制、八进制和二进制之间的相互转化,需要包含负数,但不用考虑小数。
其次,确定接口参数。根据功能可知,它传递给外部的就是一个转后的数据,而外部除了需要传递给转化前的数据以外,是否还需要其他参数呢?我们都知道,十进制的负数同样可以利用其他进制进行表示,例如二进制,转化方法是:求十进制数的绝对值对应的二进制数,最高位为1;然后对二进制逐位求反,最高位除外;接着最低一位加1,需要进位的话依次进位,最高位除外。如今的问题就摆在了我们面前,我们如何知道这个数的最高位是第几位呢,也许有人会说,那就用转化后的前面再加上一位,好,即使这样可以成立,那么-1转化后就是11,3转化后也为11,现在如果需要现在的把这个数二进制数再转化为十进制,那么我们如何知道原来的是正数还是负数呢,如果要转化为十六进制,八进制又当如何呢?经过以上的分析发现,还应该有另外一个参数——二进制时的宽度,只有这样才能知道谁是最高位,因此就称这个参数为位宽。
最后,设计类。根据第二步的分析,因为位宽对每一个方法都是一样,所以可能把它作为类的成员变量,而另外两个参数转化前的值和转化后的值就分别作为输入参数和返回值。而类对外的接口只有各个转化的方法,因此这几个方法设计为public权限,而其它所有的辅助方法都为private权限。位宽通过构造函数传递,外部不能直接访问和修改,设置也设置为private权限。为了减少计算量,所有的转化都以二进制为中介。例如十六进制到十进制,是十六进制→二进制→十进制。
第三章 软件设计
3.1 界面设计
这个就是计算器界面,简洁易用,我们可以从中的数字按键和运算符按钮进行相应的数学计算,总共由17个按钮(10个数字符+5个运算符号+1个小数点+1个“clear”按钮),一个标签、再加一个文本框组成。
3.2 代码设计
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Caculator
{
public static void main(String[] args)
{
JFrame frame = new JFrame("Caculator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new CaculatorPanel());
frame.pack();
frame.setVisible(true);
}
}
class CaculatorPanel extends JPanel
{
private JLabel namelabel,resultlabel;
private JTextField resultField;
private JPanel labelPanel,numberPanel,toolPanel;
private JButton s1,s2,s3,s4,s5,s6,s7, s8, s9,s0,
p1,p2,t1,t2,t3,t4,clear;
private boolean end,add,sub,mul,div;
private String str;
private double num1,num2;
public CaculatorPanel()
{
namelabel = new JLabel("计算器");
resultField = new JTextField(10);
ButtonListener listener = new ButtonListener();
clear = new JButton("clear");
clear.addActionListener(listener);
s1 = new JButton("1"); s1.addActionListener(listener);
s2 = new JButton("2"); s2.addActionListener(listener);
s3 = new JButton("3"); s3.addActionListener(listener);
s4 = new JButton("4"); s4.addActionListener(listener);
s5 = new JButton("5"); s5.addActionListener(listener);
s6 = new JButton("6"); s6.addActionListener(listener);
s7 = new JButton("7"); s7.addActionListener(listener);
s8 = new JButton("8"); s8.addActionListener(listener);
s9 = new JButton("9"); s9.addActionListener(listener);
s0 = new JButton("0"); s0.addActionListener(listener);
p1 = new JButton("."); p1.addActionListener(listener);
p2 = new JButton("="); p2.addActionListener(listener);
t1 = new JButton("+"); t1.addActionListener(listener);
t2 = new JButton("-"); t2.addActionListener(listener);
t3 = new JButton("*"); t3.addActionListener(listener);
t4 = new JButton("/"); t4.addActionListener(listener);
labelPanel = new JPanel();
labelPanel.add(namelabel);
labelPanel.add(resultField);
labelPanel.add(clear);
numberPanel = new JPanel();
numberPanel.setLayout(new GridLayout(4,3));
numberPanel.add(s1);
numberPanel.add(s2);
numberPanel.add(s3);
numberPanel.add(s4);
numberPanel.add(s5);
numberPanel.add(s6);
numberPanel.add(s7);
numberPanel.add(s8);
numberPanel.add(s9);
numberPanel.add(s0);
numberPanel.add(p1);
numberPanel.add(p2);
toolPanel = new JPanel();
toolPanel.setLayout(new GridLayout(4,1));
toolPanel.add(t1);
toolPanel.add(t2);
toolPanel.add(t3);
toolPanel.add(t4);
setPreferredSize(new Dimension(500,200));
setBackground(Color.cyan);
add(labelPanel);
add(numberPanel);
add(toolPanel);
}
public void num(int i){
String s = null;
s=String.valueOf(i);
if(end){
//如果数字输入结束,则将文本框置零,重新输入
resultField.setText("0");
end=false;
}
if((resultField.getText()).equals("0")){
//如果文本框的内容为零,则覆盖文本框的内容
resultField.setText(s);
}
else{
//如果文本框的内容不为零,则在内容后面添加数字
str = resultField.getText() + s;
resultField.setText(str);
}
}
private class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{ //数字事件
if(e.getSource()==clear)
resultField.setText("0");
else if(e.getSource()==s1)
num(1);
else if(e.getSource()==s2)
num(2);
else if(e.getSource()==s3)
num(3);
else if(e.getSource()==s4)
num(4);
else if(e.getSource()==s5)
num(5);
else if(e.getSource()==s6)
num(6);
else if(e.getSource()==s7)
num(7);
else if(e.getSource()==s8)
num(8);
else if(e.getSource()==s9)
num(9);
else if(e.getSource()==s0)
num(0);
//符号事件
else if(e.getSource()==t1)
sign(1);
else if(e.getSource()==t2)
sign(2);
else if(e.getSource()==t3)
sign(3);
else if(e.getSource()==t4)
sign(4);
//等号
else if(e.getSource()==p1){
str=resultField.getText();
if(str.indexOf(".")<=1){
str+=".";
resultField.setText(str);
}
}
else if(e.getSource()==p2){
num2=Double.parseDouble(resultField.getText());
if(add){
num1=num1 + num2;}
else if(sub){
num1=num1 - num2;}
else if(mul){
num1=num1 * num2;}
else if(div){
num1=num1 / num2;}
resultField.setText(String.valueOf(num1));
end=true;
}
}
public void sign(int s){
if(s==1){
add=true;
sub=false;
mul=false;
div=false;
}
else if(s==2){
add=false;
sub=true;
mul=false;
div=false;
}
else if(s==3){
add=false;
sub=false;
mul=true;
div=false;
}
else if(s==4){
add=false;
sub=false;
mul=false;
div=true;
}
num1=Double.parseDouble(resultField.getText());
end=true;
}
}
}
第四章 测试分析
4.1 程序运行情况:
程序正常的响应按钮事件,输入的数值长度受变量length的限定,进行混合四则运算的时候,结果如果不是很大,可以正常显示,但如果结果很大,就可能采用科学记数方式,这样带来了进制转换时的麻烦,需要特殊的处理科学记数里的E ,当结果太大的时候,有可能超出可能表示的最大值,(结果溢出),这个时候就要对结果进行必要的异常处理,我在输出结果的方法内设置if 语句,如果结果大于某一个值就抛出一个This_number_too_big 类型的类,再使用try-catch,捕捉输出结果的方法抛出的异常对象。然后进行,重制归零的处理。
4.2 程序异常处理:
当结果超出Double.MAX_VALUE时,将抛出一个This_number_too_big 类的异常对象,这个是我自定义的一个异常类它继承自Exception 类,然后使用try-catch去捕捉这个异常,异常的处理如下:
try
{ js();}
catch(This_number_too_big e)
{
lab.setText("0");
number=0;
mark='n';
Refresh=false;
System.out.println("The number is too big");
} //如果出现异常则初始化效果如同clear键
4.3 测试用例
4.4.1 加法测试
(1) 8952+1965.89运行结果如下:
(2) 0.58+(-2.891)运行结果如下:
4.4.2 减法测试
(1) 589.47-1009 运算结果如下:
(2) 0-0.583 运算结果如下:
4.4.3 乘法测试
(1) 458*(-58.145) 运算结果如下:
(2) 0*78.0 运算结果如下:
4.4.4 除法测试
(1) 10.8/0.00 运算结果如下:
(2) -100/20.3 运算结果如下:
(3) 0/99 运算结果如下:
第五章 结束语
终于做完了这次的作业,有一种如释重担的感觉,但还是有一点点的留恋。这次做的《计算器》的实现算是一个比较简单的设计,它牵涉的知识面并不是很多,实现的功能简单,对界面要求也不高,很适合我们做一些个人的程序开发。做起来虽然不是很吃力但有时还是比较烦躁的,可是在精力完全投入之后又发现自己已经被它深深吸引住,它有一股莫名的魅力在吸引我去完善。
从绪论到最后的总结,都是一步一个脚印走过来的,在这其中有很多的困难,但是还是自己给一个一个地突破,没有半途而废。老师给我们的时间是很充足的,在足够的时间里我们就没有理由不去做好它,通过此次课程设计,我们将本学期所学的JAVA知识得到巩固和应用,在设计的过程中遇到了很到问题,不过在自己向别人请教或网上找资料,最后还是很好的完成了。
这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。它还让我学会了在网上查阅那些无限的资料。通过对此课题的开发,使我对用JBuilder9.0开发系统有了一个比较清楚的认识,体会到理论和实践的重要性。由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如用户界面设计不够美观,异常出错处理比较差等多方面问题,是在最后的测试中还是存在一些小的问题,这些都有待进一步完善和提高,但值得欣慰的是,自己还是做出来了点东西。。对于文中出现的不足和系统中出现的问题敬请老师指导。
通过这次自己动手学习,我学到了很多东西,对软件开发我又增加了一些知识,相信在以后的系统开发中我们将会设计的更好、系统功能做的更完善。
第六章 参考文献
1.于万波、刘其昌等.Java语言实用教程.北京:清华大学出版社,2008
2.朱战立, 沈伟. Java程序设计实用教程[M]. 北京:电子工业出版社,2005
3.李诚等. Java2简明教程[M],第2版. 北京:清华大学出版社,2004
4.耿祥义.Java课程设计[M]. 北京:清华大学出版社,2004