设 计 报 告
课题名称:计算器设计
学 院:
专业班级:
学 号:
学 生:
指导教师:
教务处
年月 日
第二篇:java计算器设计报告
枣 庄 学 院
信息科学与工程学院
课程设计任务书
题目: 计算器
学 号: 0315 0307 0311
姓 名: 王宇 刘志伟 王传翔
专 业: 网络技术
课 程: java程序设计与实践教程
指导教师: 王琳琳 职称: 讲师
完成时间: 20##年 12 月----2014 年 1 月
枣庄学院信息科学与工程学院制
年 月 日
课程设计任务书及成绩评定
目录
1 概述 ...........................................................1
1.1设计目的及思路......................................... 2
1.2功能模块设计........................................... 2
1.3系统功能图............................................. 3
2计算器的设计与实现........................................ 3
2.1程序界面............................................... 3
2.2程序源代码............................................. 4
3计算器演示............................................... 10
4运行调试及讨论分析....................................... 13
5小结.................................................... 13
1概述
1.1设计目的及思路
通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。利用Java Applet图形界面首先开始设计一个计算器的界面,定义计算器所需要的按钮并赋给其按钮名称,使得使用计算器时简单明了,清晰可见,操作轻松。
给各个按钮进行算法,利用鼠标点击事件,当鼠标点击某个按钮时就开始执行那个按钮所定义的算法,生成数据并显示。
除数字的输入为直接进行输入外,其他运算例如+、-、*、/、开平方等算法要求计算时通过内部较为复杂的运算将结果显示在显示屏上。
至于其中的进制转换功能的实现则是直接调用Java中进制转换的函数,例如要将十进制转换成二进制则可直接调用函数Integer.toBinaryString(int i)来实现,充分显示了Java语言的简洁性和Java语言功能的强大性。
当然了在输入数据时还要进行异常捕捉,防止越界的现象的发生,这也是Java语言健壮性的体现!
1.2功能模块设计
以下为标准计算器的基本功能:
(1)加法
两个数据进行加操作,可以为小数。
(2)减法
两个数据进行减操作,可以为负数相减。
(3)乘法
两个数相乘操作。
(4)除法
两个数相除操作。
(5)开平方
对任意一个数进行开方运算,可以是小数。
1.3系统功能图
2计算器的设计与实现
2.1程序界面
2.2程序源代码
import java.awt.*;//计算器实例
import java.awt.event.*;
class calculator
{
public static void main(String args[])
{
MyWindow my=new MyWindow("计算器");
}
}
class MyWindow extends Frame implements ActionListener
{ StringBuffer m=new StringBuffer();//传值
int p;
TextField tex;//文本框
Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,jia,jian,cheng,chu,deng,dian,qingling,kaifang;//调用button里面的东西
MyWindow(String s)
{
super(s);//调用父类构造函数
//StringBuffer s2=new StringBuffer();
//String s;
tex=new TextField(18);
b0=new Button(" 0 ");
b1=new Button(" 1 ");
b2=new Button(" 2 ");
b3=new Button(" 3 ");
b4=new Button(" 4 ");
b5=new Button(" 5 ");
b6=new Button(" 6 ");
b7=new Button(" 7 ");
b8=new Button(" 8 ");
b9=new Button(" 9 ");
dian=new Button(" . ");
jia=new Button(" + ");
jian=new Button(" - ");
cheng=new Button(" × ");
chu=new Button(" / ");
deng=new Button(" = ");
qingling=new Button(" 清零 ");
kaifang=new Button(" √ ");
setLayout(new FlowLayout());//布局管理
add(tex);//静态方法
add(b0);
add(b1);
add(b2);
add(b3);
add(b4);
add(b5);
add(b6);
add(b7);
add(b8);
add(b9);
add(dian);
add(jia);
add(jian);
add(cheng);
add(chu);
add(kaifang);
add(qingling);
add(deng);
b0.addActionListener(this);//注册事件监听器,作用是将b0界面的事件处理交给this对象去处理
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
jia.addActionListener(this);
jian.addActionListener(this);
cheng.addActionListener(this);
chu.addActionListener(this);
dian.addActionListener(this);
deng.addActionListener(this);
qingling.addActionListener(this);
kaifang.addActionListener(this);
setBounds(200,200,160,280);//建立窗口坐标大小
setResizable(false);//调整窗口大小
setVisible(true);
validate();//确保组件具有有效的布局
addWindowListener(new WindowAdapter()//事件监听器
{ public void windowClosing(WindowEvent ee)//判断返回值是否错误
{ System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e)//用于接收操作事件的侦听器接口
{
if(e.getSource()==b0)
{
m=m.append("0");
tex.setText(String.valueOf(m));
}
if(e.getSource()==b1)
{
m=m.append("1"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b2)
{
m=m.append("2"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b3)
{
m=m.append("3"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b4)
{
m=m.append("4"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b5)
{
m=m.append("5"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b6)
{
m=m.append("6"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b7)
{
m=m.append("7"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b8)
{
m=m.append("8"); tex.setText(String.valueOf(m));
}
if(e.getSource()==b9)
{
m=m.append("9"); tex.setText(String.valueOf(m));
}
if(e.getSource()==jia)
{
m=m.append("+"); tex.setText(String.valueOf(m));
}
if(e.getSource()==jian)
{
m=m.append("-"); tex.setText(String.valueOf(m));
}
if(e.getSource()==cheng)
{
m=m.append("*"); tex.setText(String.valueOf(m));
}
if(e.getSource()==chu)
{
m=m.append("/"); tex.setText(String.valueOf(m));
}
if(e.getSource()==dian)
{
m=m.append("."); tex.setText(String.valueOf(m));
}
String mm=String.valueOf(m);//把字符类型转化成字符串
int p1=mm.indexOf("+");
int p2=mm.indexOf("-");
int p3=mm.indexOf("*");
int p4=mm.indexOf("/");
if(p1!=-1)
{
p=p1;
}
else if(p3!=-1)
{
p=p3;
}
else if(p2!=-1)
{
p=p2;
}
else if(p4!=-1)
{
p=p4;
}
if(e.getSource()==deng)
{
String m1=mm.substring(0,p);//构造一个新的 String
String m2=mm.substring(p+1);
String ch=mm.substring(p,p+1);
//System.out.println(m1);
//System.out.println(m2);
//System.out.println(ch);
if(ch.equals("+"))
{
float n1=Float.parseFloat(m1);
float n2=Float.parseFloat(m2);
float sum=n1+n2;
String su=String.valueOf(sum);
tex.setText(su);
}
if(ch.equals("-"))
{
float n1=Float.parseFloat(m1);
float n2=Float.parseFloat(m2);
float sum=n1-n2;
String su=String.valueOf(sum);
tex.setText(su);
}
if(ch.equals("*"))
{
float n1=Float.parseFloat(m1);
float n2=Float.parseFloat(m2);
float sum=n1*n2;
String su=String.valueOf(sum);
tex.setText(su);
}
if(ch.equals("/"))
{
float n1=Float.parseFloat(m1);
float n2=Float.parseFloat(m2);
float sum=n1/n2;
String su=String.valueOf(sum);
tex.setText(su);
}
}
if(e.getSource()==qingling)
{StringBuffer kk=new StringBuffer();
m=kk;
tex.setText("0");
// System.out.println(mm);
}
if(e.getSource()==kaifang)
{
String t=tex.getText();
float num=Float.parseFloat(t);
double nub=Math.sqrt(num);
tex.setText(String.valueOf(nub));
}
}
}
3计算器演示
加法
减法
乘法
除法
平方
清零
4运行调试及讨论分析
将代码写好之后检查代码的正确性,检查代码无误后将代码进行调试和运行将会出现一个JavaApplet计算器界面。在调试过程中可能会出现有界面但是不能运行小程序,那是因为没有初始化小程序,那时我们应该在主函数中将小程序进行初始化,这样小程序才能运行!
在调试和运行完全正确后,我们就可以按照自己的医院将小程序进行简单测试,例如输入一些简单数据分别运行各个按钮结果正确后可以初步确定程序师正确的。有时候我们还要输入不同范围的值进行测试,可能会发现更多的错误,因为有时候我们定义数据的范围可能会过小或输入数据会越界,到时我们就可以改正以适应更多更大的运算。
有时候我们会不自觉的选择一种最优函数方法尽量将自己的代码简单规范而又不缺少题目所要求的功能,那就要求我们翻阅很多参考书和查阅很多资料。其实javaApplet图形界面的布局也是我们要讨论的范围,如何使得界面更加美观是我们要探讨的!
有时候我们可能会到书上或网上找到一些满足我们要求的程序代码,在此我们应该取其优秀的简单易理解代码作为我们设计程序的代码,作为初学者参考和借用部分外部程序是不可避免,但是我认为前提我们应该看懂那些程序代码,要知其所以然,那样才达到我们学程序的目的,但不主张完全照搬,否则就会没意义了!
5小结
到此本次课程报告快接近尾声了,通过本次课程设计我学到了好多、也发现了自己的好多不足!
很显然最明显的收获是理解和较熟练的掌握了JavaApplet图形界面的基本方法,尤其在JavaApplet图形界面的布局方面学到颇多,以前布局很乱并且很多布局都是无效的。在此次课设中通过查阅很多资料和同学的互相帮助,充分发挥了JavaApplet界面布局的优越性。另外按钮功能的实现也是本次课设的一大难点,怎样实现那些功能是关键。通过这次课设我又学会了好多Java中的简单便捷的函数,例如Integer.toBinaryString(int i)函数(实现的是将一个十进制数转换成一个二进制的数)。
另外我这次课设部分程序是通过外部资料得到的,这使得我认识到查阅资料和开外多看书籍的重要性。但不主张照搬,因为那不是我们自己成果,那是不光彩的 。
总之通过此次课设我学到了好多,也掌握了好多关于JavaApplet的事件管理和按钮功能实现方法,这次课设给我的感受就是:只要你有心,不怕你完成不了课设。