java课程设计计算器_第1页
java课程设计计算器_第2页
java课程设计计算器_第3页
java课程设计计算器_第4页
java课程设计计算器_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 成 绩10信计2011-2012(二)java程序设计课程设计设计题目 模拟科学计算器 设计时间 学生姓名 学生学号 所在班级 指导教师 徐州工程学院数学与物理科学学院摘要计算器在我们的生活中常常会使用到,本次课程设计,通过界面以及其中的逻辑处理,完成了四则运算的处理。通过awt包或者swing包中的界面设计部分对界面设计的细节可以有更多的了解。利用面向对象的思想,将各个组件的事件响应分别用不同的类表达出来。面向对象的思想从很大程度上可以让程序的思路更加清晰,而且可重用性很高。对于具有相同事件响;应的组件则可以调用相同的类来处理事件。除此之外,利用栈的知识来解决运算符优先的问题也让我们对ja

2、va中的栈有了更多的了解。关键词 java;计算器;四则运算;面向对象;栈目 录1需求分析.11.1该计算器完成的功能.11.2出错处理.11.3数据处理.12设计方案.12.1设计方法.12.2界面布局.13系统设计.23.1界面设计.23.2功能模块.23.2.1功能模块的设计方案.23.2.2功能模块的实现方法34系统的开发和运行环境及安装配置说明.35系统测试截图.45.1系统初始运行界面.45.2计算器按键测试.45.3运算符重复输入测试.45.4被除数为0的测试.55.5小数点重复性检查.55.6 backspace按键越界操作.65.7优先级程序计算.65.8计算结果.76总结与

3、心得体会.7附录91需求分析1.1该计算器完成的功能用户能够完成四则混合运算+、-、*、/,并且计算器能够自动的识别运算符的优先级,根据输入的运算公式,自动计算出相应的结果。同时完成计算器中的backspace、ce按钮,能够完成消除或者删除的功能。1.2出错处理当用户如果按下的是除零的操作,显示框将显示“被除数不能为0”。当用户如果连续多次按下运算符,计算器自动记忆第一次运算符,并且做防连续输入相同的运算符或者是不同的运算符。当用户在同一个数据中多次输入小数点,计算器能够自动判断小数点重复,自动只记忆第一个小数点。当用户在同一个数据中输入多个负号,计算器能够自动做重复检查,不显示多余的负号。

4、当用户在使用backspace功能删除越界数据时候,计算器自动做相应处理。1.3数据处理在程序的起始,建立了两个栈,分别用来存储操作数和操作符。在计算器的核心运算代买中,运用这两个栈来实现算法中的优先级的处理,使用“#”号来标记目标计算公式的结束。目标计算公式通过计算器的键盘实现输入,当按下“=”号之后,计算器通过调用计算器核心函数来实现数据的处理。2设计方案2.1设计方法本程序的实现使用了swing和awt两个包,主题程序界面按键根据微软计算器的布置界面进行设置,采用比较人性化的常规按键排布。返回计算结果的“=”号键使用了两倍于普通按键面积的设计,使的击中的概率更加大。2.2界面布局整体界面

5、是采用了borderlayout布局,通过4个panel进行布局的详细划分,panel3用来存储位于panel4左下角的gridlayout(1,2,4,4)布局,panel1、panel2、panel3分别用来表示borderlayout的上中下三个模块。panel1中添加了一个label display,display用来作为显示器,实时的显示输入和计算的数据。其中display需要设置为右对齐和只读属性。panel2中添加数字输入键和基本操作符键,panel采用了gridlayout布局,将整个panel2平分为4*4个空间,其中,数字键采用了15磅字体和蓝色文字,操作符采用了15磅字体

6、和红色文字,是的界面更加显眼和便于区分。panel4中首先划分为gridlayout(1,2,4,4),在panel4中,再次使用了gridlayout(1,2,4,4)将panel4的左侧一分为二,左边为panle3,这个的基础上程序往panel3中添加了backspace和ce两个按键,在panel4的右侧单元格中添加了“=”号按钮,这个时候的“=”号就是相当于两个普通按钮的长度和大小。3系统设计3.1界面设计图3-1 系统初始运行界面截图这个就是计算器界面,简洁易用,我们可以从中的数字按键和运算符按钮进行相应的数学计算,总共由19个按钮(10个数字符+5个运算符号+1个小数点+1个“+/

7、-”按钮+个“clear”按钮+1个“backspace”按钮)。3.2功能模块3.2.1功能模块的设计方案本次程序设计一共分为了5个类,每个类都各自完成不同的功能:(1)class mycalculator: 类mycalculator是主类,含有main()函数,通过new calframe()来运行程序。(2)class calframe: 类calframe完成的功能是计算器界面的设计,并且将每个组件都添加事件响应。具体的事件响应操作将在其他的类中逐一实现。(3)class handlewin:点击关闭windows窗口的控制类。(4)class handlenum:字符串输入控制类。

8、(5)class handleequal:等号出发事件的响应机制类。3.2.2功能模块的实现方法(1)public void actionperformed(actionevent e)当按下了控制按钮,根据搜索控制开关来确定能否继续添加,各个相应的处理机制。(2)public double segmentation(string mystring)字符串优先级计算代码的核心函数。(3)public int compare(char ch1,char ch2)1值为ch1大于ch2;-1为ch1小于ch2;0为ch1等于ch2(4)public double oprate(double a,c

9、har b,double ce)通过参数b来判断加减乘除4系统的开发和运行环境及安装配置说明本系统是利用java语言在netbeans ide6.5环境下开发的,java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。为了进一步巩固课堂上所学到的知识,深刻把握java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了java程序设计课程设计。通过此次课程设计,巩固所学java语言基本知识,增进java语言编辑基本功,掌握

10、jdk、editplus、eclipse、jcreator等开发工具的运用,拓宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。5系统测试截图5.1系统初始运行界面图5-1 系统初始运行界面截图5.2计算器按键测试图5-2 系统按键测试截图5.3运算符重复输入测试图5-3 加号重复输入测试截图5.4被除数为0的测试图5-4的结果infinity截图5.5小数点重复性检查图5-5小数点重复输入错误检查截图5.6backspace按键越界操作图5-6使用backspace键做越界

11、操作的截图5.7优先级程序计算图7 计算2/3+6*9-3截图5.8计算结果图5-8上面有优先级的公式计算结果6总结与心得体会这个学期的java课程设计-计算器对我来说是一个不断学习,逐步完善的过程。开始的时候拿到题目看到只有四则混合运算就理所当然的认为应该是非常简单的的一个程序而已。首先开始了程序的界面的设计。并且将一些简单的按钮的事件响应完成了。剩下了运算符优先级的问题以及数据的处理问题。于是在同学的帮助下利用正则表达式来完成输入字符串的切割,但是如果自己一个人单挑来说,对于题目中的数据处理的问题一时不知道该如何与正则表达式连接上。最后我还是选择用栈来处理。这个过程让我明白了学习知识的时候

12、实践与理论之间是有很大的差异的。应用能力我还有待加强。于是我开始熟悉栈的使用。以前在c+的学习中接触过栈,这次的使用思想是一样的,只需要在了解一下java 中的相关一些函数便可。但实际在写程序的过程中,由于有一些特殊情况的考虑与进出入栈的联系,还是碰到了一些问题。但在后来我慢慢的整理清楚思路以后,逻辑列清楚了,便也将这些问题解决了。逐步的将各项功能都完善了。当然目前我的计算器也只是完成了四则混合运算,实际上还应该有很多功能可以添加入计算器的。本次java课程设计也让我明白只要我一步步去做,那么程序功能便会不断强大。同时很重要的一点便是以后要多加强自己的动手实践能力。附录:源代码:import

13、java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import java.util.regex.matcher;import java.util.regex.pattern;public class mycalculator public static void main(string args) new calframe();class calframe extends jframe string opnt,optr; stack opnt = new stack (); stack optr

14、 = new stack (); label display; /显示 jbutton num = new jbutton10;/按键设计 jbutton plus; jbutton minus; jbutton mutiply; jbutton divide; jbutton bs;jbutton ce;jbutton equal; jbutton point; jbutton sign;jbutton lbracket; jbutton rbracket; panel p1,p2,p3,p4; string disp = ;/用户输入的表达式 string result = ;/用户输入的

15、字符串 calframe() optr.push(#); for(int i=0;i=9;+i) numi = new jbutton(string.valueof(i); plus = new jbutton(+); plus.setforeground(color.red); plus.setfont(new font(dialog,1,15); minus = new jbutton(-); minus.setforeground(color.red); minus.setfont(new font(dialog,1,15); mutiply = new jbutton(*); muti

16、ply.setforeground(color.red); mutiply.setfont(new font(dialog,1,15); divide = new jbutton(/); divide.setforeground(color.red); divide.setfont(new font(dialog,1,15); equal = new jbutton(=); equal.setforeground(color.red); equal.setfont(new font(dialog,1,15); point = new jbutton(.); point.setfont(new

17、font(dialog,1,15); sign = new jbutton(+/-); sign.setfont(new font(dialog,1,15); bs = new jbutton(backspace); bs.setforeground(color.red); bs.setfont(new font(dialog,1,8); ce = new jbutton(ce); ce.setfont(new font(dialog,1,15); p1 = new panel(); p1.setlayout(new borderlayout(); display = new label(0.

18、,label.right); display.setbackground(color.white); p1.add(display,borderlayout.north); p2 = new panel(); p2.setlayout(new gridlayout(4,4,4,4); p2.add(num7);p2.add(num8);p2.add(num9);p2.add(divide); p2.add(num4);p2.add(num5);p2.add(num6);p2.add(mutiply); p2.add(num1);p2.add(num2);p2.add(num3);p2.add(

19、minus); p2.add(num0);p2.add(sign);p2.add(point);p2.add(plus); p3 = new panel(new gridlayout(1,2,4,4); p3.add(bs);p3.add(ce); p4 = new panel(new gridlayout(1,2,4,4); p4.add(p3); p4.add(equal); settitle(计算器); setlayout(new borderlayout(); add(p1,borderlayout.north); add(p2,borderlayout.center); add(p4

20、,borderlayout.south); setvisible(true); pack(); setresizable(false); setbounds(600,350,300,230); addwindowlistener(new handlewin(); for(int i=0;i=9;+i)numi.setforeground(color.blue);numi.setfont(new font(dialog,1,15); numi.addactionlistener(new handlenum(this,i); plus.addactionlistener(new handlenum

21、(this); minus.addactionlistener(new handlenum(this); mutiply.addactionlistener(new handlenum(this); divide.addactionlistener(new handlenum(this); point.addactionlistener(new handlenum(this); sign.addactionlistener(new handlenum(this); bs.addactionlistener(new handlenum(this); ce.addactionlistener(ne

22、w handlenum(this); equal.addactionlistener (new handleequal(this); class handlewin extends windowadapter/关闭计算器 public void windowclosing(windowevent e) (e.getwindow().dispose(); system.exit(0); boolean pointswitch = true;/小数点开关 boolean oprateswitch = false;/运算符开关 boolean siginswitch = true;/ class h

23、andlenum implements actionlistener/字符串的输入 jframe my_num; int itemp = 0; handlenum(jframe f,int a) my_num = f; itemp = a; handlenum(jframe f) my_num = f; public void actionperformed(actionevent e)if(e.getsource()=numitemp)/输入数字字符oprateswitch = true;siginswitch = false;disp = disp + itemp;display.sett

24、ext(disp);if(oprateswitch&e.getsource()=plus)/输入加号 pointswitch = true;oprateswitch = false;siginswitch = true;disp = disp + +;display.settext(disp);if(oprateswitch&e.getsource()=minus)/输入减号pointswitch = true;oprateswitch = false;siginswitch = true;disp = disp + -;display.settext(disp);if(oprateswitc

25、h&e.getsource()=mutiply)/输入乘号pointswitch = true;oprateswitch = false;siginswitch = true;disp = disp + *;display.settext(disp);if(oprateswitch&e.getsource()=divide)/输入除号pointswitch = true;oprateswitch = false;siginswitch = true;disp = disp + /;display.settext(disp);if(oprateswitch&pointswitch=true&e.

26、getsource()=point)/输入小数点pointswitch = false;oprateswitch = false;siginswitch = false;disp = disp + .;display.settext(disp);if(siginswitch&e.getsource()=sign)/输入负号disp = disp + ;display.settext(disp);if(e.getsource()=bs)/点击backspaceif(!disp.isempty()disp = disp.substring(0,disp.length()-1);if(disp.is

27、empty()disp= ;display.settext(disp);if(e.getsource()=ce)/点击cedisp = ;display.settext(disp); class handleequal implements actionlistener/ 等于号触发的事件 frame my_equal; handleequal(jframe f) my_equal = f; public void actionperformed(actionevent e) if(e.getsource()=equal) disp = disp+#; disp = string.valueo

28、f(segmentation(disp); display.settext(disp); disp = ; pointswitch = true;/小数点开关 oprateswitch = false;/运算符开关 siginswitch = true;/符号开关 public double segmentation(string mystring)string reg = (?d+.?d*)|(-+*/()#); /分割表达式.pattern p = ppile(reg);matcher m = p.matcher(mystring);string find = ;double num = 0;double op1,op2;char op3;while(m.find()find = m.group();find = find.replace(,-);trynum = double.valueof(find);opnt.push(num);catch(numberformatexception nfe) /find为操作符 if(compare(optr.p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论