JAVA课程设计报告.docx

上传人:b****5 文档编号:11756041 上传时间:2023-03-31 格式:DOCX 页数:39 大小:50.39KB
下载 相关 举报
JAVA课程设计报告.docx_第1页
第1页 / 共39页
JAVA课程设计报告.docx_第2页
第2页 / 共39页
JAVA课程设计报告.docx_第3页
第3页 / 共39页
JAVA课程设计报告.docx_第4页
第4页 / 共39页
JAVA课程设计报告.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

JAVA课程设计报告.docx

《JAVA课程设计报告.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计报告.docx(39页珍藏版)》请在冰豆网上搜索。

JAVA课程设计报告.docx

JAVA课程设计报告

吉林工程技术师范学院

《面向对象程序设计-JAVA》

课程设计报告书

 

设计题目:

简易计算器

专业:

计算机科学与技术

班级:

计算机0841

学生姓名:

闫哲学号:

8

指导教师:

孟宇桥

2009年12月

信息工程学院

 

摘要

简易计算器在Java中的应用

摘要:

本计算器可以进行简单的四则运算(加、减、乘、除)但仅限于十进制下,还可以进行(八进制,十进制,十六进制)之间的相互转换,八进制最多可以输入19位数,十进制最多可以输入18位数,十六进制最多可以输入14位数,backspace表示退格,clear表示初始化,在window下直接运行(Jsp2003.bat)即可,界面为灰白对称。

 

关键词:

四则运算;计算器

第一章绪论

 

Java语言现在逐渐成熟起来,它的类已经有近千个,类的功能无所不包,而且还可以通过第三方购买类,为Java语言的发展提供了良好的发展前景.同时它也是跨平台的语言,因此许多软件开发商,硬件开发上也争先恐后地想乘上Java语言的快车,都声称支持Java语言,它对微软发起了有力的挑战,而且Sun公司正努力开发Java芯片。

面对如此语言的发展趋势,我认为本人有必要学好这一门课,所以我小试牛刀的设计了一个简易计算器,而且计算器可以进行简单的四则运算加、减、乘、除,但仅限于十进制下,还可以进行八进制,十进制,十六进制,之间的相互转换。

第二章问题定义(或系统分析)

2.1、需求分析:

2.1.1开发的技术及功能

本课程设计是要做一个屏幕输入运算数的图形界面的计算器。

程序实现的基本功能有:

简单的四则运算加、减、乘、除,但仅限于十进制下,还可以进行八进制,十进制,十六进制,之间的相互转换。

2.1.2设计思路

设计这个计算器主要是参考Windows操作系统中自带的计算器,由于编者水平和时间的限制,不能将计算器设计到科学型及其他更复杂的类型,在设计过程中还参考了一些其他的优秀设计。

NetBeans提供了强大的集成环境,计算器大多数的界面设计都是代码直接生成的,这体现出NetBeans开发工具的特点,所以只要在控件的响应事件中添加相应的方法即可。

加、减、乘、除等基本功能由自己编写的代码实现;。

3.1.3设计效果图

设计时先在设计界面中添加按钮等控件,后在按钮的actionPerformed事件中添加代码完成其功能其中调用了Java类中的Math函数库以及各种字符串操作。

 

第三章总体设计与详细设计

3.1、总体设计

(1)自定义类说明

****************************************

*类名:

This_number_too_big*

*作用:

自定义的异常类,用来处理计算结果溢出*

*继承的父类:

Exception类*

*实现的接口:

没有*

****************************************

classThis_number_too_bigextendsException

{

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

****************************************

*类名:

Jsp2003*

*作用:

主类。

*

*继承的父类:

Frame类*

*实现的接口:

ItemListener类,ActionListener类*

****************************************

classJsp2003extendsFrameimplementsItemListener,ActionListener

{

publicintnumber=0,length=18;

//number是用来记录输入的数字个数,

//length是用来设置在不同进制下允许输入的最多数字位数,默认为十进制publiccharmark='n';

//设置运算符号为没有即为‘n’,它的值是‘+’‘-’‘*’‘/’

publicdoubledata=0;

//设置运算数据为零

publiccharch;

//用来临时存放所按按钮的第一个字符

publicbooleanRefresh=false;

//设置lab是否要在输入数据的时候刷新,初始为否

 

3.2、概要设计:

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

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

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

length=18;

length==14

length==19

btA.enable(false);

 

3.2.2、//checkbox事件的处理

Multi

Multi

Multi

btA.enable(false);

ckb16.getState()==true

ckb10.getState()==true

ckb8.getState()==true

mark='n';

 

3.2.3、//输入字符

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

lab.setText(Character.toString(ch));number++;

lab.setText("0");number=0;Refresh=false;

number

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

Refresh==true

 

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

thrownewThis_number_too_big();

lab.setText(Double.toString(data));

CASE

Refresh=false;

data>Double.MAX_VALUE

mark=='n'

 

3.2.5、//主函数

Multi

Multi

btA.enable(false);

Multi

IF

ckb10.getState()==true

ckb8.getState()==true

publicJsp2003(){

 

第四章编码实现

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

publicvoidjs()throwsThis_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类型的最大值则抛出自定义的一个异常类

{thrownewThis_number_too_big();}

}

}

4.1.2、//checkbox事件的处理

publicvoiditemStateChanged(ItemEvente)

{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();}

//进制转换成十进制

length=18;

//在十进制下允许输入数字个数最多为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位

}

}

4.1.3、//输入字符

publicvoidenter()

{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

{number++;lab.setText(lab.getText()+ch);}

}

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

publicvoidjs()throwsThis_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类型的最大值则抛出自定义的一个异常类

{thrownewThis_number_too_big();}

}

}

4.1.5、//主函数

publicstaticvoidmain(Stringargs[]){

System.out.println("StartingJsp2003...");

lab.setAlignment(Label.RIGHT);

lab.setBackground(Color.lightGray);

lab.setForeground(Color.BLUE);

lab.setFont(newFont("Serief",Font.BOLD,18));

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

mainFrame.add(lab);

CheckboxGroupgrp=newCheckboxGroup();

ckb8.setCheckboxGroup(grp);

ckb10.setCheckboxGroup(grp);

ckb16.setCheckboxGroup(grp);

ckb8.setBounds(14,75,55,25);

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

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

ckb8.setState(false);

ckb10.setState(true);

ckb16.setState(false);

mainFrame.add(ckb8);

mainFrame.add(ckb10);

mainFrame.add(ckb16);

pnl1.setBounds(14,140,120,150);

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

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

pnl4.setBounds(190,100,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,300);

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

}

 

第五章调试与测试

5.1、

(1)程序运行情况:

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

然后进行,重制归零的处理。

5.2、

(2)程序异常处理:

当结果超出Double.MAX_VALUE时,将抛出一个This_number_too_big类的异常对象,这个是我自定义的一个异常类它继承自Exception类,然后使用try-catch去捕捉这个异常,异常的处理如下:

try

{js();}

catch(This_number_too_bige)

{

lab.setText("0");

number=0;

mark='n';

Refresh=false;

System.out.println("Thenumberistoobig");

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

 

第六章总结与心得

6.1、课程设计总结

这次java的课程设计可以说获益非浅,首先最深的感受是:

机器是比任何教师都严厉的检查者。

我们

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1