somwosJava课程设计报告

时间:2024.4.13

-+

懒惰是很奇怪的东西,它使你以为那是安逸,是休息,是福气;但实际上它所给你的是无聊,是倦怠,是消沉;它剥夺你对前途的希望,割断你和别人之间的友情,使你心胸日渐狭窄,对人生也越来越怀疑。

—罗兰

Java课程设计报告

计算器软件设计

学生姓名:   

    号: 

年级专业:

指导老师:   

    院:

湖南·长沙

提交日期:20##年12月

目    录

1. 前言………………………………………………………………………………2

2.概要设计………………………………………………………………………3

  2.1 开发环境……………………………………………………………………3

  2.2 计算器功能…………………………………………………………………3

  2.3 界面设计……………………………………………………………………3

  2.4 uml图…………………………………………………………………4

3. 详细设计………………………………………………………………………4

  3.1 使用的java类的说明…………………………………………………4

  3.2 类的主要方法……………………………………………………………5

3.2.1处理按了运算符后的计算……………………………………………5

3.2.2处理输入字符…………………………………………………………6

3.2.3进制的转换……………………………………………………………6

3.2.4设计总体认识…………………………………………………………7

3.2.5程序流程图……………………………………………………………8

4. 运行结果…………………………………………………………………………8

5. 测试分析…………………………………………………………………………9

   5.1 程序运行情况………………………………………………………………9

   5.2 程序异常处理………………………………………………………………9

6. 源程序…………………………………………………………………………9

参考文献…………………………………………………………………………27

    谢…………………………………………………………………………27


摘要:该程序是一个图形界面的简单的java计算器,具有良好的界面,使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。可以进行简单的四则运算(加、减、乘、除,以及开平方)但仅限于十进制下,还可以进行(八进制,十进制,十六进制)之间的相互转换,八进制最多可以输入19位数,十进制最多可以输入18位数,十六进制最多可以输入14位数,backspace表示退格, clear表示初始化,sqrt表示开平方,界面为灰白对称。

关键字:java、计算器类、方法、事件

1 前言

随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。文本编辑器是个人计算机最司空见惯的应用程序了,在学习了Java语言之后,我决定使用Java语言编写一个简单的计算器,可以实现简单的运算功能,满足日常基本的工作学习和娱乐需要。

Java是由Sun公司开发的新一代纯面向对象的网络编程语言。其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。正因为如此,Java已成为当今Internet上最流行、最受欢迎的一种程序开发语言。

Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。Java基本版本叫Java 2标准版(Java 2 Standard Edition,J2SE),它包含建立Java应用程序或者是Applet所需的应用程序编程接口(API)。Java 2移动版(The Java 2 Mobile Edition,J2ME)包含创建无线Java应用程序的API。还有Java 2企业版(The Java 2 Enterprise,J2EE)是J2SE的增强版本,包含建立多层架构应用程序API。

Java语言是由C++语言发展起而来的,是一种彻底的面向对象的程序设计语言。作为一种纯面向对象的程序设计语言,它非常适合大型软件的开发。Java语言去掉了C++语言的一些容易引起错误的特性。Java语言的特点有:面向对象、跨平台、安全性、多线程和图形功能强。

2 概要设计

2.1开发环境

        开发平台:Microsoft Windows XP Professional Service Pack 2

        开发工具:JBuilder 20## + JDK 1.6.0_02

2.2计算器功能

功能 1:按下数字键在液晶平上会显示数字,这时计算器最基本的功能。
       功能 2:在任何时候按下“±”键,计算器文本框上的数字置反号。
       功能 3:第一次按下“运算”键,再按下数字键,将重新输入第二个数字。再次按下“运  算”键,将算出前两个数字运算的结果,然后按下数字,将又重新输入新的数字。
       功能 4:输入数字后,按下“等于”键,将仍输出原来的数 输入运算符和第二个数字后再按下“=”键,将得到二者运算的结果,然后又重复功能 3 和功能 4 。
        功能 5:按下清除“C”键,数据被全部清楚。

2.3界面设计

图2.3 计算器面板

2.4 UML

ArrayStackChar    UML图如图2.3A所示:

ArrayStackDouble  UML图如图2.3B所示

图2.4A                              图2.4B

3详细设计

3.1计算器使用的Java类的说明

类名: 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是否要在输入数据的时候刷新,初始为否  

程序的设计参考了Sun Java网站里的大量实例,比如Layout的使用、Event的处理、Components的添加与应用等等。其中:

public class NewCalc extends JFrame implements ActionListener

语句实现了ActionListener接口,因此可以调用addActionListener(this)方法对按钮进行点击监听,在下面的public void actionPerformed(ActionEvent e)方法里面对各个点击事件进行处理。

3.2类的主要方法

3.2.1处理按了运算符后的计算:

     public void js() throws This_number_too_big
{if (mark=='n')
{mark=ch; /
data=Double.parseDouble(lab.getText());
Refresh=true;
}
else
{switch (mark) 
{ 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;
number=lab.getText().length();
// System.out.println(lab.getText());
if (data>Double.MAX_VALUE)
{throw new This_number_too_big(); }
}
}

           

3.2.2处理输入字符:

{if(Refresh==true)
{lab.setText("0"); number=0; Refresh=false;}
if(lab.getText().charAt(0)=='0'&& lab.getText().length()==1)
{lab.setText(Character.toString(ch)); number++;}
else
if(number<length)
{number++;lab.setText(lab.getText()+ch);}
}

3.2.3八进制或十六进制转换成十进制I:

public String goto_10(String s,long l)
//参数s: 是要转换的字符串,由于输入的控制,保证了字符串的合法性;
//参数l: 使用来设置是将8进制还是16进制转换成10进制,它的有效值为8或16;
{ String str=s; //用来转换的字符串
long j=l; //表示进制
long lg=0,jing=1;//lg用来记录权乘和,jing用来记录位权
char cha;//临时记录要转换的字符
for(int i=1;i<=str.length();i++)
{ cha=str.charAt(str.length()-i);
switch(cha)
{ case '1': lg=lg+1*jing;break;
case '2': lg=lg+2*jing;break;
case '3': lg=lg+3*jing;break;
case '4': lg=lg+4*jing;break;
case '5': lg=lg+5*jing;break;
case '6': lg=lg+6*jing;break;
case '7': lg=lg+7*jing;break;
case '8': lg=lg+8*jing;break;
case '9': lg=lg+9*jing;break;
case 'A': lg=lg+10*jing;break;
case 'B': lg=lg+11*jing;break;
case 'C': lg=lg+12*jing;break;
case 'D': lg=lg+13*jing;break;
case 'E': lg=lg+14*jing;break;
case 'F': lg=lg+15*jing;break;}
jing*=j; //位权升一级,为下次使用做好准备
}
return Long.toString(lg);
}//end String goto_10() method
}

3.2.4设计的总体认识

l  JAVA设计的摘要

l  JAVA设计的目录结构

l  JAVA设计的概要和详细设计

l  JAVA设计的版权意识

l  JAVA设计需要编译的环境

l  JAVA设计的实用性

 

3.2.5程序流程图

 

图3绘制计算器方法PAD图

4运行结果

图4 计算结果显示

5测试分析

5.1程序运行情况:
程序正常的响应按钮事件,输入的数值长度受变量length的限定,进行混合四则运算的时候,结果如果不是很大,可以正常显示,但如果结果很大,就可能采用科学记数方式,这样带来了进制转换时的麻烦,需要特殊的处理科学记数里的E ,当结果太大的时候,有可能超出可能表示的最大值,(结果溢出),这个时候就要对结果进行必要的异常处理,我在输出结果的方法内设置if 语句,如果结果大于某一个值就抛出一个This_number_too_big 类型的类,再使用try-catch,捕捉输出结果的方法抛出的异常对象。然后进行,重制归零的处理。

5.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键

6 程序清单:

import java.awt.*;

import java.awt.event.*;

class This_number_too_big extends Exception {

}// 自定义的一个结果溢出异常类

// ActionLintsner是所有监听器的父类,其它监听器可以监听的事件都可以被它捕获

// ItemListener用于捕获带有item的组件产生的事件,如ComboBox,CheckBox,RadioButton,ToggleButton

class hejiang extends Frame implements ItemListener, ActionListener {

    public hejiang() {

       addWindowListener(new WindowAdapter() {

           public void windowClosing(WindowEvent e) {

              dispose();

              System.exit(0);

           } // 给窗口注册一个事件监听器,当你点了窗口右上方的叉号时,此方法被调用

       });

    }

    static hejiang mainFrame = new hejiang(); // 创建一个mainFrame

static Label lab1 = new Label("0");

static Label lab = new Label("0");

static Panel pnl1 = new Panel(new GridLayout(4, 3, 3, 3)); // 创建新的面板.布局管理

static Panel pnl2 = new Panel(new GridLayout(4, 1, 3, 3));

static Panel pnl3 = new Panel(new GridLayout(1, 2, 3, 3));

static Panel pnl4 = new Panel(new GridLayout(6, 1, 3, 3));

static Button bt9 = new Button("9");

static Button bt8 = new Button("8");

static Button bt7 = new Button("7");

static Button bt6 = new Button("6");

static Button bt5 = new Button("5");

static Button bt4 = new Button("4");

static Button bt3 = new Button("3");

static Button bt2 = new Button("2");

static Button bt1 = new Button("1");

static Button bt0 = new Button("0");

static Button btdot = new Button(".");

static Button btequ = new Button("=");

static Button btadd = new Button("+");

static Button btsub = new Button("-");

static Button btmul = new Button("*");

static Button btdev = new Button("/");

static Button btA = new Button("A");

static Button btB = new Button("B");

static Button btC = new Button("C");

static Button btD = new Button("D");

static Button btE = new Button("E");

static Button btF = new Button("F");

static Checkbox ckb8 = new Checkbox("八进制");

static Checkbox ckb10 = new Checkbox("十进制");

static Checkbox ckb16 = new Checkbox("十六进制");

static Button btc = new Button("clear");

static Button btt = new Button("backspace");

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是否要在输入数据的时候刷新,初始为否

    public static void main(String args[]) {

        System.out.println("Starting hejiang...");

       lab.setAlignment(Label.RIGHT); // 对齐方式

       lab.setBackground(Color.lightGray); // 背景色

       lab.setForeground(Color.BLUE); // 前景色

       lab.setFont(new Font("Serief", Font.BOLD, 18));// 字体设置

       lab.setBounds(14, 33, 216, 40);

       lab1.setAlignment(Label.RIGHT); // 对齐方式

       lab1.setBackground(Color.lightGray); // 背景色

       lab1.setForeground(Color.BLUE); // 前景色

       lab1.setFont(new Font("Serief", Font.BOLD, 18));// 字体设置

      lab1.setBounds(14, 75, 216, 40);

       mainFrame.add(lab);

       mainFrame.add(lab1);

       CheckboxGroup grp = new CheckboxGroup();

       ckb8.setCheckboxGroup(grp);

       ckb10.setCheckboxGroup(grp);

       ckb16.setCheckboxGroup(grp);

       ckb8.setBounds(14, 115, 55, 25); // setBounds()方法是可以设定控件的大小和位置

       ckb10.setBounds(69, 115, 55, 25);

       ckb16.setBounds(124, 115, 65, 25);

       ckb8.setState(false);

       ckb10.setState(true);

       ckb16.setState(false);

       mainFrame.add(ckb8);

       mainFrame.add(ckb10);

       mainFrame.add(ckb16);

       pnl1.setBounds(18, 180, 120, 150);

       pnl2.setBounds(144, 180, 40, 150);

       pnl3.setBounds(14, 140, 170, 36);

       pnl4.setBounds(190, 140, 40, 190);

       pnl1.add(bt7);

       pnl1.add(bt8);

       pnl1.add(bt9);

       pnl1.add(bt4);

       pnl1.add(bt5);

       pnl1.add(bt6);

       pnl1.add(bt1);

       pnl1.add(bt2);

       pnl1.add(bt3);

       pnl1.add(bt0);

       pnl1.add(btdot);

       pnl1.add(btequ);

       pnl2.add(btadd);

       pnl2.add(btsub);

       pnl2.add(btmul);

       pnl2.add(btdev);

       pnl3.add(btt);

       pnl3.add(btc);

       pnl4.add(btA);

       pnl4.add(btB);

       pnl4.add(btC);

       pnl4.add(btD);

       pnl4.add(btE);

       pnl4.add(btF);

       btA.enable(false);

       btB.enable(false);

       btC.enable(false);

       btD.enable(false);

       btE.enable(false);

       btF.enable(false);

       mainFrame.add(pnl1);

       mainFrame.add(pnl2);

       mainFrame.add(pnl3);

       mainFrame.add(pnl4);

       mainFrame.setResizable(false); // 窗口可以最小化和关闭,但是不能被任意改变大小

       mainFrame.setLayout(null);

       mainFrame.setSize(240, 350);

       mainFrame.setTitle("小型计算器");

       mainFrame.setVisible(true); // 组件可见

       ckb8.addItemListener(mainFrame);

       ckb10.addItemListener(mainFrame);

       ckb16.addItemListener(mainFrame);

       // 把事件聆听者向各个组键注册

       bt1.addActionListener(mainFrame);

       bt2.addActionListener(mainFrame);

       bt3.addActionListener(mainFrame);

       bt4.addActionListener(mainFrame);

       bt5.addActionListener(mainFrame);

       bt6.addActionListener(mainFrame);

       bt7.addActionListener(mainFrame);

       bt8.addActionListener(mainFrame);

       bt9.addActionListener(mainFrame);

       bt0.addActionListener(mainFrame);

       btadd.addActionListener(mainFrame);

       btsub.addActionListener(mainFrame);

       btmul.addActionListener(mainFrame);

       btdev.addActionListener(mainFrame);

       btt.addActionListener(mainFrame);

       btc.addActionListener(mainFrame);

       btdot.addActionListener(mainFrame);

       btequ.addActionListener(mainFrame);

       btA.addActionListener(mainFrame);

       btB.addActionListener(mainFrame);

       btC.addActionListener(mainFrame);

       btD.addActionListener(mainFrame);

       btE.addActionListener(mainFrame);

       btF.addActionListener(mainFrame);

    }// end main() mothed

// checkbox 事件的处理

    public void itemStateChanged(ItemEvent e) {

       mark = 'n';

       Refresh = false;

       // 规定当进制转换时以前输入的运算符失效

       if (ckb8.getState() == true) {

           btA.enable(false);

           btB.enable(false);

           btC.enable(false);

           btD.enable(false);

           btE.enable(false);

           btF.enable(false);

           bt9.enable(false);

           bt8.enable(false);

           btdot.enable(false);

           btadd.enable(false);

           btmul.enable(false);

           btsub.enable(false);

           btdev.enable(false);

           btequ.enable(false);

           // 在八进制的情况下对有些按件的管理

           if (length == 18) {

              lab.setText(goto10_8(lab.getText()));

              number = lab.getText().length();

           }

           if (length == 14) {

              lab.setText(goto_10(lab.getText(), 16L));

              lab.setText(goto10_8(lab.getText()));

              number = lab.getText().length();

           }

           // 将其他进制转换成八进制

           length = 19;

           // 在八进制下允许输入数字个数最多为19位

       }

       if (ckb10.getState() == true) {

           btA.enable(false);

           btB.enable(false);

           btC.enable(false);

           btD.enable(false);

           btE.enable(false);

           btF.enable(false);

           bt9.enable(true);

           bt8.enable(true);

           btdot.enable(true);

           btadd.enable(true);

           btmul.enable(true);

           btsub.enable(true);

           btdev.enable(true);

           btequ.enable(true);

           // 在十进制的情况下对有些控件的管理

           if (length == 19) {

              lab.setText(goto_10(lab.getText(), 8L));

              number = lab.getText().length();

           }

           if (length == 14) {

              lab.setText(goto_10(lab.getText(), 16L));

              number = lab.getText().length();

           }

           if (length == 19) {

              lab1.setText(goto_10(lab1.getText(), 8L));

              number = lab1.getText().length();

           }

           if (length == 14) {

              lab1.setText(goto_10(lab1.getText(), 16L));

              number = lab1.getText().length();

           }

                      length = 18;

                  }

       if (ckb16.getState() == true) {

           btA.enable(true);

           btB.enable(true);

           btC.enable(true);

           btD.enable(true);

           btE.enable(true);

           btF.enable(true);

           bt9.enable(true);

           bt8.enable(true);

           btdot.enable(false);

           btadd.enable(false);

           btmul.enable(false);

           btsub.enable(false);

           btdev.enable(false);

           btequ.enable(false);

           // 在十六进制的情况下对有些按件的管理

           if (length == 18) {

              lab.setText(goto10_16(lab.getText()));

              number = lab.getText().length();

           }

           if (length == 19) {

              lab.setText(goto_10(lab.getText(), 8L));

              lab.setText(goto10_16(lab.getText()));

              number = lab.getText().length();

           }

        // 将其他进制转换成十六进制

           length = 14;

           // 在十六进制下允许输入数字个数最多为14位

       }

    }// end itemStateChanged(ItemEvent e) method

    // 按钮事件的处理

public void actionPerformed(ActionEvent m) // 鼠标点激就触发事件监听

    {

       Button btn = (Button) m.getSource();

       ch = btn.getLabel().charAt(0);

       deposit(ch);

       switch (ch) {

       case 'c': {

           lab.setText("0");

           number = 0;

           mark = 'n';

           Refresh = false;

       }

           break;// 初始化

       case '1':

           enter();

           break;

       case '2':

           enter();

           break;

       case '3':

           enter();

           break;

       case '4':

           enter();

           break;

       case '5':

           enter();

           break;

       case '6':

           enter();

           break;

       case '7':

           enter();

           break;

       case '8':

           enter();

           break;

       case '9':

           enter();

           break;

       case '0': {

           if (Refresh == true) {

              lab.setText("0");

              number = 0;

              Refresh = false;

           }

           if (lab.getText().charAt(0) == '0' && lab.getText().length() == 1)

              break;

           if (number < length) {

              number++;

               lab.setText(lab.getText() + ch);

           } else

              break;

       }

           break;

       case 'A':

           enter();

           break;

       case 'B':

           enter();

           break;

       case 'C':

           enter();

           break;

       case 'D':

           enter();

           break;

       case 'E':

           enter();

           break;

       case 'F':

           enter();

           break;

       case '.': {

           if (Refresh == true) {

              lab.setText("0");

              number = 0;

              Refresh = false;

           }

           if (lab.getText().indexOf('.') == -1) {

              number++;

              lab.setText(lab.getText() + ch);

           } else

              break;

       }

           break;

       case 'b': {

           if (number == 0)

              break;

           else {

              if (--number == 0) {

                  lab.setText("0");

                  number = 0;

              } else {

                  if (number != 1)

                     lab.setText(lab.getText().substring(0, number));

                  else

                     lab

                            .setText(Character.toString(lab.getText()

                                   .charAt(0)));

              }

           }

       }

           break;

       case '+':

           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");

           }

           break;

       // 如果出现异常则初始化效果如同clear键

       case '-':

           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");

           }

           break;

       // 如果出现异常则初始化效果如同clear键

       case '*':

           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");

           }

           break;

       // 如果出现异常则初始化效果如同clear键

       case '/':

           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");

           }

break;

// 如果出现异常则初始化效果如同clear键

case '=':

    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");

       }

       break;

// 如果出现异常则初始化效果如同clear键

    }

}// end actionPerformed(ActionEvent e) method

// 八进制或十六进制转换成十进制I

   

public String goto_10(String s, long l)

// 参数s: 是要转换的字符串,由于输入的控制,保证了字符串的合法性;

// 参数l: 使用来设置是将8进制还是16进制转换成10进制,它的有效值为8或16;

    {

       String str = s; // 用来转换的字符串

       long j = l; // 表示进制

       long lg = 0, jing = 1;// lg用来记录权乘和,jing用来记录位权

       char cha;// 临时记录要转换的字符

       for (int i = 1; i <= str.length(); i++) {

           cha = str.charAt(str.length() - i);

           switch (cha) {

           case '1':

              lg = lg + 1 * jing;

              break;

           case '2':

              lg = lg + 2 * jing;

              break;

           case '3':

              lg = lg + 3 * jing;

              break;

           case '4':

              lg = lg + 4 * jing;

               break;

           case '5':

              lg = lg + 5 * jing;

              break;

           case '6':

              lg = lg + 6 * jing;

              break;

           case '7':

              lg = lg + 7 * jing;

              break;

           case '8':

              lg = lg + 8 * jing;

              break;

           case '9':

              lg = lg + 9 * jing;

              break;

           case 'A':

              lg = lg + 10 * jing;

              break;

           case 'B':

              lg = lg + 11 * jing;

              break;

           case 'C':

              lg = lg + 12 * jing;

              break;

           case 'D':

              lg = lg + 13 * jing;

              break;

           case 'E':

              lg = lg + 14 * jing;

              break;

           case 'F':

              lg = lg + 15 * jing;

              break;

           }

           jing *= j; // 位权升一级,为下次使用做好准备

       }

       return Long.toString(lg);

    }// end String goto_10() method

// 十进制转换成十六进制

public String goto10_16(String s)

    // 参数s: 是要转换的字符串,由于输入的控制,保证了字符串的合法性;

    {

       String str = s; // 用来转换的字符串

       String st = new String();// 用来记录16进制值的字符串

       long ch; // 每次取余有的值

       int k; // 将每次取余有的值转换成整形,用来选择转换的16进制字符

       long lg;// 用来转换的10进制数

       if (str.charAt(0) == '-') // 如果有负号则出去负号

           str = str.substring(1, str.length() - 1);

       if (str.indexOf('E') != -1)// 如果是科学计数值则出去小数点和E后面的数

           str = str.charAt(0) + str.substring(2, str.indexOf('E'));

       if (str.indexOf('.') != -1)// 如果有小数点则出去小数点及小数点后面的内容

           str = str.substring(0, str.indexOf('.'));

       lg = Long.parseLong(str);// 将简化的字符串转化为长整形给lg

       while (lg >= 16) {

           ch = lg % 16;

           k = (int) ch;

           switch (k) {

           case 10:

              st = "A" + st;

              break;

           case 11:

              st = "B" + st;

              break;

           case 12:

              st = "C" + st;

              break;

           case 13:

              st = "D" + st;

              break;

           case 14:

              st = "E" + st;

              break;

           case 15:

              st = "F" + st;

              break;

           default:

              st = Long.toString(ch) + st;

           }

           lg = lg / 16;

       }

       k = (int) lg;

       switch (k) {

       case 10:

           st = "A" + st;

           break;

       case 11:

           st = "B" + st;

           break;

       case 12:

           st = "C" + st;

           break;

       case 13:

           st = "D" + st;

           break;

       case 14:

           st = "E" + st;

           break;

       case 15:

           st = "F" + st;

           break;

       default:

           st = Long.toString(lg) + st;

       }

       return st;

    }// end goto10_16() method

// 十进制转换成八进制?

public String goto10_8(String s)

    // 参数s: 是要转换的字符串,由于输入的控制,保证了字符串的合法性;

    {

       String str = s;

              if (str.charAt(0) == '-') // 如果有负号则出去负号

           str = str.substring(1, str.length() - 1);

       if (str.indexOf('E') != -1)// 如果是科学计数值则出去小数点和E后面的数

           str = str.charAt(0) + str.substring(2, str.indexOf('E'));

       if (str.indexOf('.') != -1)// 如果有小数点则出去小数点及小数点后面的内容

           str = str.substring(0, str.indexOf('.'));

       lg = Long.parseLong(str);

       while (lg >= j) {

           ch = lg % j;

           st = Long.toString(ch) + st;

           lg = lg / j;

       }

       st = Long.toString(lg) + st;

       return st;

    }// end goto10_8() 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 < length) {

           number++;

           lab.setText(lab.getText() + ch);

       }

    }// end enter() method

// 用来处理按了运算符后的计算-

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 answer() throws This_number_too_big // 指定由method抛出异常

    {

       if (mark == 'n') {

       } else {

           switch (mark) {

           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 = 'n';

       }

       if (data > Double.MAX_VALUE) // 如果data超过double类型的最大值则抛出自定义的一个异常类

       {

           throw new This_number_too_big();

       }

       Refresh = false;

       number = lab.getText().length();

    }// end answer() method

   

   String display="";

    private void deposit(char code){

       switch (code) {

       case 'c':

           display="";

           break;// 初始化

       case '+':

           display=display+code;

           break;

       case '-':

           display=display+code;

           break;

       case '*':

           display=display+code;

           break;

       case '/':

           display=display+code;

           break;

       case '1':

           display=display+code;

           break;

       case '2':

           display=display+code;

           break;

       case '3':

           display=display+code;

           break;

       case '4':

           display=display+code;

           break;

       case '5':

           display=display+code;

           break;

       case '6':

           display=display+code;

           break;

       case '7':

           display=display+code;

           break;

       case '8':

           display=display+code;

           break;

       case '9':

           display=display+code;

           break;

       case 'A':

           display=display+code;

           break;

       case 'B':

           display=display+code;

           break;

       case 'C':

          display=display+code;

          break;

       case 'D':

          display=display+code;

           break;

       case 'E':

           display=display+code;

           break;

       case 'F':

           display=display+code;

           break;}

       lab1.setText(display);}

    }// end class hejiang

参考文献

林良信               《Java JDK 6 学习笔记》   

刘浦迎  谢春      《java程序设计实用教程》    科学出版社

 张白一  崔尚林    《面向对象程序设计—java》   西安电子科技大学出版社

潘浩    李芙玲    《Java程序设计》            清华大学出版社

致    谢

经过一个学期的JAVA学习,对JAVA编程有了一定的认识,在做这个课程设计的时候,刚开始感觉自己无从下手,不知道该怎么开始,很茫然。最终利用网络资源和查阅图书馆的书籍,在傅老师和同学的指导和讨论下,经过一段时间终于完成了这个设计。当程序运行结束看到弹出的计算器的界面时,感到很欣慰,虽然只是一个小小的东西,但却是自己起步的成就,从中学到了很多书本知识不能体现的东西,对JAVA的学习有了一定的兴趣。也通过这次的程序设计感觉到自己平时对于编程实际操作的贫乏,没有把书本上的知识真正的掌握牢固。

更多相关推荐:
0824101《动画典型案例分析maya》课程设计任务书

河南城建学院计算机科学与工程学院动画典型案例分析maya课程设计任务书班级专业数字媒体技术课程名称动画典型案例分析maya指导教师张向娟白粒沙20xx年12月动画典型案例分析maya课程设计任务书一设计的目的和...

maya课程设计

南阳理工学院软件学院实验报告三实验步骤与过程1根据老师的课程设计要求对自己的课程设计心中设计一个底稿2当目标定下来后开始进行具体计划的实施3在选择剑龙作为本次课程设计的三维建模作品后对其三视图进行简单且符合要求...

Maya课程设计

MAYA三维动画鸟类爪子的网格建模方法教学设计适用专业动漫设计学时数1一教学的性质和目的如今Maya已成为动画制作者梦寐以求的制作工具掌握了Maya网格建模的方法可以用简单的几何体制作出造型丰富的模型在目前市场...

《动画典型案例分析maya》课程设计任务书初稿

动画典型案例分析maya课程设计任务书班级专业数字媒体技术课程名称指导教师20xx年10月设计时间20xx年10月1520xx年1月11号动画典型案例分析maya课程设计任务书一设计的目的和任务设计目的通过设计...

3dmax课程设计

三维综合应用技术课程设计报告书学号专业数字媒体技术动画名称贪玩的蓝精灵学生姓名陈XX指导教师田慧陈秋红计算机科学与工程学院20xx年01月09日摘要三维动画是指使用电脑软件制作出的立体虚拟影像又称3D动画是近年...

高职院校《Maya三维软件技术》课程设计

高职院校Maya三维软件技术课程设计摘要针对高职学生的基本情况与就业特点在研究分析MAYA三维软件的功能特点以及该软件在行业应用领域的基础上结合多年实际教学经验制定具有实际指导意义的Maya三维软件技术课程设计...

3dmax课程设计

三维建模课程设计学院信息科学与技术学院系别数字媒体技术姓名姜博学号20xx13010318一总体目标利用biped骨骼尽可能真实的制作一只小狗走路的动作二制作步骤前期操作想好要制作的动作然后再网上下载一只小狗的...

3Dmax课程设计报告书

南开大学滨海学院课程设计报告课程名称动画课程设计专业学号10990021姓名黄子豪完成日期20xx0627南开大学滨海学院计算机系课程设计报告作品简介1作品主题反动理学应用抽油机2开发环境3DMAX20xxph...

3dMax课程设计

xx学院信息科学与工程学院课程设计任务书题目学号姓名专业计算机应用技术课程3Dsmax20xx案例教程指导教师完成时间年月年月xx学院信息科学与工程学院制年月日课程设计任务书及成绩评定1234567891011

3dMax课程设计

信息工程系3DSMAX课程设计课程名称3DMAX设计题目室内设计专业班级计算机应用学生姓名指导教师完成时间20xx年6月25日目录一课程任务设计书2二设计任务和设计要求4三总体设计方案4四基础模型创建4五室内线...

3dmax应用设计课程20xx级一学期作业及考试要求(新)

3dmax应用设计课程20xx级一学期作业及考试要求一作业要求1应缴作业汇总此次作业按照周次顺序依次放到指定的文件夹中如文件夹名称第一周作业椅子以下依次类推最后统一压缩包处理如压缩文件包名称3dmax应用程序作...

3dmax游戏角色模型设计课程

想学3dmax游戏角色模型设计不知道都要学哪些课程3dmax游戏角色模型设计是指3dmax游戏角色模型设计师根据原画师提供的原画稿件设计出游戏中的人物动物怪物等角色的模型3dmax游戏角色模型设计师需要特别了解...

maya课程设计报告(6篇)