java课程设计 设计一个图形界面的计算器,完成简单的算术运算_第1页
java课程设计 设计一个图形界面的计算器,完成简单的算术运算_第2页
java课程设计 设计一个图形界面的计算器,完成简单的算术运算_第3页
java课程设计 设计一个图形界面的计算器,完成简单的算术运算_第4页
java课程设计 设计一个图形界面的计算器,完成简单的算术运算_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

java课程设计设计一个图形界面的计算器,完成简单的算术运算2.课设要求要求使用Java语言编写程序,实现基本的加、减、乘、除四种运算,并且要求在图形界面中显示运算过程和结果。此外,还要求程序具有良好的用户交互性,能够处理用户的输入错误,并给出友好的提示信息。二、需求分析通过对计算器的功能和用户需求进行分析,我们确定了以下需求:1.支持基本的加、减、乘、除四种运算;2.支持小数和负数的运算;3.支持多次连续运算;4.支持括号运算;5.支持清空、删除和撤销功能;6.支持错误输入的提示和纠正。三、设计思路我们采用MVC架构设计模式,将程序分为三个模块:模型、视图和控制器。1.模型:负责进行数学运算,计算结果并返回给控制器;2.视图:负责显示运算过程和结果,以及处理用户的输入;3.控制器:负责将用户输入传递给模型进行计算,并将计算结果传递给视图进行显示。四、详细设计1.界面设计我们采用JavaSwing框架设计图形界面,主要包括以下组件:1)文本框:用于显示运算过程和结果;2)按钮:用于输入数字、运算符和其他功能键;3)菜单栏:用于提供设置和帮助等功能。2.模型设计我们设计了一个Calculator类,包括以下方法:1)addition:加法运算;2)subtraction:减法运算;3)multiplication:乘法运算;4)division:除法运算;5)calculate:根据用户输入的表达式进行计算。3.控制器设计我们设计了一个Controller类,负责将用户输入传递给模型进行计算,并将计算结果传递给视图进行显示。Controller类包括以下方法:1)handleInput:处理用户输入;2)updateView:更新视图。五、运行调试与分析讨论在开发过程中,我们遇到了一些问题,如括号匹配、小数运算精度等,通过调试和讨论,最终解决了这些问题。在测试过程中,我们发现程序运行稳定,界面友好,能够满足用户的需求。六、设计体会与小结通过这次课程设计,我们深入了解了Java语言和GUI编程,掌握了MVC架构设计模式的应用,提高了团队合作和问题解决能力。同时,我们也发现了自己的不足之处,需要继续学习和提高。七、参考文献1.《Java编程思想》2.《JavaSwing实战》3.《MVC设计模式》附录代码实现:见附件本次课程设计要求开发一个计算器应用程序,能够完成加减乘除和取余运算,同时具备小数点、正负号、求倒数、退格和清零功能。我选择添加开平方根、平方、立方、判断素数和求log功能作为拓展功能。为了实现计算器系统的功能,需要实现输入和输出两个功能模块。系统设计原则是具有适用性广、操作简便等特点,同时满足以上的功能要求和能够运行在常见的计算机及其配置上。在布局方面,本次课程设计程序采用布局管理器BorderLayout,将单行文本框加入到“North”区域,将面板panel加入到“Center”区域。面板panel采用Girdlayout布局,选用5行*5列,将各种按钮添加到面板panel,并增加按钮监听事件。为了存储数字和运算符号,我选择使用链表(Linkedlist类)。程序运行后,输入的所有数字及运算符号都全部存储在链表中,待最后运算时,再一一求出来进行计算。对于事件监听的处理问题,计算器的各种按钮都需要一个对象来进行监视,以便对发生的事件做出处理。计算器的各种按钮通过调用相应的方法将某个对象作为自己的监视器。例如,数字按钮的方法为AddActionListener(监视器)。对于获取了监视器的数字按钮,通过相应的操作就会导致事件的发生,并通知监视器,监视器就会做出相应的处理。成员变量描述Button[]numberButtons数字按钮数组ButtondotButton小数点按钮ButtonplusMinusButton正负号按钮ButtonbackspaceButton退格按钮ButtonsquareButton平方按钮ButtonclearButton清零按钮ButtonequalButton等号按钮TextFieldresultField显示计算结果的文本框LinkedList<Double>dataList储存数据的链表ButtonsqrtButton求平方根按钮ButtonprimeButton判断素数按钮ButtonlogButton对数按钮ButtoncubeButton立方按钮ButtonreciprocalButton倒数按钮②方法描述主类Calculator的方法描述表方法名描述publicCalculator()构造函数,创建计算器主窗口publicstaticvoidmain(String[]args)程序入口,从此类开始执行publicvoidactionPerformed(ActionEvente)监听器,处理按钮的点击事件publicvoidcalculate()计算结果的方法publicvoidclear()清空数据的方法publicvoidbackspace()退格的方法publicvoidsquare()求平方的方法publicvoidsqrt()求平方根的方法publicvoidprime()判断素数的方法publicvoidlog()求对数的方法publicvoidcube()求立方的方法publicvoidreciprocal()求倒数的方法(2)数字按钮类NumberButton①成员变量NumberButton类成员变量表成员变量描述按钮上的数字主类对象第8页变量类型intnumber按钮上的数字Calculatorcalculator主类对象②方法描述数字按钮类NumberButton的方法描述表方法名描述publicNumberButton(intnumber,Calculatorcalculator)构造函数,创建数字按钮对象publicvoidactionPerformed(ActionEvente)监听器,处理数字按钮的点击事件(3)运算符号按钮类OperationButton①成员变量OperationButton类成员变量表成员变量描述运算符号主类对象第9页变量类型Stringoperation运算符号Calculatorcalculator主类对象②方法描述运算符号按钮类OperationButton的方法描述表方法名描述publicOperationButton(Stringoperation,Calculatorcalculator)构造函数,创建运算符号按钮对象publicvoidactionPerformed(ActionEvente)监听器,处理运算符号按钮的点击事件华东交通大学课程设计报告六、设计体会与小结本次课程设计整体难度不大,但在细节处理方面遇到了一些问题。在课设过程中,我学习了Swing的使用以及用Java实现链表的数据结构。这次课程设计中,我还学到了很多布局方面的知识。虽然数据结构已经很久没有用过了,但是随着时间的推移,用Java实现链表也变得越来越顺手了。本次课程设计的程序构架简单,没有用到很困难的算法,但这样编写出来的程序易于修改。虽然时间紧迫,但我学到了很多东西。最后感谢在课程设计中帮助过我的同学和老师。七、参考文献[1]耿祥义.《Java2实用教程(第三版)》北京清华大学出版社2006.8[2]朱福喜.《Java语言程序设计》.北京清华大学出版社.2005[3]朱福喜,尹为民,余振坤.《Java语言与面向对象程序设计》.武汉武汉大学出版社.2002附录程序代码:packageTZB;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjavax.swing.border.*;importjava.util.LinkedList;publicclassCalculatorextendsJFrameimplementsActionListener{NumberButtonnumberButton[];OperationButtonoprationButton[];JButtondecimalButton,signButton,backspaceButton,squareButton,equalButton,clearButton,sqrtButton,primeButton,logButton,cubeButton,reciprocalButton;JPanelpanel;JTextFieldresultShow;Stringoperators[]={"+","-","*","/"};LinkedList<String>mylist;booleanequalFlag=false;JTextAreablank;}GUI的设计及监视器的添加publicCalculator(){super("计算器");mylist=newLinkedList<String>();numberButton=newNumberButton[10];for(inti=0;i<=9;i++){numberButton[i]=newNumberButton(i);numberButton[i].addActionListener(this);}oprationButton=newOperationButton[4];for(inti=0;i<4;i++){}小数点按钮=newJButton(".");正负号按钮=newJButton("+/-");等号按钮=newJButton("=");平方按钮=newJButton("平方");立方按钮=newJButton("立方");倒数按钮=newJButton("1/x");退格按钮=newJButton("退格");清零按钮=newJButton("C");sqrt=newJButton("sqrt");log=newJButton("log");素数=newJButton("素数");清零按钮.setForeground(Color.blue);退格按钮.setForeground(Color.blue);等号按钮.setForeground(Color.blue);平方按钮.setForeground(Color.blue);立方按钮.setForeground(Color.blue);倒数按钮.setForeground(Color.blue);正负号按钮.setForeground(Color.blue);小数点按钮.setForeground(Color.blue);sqrt.setForeground(Color.blue);log.setForeground(Color.blue);素数.setForeground(Color.blue);退格按钮.addActionListener(this);}本文描述了一个计算器的GUI设计以及监视器的添加。在构造函数中,我们创建了一个名为"计算器"的窗口,并初始化了一个LinkedList<String>对象以存储计算器的输入。我们还创建了10个数字按钮,并为它们添加了事件监听器。我们还创建了4个操作按钮,但是在这个版本的代码中,我们没有为它们添加任何事件监听器。我们还创建了一些其他的按钮,例如小数点按钮、正负号按钮、等号按钮、平方按钮、立方按钮、倒数按钮、退格按钮、清零按钮、sqrt按钮、log按钮和素数按钮。我们为这些按钮设置了蓝色前景色,并为退格按钮添加了事件监听器。Stringnum=(String)mylist.getLast();Strings=num.concat(""+number);mylist.set(2,s);//查看链表动态变化for(inti=0;i<mylist.size();i++){System.out.print(mylist.get(i)+"");}System.out.println();resultShow.setText(s);elseif(e.getSource()instanceofOperationButton){OperationButtonb=(OperationButton)e.getSource();if(mylist.size()==1){Stringfuhao=b.get运算符号();mylist.add(fuhao);//查看链表动态变化for(inti=0;i<mylist.size();i++){System.out.print(mylist.get(i)+"");}System.out.println();}elseif(mylist.size()==2){Stringfuhao=b.get运算符号();mylist.set(1,fuhao);//查看链表动态变化for(inti=0;i<mylist.size();i++){System.out.print(mylist.get(i)+"");}System.out.println();}elseif(运算符号.equals("-")){n=n1-n2;//查看链表动态变化for(inti=0;i<mylist.size();i++){System.out.print(mylist.get(i)+"");}System.out.println();}elseif(mylist.size()==3){Stringfuhao=b.get运算符号();//查看链表动态变化for(inti=0;i<mylist.size();i++){System.out.print(mylist.get(i)+"");}System.out.println();Stringnumber1=(String)mylist.getFirst();}}Stringnumber2=(String)mylist.getLast();Stringoperator=(String)mylist.get(1);try{doublen1=Double.parseDouble(number1);doublen2=Double.parseDouble(number2);doublen=0;if(operator.equals("+")){n=n1+n2;System.out.print(mylist.get(i)+"");}elseif(operator.equals("*")){n=n1*n2;}elseif(operator.equals("/")){n=n1/n2;}elseif(operator.equals("sqrt")){doubleg=Math.sqrt(n2);Strings=String.valueOf(g);}mylist.clear();mylist.add(""+n);mylist.add(operator);//查看链表动态变化for(inti=0;i<mylist.size();i++){System.out.print(mylist.get(i)+"");}System.out.println();resultShow.setText(""+n);}catch(Exceptionee){}}elseif(e.getSource()==等号按钮){//等号操作的处理等号=true;if(mylist.size()==1||mylist.size()==2){Stringnum=(String)mylist.getFirst();for(inti=0;i<mylist.size();i++){System.out.print(mylist.get(i)+"");}System.out.println();resultShow.setText(""+num);}elseif(mylist.size()==3){//处理最后一个数字和运算符Stringnumber2=(String)mylist.getLast();Stringoperator=(String)mylist.get(1);try{doublen1=Double.parseDouble(number1);doublen2=Double.parseDouble(number2);doublen=0;if(operator.equals("+")){n=n1+n2;}elseif(operator.equals("*")){n=n1*n2;}elseif(operator.equals("/")){n=n1/n2;}elseif(operator.equals("sqrt")){doubleg=Math.sqrt(n2);Strings=String.valueOf(g);}mylist.clear();mylist.add(""+n);mylist.add(operator);//查看链表动态变化for(inti=0;i<mylist.size();i++){System.out.print(mylist.get(i)+"");}System.out.println();resultShow.setText(""+n);}catch(Exceptionee){}}}resultShow.setText(num);}else{mylist.removeLast();resultShow.setText("0");}}elseif(mylist.size()==3){Stringnumber2=(String)mylist.getLast();try{doubled=Double.parseDouble(number2);d=Math.sqrt(d);Stringstr=String.valueOf(d);mylist.set(0,str);resultShow.setText(str);}catch(Exceptionee){resultShow.setText("错误");}}}elseif(e.getSource()==素数){//素数按钮操作的处理intd;intflag=1;if(mylist.size()==1||mylist.size()==2){Stringnumber1=(String)mylist.getFirst();try{d=Integer.parseInt(number1);for(inti=2;i<d/2;i++){if(d%i==0){flag=2;break;}}if(flag==1){resultShow.setText("输入的数为素数");}else{resultShow.setText("输入的数不是素数");}}catch(Exceptionee){resultShow.setText("请输入正整数");}}elseif(mylist.size()==3){Stringnumber2=(String)mylist.getLast();d=Integer.parseInt(number2);resultShow.setText("请输入正整数");}}if(e.getSource()==正负号按钮){if(mylist.size()==1){Stringnumber1=(String)mylist.getFirst();try{doubled=Double.parseDouble(number1);d=-1*d;Stringstr=String.valueOf(d);mylist.set(0,str);resultShow.setText(str);}catch(Exceptionee){resultShow.setText("输入有误");}}elseif(mylist.size()==3){Stringnumber2=(String)mylist.getLast();try{doubled=Double.parseDouble(number2);d=-1*d;Stringstr=String.valueOf(d);mylist.set(2,str);resultShow.setText(str);}catch(Exceptionee){resultShow.setText("输入有误");}}}elseif(e.getSource()==平方按钮){if(mylist.size()==1||mylist.size()==2){Stringnumber=(String)mylist.getLast();try{doubled=Double.parseDouble(number);d=d*d;Stringstr=String.valueOf(d);mylist.clear();mylist.add(str);resultShow.setText(str);}catch(Exceptionee){resultShow.setText("输入有误");}}}elseif(e.getSource()==平方根按钮){if(mylist.size()==1||mylist.size()==2){Stringnumber=(String)mylist.getLast();try{doubled=Double.parseDouble(number);d=Math.sqrt(d);Stringstr=String.valueOf(d);mylist.clear();mylist.add(str);resultShow.setText(str);}catch(Exceptionee){resultShow.setText("输入有误");}}}elseif(e.getSource()==求倒数按钮){if(mylist.size()==1||mylist.size()==2){Stringnumber=(String)mylist.getLast();try{doubled=Double.parseDouble(number);if(d==0){resultShow.setText("除数不能为0");}else{d=1/d;Stringstr=String.valueOf(d);mylist.clear();mylist.add(str);resultShow.setText(str);}}catch(Exceptionee){resultShow.setText("输入有误");}}}elseif(e.getSource()==求余按钮){if(mylist.size()==2){Stringnumber1=(String)mylist.getFirst();Stringnumber2=(String)mylist.getLast();try{doubled1=Double.parseDouble(number1);doubled2=Double.parseDouble(number2);if(d2==0){resultShow.setText("除数不能为0");}else{doubled=d1%d2;Stringstr=String.valueOf(d);mylist.clear();mylist.add(str);resultShow.setText(str);}}catch(Exceptionee){resultShow.setText("输入有误");}}}elseif(e.getSource()==求幂按钮){if(mylist.size()==2){Stringnumber1=(String)mylist.getFirst();Stringnumber2=(String)mylist.getLast();try{doubled1=Double.parseDouble(number1);doubled2=Double.parseDouble(number2);doubled=Math.pow(d1,d2);Stringstr=String.valueOf(d);mylist.clear();mylist.add(str);resultShow.setText(str);}catch(Exceptionee){resultShow.setText("输入有误");}}}elseif(e.getSource()==求阶乘按钮){if(mylist.size()==1){Stringnumber=(String)mylist.getFirst();try{intn=Integer.parseInt(number);if(n<0){resultShow.setText("输入有误");}else{intf=1;for(inti=1;i<=n;i++){f*=i;}Stringstr=String.valueOf(f);mylist.clear();mylist.add(str);resultShow.setText(str);}}catch(Exceptionee){resultShow.setText("输入有误");}}}elseif(e.getSource()==判断素数按钮){if(mylist.size()==1){Stringnumber=(String)mylist.getFirst();try{intd=Integer.parseInt(number);if(d<=1){resultShow.setText("输入的数不是素数");}elseif(d==2||d==3){resultShow.setText("输入的数是素数");}else{booleanflag=true;for(inti=2;i<=Math.sqrt(d);i++){if(d%i==0){flag=false;break;}}if(flag){resultShow.setText("输入的数是素数");}else{resultShow.setText("输入的数不是素数");}}}catch(Exceptionee){resultShow.setText("输入有误");}}}Stringnumber1=(String)mylist.getFirst();try{doubled=Double.parseDouble(number1);d=d*d;Stringstr=String.valueOf(d);mylist.set(0,str);resultShow.setText(str);}catch(Exceptione){//异常处理}elseif(mylist.size()==3){Stringnumber2=(String)mylist.getLast();try{doubled=Double.parseDouble(number2);d=d*d;Stringstr=String.valueOf(d);mylist.set(0,str);resultShow.setText(str);}catch(Exceptione){//异常处理}}elseif(e.getSource()==立方按钮){if(mylist.size()==1||mylist.size()==2){Stringnumber1=(String)mylist.getFirst();try{doubled=Double.parseDouble(number1);d=d*d*d;Stringstr=String.valueOf(d);mylist.set(0,str);resultShow.setText(str);}catch(Exceptione){//异常处理}}elseif(mylist.size()==3){Stringnumber2=(String)mylist.getLast();try{doubled=Double.parseDouble(number2);d=d*d*d;Stringstr=String.valueOf(d);mylist.set(0,str);resultShow.setText(str);}catch(Exceptione){//异常处理}}}华东交通大学课程设计报告try{if(mylist.size()==1||mylist.size()==2){Stringnumber1=(String)mylist.get

温馨提示

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

最新文档

评论

0/150

提交评论