java语言所编程设计的标准计算器毕业设计.docx
《java语言所编程设计的标准计算器毕业设计.docx》由会员分享,可在线阅读,更多相关《java语言所编程设计的标准计算器毕业设计.docx(15页珍藏版)》请在冰豆网上搜索。
![java语言所编程设计的标准计算器毕业设计.docx](https://file1.bdocx.com/fileroot1/2023-1/6/a6b6a10a-9ec1-4088-8ead-a50876831a01/a6b6a10a-9ec1-4088-8ead-a50876831a011.gif)
java语言所编程设计的标准计算器毕业设计
武汉工商学院
信息工程学院
项目名称:
计算器
学生姓名:
董莹
学号:
14406005
班级:
物联1班
指导教师:
李凤麟
2015年12月29日
摘要
本计算器是由java语言所编程设计的标准计算器,该计算器能够实现计算器最基本的运算功能,可以进行十进制下简单的四则运算(加法、减法、乘法、除法)、求余,且有小数点、正负号、求倒数、退格和清零功能。
利用JavaGUI图形界面首先开始设计一个计算器的界面,定义计算器所需要的按钮并赋给其按钮名称,在设计完计算器的界面后还需要建立事件监听函数,还有获取事件源标签函数,等一系列的函数来实现计算其内部功能的实现。
使得使用计算器时简单明了,清晰可见,操作轻松。
该课程设计涉及的知识范围广泛,需要查阅大量的资料。
通过本课程设计能够使学生本身较全面的掌握面向对象程序设计的有关概念和开发方法,通过对已学知识的运用以及拓展,是学生能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。
关键字:
java语言,计算器,算法
目录
1需求分析1
2系统分析2
3.1.1界面设计3
3.1.2初步设计思路3
3.2详细设计4
3.2.1程序流程图4
3.2.2程序主要代码及说明5
4.1界面的实现8
4.2基本运算功能的实现8
5.1加法运算9
5.2减法运算9
5.3倒数运算9
5.4取余数运算10
5.5开方运算10
5.6负数运算11
5.7退格运算11
5.8清零运算12
总结与心得13
参考文献14
1需求分析
随着人类生活水平的提高,人类的需求也在不断的增加,数据出现在生活中的每一个角落,因此计算机便成了必不可少的生活工具。
随着数据量的不断增加,古老的计算工具已经被人类淘汰,只有计算器才能代替计算这一项艰巨的任务。
计算器的优点在于运算速度快,携带更加便捷,价格便宜,操作更加方便。
在这个生活节奏极其快速的时代,没有计算器将会带来意想不到的麻烦。
因此计算器的诞生其实是一种必然的事件。
计算器功能主要包括:
加、减、乘、除、取余、小数点、正负号、求倒数、开根号,退格和清零功能。
其中基本运算功能分别通过handleNumber和handleOperator函数来实现。
例如加法运算的实现,在handleOperator函数下用If语句进行判断字符串operator与字符串“+”是否相等,如果相等,函数handleNumber和handleOperator共同作用下实现加法运算功能。
同样计算器的其他运算减法,乘法,除法等都是需要进行operator与字符串“-”、“*”、“/”等字符串的比较来实现相应的功能。
该系统功能的模块图如图1.1所示。
系统功能模块图1.1
2系统分析
整个计算器的程序中运用窗体容器JFrame以及面板容器JPanel,引用接口(事件侦听器)ActionListener。
程序布局选用了网格布局(GridLayout),边界布局(BorderLayout),基本控件包括文本框控件(JTextField)。
根据程序设计要求要实现各种功能,如加、减、乘、除,以及求余、小数点、正负号、求倒数、退格和清零功能。
那么一开始就需要创建一个计算器界面,其次还要选用网格布局,便于各类按钮之间的分布。
之后,计算器上的功能需要以按钮的形式呈现在窗口内,需要定义JButton类,并实例化对象。
创建构造函数,初始化计算器,设置窗口大小及位置、颜色布局。
并设置面板将各部分的组件放置在单独的面板内,设置面板的位置。
最后将各部分面板整合在一个大窗口内。
定义多种处理事件函数,保证程序能够正常执行。
当然了在输入数据时还要进行异常捕捉,防止越界的现象的发生(例如输入的数据为非字符串),所以该程序中最后还需要有异常处理机制。
3概要设计与详细设计
3.1概要设计
3.1.1界面设计思路
设计一个计算器界面,首先要了解界面的布局情况,其次要明白计算器基本框架。
如何才能实现计算器的最基本界面,即包括所有控件大容器是如何创建的。
通过查阅相关资料可知JFrame是窗体类,JPanl是面板类。
首先创建窗口,让计算器的各部分控件有一个位置去存放,而控件有需要通过中间桥梁面板才能存放在窗体中,所以需要将所有控件放在相应的面板内,由于控件数目多,需要利用字符串来定义各部分控件。
还有需要利用构造函数给计算器命名,以及设置JFrame窗口的大小以及位置分布还有颜色等的设置。
3.1.2初步设计思路
(1)根据设计出来的图形界面,首先应该设计其GUI界面,总体的界面有一个文本框,23个按钮,总体界面采用了GridLayout和BorderLayout布局,将文本框放置在最北方,然后将数字以及算术按钮放置到一个面板Panel内,并且将该部分内容置于界面的南方,完成界面的设计。
(2)根据界面可知设计计算流程首先要点击数字,通过数值按钮可以将数值添加到文本框内,因为有些运算设计的数值有好几位数,所以需要将输入的数值保存到一个字符串当中,当再次点击数字按钮时将之前输入的数字与新的数字拼接起来,一起添加到文本框中,直到点击运算符按钮,将文本框中的字符串保存在一个字符串变量中,然后重置文本框内容,输入运算符隐藏到文本框内,随后输入第二个数据,用相同的方法保存数据,输入完毕后,通过控制等号运算符将字符串数据转换成双精度类型,然后就计算出结果,并显示在文本框中。
(3)基本运算都能够实现之后,该系统为满足计算的需求,还设置了前清零、退格、开方、求余数等运算。
清零只需要直接重置文本框内容。
退格功能采用substring函数截取字符串长度来实现退格功能。
还有双精度数的运算,需要用到if循环语句对数字进行控制输出。
3.2详细设计
3.2.1程序流程图
程序流程图3.1.2
3.2.2程序主要代码及说明
程序采用继承JFrame类,利用数组来定义JButton按钮,使界面获得多个按钮,同时在程序中引用监听接口,采用4行5列的网格布局,来完成计算器界面的基本设置。
设置窗体方面,设置JFrame为可见,默认为不可见。
最后对按钮进行计算分析,分别设定处理数据的handleNumber方法,运算符控制的handleOperator方法,处理退格handleBackspace方法、以及计算结果的方法等等。
一步一步的实现计算器的基本功能。
(1)处理数据的方法
privatevoidhandleNumber(Stringkey){
if(firstDigit){
//输入的第一个数字
resultText.setText(key);
}elseif((key.equals("."))&&(resultText.getText().indexOf(".")<0)){
//输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面
resultText.setText(resultText.getText()+".");
}elseif(!
key.equals(".")){
//如果输入的不是小数点,则将数字附在结果文本框的后面
resultText.setText(resultText.getText()+key);
}
//以后输入的肯定不是第一个数字了
firstDigit=false;
}
功能说明:
计算器第一次输入数据时,首先判断输入的是否为小数点,则将小数点放在文本框的最后面,如果第一次输入的不是小数点,则将数字置于文本框的后面,以后的数据肯定不是第一次输入。
该部分程序能够保障数字已经输入到计算器内,否则,该计算器无法输入任何数据。
(2)处理运算符方法
privatevoidhandleOperator(Stringkey){
if(operator.equals("/")){
if(getNumberFromText()==0.0){
operateValidFlag=false;
resultText.setText("除数不能为零");
}else{
resultNum/=getNumberFromText();
}
}elseif(operator.equals("1/x")){
if(resultNum==0.0){
operateValidFlag=false;
resultText.setText("零没有倒数");
}else{
resultNum=1/resultNum;
}
}elseif(operator.equals("+")){
resultNum+=getNumberFromText();
}elseif(operator.equals("-")){
resultNum-=getNumberFromText();
}elseif(operator.equals("*")){
resultNum*=getNumberFromText();
}elseif(operator.equals("sqrt")){
resultNum=Math.sqrt(resultNum);
}elseif(operator.equals("%")){
resultNum=resultNum%getNumberFromText();
}elseif(operator.equals("+/-")){
resultNum=resultNum*(-1);
}elseif(operator.equals("=")){
resultNum=getNumberFromText();
}
if(operateValidFlag){
longt1;
doublet2;
t1=(long)resultNum;
t2=resultNum-t1;
if(t2==0){
resultText.setText(String.valueOf(t1));
}else{
resultText.setText(String.valueOf(resultNum));
}
}
}
功能说明:
当用输入数据按下“/”这个按钮时,计算器首先会判断文本框中的数据是否为0,如果为0,文本框将会显示“除数不能为零”,来规范输入的数据。
当输入“1/x”导数运算符时,输入的数据为0,文本框会显示“0没有倒数”。
当输入“+,-,*,sqr”运算符时,系统会正常执行结果。
同时也要注意取余运算除数不能为零。
以及运算符等于用户按的按钮。
(3)获取计算结果方法
privatedoublegetNumberFromText(){
doubleresult=0;
try{
result=Double.valueOf(resultText.getText()).doubleValue();
}catch(NumberFormatExceptione){
}
returnresult;
}
功能说明:
首先定义double型变量result,并进行初始化计算结果为0,同时该段程序需要定义一个抛出异常程序段,假如需要转换的字符串出现非数字字符,程序就会出现异常,那么try语句后面的语句不会再继续执行,而是直接跳出到catch里面去执行。
(4)Backspace运算功能
privatevoidhandleBackspace(){
Stringtext=resultText.getText();
inti=text.length();
if(i>0){
text=text.substring(0,i-1);
if(text.length()==0){
resultText.setText("0");
firstDigit=true;
operator="=";
}else{
resultText.setText(text);
}
}
}
功能说明:
首先获取文本框内的数据,然后需要判断该数据的长度,定义一个int型的变量i来判断数据长度,如果文本框数据长度大于0,则退格,将数据的自后一个字符去掉,当数据长度i等于0时,表示文本框内无数据内容,则此时退格表示初始化计算器内的数值。
否则显示新输入的内容。
4编码实现
4.1界面的实现
计算器整个程序主要采用网格布局的方式,所以一开始需要导入GridLayout的包,还有控件JButton包,窗体JFrame包,面板JPanel包,以及界面内部的文本框需要导入的JTextField包。
程序一开始需要定义一个自定义类mi让他继承窗体JFrame并引用行为监听接口ActionListener。
然后定义一个字符串数组StringKEYS[]是控件获得相关运算符的名字,以及功能键的名字,初始化控件字符串数组长度以及文本框内容。
编写构造函数,将窗口标题设置为“简易计算器”。
同时定义一个init函数初始化计算器,设置面板背景颜色为灰色,设置窗口位置(x,y)坐标为(500,500)。
初始化计算器将文本框内容设置为右对齐方式,同时将文本框的颜色设置为白色。
初始化计算器按钮,将数字与运算符键放在同一个面板内,实例化一个面板的对象calckeysPanel,通过对象调用方法setLayout来设置数字键与运算键在文本框中处的位置。
通过for循环来控制控件数。
初始化功能键,将功能键放置到一个面板内,并设置面板位置。
新建一个大的面板,将开始建立的两个小面板放在这个大面板内,然后调整盖大面板的位置。
另外再建一个新面板放置文本框,设置其位置。
因为JFrame不能直接添加组件,需要用getContentPane()函数获取内容面板,再在内容面板上进行添加组件,最后是整体布局,,将文本框面板放在最北方,大面板放在窗体中间,整个窗体布局建造完成。
4.2基本运算功能的实现
(1)基本运算的实现(加、减、乘、除、取余、开方、取负数、倒数)
将输入的第一个数值保存到一个字符串当中,当再次点击数字按钮时将之前输入的数字与新的数字拼接起来,一起添加到文本框中,直到点击运算符按钮,将文本框中的字符串保存在一个字符串变量中,然后重置文本框内容,输入运算符隐藏到文本框内,随后输入第二个数据,用相同的方法保存数据,输入完毕后,按“=”键获得结果。
而开方、取余数、求倒数这三个运算符的操作数只有一个,即输入操作数后保存到字符串当中直接输入运算符按等号键直接获取结果。
(2)功能的实现
面板内有多种按钮存在时,需要定义一个获取事件源标签label,调用getContentPane函数,将事件源标签与用户按压的按钮进行比较,以保证计算器能够正确无误的执行指令,例如如果点击的是退格键,则文本框数据的最末一位数会消失,其他功能按钮原理类同。
5程序运行结果
5.1加法运算
加法运算结果被设置在文本框内,并且是以右对齐的方式至于文本框内,当再次输入数据时,计算器将自动清除执行过的数据,继续执行下一步运算。
加法运算结果如下图5.1所示(运算案例:
12+56)。
加法运算结果图5.1
5.2减法运算
减法运算结果被设置在文本框内,并且是以右对齐的方式至于文本框内,当再次输入数据时,计算器将自动清除执行过的数据,继续执行下一步运算。
减法运算结果如下图5.2所示(运算案例:
97-67)。
减法运算结果图5.2
5.3倒数运算
既可以直接输入数据进行倒数运算,还可以先求出一个数据的倒数然后再执行其他的运算符,程序能够正常执行,毫无影响,同时当输入的数据为0时,文本框内会报错,提示用户0是没有倒数的。
倒数运算结果如下图5.3所示(运算案例:
2)。
倒数运算结果图5.3
5.4取余数运算
取余数运算通过“%”这一运算符实现数据的运算,执行此运算时,除数也不能够为0,否则将失去取余数运算的意义。
取余数运算结果如下图5.4所示(运算案例:
5%8)。
取余数运算结果图5.4
5.5开方运算
执行开方运算需要注意的是开根数必须大于或等于零,否则执行结果将会报错。
开方运算结果如下图5.5所示(运算案例:
16)。
开方运算结果图5.5
5.6负数运算
输入一个数字,大小范围不限,然后输入负数运算按钮执行结果。
负数运算结果如下图5.6所示(运算案例:
26)。
负数运算结果图5.6
5.7退格运算
执行退格运算符时需要注意的是,被清除掉的数字是从右往左的第一个数字,如果该数据经过多次执行退格运算符后,文本没有任何内容,则backspace的含义表示初始化计算器里面的数据。
退格运算结果如下图5.7所示(运算案例:
-26)。
退格运算结果图5.7
5.8清零运算
清零运算与初始化运算有一定的区别,清零运算会将数值变成0,当下次直接输入数据时数据左边会多出一个零来,因此如果想要是数据清空时最好不要选择此按钮。
清零运算结果如下图5.8所示(运算案例:
-2)。
清零运算结果图5.8
总结与心得
一学期一次的课程设计终于接近尾声了,其实一开始我还是有点小担心的,但是又有点小小的喜悦,担心是因为课程设计是一项艰巨的任务,需要花大量的时间查阅相关的资料,将所学知识进行整合总结。
但是相对于C语言来说,我还是很自信的觉得Java比C语言学得更好,基本的语法已经掌握。
通过对这次的计算器窗体的编写,我更加熟悉了java图形用户界面的设计原理和程序的结构以及javaawt和swing的组合。
学会将书本上的知识运用在实际中,提升了编程能力,尤其在JavaGUI图形界面的布局方面学到颇多,以前布局很乱并且很多布局都是无效的。
在编写程序过程中我还是遇到了不少的困难,比如说按钮布局大小及其位置不能够得到很好地调节,还有对于按钮的颜色调节不知道该用什么方法,通过在网上查找资料案例才了解到了setForeground这个函数可以控制按钮颜色。
还有其他的一些问题,通过查阅大量的资料和同学的互相帮助,解决了遇到的一些问题,该程序充分发挥了JavaGUI界面布局的优越性。
另外按钮功能的实现也是本次课程设计的一大难点,怎样实现那些功能是关键。
这次课程设给我的感受就是:
只要你有心去努力思考问题,查阅资料,就不怕你完成不了课程设计。
参考文献
[1]博彦科技.编程高手ASP[M].北京大学出版社,2000.94-97
[2]王冬青.JAVA课程设计与开发的思考[J].中国电化教育.2002.10
[3]耿祥义,张跃平.JAVA实用教程[M].清华大学出版社,2003.5.1:
1-354
[4]孙涌.现代软件工程[M].北京希望电子出版社,2003.8:
1-246
[5]萨师煊,王珊.数据库系统概论[M].高等教育出版社,2002.2:
3-460
《语言类综合项目实训》报告
成绩评定
分数:
评阅日期:
评阅教师: