资源描述
课程设计报告课程名称Java项目实训课程设计设计名称基于java计算器的设计与实现学生学号学生姓名学生学号学生姓名学生学号学生姓名学生学号学生姓名学生学号学生姓名指导教师吕淑芳考核成绩信息工程系二一七年六月目录1、前 言21.1设计目的及思路21.2功能模块设计21.3系统功能图32、计算器的设计与实现33、计算器演示44、总结与体会及讨论分析75、参考文献9附件:10程序源代码101、前 言1.1设计目的及思路通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。利用Java Applet图形界面首先开始设计一个计算器的界面,定义计算器所需要的按钮并赋给其按钮名称,使得使用计算器时简单明了,清晰可见,操作轻松。 给各个按钮进行算法,利用鼠标点击事件,当鼠标点击某个按钮时就开始执行那个按钮所定义的算法,生成数据并显示。 除数字的输入为直接进行输入外,其他运算例如+、-、*、/、开平方等算法要求计算时通过内部较为复杂的运算将结果显示在显示屏上。 至于其中的进制转换功能的实现则是直接调用Java中进制转换的函数,例如要将十进制转换成二进制则可直接调用函数Integer.toBinaryString(int i)来实现,充分显示了Java语言的简洁性和Java语言功能的强大性。 当然了在输入数据时还要进行异常捕捉,防止越界的现象的发生,这也是Java语言健壮性的体现!1.2功能模块设计以下为标准计算器的基本功能:(1)加法 两个数据进行加操作,可以为小数。(2)减法 两个数据进行减操作,可以为负数相减。(3)乘法 两个数相乘操作。(4)除法 两个数相除操作。(5)开平方对任意一个数进行开方运算,可以是小数。(6)求余对任意一个数进行求余运算。(7)倒数对任意一个数进行倒数运算。(8)转换将十进制数转换为二进制以及将二进制转换为十进制。1.3系统功能图计算器减法运算加法运算乘法运算除法运算倒数运算开平方运算求余运算二进制与十进制转换2、计算器的设计与实现2.1总体方案设计日常生活中经常需要用到计算器,比如科学计算,数值计算,会计业务等等,在Applet中实现一个精巧的计算器,可以让用户的操作也更方便和快捷。本项目需要实现一个具有四则运算的计算器,能够实现基本的加、减、乘、除运算,以及其它的辅助功能;界面简洁适用;要提供主要的设计思路、类的设计,本次设计添加转进制等功能。本应用程序继承自框架(frame),此程序使用frame布局管理器bordelayout,将单行文本加入相应区域,包含各种按纽的面板buttonpanel加入相应区域还可以将进制转换的面板与单行文本框放一块包含各种按纽的面板buttonpanel采用N行N列的网格布局,然后将数字按钮和运算符按钮以及控制按钮添加到面板中,同时注册按钮事件监听器。布局设计好后再添加按钮事件。对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮的数值设置到文本框中,否则则应把文本框中的内容加上你所点击按钮的数值设置到文本框中。2.2程序的调试与运行结果说明程序功能实现:使用swing组件和awt图形用户界面以及BroadLayout布局管理器。通过在按钮的单击事件处理方法中调用类的成员方法calculator()来进行简易计算器的各种运算,并正确实现运算功能。程序可以实现加、减、乘、除、取余等运算,并且可进行负数的运算,设置CE清零按钮可进行清零运算。添加菜单条,列出标准计算、日期计算菜单选项,并别实现标准计算且整个程序对话框可实现最小化、最大化、关闭。3、计算器演示加法减法乘法除法倒数平方二进制转换为十进制十进制转换为二进制4、总结与体会及讨论分析将代码写好之后检查代码的正确性,检查代码无误后将代码进行调试和运行将会出现一个JavaApplet计算器界面。在调试过程中可能会出现有界面但是不能运行小程序,那是因为没有初始化小程序,那时我们应该在主函数中将小程序进行初始化,这样小程序才能运行!在调试和运行完全正确后,我们就可以按照自己的医院将小程序进行简单测试,例如输入一些简单数据分别运行各个按钮结果正确后可以初步确定程序师正确的。有时候我们还要输入不同范围的值进行测试,可能会发现更多的错误,因为有时候我们定义数据的范围可能会过小或输入数据会越界,到时我们就可以改正以适应更多更大的运算。有时候我们会不自觉的选择一种最优函数方法尽量将自己的代码简单规范而又不缺少题目所要求的功能,那就要求我们翻阅很多参考书和查阅很多资料。其实javaApplet图形界面的布局也是我们要讨论的范围,如何使得界面更加美观是我们要探讨的!有时候我们可能会到书上或网上找到一些满足我们要求的程序代码,在此我们应该取其优秀的简单易理解代码作为我们设计程序的代码,作为初学者参考和借用部分外部程序是不可避免,但是我认为前提我们应该看懂那些程序代码,要知其所以然,那样才达到我们学程序的目的,但不主张完全照搬,否则就会没意义了!总结:(1)通过编写这个相对复杂的程序,让我认识解决实际问题前应现建立模型,再通过建立的模型使问题简单化,从而解决问题。(2)这次编写的程序大部分是通过调用各包中的方法来实现的,这也让我充分理解了包和类调用的关系。(3)并且通过实训我了解到String类是字符串常量类,初始化后不能更改;StringBuffer类是字符串缓冲区,可以被修改。布尔型不能转化成其他任何类型等等。在做本项目是时候,会遇到很多小问题,比如说:如何保存输入的数字和下一个数进行加、减、乘、除运算。还有如何判断它是第几个输入的数字。后来进行多次研究和查询才知道可以通过设运算符标志位来判断是输入的第几个数值。还有在安装日期计算按钮时会遇到日期对象和标准计算的类不再同一个包中,这时需要重新定义一个类来实现日期计算,这一功能我在编程时遇到了一些问题,所以最后运行时只有按钮事件但在按钮上没有添加实现功能的方法。并且编写程序时需要声明多个对象,给不同的对象分配不同的空间。程序中对布局管理器和事件、按钮监听器的应用十分广泛。并且运用了java.awt.*;和java.swing中的很多组件。通过编程我对这些内容有了更深层次的理解,为以后的编程打下了良好的基础。设计体会:在此次的课程设计实践中,我学到了教科书上没有的东西。这次课程设计,我按照课程设计的要求,分块实现程序的功能。在实践中我遇到许多的问题,但我都克服,最终我成功的完成了这次课程设计。从中我充分理解了Java面对对象的特性,并体会到Java与C语言的不同之处在实践的同时,我又从中成长了许多,特别是在对程序的编译和调试中掌握了许多的技巧和方法,为今后的其他计算机语言的学习奠定了一定的基础。此次课程设计让我更了解熟悉了Java中的图形用户界面和它的编程方式。在完成课题的过程中也不断充实了自己,学习到了很多以前没有学习到的知识,收获很大。在做项目时必然会遇到困难,会有不会的东西,重要的不是现在会不会,而是遇到问题知道如何找到解决的途径。还使我对所学知识能够融会贯通,又不断丰富了新知识。Java计算器设计使得我们对所学的专业课有了更为深刻的认识,使得知识得到了巩固和提高此次的课程设计使我复习、巩固Java语言的基础知识,进一步加深Java语言的理解和掌握;课程设计为我们提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼了我们分析解决实际问题的能力。提高我们适应实际,实践编程的能力;并且培养了我们在项目开发中团队合作精神、创新意识及能力。在实践的同时,我又从中成长了许多,特别是在对程序的编译和调试中掌握了许多的技巧和方法,为今后的其他计算机语言的学习奠定了一定的基础。5、参考文献1朱福喜.Java语言程序设计(第二版).科学出版社2陈国君等.Java程序设计基础(第二版).清华大学出版社3 Deitel.Java大学基础教程(第六版).电子工业出版社4 MaryCampione.Java语言导学(第四版).机械工业出版社5 Y.Daniel Liang.Java语言程序设计基础篇(第六版). 机械工业出版社程序源代码import javax.swing.*; import javax.swing.text.JTextComponent;import java.util.StringTokenizer; import java.awt.*; import java.awt.event.*; import java.math.*; public class Calculator implements ActionListener JFrame jf=new JFrame(计算器); JTextField tf=new JTextField(); JPanel pnl; JButton jButtonDENG; JButton jButtonJIAN; JButton jButtonCHENG; JButton jButton1; JButton jButton2; JButton jButton3; JButton jButton4; JButton jButton5; JButton jButton6; JButton jButton7; JButton jButton8; JButton jButton9; JButton jButton0; JButton jButtonCHU; JButton jButtonQINGKONG; JButton jButtonJIA; JButton jButtonQUYU; JButton jButtonPINGFANG; JButton jButtonXIAOSHUDIAN; JButton jButtonBACKSPACE; JButton jButtonDAOSHU; JButton jButtonKAIPINGFANG; JButton jButtonERJINZHI; JButton jButtonSHIJINZHI; public Calculator () /初始化界面的方法 Container c=jf.getContentPane(); tf.setHorizontalAlignment(JTextField.RIGHT); c.add(tf,North); JPanel pnl=new JPanel(); c.add(pnl,Center); pnl.setLayout(new GridLayout(6,5); jButton1=new JButton(1); jButton1.addActionListener(this); pnl.add(jButton1); jButton2=new JButton(2); jButton2.addActionListener(this); pnl.add(jButton2); jButton3=new JButton(3); jButton3.addActionListener(this); pnl.add(jButton3); jButtonBACKSPACE=new JButton(backspace); jButtonBACKSPACE.addActionListener(this); pnl.add(jButtonBACKSPACE); jButton4=new JButton(4); jButton4.addActionListener(this); pnl.add(jButton4); jButton5=new JButton(5); jButton5.addActionListener(this); pnl.add(jButton5); jButton6=new JButton(6); jButton6.addActionListener(this); pnl.add(jButton6); jButtonJIA=new JButton(+); jButtonJIA.addActionListener(this); pnl.add(jButtonJIA); jButton7=new JButton(7); jButton7.addActionListener(this); pnl.add(jButton7); jButton8=new JButton(8); jButton8.addActionListener(this); pnl.add(jButton8); jButton9=new JButton(9); jButton9.addActionListener(this); pnl.add(jButton9); jButtonJIAN=new JButton(-); jButtonJIAN.addActionListener(this); pnl.add(jButtonJIAN); jButton0=new JButton(0); jButton0.addActionListener(this); pnl.add(jButton0); jButtonQINGKONG=new JButton(清空); jButtonQINGKONG.addActionListener(this); pnl.add(jButtonQINGKONG); jButtonCHENG=new JButton(*); jButtonCHENG.addActionListener(this); pnl.add(jButtonCHENG); jButtonCHU=new JButton(/); jButtonCHU.addActionListener(this); pnl.add(jButtonCHU); jButtonQUYU=new JButton(%); jButtonQUYU.addActionListener(this); pnl.add(jButtonQUYU); jButtonPINGFANG=new JButton(平方); jButtonPINGFANG.addActionListener(this); pnl.add(jButtonPINGFANG); jButtonXIAOSHUDIAN=new JButton(.); jButtonXIAOSHUDIAN.addActionListener(this); pnl.add(jButtonXIAOSHUDIAN); jButtonDENG=new JButton(=); jButtonDENG.addActionListener(this); pnl.add(jButtonDENG); jButtonDAOSHU=new JButton(倒数); jButtonDAOSHU.addActionListener(this); pnl.add(jButtonDAOSHU); jButtonKAIPINGFANG=new JButton(开平方); jButtonKAIPINGFANG.addActionListener(this); pnl.add(jButtonKAIPINGFANG); jButtonERJINZHI=new JButton(二进制); jButtonERJINZHI.addActionListener(this); pnl.add(jButtonERJINZHI);jButtonSHIJINZHI=new JButton(十进制); jButtonSHIJINZHI.addActionListener(this); pnl.add(jButtonSHIJINZHI);jf.setSize(600,400); jf.setVisible(true); public void actionPerformed(ActionEvent event) /检测运算符的方法try double wen=0;String toknizer=+; String ben; String wenben=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); double b=new double10; String a=new String15; StringTokenizer sun=new StringTokenizer(wenben,toknizer); int i=0; while(sun.hasMoreTokens() ai+=sun.nextToken(); for(int j=0;j10;j+) String s=aj; String k=aj+1; if(s=null) break; else if(toknizer=*) /*算法 if(j=0)wen=1; bj=Double.parseDouble(s); wen=wen*bj; ben=Double.toString(wen); tf.setText(wenben+=+ben); if(toknizer=+) /+ 算法if(j=0)wen=0; bj=Double.parseDouble(s); wen=wen+bj; ben=Double.toString(wen); tf.setText(wenben+=+ben); if(toknizer=-) /-算法bj=Double.parseDouble(s); if(j=0)wen=2*bj; wen=wen-bj; ben=Double.toString(wen); tf.setText(wenben+=+ben); if(toknizer=/) / /算法bj=Double.parseDouble(s); if(j=0)wen=bj*bj; wen=wen/bj; ben=Double.toString(wen); tf.setText(wenben+=+ben); if(toknizer=平方) /平方算法if(j=0)wen=1; bj=Double.parseDouble(s); wen=wen*bj*bj; ben=Double.toString(wen); tf.setText(wenben+=+ben); if(toknizer=倒数) /倒数算法bj=Double.parseDouble(s); wen=1/bj; ben=Double.toString(wen); tf.setText(wenben+=+ben); if(toknizer=开平方) /开平方算法 if(j=0)wen=0; bj=Double.parseDouble(s); double wen1=sqrt(bj); ben=Double.toString(wen1); tf.setText(wenben+=+ben); JTextComponent textAnswer = null;if (toknizer=十进制) /二进制转为十进制代码/bj=Integer.parseInt(s); wen =Integer.parseInt(s,2); ben=Double.toString(wen); tf.setText(wenben+=+ben); if (toknizer=二进制) /十进制转换为二进制代码 int den =Integer.parseInt(s); String daen = Integer.toBinaryString(den); tf.setText(wenben+=+daen); if(toknizer=%) /%算法if(j=0) bj=Double.parseDouble(s); bj+1=Double.parseDouble(k); if(bjbj+1) wen=bj%bj+1; if(j1) bj=Double.parseDouble(aj); wen=wen%bj; ben=Double.toString(wen); tf.setText(wenben+=+ben); catch(Exception e) e.getMessage(); private int sqrt(double d) / TODO Auto-generated method stubreturn 0;/主函数 public static void main(Stringargs) new Calculator(); /对小程序进行初始化
展开阅读全文