java计算器课程
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
Java简单计算器课程设计
1.功能描述
本计算器可以进行简单的四则运算(加、减、乘、除)但仅限于十进制下,还可以进行(八进制,十进制,十六进制)之间的相互转换,八进制最多可以输入19位数,十进制最多可以输入18位数,十六进制最多可以输入14位数,backspace表示退格,clear表示初始化,在window下直接运行(Jsp2003.bat)即可,界面为灰白对称。
2.
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
论证
2.1概要设计
2.1.1自定义类
说明
关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书
**********************************************************
类名: This_number_too_big
作用: 自定义的异常类,用来处理计算结果溢出
继承的父类: Exception类
实现的接口: 没有
**********************************************************
class This_number_too_big extends Exception
{
}//自定义的一个结果溢出异常类
**********************************************************
类名: Jsp2003
作用: 主类
继承的父类: Frame类
实现的接口: ItemListener类,ActionListener类
**********************************************************
class Jsp2003 extends Frame implements ItemListener,ActionListener
{
public int number=0,length=18; //number是用来记录输入的数字个数,
//length是用来设置在不同进制下允许输入的最多数字位数,默认为十进制 public char mark='n';
//设置运算符号为没有即为‘n’,它的值是‘+’‘-’‘*’‘/’ public double data=0;
//设置运算数据为零
public char ch;
//用来临时存放所按按钮的第一个字符
public boolean Refresh=false; //设置lab是否要在输入数据的时候刷新,初始为否
2.1.2主要
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
说明:
//用来处理按了运算符后的计算-
public void js() throws This_number_too_big //指定由method抛出异常 {if (mark=='n') //没有运算符
{mark=ch; //,则设置运算符为刚刚输入的字符,
data=Double.parseDouble(lab.getText());//则设置运算数据为lab的值 Refresh=true;//则设置下一次输入的时候要刷新lab
}
else //如果采用的是连续运算(即没有使用‘=’号)则运行下面的语句
{switch (mark) //根据运算符计算结果,并把结果保存到data
{ case '+': data+=Double.parseDouble(lab.getText()); break;
case '-': data-=Double.parseDouble(lab.getText()); break;
case '*': data*=Double.parseDouble(lab.getText()); break;
case '/': data/=Double.parseDouble(lab.getText()); break;}
lab.setText(Double.toString(data)); //显示运算结果
mark=ch;//设置运算符为刚刚按下的运算符
Refresh=true;//则设置下一次输入的时候要刷新lab
number=lab.getText().length();//设置输入的字符个数
// System.out.println(lab.getText());//用来调试用的
if (data>Double.MAX_VALUE)
//如果data超过double类型的最大值则抛出自定义的一个异常类
{throw new This_number_too_big(); } }
}//end js() method
public void enter()//处理输入字符
{if(Refresh==true)
//如果已经设置了 运算符则在下一次输入数据的时候要把以前lab的内容清除掉
{lab.setText("0"); number=0; Refresh=false;} if(lab.getText().charAt(0)=='0'&& lab.getText().length()==1)
//如果lab的内容为0则,lab的内容将被所输入的字符代替,
//否则直接在lab的内容后面加上所输入的字符
{lab.setText(Character.toString(ch)); number++;} else
if(number
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
这个说要完成的功能,它的主要任务是完成十六进制、十进制、八进制和二进制之间的相互转化,需要包含负数,但不用考虑小数。
其次,确定接口参数。根据功能可知,它传递给外部的就是一个转后的数据,而外部除了需要传递给转化前的数据以外,是否还需要其他参数呢,我们都知道,十进制的负数同样可以利用其他进制进行表示,例如二进制,转化方法是:求十进制数的绝对值对应的二进制数,最高位为1;然后对二进制逐位求反,最高位除外;接着最低一位加1,需要进位的话依次进位,最高位除外。如今的问题就摆在了我们面前,我们如何知道这个数的最高位是第几位呢,也许有人会说,那就用转化后的前面再加上一位,好,即使这样可以成立,那么-1转化后就是11,3转化后也为11,现在如果需要现在的把这个数二进制数再转化为十进制,那么我们如何知道原来的是正数还是负数呢,如果要转化为十六进制,八进制又当如何呢,经过以上的分析发现,还应该有另外一个参数——二进制时的宽度,只有这样才能知道谁是最高位,因此就称这个参数为位宽。
最后,设计类。根据第二步的分析,因为位宽对每一个方法都是一样,所以可能把它作为类的成员变量,而另外两个参数转化前的值和转化后的值就分别作为输入参数和返回值。而类对外的接口只有各个转化的方法,因此这几个方法设计为public权限,而其它所有的辅助方法都为private权限。位宽通过构造函数传递,外部不能直接访问和修改,设置也设置为private权限。为了减少计算量,所有的转化都以二进制为中介。例如十六进制到十进制,是十六进制?二进制?十进制。
2.2.2程序代码
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;
public class Tuo
{
String str1="0"; //运算数1 初值一定为0 为了程序的安全
String str2="0"; //运算数2
String fh="+"; //运算符
String jg="";//结果
//状态开关 重要
int k1=1;//开关1 用于选择输入方向 将要写入str2或 str2
int k2=1;//开关2 符号键 次数 k2>1说明进行的是2+3-9+8 这样的多符号运算 int k3=1;//开关3 str1 是否可以被清0 ==1时可以 !=1时不能被清0 int k4=1;//开关4 str2 同上
int k5=1;//开关5 控制小数点可否被录入 ==1时可以 !=1 输入的小数点被丢掉 JButton jicunqi; //寄存器 记录 是否连续按下符号键
Vector vt=new Vector(20,10);
JFrame frame=new JFrame("计算器");
JTextField jg_TextField=new JTextField(jg,20);//20列
JButton clear_Button=new JButton("清除");
JButton button0=new JButton("0"); JButton button1=new JButton("1"); JButton button2=new JButton("2"); JButton button3=new JButton("3"); JButton button4=new JButton("4"); JButton button5=new JButton("5"); JButton button6=new JButton("6"); JButton button7=new JButton("7"); JButton button8=new JButton("8"); JButton button9=new JButton("9"); JButton button_Dian=new JButton("."); JButton button_jia=new JButton("+"); JButton button_jian=new JButton("-"); JButton button_cheng=new JButton("*"); JButton button_chu=new JButton("/"); JButton button_dy=new JButton("="); ////////////////////////////////////////////////////////////////////////
public static void main(String[] args) {
Tuo tuo=new Tuo();
}
/////////////////////////////////////////////////////////////////////////
Tuo()
{
button0.setMnemonic(KeyEvent.VK_0);//等效键
//其它 等效键 略,
jg_TextField.setHorizontalAlignment(JTextField.RIGHT );//文本框 右对齐 JPanel pan=new JPanel();
pan.setLayout(new GridLayout(4,4,5,5));//四行四列 边距为5像素 pan.add(button7);
pan.add(button8);
pan.add(button9);
pan.add(button_chu);
pan.add(button4);
pan.add(button5);
pan.add(button6);
pan.add(button_cheng);
pan.add(button1);
pan.add(button2);
pan.add(button3);
pan.add(button_jian);
pan.add(button0);
pan.add(button_Dian);
pan.add(button_dy);
pan.add(button_jia);
pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));//pan对象的边距 JPanel pan2=new JPanel();
pan2.add(jg_TextField);
JPanel pan3=new JPanel(); //为什么要 多此一句呢, 因为我不会设置 按钮的大小 pan3.setLayout(new FlowLayout()); pan3.add(clear_Button);
//clear_Button.setSize(10,10);//设置清零按钮的大小 吗的 不好使 ~~ frame.setLocation(300, 200); //主窗口 出现在位置
frame.setResizable(false); //不能调大小
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(pan2,BorderLayout.NORTH);
frame.getContentPane().add(pan,BorderLayout.CENTER);
frame.getContentPane().add(pan3,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
//以上是 控件 和 布局
//下面是事件处理 程 序
//--------------- 数 字 键 ---------------- class JianTing implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String ss=((JButton)e.getSource()).getText();
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
if (k1==1)
{
if(k3==1)
{
str1="";
k5=1;//还原开关k5状态
}
str1=str1+ss;
//k2=1;
k3=k3+1;
//System.out.println(str1);
jg_TextField.setText(str1);//显示
}
else if(k1==2)
{
if (k4==1)
{
str2="";
k5=1; //还原开关k5状态
}
str2=str2+ss;
//k2=2;
k4=k4+1;
///////////////测试////////////////
jg_TextField.setText(str2);
}
}
}
//,,,,,,,,符 号,,,,,,,,,,,
class JianTing_fh implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String ss2=((JButton)e.getSource()).getText();
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
if(k2==1)
{
k1=2;//开关 k1 为1时,向数1写 为2时,向数2写
k5=1;
fh=ss2;
k2=k2+1;//按符号键的次数
}
else
{
int a=vt.size();
JButton c=(JButton)vt.get(a-2); if(!(c.getText().equals("+"))&&!(c.getText().equals("-"))&&!(c.getText().equals("*"))&&!(c.g
etText().equals("/")))
//if(!(vt.get(a-2).getText().equals("-"))||!(vt.get(a-2).getText().equals("+"))||!(vt.get(
a-2).getText().equals("*"))||!(vt.get(a-2).getText().equals("/")))
{ yuns();
str1=jg;
k1=2;//开关 k1 为1时,向数1写 为2时,向数2写
k5=1;
k4=1;
fh=ss2;
} k2=k2+1;
}
}
}
//,,,,,,,,清除,,,,,,,
class JianTing_clear implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
k5=1;
k2=1;
k1=1;
k3=1;
k4=1;
str1="0";
str2="0";
fh="";
jg="";
jg_TextField.setText(jg);
vt.clear();
}
}
//----------------等 于 --------------------- class JianTing_dy implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
yuns();
k1=1; //还原开关k1状态
//str1=jg;
k2=1;
k3=1;//还原开关k3状态
k4=1; //还原开关k4状态
str1=jg; //为7+5=12 +5=17 这种计算做准备
}
}
//----------------小数点 --------------------- class JianTing_xiaos implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
if(k5==1)
{
String ss2=((JButton)e.getSource()).getText();
if (k1==1)
{
if(k3==1)
{
str1="";
k5=1; //还原开关k5状态
}
str1=str1+ss2;
//k2=1;
k3=k3+1;
//System.out.println(str1);
jg_TextField.setText(str1);//显示
}
else if(k1==2)
{
if (k4==1)
{
str2="";
k5=1; //还原开关k5状态
}
str2=str2+ss2;
//k2=2;
k4=k4+1;
///////////////测试////////////////
jg_TextField.setText(str2);
}
}
k5=k5+1; //
}
}
//注册 监听器
JianTing_dy jt_dy=new JianTing_dy(); JianTing jt= new JianTing();//临听数字键
JianTing_fh jt_fh= new JianTing_fh();//临 听符 号键
JianTing_clear jt_c=new JianTing_clear(); //清除键
JianTing_xiaos jt_xs=new JianTing_xiaos();// 小数点 键
button7.addActionListener(jt); button8.addActionListener(jt); button9.addActionListener(jt); button_chu.addActionListener(jt_fh); button4.addActionListener(jt); button5.addActionListener(jt); button6.addActionListener(jt); button_cheng.addActionListener(jt_fh); button1.addActionListener(jt); button2.addActionListener(jt); button3.addActionListener(jt); button_jian.addActionListener(jt_fh); button0.addActionListener(jt); button_Dian.addActionListener(jt_xs); button_dy.addActionListener(jt_dy); button_jia.addActionListener(jt_fh); clear_Button.addActionListener(jt_c); //关闭事件处理程序
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
//---------------计 算------------------ public void yuns()
{
double a2;//运算数1
double b2;//运算数2
String c=fh;// 运算符
double jg2=0 ;//结果
if (c.equals(""))
{
System.out.println("请输入运算符"); jg_TextField.setText("请输入运算符"); }
else
{
System.out.println("str1:"+str1);//调试时 使 用 System.out.println("str2:"+str2);//调试时 使 用 System.out.println("运算符:"+fh);//调试时 使 用 if (str1.equals(".")) //字符串 "." 转换成double型数据时 会出错 所以手工转
str1="0.0";
if (str2.equals("."))
str2="0.0";
a2=Double.valueOf(str1).doubleValue();
b2=Double.valueOf(str2).doubleValue();
System.out.println("double型的a2:"+a2); //调试时 使 用 ystem.out.println("double型的b2:"+b2); //调试时 使 用 if (c.equals("+"))
{
jg2=a2+b2;
}
if (c.equals("-"))
{
jg2=a2-b2;
}
if (c.equals("*"))
{
jg2=a2*b2;
}
if (c.equals("/"))
{
if(b2==0)
{
jg2=0;//0000000000000 by 0 cu!
}
else
{
jg2=a2/b2;
}
}
System.out.println("double型a2"+fh+"b2结果:"+jg2);
System.out.println();
jg=((new Double(jg2)).toString());
jg_TextField.setText(jg);
}
}
}
3.运行结果
3.1程序运行效果截图
图3
3.2程序测试分析
3.2.1程序运行情况:
程序正常的响应按钮事件,输入的数值长度受变量length的限定,进行混合四则运算的时候,结果如果不是很大,可以正常显示,但如果结果很大,就可能采用科学记数方式,这样带来了进制转换时的麻烦,需要特殊的处理科学记数里的E ,当结果太大的时候,有可能超出可能表示的最大值,(结果溢出),这个时候就要对结果进行必要的异常处理,我在输出结果的方法内设置if 语句,如果结果大于某一个值就抛出一个This_number_too_big 类型的类,再使用try-catch,捕捉输出结果的方法抛出的异常对象。然后进行,重制归零的处理。 3.2.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.总结
通过此次课程设计,将我本学期所学的JAVA知识得到巩固和应用,在设计的过程中我遇到了很到问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。它还让我学会了在网上查阅那些无限的资料。通过对此课题的开发,使我对用JBuilder9.0开发系统有了一个比较清楚的认识,体会到理论和实践的重要性。由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如用户界面设计不够美观,异常出错处理比较差等多方面问题,这些都有待进一步完善和提高。对于文中出现的不足和系统中出现的问题敬请老师指导。
5.参考文献
, 沈伟. Java程序设计实用教程[M]. 北京:电子工业出版社,2005.01:1.朱战立
59-98
2.李诚等. Java2简明教程[M],第2版. 北京:清华大学出版社,2004.08:
201 165-
3.耿祥义.Java课程设计[M]. 北京:清华大学出版社,2004.02:53-78