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

下载本文档

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

文档简介

1、目录1课设任务及要求 . .11.1课设任务: .11.2创新要求: .11.3设计要求 .12需求分析 . .22.1设计背景 .22.2开发的技术及功能 .23设计思路 . .34详细设计 . .44.1功能实现: .44.4程序设计过程 .65系统调试 . .65.1运行调试 .66参考文献 . .7附录 .81 课设任务及要求1.1 课设任务:、设计的计算器应用程序可以完成加法、减法、乘法、除法以及取余运算(可以进行浮点数和负数的运算);、有求倒数、退格和清零功能。1.2 创新要求:能进行正切、余弦,以及求平方根、指数(包括对 e)、自然对数运算1.3 设计要求 设计的计算器应用程序可

2、以完成加法、减法、乘法、除法和取余运算。且有小数点、正负号、求倒数、退格和清零功能。 课程设计可选用Eclipse 、JBuilder 、NetBeans 等作为开发平台以提高开发效率,通过资料查阅和学习尽可能熟练掌握其中一种集成开发环境。 认真按时完成课程设计报告,课程设计报告内容包括:设计任务与要求、需求分析、设计思路、详细设计、运行调试与分析讨论和设计体会与小结第 1页六个部分。2 需求分析2.1 设计背景设计这个计算器主要是参考Win dows 操作系统中自带的计算器,由于编者水平和时间的限制,不能将计算器设计到科学型及其他更复杂的类型,在设计过程中还参考了一些其他的优秀设计。但本计算

3、器除了常用的加减乘除(可以进行浮点和负数运算)这些基本运算外,还有求余、求倒、退格、清零,甚至还能进行一些复杂科学的运算,比如余弦(cos )、正切( tan)、 指数运算( pow )、自然对数运算( log)、求平方根( sqrt )以及对 e 的指数 运算( exp ),并且还能进行连续运算。总体上说来,本计算器设计简单, 代码很少,程序很小,但功能却很强大,这是同类计算器所不具备的。2.2开发的技术及功能本课程设计是要做一个图形界面的计算器,其界面主要是由swing 组件中的控件构成。程序实现了计算器的基本功能有:加、减、乘、除基本算术运算(可以进行浮点和负数运算)和 sin、cos

4、、tan 等三角函数求值 运算,同时能进行指数运算和自然对数运算,还有求倒数、退格和清零功第 2页3 设计思路、本应用程序继承自框架类(JFram? ,容器 Con tai ner c 采用 BorderLayout边缘布局,将单行文本框加入到“North ”区域,包含各种按钮的面板JPa nel p加入到” Cente ”区域。包含各种按钮的面板JPanel p 采用 3 行 6 列的网格布局,然后将数字按钮和运算符按钮以及控制按钮用一个for 循环添加到面板中同时注册按钮事件监听器。如:Butt on b=new Butt on () ;b.addActionListener (事件监听器

5、 );、事件监听器中的事件处理方法 void actio nPerformed (Actio nEve nt evt )完成主要的按钮事件的处理。事件处理分以下几种情况:数字按钮事件(”,”, ”2”.”8, ”9)”、运算符按钮事件(”+”,”“” * ”,” / ”,”)、正负号按钮事件( ” +/-“、小数点按钮事件(” . ”)、等号按钮事件(” =”)、 求倒按钮事件(”求倒”)、退格按钮事件(”退格”)、清除按钮事件 (C”) 、 正切( tan)、余弦( cos ),以及求平方根( sqrt )、指数 (pow)、对 e 的指 数( exp )、对数运算( log)。、在事件处理

6、,触发按钮事件时,先判断是或是数字是或是“-/+ ”是或是“ ?”,是的话就将负号“ -”、数字、小数点“ .”分别写入文本框并存放在sum 中,然后判断是或是“退格”、“求倒”等,是的话进行相应的处理,都不是的话则跳到doOperati on ()执行运算同时将运算符存放在preOperater中。触发按钮事件时,要进一步分析,是重新开始计算时触发的按钮事件还是计算中间触发的按钮事件。、计算器完成的是一个数学表达式,如:3 + 2, 所以可以采用一个数组来存储数字或字符,如3,+,2 分别存储在数组中,最后运算时,可以一一取出来进行运算。、利用按钮设计计算器的各个运算符和操作符,通过按钮的事

7、件处理实 现按钮计算功能。第 3页、利用文本框显示操作数和运算结果第 4页4 详细设计4.1 功能实现:加减乘除求余以及指数运算其他运算I、求平方根u、对数运算川、余弦运算W 、正切运算V 、e 的指数运算切、倒数运算主要方法说明public cos(doublex) / 求 x 的余弦函数public tan (doublex) / 求 x 的正切函数public sqrt(doublex) / 求 x 的平方根public log (doublex) / 求 x 的自然对数运算public exp (double x) / 求 e 的 x 次幕public pow (double a ,d

8、ouble b) / 求 a 的 b 次幕第 5页public daoshu (double x) /求 x 的倒数第 6页第 7页4.4 程序设计过程设计过程:(1) 确定计算器函数功能和界面布局;(2) 设置框架,注册监听事件,编写方法 ;(3) 调试运行;(4) 改写应用程序,生成 APPLET5 系统调试5.1 运行调试计算器界面如下 :经过调试后运行,计算器界面与 windows 自带的计算器风格基本一致实现了预期的效果;输入数据进行验证,各项函数功能实现均正常。第 8页6 参考文献1 丁振凡 Java 语言使用教程 .北京邮件大学出版社, 2006.92丁振凡 Java 语言使用教

9、程实验指导 .北京邮件大学出版社,2006.93Bruce EckelJava 编程思想 .机械工业出版社 2007.64耿祥义JAVA2 实用教程 .清华大学出版社 2009.5第 9页附录程序代码如下:Appalication如下 :public class Calculator /动作监听接口JFrame frame; JTextFieldtextShow;JPanel panel, panel1 ,implements ActionListener/框架/文本行panel2 , panel3 ; /面板JButtonbuttonBk , buttonCe , buttonC ;JBut

10、ton button ;JButton Dot, AddAndSub Add, Sub Mui, Div, Mod Sqrt, Dao Equal, zhengxian , yuxian , jiecheng , duishu ;JMenuBar mainMenu 主菜单,子菜单 ,菜单项 JMenu editMenu, viewMenu;JMenultem copyitem , pasteltem , tltem , sltem ;DecimalFormat prec;/用于设置数据输出精度49,67boolean clickable ;/用于控制当前能否按键double vard, res

11、ult;/用来保存 double 型数据的中间值 (vard)第 10页和最后结果 (result)int key = -1, prekey = -1; /key 用来保存当前进行何种运算 , prekey用来保存前次进行何种运算String copy;/构造函数public Calculator 。clickable = true ;result = 0;frame = newJFrame ( ”计算器一应用非师范 ");prec=newDecimalFormat( "0.#" );/ 设置数据输出精度 ( 对于 double 型值 )textShow = ne

12、w JTextField(15);textShow .setText("");textShow .setHorizontalAlignment( textShow. RIGHT; textShow .setEditable( false );textShow .setBackground( new Color(255, 255, 255);panel = n ewJPa nel();frame .getC onten tPa ne().add( pan el);pan el1 = n ewJPa nel();pan el2 = n ewJPa nel();pan el .s

13、etLayout( new BorderLayout();/菜单设置mainMenu= new JMe nuBar();editMenu = new JMenu ( ”编辑 (E)");viewMenu= new JMenu ( ”查看 (V)");copyItem = new JMe nultem( ”复制 (C) Ctrl+C");copyItem .addActionListener(this );pasteItem = new JMe nultem( ”粘贴 (P) Ctrl+V");第 11页pasteItem .addActionListen

14、er(this );第 12页editMenu .add( copyitem ); editMenu .add( pasteitem );titem = n ewJMe nultem( ” 精简型科学计算器 ");titem .addActionListener( slthis );tem = n ewJMe"开发团队 ");nultem( sltem .addActionLithis );stener(viewMenuadd( tItem ); viewMenuadd( sItem);mainMenuadd( editMenu); mainMenuadd( vi

15、ewMen?;pan el .add( mai nMenu BorderLayout. NORTHpan el .add( textShow , BorderLayout. CENTE)Rpan el .add( pan el1 , BorderLayout. SOUTHpanel1 .setLayout( new BorderLayout。) ;butt on Bk = new JButt"Backspace"); newColor(255, 0, 0);"CE");new Color(255, 0,on( buttonBk .setForegroun

16、d( 0);butt onCe = new JButt on( buttonCe .setForeground(butto nC = new JButto"C");n( buttonC .setForegrounnew Color(255, 0, 0);d(this );buttonBk .addActionListener(buttonCe .addActionListener(this );buttonC .addActionListener(this );panel1 .add( panel2 , BorderLayout. NORTHpanel2 .setLayou

17、t( new FlowLayout(FlowLayout. RIGHT);第 13页panel2 .add( buttonBk ); pan el2 .add( butt on Ce);panel2 .add( buttonC );pan el3 = n ewJPa nel();pan ell .add( pan el3 , BorderLayout. CENTER butt on = n ewJButt on 14;for ( int i = 0; i <butt on . le ngth ; i+)butt on i = new JButt on (I nteger. toStri

18、ng (i);button i.setForeground( new Color(22, 22, 255);Dot = newJButton(".");Dot.setForeground( new Color(0, 0, 255);AddAndSub= new JButton( "+/-");AddAndSutsetForeground( new Color(0, 0, 255);Add = newJButton( "+");AddsetForeground( new Color(0, 0, 255);Sub = newJButt o

19、n(Suh setForegro und(new Color(0, 0, 255);Mul = newJButt"*") ;new Color(0, 0,on( Mul.setForegro255);und(Div = newJButton( "/");Div .setForeground( new Color(0, 0, 255);Mod= newJButt"%");on( ModsetForegronew Color(0, 0,und(255);第 14页Sqrt = newJButton( "sqrt");S

20、qrt .setForeground( new Color? 0, 255);Dao= newJButton( "1/x");DaosetForeground( new Color(0, 0, 255);Equal = newJButton("=");Equal.setForeground( new Color(0, 0, 255);jiecheng = new JButton( "n!");jiecheng .setForeground( new Color(0, 0, 255);zhengxian = new JButton( &

21、quot;sin");zhengxian .setForeground( new Color(0, 0, 255);yuxian = newJButton( "cos");yuxian .setForeground( new Color(0, 0, 255);duishu = n ewJButt"log");on( duishu .setForegrounew Color(0, 0,nd(255);/将所有行为与监听绑定panel3 .setLayout( new GridLayout(4, 6,6,6);/pan el3 .add( butt

22、 on 7);butt on 7.addActi on Liste ner(this );pan el3 .add( butt on 8);butt on 8.addActi on Liste ner(this );pan el3 .add( butt on 9);butt on 9.addActi on Liste ner(this );panel3 .add( Div);Div .addActionListener(this );第 15页panel3 .add( Sqrt);Sqrt .addActionListener( this );panel3 .add( zhengxian );

23、zhengxian .addActionListener(this );pan el3 .add( butt on 4);butt on 4.addActi on Liste ner(this );pan el3 .add( butt on 5);butt on 5.addActi on Liste ner(this );pan el3 .add( butt on 6);butt on 6.addActi on Liste ner(this );panel3 .add( Mul);Mul.addActionListener(this );panel3 .add( Mod ;ModaddActi

24、onListener(this );panel3 .add( yuxian );yuxian .addActionListener(this );pan el3 .add( butt on 1);butt on 1.addActi on Liste ner(this );pan el3 .add( butt on 2);butt on 2.addActi on Liste ner(this );pan el3 .add( butt on 3);butt on 3.addActi on Liste ner(this );panel3 .add( Sub);SuhaddActionListener

25、(this );第 16页panel3 .add( Da 。;DaoaddActionListener(this );panel3 .add( jiecheng );jiecheng .addActionListener(this );pan el3 .add( butt on 0);butt on 0.addActi on Liste ner(this );panel3 .add( AddAndSubAddAndSubaddActionListener(this );panel3 .add( Dot);Dot.addActionListener(this );panel3 .add( Add

26、);AddaddActionListener(this );panel3 .add( Equal);Equal.addActionListener(this );panel3 .add( duishu );duishu .addActionListener(this );frame.setDefaultCloseOperation( frame. EXIT ON CLOSE frame.pack(); frame .show();/设置各个按钮的动作public static int calc( int n)int ret =1;/ BigInteger.ONE;for (Integer i=

27、 2; i<=n; i+)第 17页ret =ret*i; . multiply( new Bigl nteger(i.toStri ng(); return ret;public void action Performed(Acti on Eve nt eve nt)II 判断是否是 double 型数参与运算 ,boolean sign = false ; 是为true ,不是为 falseObject temp = evetry II 如果按下数字按钮,将按下的按钮代表的数据插入的当前文本框字符串之后for ( int i = 0; i <= 9; i+)if (temp =

28、 butt on i && clickable = true )textShow .setText( textShow .getText()+Integer. toString (i);II 按下 '.'按钮时,判断当前文本框内字符串中含不含 '.',如果 已含,则不允许再插入 '.'if (temp = Dot && clickable = true ) boolean isDot = false ;if ( textShow .getText().length() = 0)isDot =true ;for (i

29、nt i = 0; i < textShow .getText().le ngth(); i+) if ( '.'=textShow .getText().charAt(i) isDot =true ;break;if (isDot = false )textShow .setText( textShow .getText() +".");if ( (temp =Add | temp = Sub | temp =Mul |temp =Div) && clickable = true ) /'+' 操作if (temp =

30、 Add) switch ( prekey) 第 18页case 0:result += Double. parseDouble (textShow .getText(); break; case 1:result -= Double. parseDouble (textShow .getText(); break; case 2:result *= Double. parseDouble (textShow .getText(); break; case 3:if (Double. parseDouble (textShow .getText() = 0) textShow .setText

31、(" 除数不能为零 "); clickable = false ;elseresult /= Double. parseDouble (textShow .getText(); break; default :result = Double. parseDouble (textShow .getText();textShow .setText("");prekey = key = 0;/'-' 操作if (temp = Sub) switch( prekey) case 0:result += Double.break;parseDoub

32、le (textShow .getText();case 1:result -= Double.break;parseDouble (textShow .getText();case 2:result *= Double.break;parseDouble (textShow .getText();case 3:第 19页if (Double. parseDouble (textShow .getText() = 0) textShow .setText(" 除数不能为零 "); clickable = false ;elseresult /= Double. parseD

33、ouble (textShow .getText(); break;default :result = Double. parseDouble (textShow .getText();textShow .setText("");prekey = key = 1;/'*' 操作if (temp = Mul) switch ( prekey) case 0:result += Double. parseDouble (textShow .getText(); break;case 1:result -= Double. parseDouble (textSho

34、w .getText(); break;case 2:result *= Double. parseDouble (textShow .getText(); break;case 3:if (Double. parseDouble (textShow .getText() = 0) textShow .setText(" 除数不能为零 "); clickable = false ;elseresult /= Double. parseDouble (textShow .getText(); break;default :result = Double. parseDoubl

35、e (textShow .getText();第 20页textShow .setText(""); prekey = key = 2;/'/' 操作if (temp = Div) switch ( prekey) case 0:result += Double. parseDouble (textShow .getText(); break;case 1:result -= Double. parseDouble (textShow .getText(); break;case 2:result *= Double. parseDouble (textSh

36、ow .getText(); break;case 3:if (Double. parseDouble (textShow .getText() = 0) textShow .setText(" 除数不能为零 "); clickable = false ;elseresult /= Double. parseDouble (textShow .getText(); break;default :result = Double. parseDouble (textShow .getText();textShow .setText("");prekey =

37、key = 3;/'=' 操作if (temp = Equal && clickable = true ) /如果连续按 '=',则进行连续运算if ( prekey = 5) 第 21页if ( key = 0) result += vard;textShow .setText( prec.format( result );if ( key = 1) result -= vard;textShow .setText( prec .format( result );if ( key = 2) result *= vard;textShow .se

38、tText( prec .format( result );if ( key = 3) if (Double. parseDouble (textShow .getText() = 0) textShow .setText(" 除数不能为零 "); clickable = false ;else result /= vard;textShow .setText( prec .format( result );else vard = Double. parseDouble(textShow.getText();if ( key = 0) prekey = -1;result += Double. parseDouble(textShow.getText(); textShow .setText( prec .format( result );if ( key = 1)parseDouble (textShow .getText(); prekey = -1;prec .format( result );result -= Double.textShow .setText(if ( key = 2) prekey = -1;result *= Double. parseDouble (textShow .getText();第

温馨提示

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

评论

0/150

提交评论