资源描述
目录一、课设任务及要求1二、需求分析1三、设计思路2四、详细设计4五、运行调试与分析讨论8六、设计体会与小结12七、参考文献13一、课设任务及要求设计一个图形界面(GUI)的计算器应用程序,完成简单的算术运算。设计要求 设计的计算器应用程序可以完成加法、减法、乘法、除法和取余运算。且有小数点、正负号、求倒数、退格和清零功能。本程序主要练习使用布局管理器设计一个计算器的界面,并练习使用事件监听器处理数据的输入,并完成相关的计算。除上述要求外,本次设计的程序还附加了进制转换和求平方,求立方的功能。二、需求分析日常生活中经常需要用到计算器,比如科学计算、数值计算、会计业务等,在Applet中实现一个精巧实用的计算器,可以让用户在使用网站服务的同时,可以很方便地进行数据运算,可增加页面的实用性,同时让用户的操作也更方便与快捷。本项目需要实现一个具有四则运算的计算器,拥有加、减、乘、除功能,并且还要具备求倒数,小数点,求余,退格和清零的功能。除此之外,本次设计的程序添加转进制和求平方与立方功能。三、设计思路本应用程序继承自框架类(Frame),此程序使用Frame布局管理器BorderLayout,将单行文本框加入到“North”区域,包含各种按钮的面板buttonPanel加入到”Center”区域。还可以将进制转换的面板与单行文本框放一块。包含各种按钮的面板buttonPanel 采用n行n列的网格布局,然后将数字按钮和运算符按钮以及控制按钮添加到面板中。同时注册按钮事件监听器。如:Button b=new Button();b.addActionListener(事件监听器);事件监听器中的事件处理方法void actionPerformed(ActionEvent e)完成主要的按钮事件的处理。事件处理分以下几种情况:数字按钮事件(”0”,”1”,”2”8”,”9”)、运算符按钮事件(”+”,”“,”*”,”/”,”%”)、正负号按钮事件(”+/-“)、小数点按钮事件(”.”)、等号按钮事件(”)、求倒按钮事件(”1/x”)、求平方按钮事件(“x2”)、求立方按钮事件(“x3”)、退格按钮事件(”退格”)、清楚按钮事件(“C”),进制转换事件。在事件处理触发按钮事件时,要进一步分析,是重新开始计算时触发的按钮事件还是计算中间触发的按钮事件。计算器完成的是一个数学表达式,如:32,所以可以采用不同的变量来存储数字和字符,如3,2分别存储在变量pre,operatorchar,和 current中,最后运算时,要按住按钮“=”才能运算,当按住运算符按钮时便将之前输入的数字存储在变量 pre中,并将运算符存储在operatorchar中,当按住等号按钮时,便将后输入的数字存储到current中并根据所输入的运算符进行相关运算。 本应用程序中的数字按钮和运算符按钮可以分别定义两个不同的对象组件。如:数字按钮button,可以用数组button存放,数组按钮与数字联系在一起,如当按下button1时,也相当与在计算器中输入数字1。预算符用变量operatorchar来存放。工作原理:将数字键与其他键分别进行监听,一个单行文本框用来显示输入的数据,inputstring用来存放每次录入的数据,数据与字符录入都通过按键来触发事件,单行文本框设置的不可编辑(这样可靠性很高)。然后对所有的button来进行监听,当按到“+,-,*,/,%”按钮时,将第一输入的数字存储到pre,输入的运算符通过变量operatorchar来存储,当再输入数字后遇到“=”时,便将运算符后的数字存储到变量“current”里,接着调用“+,-,*,/,%”运算函数进行 pre operatorchar current之间的运算,将结果用 result保存起来,并显示在单行文本框中。这里需要声明的是每次输入的数据都要进行类型转换,将字符串型的数据转换成 double型才能进行运算,设计一个转换函数,并将转换后的数据用 temp 存储,所以数据存储起来比较简单,也不会有什么语法上的错误。诚然,通过这样的数据存储方式就可以很方便的加进其他的扩展功能,如要进行求倒数的运算,只要将1.0/temp 重新赋值给temp便可以实现。退格按钮事件只需将输入的数据字符型重新编辑后把最后的一个数字消去显示出来,清空按钮只需将所以变量初始化。求平方与立方可调用系统Math类的静态方法pow(),进制转换同样与其他button类似分别进行事件监听,设计一个内部私类来进行进制转换,触发事件后调用类中方法就行了。功能规划:(1)基本运算;(2)进制运算,如二进制和十进制数,十进制数和十六进制数之间的转换;(3)类设计。Calculator和Calculate,Calculate是个内部类,功能是进行进制的转换,Calculator是初始化界面,以及响应用户的操作。四、详细设计1.数据分析计算器的程序设计,必然会有数据的输入,其中数据包括运算符和数字,均要通过计算器上的button按钮选项按键输入进去,里面录入的必然是字符型的数据,如果要进行运算,要将输入的字符型转换成double型,以防止运算出错。如可以这样定义一个转换函数:public double formatConvert(String inputString)/*将字符串转换为double类型*/ double temp = 0.0; temp = Double.parseDouble(inputString); return temp; 2.算法思路大致思路已经在上文有比较详细的介绍,主要是通过将数字键和其他符号区别开来进行监听,可以Pre变量存储运算符前的数据,operatorchar存储运算符,current存储运算符后的数据。当按住运算符按钮时便将之前输入的数字存储在变量 pre中,并将运算符存储在operatorchar中,当按住等号按钮时,便将后输入的数字存储到current中并根据所输入的运算符进行相关运算。每次输入的数字数据将进行类型转换,将inputstring的值赋值给temp,这样便可以直接通过对temp的运算来实现对 X的平方,立方,倒数和进制转换了。3类设计 class Calculator extends JFrame implements ActionListener /Calculator是初始化界面,以及响应用户的操作。Calculate是个内部类,功能是进行进制的转换,private class Calculate public Calculate()throws NumberFormatException/转换为二进制 /转换为八进制 /转换为十六进制 4.功能设计主要程序流程图: 主要代码及其注释:/响应用户点击按钮事件/将数字按钮键与数字一一对应起来public void actionPerformed(ActionEvent e) /数字按钮事件 for(int i=0;i0) /判断有数据输入 inputString = inputString.substring(0, inputString.length()-1); input.setText(inputString); /显示退格后的结果 if(e.getSource() = plusButton) setValue(+);/加法 if(e.getSource() = subtractButton)setValue(-);/减法 if(e.getSource() = multiButton)setValue(*);/乘法 if(e.getSource() = divisionButton)setValue(/);/除法 if(e.getSource() = modButton) setValue(%);/求余 /加减乘除求余都调用setvalue()函数/setVlaue()private void setValue(char opChar)/赋值pre和operatorChar operatorChar = opChar; pre = formatConvert(inputString); input.setText(opChar+); inputString = ; /等号(运算)事件if(e.getSource()=equalButton) current = formatConvert(inputString);/赋值给current doOperator(); /调用计算函数 input.setText(+result); /显示运算结果 inputString = +result; decimalButton.setSelected(true); / 计算函数 DoOperator():/*该方法用于根据用户的输入进行数值计算,得到计算结果*/public double doOperator() switch(operatorChar) /判断运算符 case +:result = pre + current;break; /加运算 case -:result = pre - current;break; /减运算 case *:result = pre * current;break; /乘法运算 case /:result = pre / current;break; /除法运算 case %:result = pre % current;break; /求余运算 return result; /返回结果 /小数点事件if(e.getSource()=pointButton)/小数点 int index = inputString.indexOf(.); if(index = -1)/如果数字中没有小数点.,则添加小数点 inputString += .; 运行界面:可见下文。五、运行调试与分析讨论1)运行程序后显示界面如下,可在计算器面板上按键,单项文本框不可编辑的:2)进行简单的加减乘除运算,如 3+2: 3)将上式的结果 5.0 % 2运算:3)进制运算转换,如 在十进制下输入 63,将它转换成其他的进制。 转换成二进制:转换成八进制:转换成十六进: 4)异常处理:异常处理提示数据转换出错!六、设计体会与小结设计,给人以创作的冲动,但是也要为这次冲动承担一定的痛苦,但事后会发现,这一切都是值得的。本次的JAVA课程设计让我对JAVA的理论知识又有更深一步的了解,温故而知新,开始设计之时完全没头绪,对于理论知识学习不够扎实的我深感“书到用时方恨少”,只好再把书中介绍的相关的知识重新阅读了一番,对知识系统而全面进行了梳理,遇到难处先是苦思冥想再向同学请教,终于熟练掌握了基本理论知识,而且领悟诸多平时学习难以理解掌握的较难知识,学会了如何思考的思维方式,找到了设计的灵感。这次课程设计使我感到收获不小,使我对JAVA的设计过程有了更深的了解,促进了对理论知识的消化与吸收,也巩固和完善了本门课程的知识体系结构。设计过程中遇到了不少的麻烦,在调试过程中也出现了一些平时学习过程中,没有遇到过的错误,通过在课程设计中老师的耐心指导以及查阅相关的资料,努力的思考,一一解决了遇到的问题,通过这些问题,使我对课本知识的理解也更加深刻了。通过实践可以让我发现更多平时学习中不可能遇到的问题,提高综合能力,因此在以后的学习过程中,我将要通过更多的实践来提高自己,来加强完善知识结构体系。综上所述,课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道理,给了我很多思想,给了我莫大的空间。大学教育当如此。七、参考文献1 卢晓惠主编.Java 编程指导.西安:西安科技大学出版社. 20062 张国宁主编 .Java程序设计案例教程 .北京:中国水利出版社.20073 黄明 ,梁旭主编.Java信息系统设计与开发实例.北京:机械工业出版社.20064
展开阅读全文