视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Java课程设计报告
2025-09-24 06:36:45 责编:小OO
文档
 

湖 南 农 业 大 学

Java课程设计报告

计算器软件设计

学生姓名:    

学    号:  

年级专业:

指导老师:    

学    院:

湖南·长沙

提交日期:2007年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 2007 + 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{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设计的总体认识

●JAVA设计的摘要

●JAVA设计的目录结构

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

●JAVA设计的版权意识

●JAVA设计需要编译的环境

●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的学习有了一定的兴趣。也通过这次的程序设计感觉到自己平时对于编程实际操作的贫乏,没有把书本上的知识真正的掌握牢固。

 下载本文

显示全文
专题