somwosJava课程设计报告.docx

上传人:b****8 文档编号:8959945 上传时间:2023-05-16 格式:DOCX 页数:40 大小:184.71KB
下载 相关 举报
somwosJava课程设计报告.docx_第1页
第1页 / 共40页
somwosJava课程设计报告.docx_第2页
第2页 / 共40页
somwosJava课程设计报告.docx_第3页
第3页 / 共40页
somwosJava课程设计报告.docx_第4页
第4页 / 共40页
somwosJava课程设计报告.docx_第5页
第5页 / 共40页
somwosJava课程设计报告.docx_第6页
第6页 / 共40页
somwosJava课程设计报告.docx_第7页
第7页 / 共40页
somwosJava课程设计报告.docx_第8页
第8页 / 共40页
somwosJava课程设计报告.docx_第9页
第9页 / 共40页
somwosJava课程设计报告.docx_第10页
第10页 / 共40页
somwosJava课程设计报告.docx_第11页
第11页 / 共40页
somwosJava课程设计报告.docx_第12页
第12页 / 共40页
somwosJava课程设计报告.docx_第13页
第13页 / 共40页
somwosJava课程设计报告.docx_第14页
第14页 / 共40页
somwosJava课程设计报告.docx_第15页
第15页 / 共40页
somwosJava课程设计报告.docx_第16页
第16页 / 共40页
somwosJava课程设计报告.docx_第17页
第17页 / 共40页
somwosJava课程设计报告.docx_第18页
第18页 / 共40页
somwosJava课程设计报告.docx_第19页
第19页 / 共40页
somwosJava课程设计报告.docx_第20页
第20页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

somwosJava课程设计报告.docx

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

somwosJava课程设计报告.docx

somwosJava课程设计报告

-+

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

—罗兰

湖南农业大学

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基本版本叫Java2标准版(Java2StandardEdition,J2SE),它包含建立Java应用程序或者是Applet所需的应用程序编程接口(API)。

Java2移动版(TheJava2MobileEdition,J2ME)包含创建无线Java应用程序的API。

还有Java2企业版(TheJava2Enterprise,J2EE)是J2SE的增强版本,包含建立多层架构应用程序API。

Java语言是由C++语言发展起而来的,是一种彻底的面向对象的程序设计语言。

作为一种纯面向对象的程序设计语言,它非常适合大型软件的开发。

Java语言去掉了C++语言的一些容易引起错误的特性。

Java语言的特点有:

面向对象、跨平台、安全性、多线程和图形功能强。

2概要设计

2.1开发环境

开发平台:

MicrosoftWindowsXPProfessionalServicePack2

开发工具:

JBuilder2007+JDK1.6.0_02

2.2计算器功能

功能1:

按下数字键在液晶平上会显示数字,这时计算器最基本的功能。

   功能2:

在任何时候按下“±”键,计算器文本框上的数字置反号。

   功能3:

第一次按下“运算”键,再按下数字键,将重新输入第二个数字。

再次按下“运算”键,将算出前两个数字运算的结果,然后按下数字,将又重新输入新的数字。

  功能4:

输入数字后,按下“等于”键,将仍输出原来的数输入运算符和第二个数字后再按下“=”键,将得到二者运算的结果,然后又重复功能3和功能4。

   功能5:

按下清除“C”键,数据被全部清楚。

2.3界面设计

图2.3计算器面板

 

2.4类UML图

ArrayStackCharUML图如图2.3A所示:

ArrayStackDoubleUML图如图2.3B所示

图2.4A图2.4B

3详细设计

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

类名:

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

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

其中:

publicclassNewCalcextendsJFrameimplementsActionListener

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

3.2类的主要方法

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

publicvoidjs()throwsThis_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)

{thrownewThis_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:

publicStringgoto_10(Strings,longl)

//参数s:

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

//参数l:

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

{Stringstr=s;//用来转换的字符串

longj=l;//表示进制

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

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

for(inti=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;//位权升一级,为下次使用做好准备

}

returnLong.toString(lg);

}//endStringgoto_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_bige)

{

lab.setText("0");

number=0;

mark='n';

Refresh=false;

System.out.println("Thenumberistoobig");

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

6程序清单:

importjava.awt.*;

importjava.awt.event.*;

classThis_number_too_bigextendsException{

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

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

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

classhejiangextendsFrameimplementsItemListener,ActionListener{

publichejiang(){

addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

dispose();

System.exit(0);

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

});

}

statichejiangmainFrame=newhejiang();//创建一个mainFrame

staticLabellab1=newLabel("0");

staticLabellab=newLabel("0");

staticPanelpnl1=newPanel(newGridLayout(4,3,3,3));//创建新的面板.布局管理

staticPanelpnl2=newPanel(newGridLayout(4,1,3,3));

staticPanelpnl3=newPanel(newGridLayout(1,2,3,3));

staticPanelpnl4=newPanel(newGridLayout(6,1,3,3));

staticButtonbt9=newButton("9");

staticButtonbt8=newButton("8");

staticButtonbt7=newButton("7");

staticButtonbt6=newButton("6");

staticButtonbt5=newButton("5");

staticButtonbt4=newButton("4");

staticButtonbt3=newButton("3");

staticButtonbt2=newButton("2");

staticButtonbt1=newButton("1");

staticButtonbt0=newButton("0");

staticButtonbtdot=newButton(".");

staticButtonbtequ=newButton("=");

staticButtonbtadd=newButton("+");

staticButtonbtsub=newButton("-");

staticButtonbtmul=newButton("*");

staticButtonbtdev=newButton("/");

staticButtonbtA=newButton("A");

staticButtonbtB=newButton("B");

staticButtonbtC=newButton("C");

staticButtonbtD=newButton("D");

staticButtonbtE=newButton("E");

staticButtonbtF=newButton("F");

staticCheckboxckb8=newCheckbox("八进制");

staticCheckboxckb10=newCheckbox("十进制");

staticCheckboxckb16=newCheckbox("十六进制");

staticButtonbtc=newButton("clear");

staticButtonbtt=newButton("backspace");

publicintnumber=0,length=18;

//number是用来记录输入的数字个数,length是用来设置在不同进制下允许输入的最多数字位数,默认为十进制

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

publicdoubledata=0;//设置运算数据为零

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

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

publicstaticvoidmain(Stringargs[]){

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

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

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

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

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

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

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

mainFrame.add(lab);

mainFrame.add(lab1);

CheckboxGroupgrp=newCheckboxGroup();

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(pn

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2