Java课程设计_保存过程的计算器_第1页
Java课程设计_保存过程的计算器_第2页
Java课程设计_保存过程的计算器_第3页
免费预览已结束,剩余38页可下载查看

下载本文档

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

文档简介

1、鹽臓工粤院Java课程设计报告保存计算过程的计算器的设计专 业计算科学与技术(网络技术)学生姓名班 级学 号1指导教师完成日期 目 录1设计要求12总体设计12.1 CalculatorWi ndow 类设计22.2 NumberButt on 类设计22.3 Operati on Butt on 类设计22.4 HandleDigit 类设计22.5 HandleOperation 类设计32.6 HandleDot 类设计32.7 HandleEquality 类设计32.8 HandleSin 类设计32.9 HandleBack 类设计32.10 HandleClear 类设计32.1

2、1 HandlePOrN 类设计33详细设计33.1CalculatorWi ndow 类33.2NumberButt on 类1.0.3.3 Operati on Butt on类.123.4 HandleDigit 类1.33.5 Han dleOperati on类16.3.6 HandleDot 类.193.7 HandlePOrN 类213.8 HandleEquality 类233.9 HandleSin 类273.10 HandleBack 类303.11 HandleClear 类324代码调试问题345软件发布.3.4.6程序运行效果347设计心得36保存过程的计算器的设计1

3、设计要求Windows 2000/XP系统中的 计算器”是一个方便实用的计算机工具,但是没有 提供显示计算过程的功能。本计算器所遵循的计算规则与 Windows 2000/XP系统 中的计算器”相同,出了具有普通的计算功能外,还具有现实计算过程,保存计算 过程的功能。(1) 单击计算器”上的数字按钮(0、1、2、3、4、5、6、7、8、9)可以设置 参与计算的运算数。(2) 单击 计算器”上的运算符按钮(+、-、*、/)可以选择运算符号。(3) 单击 计算器”上的函数按钮可以显示相应的函数值。(4) 单击 计算器”上的=”按钮显示计算结果。(5) 在一个文本框中显示当前的计算过程,在一个文本区

4、中显示以往的计算过程和发生计算时的系统时间。(6) 单击 保存”按钮可以将文本区中的全部计算过程保存到文件;单击 复制”按钮可以将文本区中选中的文本复制到剪贴板;单击 清除”按钮可以清楚文本区中的全部内容。2总体设计在设计计算器时,可以编写11个Java源文件:CalculatorWindow.java、 NumberButt on .java、Operati on Butt on .java、 Han dleDigit.java 、Han dleOperati on .java 、Han dleDot.java、Han dleEquality.java、Han dleS in .java、

5、HandleBack.java、HandleClear.java、HandlePOrN.java 。计算器除了上述的11个Java源文件给出的类外,还需要Java提供的一些重要 的类,入 JButton、JTextField、JTextArea 和 LinkedList 等。图2.1类之间的组合关系2.1 CalculatorWi ndow 类设计CalculatorWindow 类负责创建计算器的主窗口 ,该类含有Main方法,计算器 从该类开始执行。CalculatorWindow 有十四种类型的对象,分别是 LinkedList<String>、NumberButton、Op

6、erationButton、JButton、JTextField、 JTextArea、 HandleDigit 、 HandleOperation 、 HandleDot 、 HandleEquality 、 HandleSin、HandleBack、HandleClear、HandlePOrN 对象。CalcuatorWindow 类创建的窗口以及其中的主要成员如图2.2所示。CalculatorWindow 类的主要成员的作用将在后面的详细设计中阐述。图2.2 CalculatorWindow 窗口及主要的对象成员2.2 NumberButt on 类设计NumberButton 类创建

7、的对象是主类 CalculatorWindow 窗口中的一个数字” 按钮。NumberButton 类有一个int类型的成员number,标明所创建的按钮所含 有的数字。NumberButton 所创建的10个按钮被添加到 CalcuatorWindow 窗口 中。2.3 Operatio nButt on 类设计OperationButton 类创建的对象是主类 CalculatorWindow 窗口中的一个运算 符”按钮。OperationButton 类有一个String类型的成员operateSign,用于标明所 创建的按钮所含有的运算符号。OperationButton所创建的4个按

8、钮被添加到CalculatorWi ndow 窗口中。2.4 HandleDigit 类设计HandleDigit类创建的对象负责处理 ActionEvent事件。当用户单击数字”按钮时,HandleDigit类所创建的对象负责处理和数字有关的计算过程。2.5 Han dleOperatio n 类设计HandleOperation 类创建的对象负责处理 ActionEvent事件,当用户单击运算 符”按钮时,HandleOperation类所创建的对象负责处理和运算符有关的计算过程。2.6 HandleDot 类设计HandleDot类创建的对象负责处理 ActionEvent事件,当用户单

9、击.”按钮(小 数点)时,HandleDot类所创建的对象负责处理小数点。2.7 HandleEquality 类设计HandleEquality类创建的对象负责处理 ActionEvent事件。当用户单击=”按钮 时,HandleEquality类所创建的对象计算有关数据。2.8 HandleSin 类设计HandleSin类创建的对象负责处理 ActionEvent事件。当用户单击sin”按钮 (正弦三角函数)时,HandleSin类所创建的对象负责处理正弦三角函数的值 。2.9 HandleBack 类设计HandleBack类创建的对象负责处理 ActionEvent事件。当用户单击退

10、格”按钮 时,HandleBack类所创建的对象负责计算正弦三晋函数的值。2.10 HandleClear 类设计HandleClear所创建的对象负责处理 ActionEvent事件。当用户成功单击 C按 钮(清零)时,HandleClear类所创建的对象负责清除有关的计算结果。2.11 HandlePOrN 类设计HandlePOrN类创建的对象负责处理 ActionEvent事件。当用户单击+/- ”正 负)按钮时,HandlePOrN类所创建的对象负责处理数字的正负转换。3详细设计3.1CalculatorWi ndow 类1、效果图CalculatorWindow 创建的窗口效果如图

11、 3.1所示。图 3.1 CalculatorWindow创建的窗口2、UML 图CalculatorWindow 类是 javax.swing 包中 JFrame 的一个子类,并实现了ActionListener接口。标明该类的主要成员变量和方法的UML图如图3.2所示。JFrameActi on Liste ner4A1 (1CalculatorWi ndownu mberButt on:N umberButt on ;han dleDigit:Ha ndleDigitoperati on Butt on: Operati on Butt on ;han dleOperatio n:Han

12、 dleOperati onFlex, zhe ngfu. Backspace, Equals, Zero, sin: JButt onhan dleBack:Ha ndleBackresultShow,showComputerProcess:JT extFieldhan dleClear:Ha ndleClearsaveComputerProcess:JTextAreahan dleEquality:Ha ndleEqualitylist:L in kedList<Stri ng>han dleDot:Ha ndleDothan dlePOrN:Ha ndlePOrNhan dl

13、eSi n:Han dleSi nactio nPerformed(Actio nEve nt):voidCalculatorWi ndow():无类型mai n(Stri ng):void图 3.2 CalculatorWindow类的UML图3、类设计模块名称CalculatorWi ndow功能描述负责创建计算器的主窗口接口与属性Void acti on Performed()Function : 对 saveButton , copyButton, clearButton三个 按钮的ActionEvent事件监听In Put:无OutPut:无Return:空CalculatorWi

14、ndow()Function:是构造方法,负责元成窗口的初始化In Put:无OutPut:无Return:空Static void Main ()Functon :是计算器程序运行的入口方法In Put :无OutPut :无Return :空数据结构 与算法Linkedlist (String ) list补充说明无4、代码(CalculatorWindow.java )import java.awt.*;import java.awt.eve nt.*;import javax.swi ng.*;import javax.swi ng.border.*;import java.util.

15、L in kedList;import java.io.*;public class CalculatorWi ndow exte nds JFrame impleme nts Action Liste ner NumberButt on nu mberButt on ;Operati on Butt on operati on Butt on ;JButt on Flex, zhe ngfu. Backspace, Equals, Zero, sin;JTextField resultShow;/ 显示计算结果JTextField showComputerProcess; /显示当前计算过程

16、JTextArea saveComputerProcess; / 显示计算步骤JButt on saveButt on, copyButt on, clearButt on;LinkedList<String> list; /链表用来存放第一个运算数、运算符号和第二个运算数HandleDigit handleDigit;/ 负责处理 ActionEvent 事件Han dleOperati on han dleOperati on;Han dleBack han dleBack;Han dleClear han dleClear;Han dleEquality han dleEqu

17、ality;Han dleDot han dleDot;Han dlePOrN han dlePOrN;Han dleSin han dleS in;public CalculatorWi ndow() setTitle(”计算器 计算机112班 程逸群");JPa nel pan elLeft, pan elRight;list = new Lin kedList<Stri ng>();resultShow = new JT extField(10);resultShow.setHorizo ntalAlig nmen t(JTextField.RIGHT);resul

18、tShow.setForegro un d(Color.blue);resultShow.setFo nt( new Fon t("TimesRoma n", Fon t.BOLD, 16); resultShow.setBorder( new SoftBevelBorder(BevelBorder 丄OWERED); resultShow.setEditable(false);resultShow.setBackgro un d(Color.white);showComputerProcess = new JTextField();showComputerProcess.

19、setHorizo ntalAlig nmen t(JTextField.CENTER);showComputerProcess.setFont(new Font("Arial", Font.BOLD, 16); showComputerProcess.setBackgro un d(Color.cya n);showComputerProcess.setEditable(false);saveComputerProcess = new JTextArea(); saveComputerProcess.setEditable(false);saveComputerProce

20、ss.setFont(new Font("宋体", Font.PLAIN, 16);nu mberButt on = new NumberButt on 10;han dleDigit = new Han dleDigit(list, resultShow, showComputerProcess);for (int i = 0; i <= 9; i+) nu mberButt on i = new NumberButt on (i);numberButtoni.setFont(new Font("Arial", Font.BOLD, 20);nu

21、 mberButt on i.addAct ion Liste ner(ha ndleDigit);operati on Butt on = new Operati on Butt on 4;han dleOperati on = new Han dleOperati on (list, resultShow,showComputerProcess, saveComputerProcess);String yunsuan = "+","-", "*", "/"for (int i = 0; i < 4; i+

22、) operati on Butt on i = new Operati on Butt on(yun sua ni);operationButtoni.setFont(new Font("Arial", Font.BOLD, 20);operati on Butt on i.addActi on Liste ner(ha ndleOperati on);Flex = new JButt on (".");han dleDot = new Han dleDot(list, resultShow, showComputerProcess);Flex.add

23、Act ion Liste ner(ha ndleDot);zhe ngfu = new JButto n("+/-");han dlePOrN = new Han dlePOrN(list, resultShow, showComputerProcess);zhe ngfu.addActi on Liste ner(ha ndlePOrN);Equals = new JButton("=");han dleEquality = new Han dleEquality(list, resultShow,showComputerProcess, saveC

24、omputerProcess);Equals.addAct ion Liste ner(ha ndleEquality);sin = new JButt on ("s in ”);han dleS in = new Han dleS in( list, resultShow,showComputerProcess, saveComputerProcess);sin. addAct ion Liste ner(ha ndleS in);Backspace = new JButt on (”退格");han dleBack = new Han dleBack(list, res

25、ultShow, showComputerProcess);Backspace.addActio nListe ner(ha ndleBack);Zero = new JButto n( "C");han dleClear = new Han dleClear(list, resultShow, showComputerProcess);Zero.addActio nListe ner(ha ndleClear);Zero.setForegro un d(Color.red);Backspace.setForegro un d(Color.red);Equals.setFo

26、regro un d(Color.red);sin. setForegro un d(Color.blue);zhe ngfu.setForegro un d(Color.blue);Flex.setForegro un d(Color.blue);pan elLeft = new JPa nel();pan elRight = new JPa nel();pan elLeft.setLayout (new BorderLayout();JPa nel cen terI nLeft = new JPa nel();pan elLeft.add(resultShow, BorderLayout.

27、NORTH);pa nelLeft.add(ce nterl nLeft, BorderLayout.CENTER);cen terI nLeft.setLayout (new GridLayout(4, 5);cen terI nLeft.add( nu mberButt on 1);cen terI nLeft.add( nu mberButton 2);cen terI nLeft.add( nu mberButton 3);centerI nLeft.add(operation Button0);cen terI nLeft.add(Zero);cen terI nLeft.add(

28、nu mberButton4);cen terI nLeft.add( nu mberButton 5);cen terI nLeft.add( nu mberButton6);cen terI nLeft.add(operati on Butt on 1);cen terI nLeft.add(Backspace);cen terI nLeft.add( nu mberButton 7);cen terI nLeft.add( nu mberButton 8);cen terI nLeft.add( nu mberButton 9);cen terI nLeft.add(operati on

29、 Butt on 2);cen terI nLeft.add(s in);cen terI nLeft.add( nu mberButton 0);cen terI nLeft.add(zhe ngfu);cen terI nLeft.add(Flex);centerI nLeft.add(operation Button3);cen terI nLeft.add(Equals);pan elRight.setLayout (new BorderLayout();pa nelRight.add(showComputerProcess, BorderLayout.NORTH); saveButt

30、on = new JButton(”保存");copyButton = new JButton(”复制");clearButton = new JButton(”清除");saveButton.setToolTipT ext("保存计算过程到文件”);copyButton.setT oolTipText(” 复制选中的计算过程”);clearButton.setT oolTipText(” 清除计算过程”);saveButt on .addAct ion Liste ner(this);copyButt on .addAct ion Liste ner(

31、this);clearButt on. addAct ion Liste ner(this);pan elRight.add( newJScrollPa ne(saveComputerProcess),BorderLayout.CENTER);JPanel southInPanelRight = new JPanel();southI nPan elRight.add(saveButt on);southI nPan elRight.add(copyButt on);southI nPa nelRight.add(clearButto n);pan elRight.add(southl nPa

32、n elRight, BorderLayout.SOUTH);JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,panelLeft,pan elRight);add(split, BorderLayout.CENTER);setDefaultCloseOperatio n( JFrame.EXIT_ON_CLOSE);setVisible(true);setBounds(100, 50, 528, 258);validate();public void action Performed(Acti onEvent e) i

33、f (e.getSource() = copyButton) saveComputerProcess.copy();if (e.getSource() = clearButt on) saveComputerProcess.setText (n ull);if (e.getSource() = saveButton) JFileChooser chooser = new JFileChooser();int state = chooser.showSaveDialog( null);File file = chooser.getSelectedFile();if (file != n ull

34、&& state = JFileChooser.APPROVE_OPTION) try String content = saveComputerProcess.getText();Strin gReader read = new Strin gReader(c onten t);BufferedReader in = new BufferedReader(read);FileWriter outO ne = new FileWriter(file);BufferedWriter out = new BufferedWriter(out On e);String str = n

35、u II;while (str = in. readL in e() != nu II) out.write(str);out .n ewL in e();in .close();out.close(); catch (IOException e1) public static void main(String args) new CalculatorWi ndow();3.2NumberButt on 类1、效果图NumberButt on创建的数字按钮效果如图3.3所示所创建的对象是 中的元素。标明 类之间组合关系图3.3 NumberButton 创建的数字按钮2、UML 图Number

36、Button 类是 javax.swing 包中 JButton 的一个子类,CalculatorWi ndow类中 NumberButton 型数组:numberButtonNumberButton 类的主要成员变量、方法以及 CalculatorWindow的UML图如图3.4所示。JButtonNumberButton卜CalculatorWi ndownu mber:i ntnu mberButt on:N umberButt onNumberButto n(int):无类型getNumber():i nt图 3.4 NumberButton类的UML图3、类设计模块名称NumberB

37、utt on功能描述负责创建主窗口中的一个 数字”按钮接口与属性String getNumber ()Function :返回数字符号In Put:无OutPut:无Return :数字符号NumberButton ()Function:是构造方法,创建NumberButton 对象In Put:无OutPut:无Return:空数据结构 与算法Linkedlist ( String) list补充说明无4、代码(NumberButton.java )import java.awt.*;import java.awt.eve nt.*;import javax.swi ng.*;public

38、class NumberButt on exte nds JButt on int nu mber;public NumberButt on (i nt nu mber) super("” + n umber);this .nu mber = nu mber;setForegro un d(Color.blue);public int getNumber() retur n nu mber;3.3 Operatio nButt on 类1、效果图Operati on Butt on创建的运算符按钮的效果如图3.5所示图3.5 OperationButton创建的数字按钮2、UML 图

39、OperationButton 是Javax.swing包中JButton组件的子类。所创建的对象是 CalculatorWindow 类中 OperationButton 型数组:operationButton 中的元素。标明 OperationButton 类的主要成员变量、方法以及和 CalculatorWindow 类直接的组合关系的UML如图3.6所示图 3.6 OperationButton类的UML图3、类设计模块名称Operati on Butt on功能描述创建主窗口中的一个 运算符”按钮接口与属性StringgetOperati on Sig n()Function :返回

40、操作符号In Put:无OutPut:无Return :运算符号Operati on Butt on()Function:是构造方法,创建 OperationButton对象In Put: SOutPut:无Return:空数据结构与算法无补充说明无4、代码(Operati on Butt on .java )import java.awt.*;import java.awt.eve nt.*;import javax.swi ng.*;public class Operati on Butt on exte nds JButt on String operateSig n;public Op

41、eration Button(String s) super(s);operateSig n = s; setForegro un d(Color.red);public String getOperateSig n() return operateSig n;3.4 HandleDigit 类1、效果图HandleDigit类创建的对象无效果图。2、UML 图HandleDigit 类实现了 ActionListener 接口 ,创建的对象 handleDigit 是 CalculatorWindow 窗口的成员之一。标明HandleDigit 类的主要成员变量、方法 以及和Calculat

42、orWindow类之间组合关系的UML图如图3.7所示。图 3.7 HandleDigit 类的 UML 图3、类设计模块名称Han dleDigit功能描述用户单击数字”按钮时,负责处理和运算符有关的计算结果接口与属性Void acti on Performed。Function :处理list链表中存储的第一个操作数和第一个操作数In Put:无OutPut:无Return:空Han dleDigit ()Function:是构造方法,创建HandleDigit 对象In Put: t1 , t2OutPut:无Return:空数据结构与算法Linkedlist (String ) lis

43、t补充说明无4、代码(HandleDigit.java )import java.awt.eve nt.Act ionEvent;import java.awt.eve nt.Act ion Liste ner;import java.util.L in kedList;import javax.swi ng.J TextField;public class Han dleDigit impleme nts Action Liste ner Lin kedList<Stri ng> list;JTextField resultShow;JTextField showComputer

44、Process;HandleDigit(LinkedList<String> list, JTextField t1, JTextField t2) this.list = list;resultShow = t1;showComputerProcess = t2;public void action Performed(Acti onEvent e) NumberButt on b = (NumberButt on) e.getSource();if (list.size() = 0) int nu mber = b.getNumber();list.add("” +

45、number);resultShow.setText("” + nu mber);showComputerProcess.setText("” + list.get(0); else if (list.size() = 1) int nu mber = b.getNumber();String num = list.getFirst();Stri ng s = nu m.c on cat("" + nu mber);list.set(0, s);resultShow.setText(s);showComputerProcess.setText("

46、;” + list.get(0); else if (list.size() = 2) int nu mber = b.getNumber();list.add("" + number);resultShow.setText("” + nu mber);showComputerProcess.setText("” + list.get(0) + "" + list.get(1) + "" + list.get(2); else if (list.size() = 3) int nu mber = b.getNumb

47、er();String num = list.getLast();Stri ng s = nu m.c on cat("" + nu mber);list.set(2, s);resultShow.setText(s);showComputerProcess.setText("” + list.get(O) + "" + list.get(1)+ "" + list.get(2);3.5 Han dleOperatio n 类1、效果图HandleOperation类创建的对象无效果图。2、UML 图HandleOperat

48、ion 类实现了ActionListener接口,创建的对象handleOperation 是 CalculatorWindow 窗口的成员之一。标明 HandleOperation 类的主要成员变量、方法以及和CalculatorWindow 类之间组合关系的UML图如图 3.8所示。Actio nListe nerCalculatorWi ndowhan dleOperati on:Han dleOperatio nHan dleOperati onlist:L in kedList<Stri ng> resultShow:JTextField showComputerProc

49、ess:JT extField saveComputerProcess:JTextAreaHandleOperation (LinkedList<String>, JTextField,JTextField,JTextArea):无类型 actio nPeformed(Actio nEve nt):void图 3.8 HandleOperation类的 UML 图3、类设计模块名称Han dleOperati on功能描述用户单击运算符”按钮时,负责处理和运算符有关的计算结果接口与属性Void acti on Performed()Function :处理list链表中存储的运算符

50、和必要的计算In Put:无OutPut:无Return:空Han dleOperati on()Function:是构造方法,创建HandleOperationt对象In Put: t1 ,t2,t3OutPut:无Return:空数据结构与算法Linkedlist ( String) list补充说明无4、代码(HandleOperation .java )import java.awt.eve nt.Act ionEvent;import java.awt.eve nt.Act ion Liste ner;import java.util.L in kedList;import java

51、x.swi ng.J TextArea;import javax.swi ng.J TextField;public class Han dleOperatio n impleme nts Action Liste ner Lin kedList<Stri ng> list;JTextField resultShow, showComputerProcess;JTextArea saveComputerProcess;HandleOperation(LinkedList<String> list, JTextField t1, JTextField t2,JTextAr

52、ea this.list = list;resultShow = t1;showComputerProcess = t2;saveComputerProcess = t3;public void action Performed(Acti onEvent e) Operatio nButt on b = (Operati on Butt on) e.getSource();if (list.size() = 1) String fuhao = b.getOperateSig n();list.add(fuhao);showComputerProcess.setText("” + li

53、st.get(O) + "" + list.get(l); else if (list.size() = 2) String fuhao = b.getOperateSig n();list.set(1, fuhao);showComputerProcess.setText("” + list.get(0) + "" + list.get(1); else if (list.size() = 3) Stri ng numOne = list.getFirst();String nu mTwo = list.getLast();Stri ng M

54、arks = list.get(1);Stri ng middleProcess = numOne + "" + Marks + nu mTwo;try double n1 = Double.parseDouble (numOn e);double n2 = Double.parseDouble( nu mTwo);double result = 0;if (Marks.equals("+") result = n1 + n2; else if (Marks.equals("-") result = n1 - n2; else if

55、(Marks.equals("*") result = n1 * n2; else if (Marks.equals("/") result = n1 / n2;String fuhao = b.getOperateSig n();list.clear();list.add("” + result);list.add(fuhao);Stri ng pro = middleProcess + "=" + result + "" + list.get(1);showComputerProcess.setTex

56、t(pro);saveComputerProcess.appe nd(” " + middleProcess + "=" + result + "n"); resultShow.setText("” + result); catch (Excepti on ee) 3.6 HandleDot 类1、效果图HandleDot类创建的对象无效果图。2、UML 图HandleDot 类实现了 ActionListener 接口,创建的对象 handleDot 是 CalculatorWindow 窗口的成员之一。标明HandleDot类的主要成员变量、方法以及和CalculatorWindow类之间组合关系的UML图如图3.9所示图 3.9 HandleDot 类的 UML 图3、类设计模块名称Han dleDot功能描述负责处理小数点接口与属性Vo

温馨提示

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

评论

0/150

提交评论