AgccakJava课程设计报告.docx
- 文档编号:9388546
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:40
- 大小:184.62KB
AgccakJava课程设计报告.docx
《AgccakJava课程设计报告.docx》由会员分享,可在线阅读,更多相关《AgccakJava课程设计报告.docx(40页珍藏版)》请在冰点文库上搜索。
AgccakJava课程设计报告
生活需要游戏,但不能游戏人生;生活需要歌舞,但不需醉生梦死;生活需要艺术,但不能投机取巧;生活需要勇气,但不能鲁莽蛮干;生活需要重复,但不能重蹈覆辙。
-----无名
湖南农业大学
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(pnl1); mainFra
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AgccakJava 课程设计 报告