java计算器设计报告.docx
- 文档编号:17780970
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:19
- 大小:120.71KB
java计算器设计报告.docx
《java计算器设计报告.docx》由会员分享,可在线阅读,更多相关《java计算器设计报告.docx(19页珍藏版)》请在冰点文库上搜索。
java计算器设计报告
java计算器设计报告
————————————————————————————————作者:
————————————————————————————————日期:
摘要
本计算器是由java语言所编程设计的标准计算器,可以进行十进制下的四则运算(加、减、乘、除)、开平方、求余、求倒数,还可以实现二进制与十进制之间的转换.通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。
关键词:
java语言,计算器,算法
1概述
1.1设计目的及思路
通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。
利用JavaApplet图形界面首先开始设计一个计算器的界面,定义计算器所需要的按钮并赋给其按钮名称,使得使用计算器时简单明了,清晰可见,操作轻松。
给各个按钮进行算法,利用鼠标点击事件,当鼠标点击某个按钮时就开始执行那个按钮所定义的算法,生成数据并显示。
除数字的输入为直接进行输入外,其他运算例如+、—、*、/、开平方等算法要求计算时通过内部较为复杂的运算将结果显示在显示屏上.
至于其中的进制转换功能的实现则是直接调用Java中进制转换的函数,例如要将十进制转换成二进制则可直接调用函数Integer。
toBinaryString(inti)来实现,充分显示了Java语言的简洁性和Java语言功能的强大性。
当然了在输入数据时还要进行异常捕捉,防止越界的现象的发生,这也是Java语言健壮性的体现!
1.2功能模块设计
以下为标准计算器的基本功能:
(1)加法
两个数据进行加操作,可以为小数。
(2)减法
两个数据进行减操作,可以为负数相减。
(3)乘法
两个数相乘操作.
(4)除法
两个数相除操作。
(5)开平方
对任意一个数进行开方运算,可以是小数。
(6)求余
对任意一个数进行求余运算.
(7)倒数
对任意一个数进行倒数运算.
(8)转换
将十进制数转换为二进制以及将二进制转换为十进制。
1.3系统功能图
计算器
减法运算
加法运算
乘法运算
除法运算
倒数运算
开平方运算
求余运算
二进制与十进制转换
2计算器的设计与实现
2。
1程序界面
2.2程序源代码
importjavax.swing。
*;
importjavax.swing.text.JTextComponent;
importjava。
util.StringTokenizer;
importjava。
awt.*;
importjava.awt。
event。
*;
importjava。
math。
*;
publicclassCalculatorimplementsActionListener{
JFramejf=newJFrame("计算器”);
JTextFieldtf=newJTextField();
JPanelpnl;
JButtonjButtonDENG;
JButtonjButtonJIAN;
JButtonjButtonCHENG;
JButtonjButton1;
JButtonjButton2;
JButtonjButton3;
JButtonjButton4;
JButtonjButton5;
JButtonjButton6;
JButtonjButton7;
JButtonjButton8;
JButtonjButton9;
JButtonjButton0;
JButtonjButtonCHU;
JButtonjButtonQINGKONG;
JButtonjButtonJIA;
JButtonjButtonQUYU;
JButtonjButtonPINGFANG;
JButtonjButtonXIAOSHUDIAN;
JButtonjButtonBACKSPACE;
JButtonjButtonDAOSHU;
JButtonjButtonKAIPINGFANG;
JButtonjButtonERJINZHI;
JButtonjButtonSHIJINZHI;
publicCalculator(){//初始化界面的方法
Containerc=jf.getContentPane();
tf。
setHorizontalAlignment(JTextField。
RIGHT);
c。
add(tf,"North");
JPanelpnl=newJPanel();
c.add(pnl,"Center”);
pnl.setLayout(newGridLayout(6,5));
jButton1=newJButton("1”);
jButton1。
addActionListener(this);
pnl.add(jButton1);
jButton2=newJButton("2”);
jButton2.addActionListener(this);
pnl.add(jButton2);
jButton3=newJButton(”3");
jButton3.addActionListener(this);
pnl。
add(jButton3);
jButtonBACKSPACE=newJButton("backspace");
jButtonBACKSPACE.addActionListener(this);
pnl.add(jButtonBACKSPACE);
jButton4=newJButton(”4");
jButton4.addActionListener(this);
pnl。
add(jButton4);
jButton5=newJButton(”5”);
jButton5.addActionListener(this);
pnl。
add(jButton5);
jButton6=newJButton(”6");
jButton6。
addActionListener(this);
pnl。
add(jButton6);
jButtonJIA=newJButton(”+”);
jButtonJIA。
addActionListener(this);
pnl.add(jButtonJIA);
jButton7=newJButton("7”);
jButton7.addActionListener(this);
pnl。
add(jButton7);
jButton8=newJButton("8");
jButton8.addActionListener(this);
pnl.add(jButton8);
jButton9=newJButton("9");
jButton9.addActionListener(this);
pnl。
add(jButton9);
jButtonJIAN=newJButton("-”);
jButtonJIAN。
addActionListener(this);
pnl.add(jButtonJIAN);
jButton0=newJButton(”0”);
jButton0.addActionListener(this);
pnl.add(jButton0);
jButtonQINGKONG=newJButton(”清空”);
jButtonQINGKONG。
addActionListener(this);
pnl.add(jButtonQINGKONG);
jButtonCHENG=newJButton("*”);
jButtonCHENG.addActionListener(this);
pnl.add(jButtonCHENG);
jButtonCHU=newJButton("/");
jButtonCHU。
addActionListener(this);
pnl。
add(jButtonCHU);
jButtonQUYU=newJButton(”%”);
jButtonQUYU。
addActionListener(this);
pnl.add(jButtonQUYU);
jButtonPINGFANG=newJButton("平方");
jButtonPINGFANG.addActionListener(this);
pnl.add(jButtonPINGFANG);
jButtonXIAOSHUDIAN=newJButton("。
");
jButtonXIAOSHUDIAN.addActionListener(this);
pnl。
add(jButtonXIAOSHUDIAN);
jButtonDENG=newJButton("=");
jButtonDENG。
addActionListener(this);
pnl。
add(jButtonDENG);
jButtonDAOSHU=newJButton("倒数");
jButtonDAOSHU.addActionListener(this);
pnl.add(jButtonDAOSHU);
jButtonKAIPINGFANG=newJButton("开平方");
jButtonKAIPINGFANG.addActionListener(this);
pnl.add(jButtonKAIPINGFANG);
jButtonERJINZHI=newJButton("二进制");
jButtonERJINZHI.addActionListener(this);
pnl.add(jButtonERJINZHI);
jButtonSHIJINZHI=newJButton("十进制”);
jButtonSHIJINZHI。
addActionListener(this);
pnl.add(jButtonSHIJINZHI);
jf.setSize(600,400);
jf。
setVisible(true);
}
publicvoidactionPerformed(ActionEventevent){//检测运算符的方法
try{
doublewen=0;
Stringtoknizer="+";
Stringben;
Stringwenben=tf.getText()+event.getActionCommand();
tf.setText(wenben);//各运算符的判断运行代码
if(wenben。
indexOf("*”)!
=—1){
toknizer="*”;
}
if(wenben。
indexOf("+”)!
=—1){
toknizer="+";
}
if(wenben。
indexOf("-”)!
=-1){
toknizer=”-";
}
if(wenben.indexOf("/”)!
=-1){
toknizer="/”;
}
if(wenben。
indexOf("%”)!
=-1){
toknizer=”%";
}
if(wenben.indexOf("平方")!
=-1){
toknizer="平方”;
}
if(wenben。
indexOf(”倒数")!
=-1){
toknizer="倒数”;
}
if(wenben.indexOf("开平方")!
=-1){
toknizer="开平方";
}
if(wenben.indexOf(”二进制")!
=—1){
toknizer=”二进制”;
}
if(wenben。
indexOf(”十进制”)!
=-1){
toknizer=”十进制”;
}
//各个运算符的运算方法代码
if(event.getSource()==jButtonQINGKONG){//清空算法
wenben="";
tf.setText(wenben);
}
if(event.getSource()==jButtonBACKSPACE){//清除算法
wenben=wenben.substring(0,wenben.length()—10);
tf.setText(wenben);
}
if(event.getSource()==jButtonDENG){//”=”算法
wenben=wenben。
substring(0,wenben。
length()—1);
doubleb[]=newdouble[10];
Stringa[]=newString[15];
StringTokenizersun=newStringTokenizer(wenben,toknizer);
inti=0;
while(sun。
hasMoreTokens()){
a[i++]=sun。
nextToken();
}
for(intj=0;j<10;j++){
Strings=a[j];
Stringk=a[j+1];
if(s==null){
break;
}else{
if(toknizer==”*”){//”*"算法
if(j==0){wen=1;}
b[j]=Double.parseDouble(s);
wen=wen*b[j];
ben=Double。
toString(wen);
tf.setText(wenben+”="+ben);
}if(toknizer==”+”){//"+"算法
if(j==0){wen=0;}
b[j]=Double.parseDouble(s);
wen=wen+b[j];
ben=Double。
toString(wen);
tf.setText(wenben+”=”+ben);
}if(toknizer==”-”){//"—”算法
b[j]=Double。
parseDouble(s);
if(j==0){wen=2*b[j];}
wen=wen—b[j];
ben=Double。
toString(wen);
tf.setText(wenben+”="+ben);
}
if(toknizer=="/”){//”/"算法
b[j]=Double.parseDouble(s);
if(j==0){wen=b[j]*b[j];}
wen=wen/b[j];
ben=Double.toString(wen);
tf。
setText(wenben+”=”+ben);
}
if(toknizer==”平方"){//平方算法
if(j==0){wen=1;}
b[j]=Double.parseDouble(s);
wen=wen*b[j]*b[j];
ben=Double.toString(wen);
tf.setText(wenben+”="+ben);
}
if(toknizer=="倒数”){//倒数算法
b[j]=Double。
parseDouble(s);
wen=1/b[j];
ben=Double。
toString(wen);
tf。
setText(wenben+”="+ben);
}
if(toknizer==”开平方”){//开平方算法
if(j==0){wen=0;}
b[j]=Double.parseDouble(s);
doublewen1=sqrt(b[j]);
ben=Double。
toString(wen1);
tf。
setText(wenben+”=”+ben);
}
JTextComponenttextAnswer=null;
if(toknizer=="十进制"){//二进制转为十进制代码
//b[j]=Integer.parseInt(s);
wen=Integer。
parseInt(s,2);
ben=Double。
toString(wen);
tf。
setText(wenben+”="+ben);
}
if(toknizer==”二进制"){//十进制转换为二进制代码
intden=Integer.parseInt(s);
Stringdaen=Integer。
toBinaryString(den);
tf.setText(wenben+"="+daen);
}
if(toknizer=="%"){//”%"算法
if(j==0){
b[j]=Double.parseDouble(s);
b[j+1]=Double.parseDouble(k);
if(b[j]〈b[j+1]){
wen=b[j];
}if(b[j]==b[j+1]){
wen=0;
}
if(b[j]〉b[j+1]){
wen=b[j]%b[j+1];
}
}if(j〉1){
b[j]=Double.parseDouble(a[j]);
wen=wen%b[j];
}
ben=Double.toString(wen);
tf.setText(wenben+”=”+ben);
}
}
}
}
}
catch(Exceptione){
e。
getMessage();
}
}
privateintsqrt(doubled){
//TODOAuto-generatedmethodstub
return0;
}
//主函数
publicstaticvoidmain(String[]args){
newCalculator();//对小程序进行初始化
}
}
3计算器演示
加法
减法
乘法
除法
倒数
平方
二进制转换为十进制
十进制转换为二进制
4运行调试及讨论分析
将代码写好之后检查代码的正确性,检查代码无误后将代码进行调试和运行将会出现一个JavaApplet计算器界面.在调试过程中可能会出现有界面但是不能运行小程序,那是因为没有初始化小程序,那时我们应该在主函数中将小程序进行初始化,这样小程序才能运行!
在调试和运行完全正确后,我们就可以按照自己的医院将小程序进行简单测试,例如输入一些简单数据分别运行各个按钮结果正确后可以初步确定程序师正确的。
有时候我们还要输入不同范围的值进行测试,可能会发现更多的错误,因为有时候我们定义数据的范围可能会过小或输入数据会越界,到时我们就可以改正以适应更多更大的运算。
有时候我们会不自觉的选择一种最优函数方法尽量将自己的代码简单规范而又不缺少题目所要求的功能,那就要求我们翻阅很多参考书和查阅很多资料。
其实javaApplet图形界面的布局也是我们要讨论的范围,如何使得界面更加美观是我们要探讨的!
有时候我们可能会到书上或网上找到一些满足我们要求的程序代码,在此我们应该取其优秀的简单易理解代码作为我们设计程序的代码,作为初学者参考和借用部分外部程序是不可避免,但是我认为前提我们应该看懂那些程序代码,要知其所以然,那样才达到我们学程序的目的,但不主张完全照搬,否则就会没意义了!
5小结
到此本次课程报告快接近尾声了,通过本次课程设计我学到了好多、也发现了自己的好多不足!
很显然最明显的收获是理解和较熟练的掌握了JavaApplet图形界面的基本方法,尤其在JavaApplet图形界面的布局方面学到颇多,以前布局很乱并且很多布局都是无效的。
在此次课设中通过查阅很多资料和同学的互相帮助,充分发挥了JavaApplet界面布局的优越性。
另外按钮功能的实现也是本次课设的一大难点,怎样实现那些功能是关键.通过这次课设我又学会了好多Java中的简单便捷的函数,例如Integer.toBinaryString(inti)函数(实现的是将一个十进制数转换成一个二进制的数)。
另外我这次课设部分程序是通过外部资料得到的,这使得我认识到查阅资料和开外多看书籍的重要性。
但不主张照搬,因为那不是我们自己成果,那是不光彩的。
总之通过此次课设我学到了好多,也掌握了好多关于JavaApplet的事件管理和按钮功能实现方法,这次课设给我的感受就是:
只要你有心,不怕你完成不了课设。
参考文献:
[1]朱福喜.《Java语言程序设计》(第二版).科学出版社
[2]陈国君等。
《Java程序设计基础》(第二版)。
清华大学出版社
[3]Deitel。
《Java大学基础教程》(第六版)。
电子工业出版社
[4]MaryCampione。
《Java语言导学》(第四版).机械工业出版社
[5]Y.DanielLiang。
《Java语言程序设计基础篇》(第六版).机械工业出版社
[6]KathySierra。
《HeadFirstJava》(第二版)。
东南大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 计算器 设计 报告