




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java课程设计报告保存计算过程的计算器的设计专业计算科学与技术(网络技术)学生姓名班级学号1指导教师完成日期目 录1 设计要求12 总体设计12.1 CalculatorWindow类设计22.2 NumberButton类设计22.3 OperationButton类设计22.4 HandleDigit类设计22.5 HandleOperation类设计22.6 HandleDot类设计32.7 HandleEquality类设计32.8 HandleSin类设计32.9 HandleBack类设计32.10 HandleClear类设计32.11 HandlePOrN类设计33详细设计3
2、3.1CalculatorWindow类33.2NumberButton类93.3 OperationButton类103.4 HandleDigit类113.5 HandleOperation类133.6 HandleDot类163.7 HandlePOrN类183.8 HandleEquality类193.9 HandleSin类223.10 HandleBack类243.11 HandleClear类264代码调试问题285软件发布286 程序运行效果287 设计心得30保存过程的计算器的设计1 设计要求Windows 2000/XP系统中的“计算器”是一个方便实用的计算机工具,但是没有
3、提供显示计算过程的功能。本计算器所遵循的计算规则与Windows 2000/XP系统中的“计算器”相同,出了具有普通的计算功能外,还具有现实计算过程,保存计算过程的功能。(1)单击“计算器”上的数字按钮(0、1、2、3、4、5、6、7、8、9)可以设置参与计算的运算数。(2)单击“计算器”上的运算符按钮(+、-、*、/)可以选择运算符号。(3)单击“计算器”上的函数按钮可以显示相应的函数值。(4)单击“计算器”上的“=”按钮显示计算结果。(5)在一个文本框中显示当前的计算过程,在一个文本区中显示以往的计算过程和发生计算时的系统时间。(6)单击“保存”按钮可以将文本区中的全部计算过程保存到文件;
4、单击“复制”按钮可以将文本区中选中的文本复制到剪贴板;单击“清除”按钮可以清楚文本区中的全部内容。2 总体设计在设计计算器时,可以编写11个Java源文件:CalculatorWindow.java、NumberButton.java、OperationButton.java、HandleDigit.java、HandleOperation.java、HandleDot.java、HandleEquality.java、HandleSin.java、HandleBack.java、HandleClear.java、HandlePOrN.java。计算器除了上述的11个Java源文件给出的类外,
5、还需要Java提供的一些重要的类,入JButton、JTextField、JTextArea和LinkedList等。CalculatorWindowLinkedListJTexrAreaNumberButtonOperationButtonHandleDigitHandleOperationHandleDotJButtonJTextFieldHandleDotHandlePOrNHandleEqualityHandleSinHandleBackHandleBack图2.1 类之间的组合关系2.1 CalculatorWindow类设计CalculatorWindow类负责创建计算器的主窗口,
6、该类含有Main方法,计算器从该类开始执行。CalculatorWindow有十四种类型的对象,分别是LinkedList<String>、NumberButton、OperationButton、JButton、JTextField、JTextArea、HandleDigit、HandleOperation、HandleDot、HandleEquality、HandleSin、HandleBack、HandleClear、HandlePOrN对象。CalcuatorWindow类创建的窗口以及其中的主要成员如图2.2所示。CalculatorWindow类的主要成员的作用将在后面
7、的详细设计中阐述。图2.2 CalculatorWindow窗口及主要的对象成员2.2 NumberButton类设计NumberButton类创建的对象是主类CalculatorWindow窗口中的一个“数字”按钮。NumberButton类有一个int类型的成员number,标明所创建的按钮所含有的数字。NumberButton所创建的10个按钮被添加到CalcuatorWindow窗口中。2.3 OperationButton类设计OperationButton类创建的对象是主类CalculatorWindow窗口中的一个“运算符”按钮。OperationButton类有一个String
8、类型的成员operateSign,用于标明所创建的按钮所含有的运算符号。OperationButton所创建的4个按钮被添加到CalculatorWindow窗口中。2.4 HandleDigit类设计 HandleDigit类创建的对象负责处理ActionEvent事件。当用户单击“数字”按钮时,HandleDigit类所创建的对象负责处理和数字有关的计算过程。2.5 HandleOperation类设计HandleOperation类创建的对象负责处理ActionEvent事件,当用户单击“运算符”按钮时,HandleOperation类所创建的对象负责处理和运算符有关的计算过程。2.6
9、HandleDot类设计HandleDot类创建的对象负责处理ActionEvent事件,当用户单击“.”按钮(小数点)时,HandleDot类所创建的对象负责处理小数点。2.7 HandleEquality类设计HandleEquality类创建的对象负责处理ActionEvent事件。当用户单击“=”按钮时,HandleEquality类所创建的对象计算有关数据。2.8 HandleSin类设计HandleSin类创建的对象负责处理ActionEvent事件。当用户单击“sin”按钮(正弦三角函数)时,HandleSin类所创建的对象负责处理正弦三角函数的值。2.9 HandleBack类
10、设计HandleBack类创建的对象负责处理ActionEvent事件。当用户单击“退格”按钮时,HandleBack类所创建的对象负责计算正弦三晋函数的值。2.10 HandleClear类设计HandleClear所创建的对象负责处理ActionEvent事件。当用户成功单击C按钮(清零)时,HandleClear类所创建的对象负责清除有关的计算结果。2.11 HandlePOrN类设计HandlePOrN类创建的对象负责处理ActionEvent事件。当用户单击“+/-”(正负)按钮时,HandlePOrN类所创建的对象负责处理数字的正负转换。3详细设计3.1CalculatorWind
11、ow类1、效果图CalculatorWindow创建的窗口效果如图3.1所示。图3.1 CalculatorWindow创建的窗口2、UML图CalculatorWindow类是javax.swing包中JFrame的一个子类,并实现了ActionListener接口。标明该类的主要成员变量和方法的UML图如图3.2所示。JFrameActionListenerCalculatorWindownumberButton:NumberButton;operationButton:OperationButton;Flex, zhengfu, Backspace, Equals, Zero, sin:
12、JButtonresultShow,showComputerProcess:JTextFieldsaveComputerProcess:JTextArealist:LinkedList<String>handleDigit:HandleDigithandleOperation:HandleOperationhandleBack:HandleBackhandleClear:HandleClearhandleEquality:HandleEqualityhandleDot:HandleDothandlePOrN:HandlePOrNhandleSin:HandleSinactionPe
13、rformed(ActionEvent):voidCalculatorWindow():无类型main(String):void图3.2 CalculatorWindow类的UML图3、类设计模块名称CalculatorWindow功能描述负责创建计算器的主窗口接口与属性Void actionPerformed()Function:对saveButton,copyButton,clearButton三个按钮的ActionEvent事件监听InPut: 无OutPut: 无Return:空CalculatorWindow()Function:是构造方法,负责完成窗口的初始化InPut: 无Out
14、Put:无Return:空Static void Main()Functon:是计算器程序运行的入口方法InPut:无OutPut:无Return:空数据结构与算法Linkedlist(String)list补充说明无4、代码(CalculatorWindow.java)import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import java.util.LinkedList;import java.io.*;public class CalculatorWindo
15、w extends JFrame implements ActionListener NumberButton numberButton; OperationButton operationButton; JButton Flex, zhengfu, Backspace, Equals, Zero, sin; JTextField resultShow; /显示计算结果 JTextField showComputerProcess; /显示当前计算过程 JTextArea saveComputerProcess; /显示计算步骤 JButton saveButton, copyButton,
16、clearButton; LinkedList<String> list; /链表用来存放第一个运算数、运算符号和第二个运算数 HandleDigit handleDigit; /负责处理ActionEvent事件 HandleOperation handleOperation; HandleBack handleBack; HandleClear handleClear; HandleEquality handleEquality; HandleDot handleDot; HandlePOrN handlePOrN; HandleSin handleSin; public Ca
17、lculatorWindow() setTitle("计算器 计算机112班 程逸群"); JPanel panelLeft, panelRight; list = new LinkedList<String>(); resultShow = new JTextField(10); resultShow.setHorizontalAlignment(JTextField.RIGHT); resultShow.setForeground(Color.blue); resultShow.setFont(new Font("TimesRoman",
18、 Font.BOLD, 16); resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED); resultShow.setEditable(false); resultShow.setBackground(Color.white); showComputerProcess = new JTextField(); showComputerProcess.setHorizontalAlignment(JTextField.CENTER); showComputerProcess.setFont(new Font("Aria
19、l", Font.BOLD, 16); showComputerProcess.setBackground(Color.cyan); showComputerProcess.setEditable(false); saveComputerProcess = new JTextArea(); saveComputerProcess.setEditable(false); saveComputerProcess.setFont(new Font("宋体", Font.PLAIN, 16); numberButton = new NumberButton10; hand
20、leDigit = new HandleDigit(list, resultShow, showComputerProcess); for (int i = 0; i <= 9; i+) numberButtoni = new NumberButton(i); numberButtoni.setFont(new Font("Arial", Font.BOLD, 20); numberButtoni.addActionListener(handleDigit); operationButton = new OperationButton4; handleOperatio
21、n = new HandleOperation(list, resultShow, showComputerProcess, saveComputerProcess); String yunsuan = "+", "-", "*", "/" for (int i = 0; i < 4; i+) operationButtoni = new OperationButton(yunsuani); operationButtoni.setFont(new Font("Arial", Font.B
22、OLD, 20); operationButtoni.addActionListener(handleOperation); Flex = new JButton("."); handleDot = new HandleDot(list, resultShow, showComputerProcess); Flex.addActionListener(handleDot); zhengfu = new JButton("+/-"); handlePOrN = new HandlePOrN(list, resultShow, showComputerPro
23、cess); zhengfu.addActionListener(handlePOrN); Equals = new JButton("="); handleEquality = new HandleEquality(list, resultShow, showComputerProcess, saveComputerProcess); Equals.addActionListener(handleEquality); sin = new JButton("sin"); handleSin = new HandleSin(list, resultShow
24、, showComputerProcess, saveComputerProcess); sin.addActionListener(handleSin); Backspace = new JButton("退格"); handleBack = new HandleBack(list, resultShow, showComputerProcess); Backspace.addActionListener(handleBack); Zero = new JButton("C"); handleClear = new HandleClear(list,
25、resultShow, showComputerProcess); Zero.addActionListener(handleClear); Zero.setForeground(Color.red); Backspace.setForeground(Color.red); Equals.setForeground(Color.red); sin.setForeground(Color.blue); zhengfu.setForeground(Color.blue); Flex.setForeground(Color.blue); panelLeft = new JPanel(); panel
26、Right = new JPanel(); panelLeft.setLayout(new BorderLayout(); JPanel centerInLeft = new JPanel(); panelLeft.add(resultShow, BorderLayout.NORTH); panelLeft.add(centerInLeft, BorderLayout.CENTER); centerInLeft.setLayout(new GridLayout(4, 5); centerInLeft.add(numberButton1); centerInLeft.add(numberButt
27、on2); centerInLeft.add(numberButton3); centerInLeft.add(operationButton0); centerInLeft.add(Zero); centerInLeft.add(numberButton4); centerInLeft.add(numberButton5); centerInLeft.add(numberButton6); centerInLeft.add(operationButton1); centerInLeft.add(Backspace); centerInLeft.add(numberButton7); cent
28、erInLeft.add(numberButton8); centerInLeft.add(numberButton9); centerInLeft.add(operationButton2); centerInLeft.add(sin); centerInLeft.add(numberButton0); centerInLeft.add(zhengfu); centerInLeft.add(Flex); centerInLeft.add(operationButton3); centerInLeft.add(Equals); panelRight.setLayout(new BorderLa
29、yout(); panelRight.add(showComputerProcess, BorderLayout.NORTH); saveButton = new JButton("保存"); copyButton = new JButton("复制"); clearButton = new JButton("清除"); saveButton.setToolTipText("保存计算过程到文件"); copyButton.setToolTipText("复制选中的计算过程"); clearBut
30、ton.setToolTipText("清除计算过程"); saveButton.addActionListener(this); copyButton.addActionListener(this); clearButton.addActionListener(this); panelRight.add(new JScrollPane(saveComputerProcess), BorderLayout.CENTER); JPanel southInPanelRight = new JPanel(); southInPanelRight.add(saveButton);
31、southInPanelRight.add(copyButton); southInPanelRight.add(clearButton); panelRight.add(southInPanelRight, BorderLayout.SOUTH); JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panelLeft, panelRight); add(split, BorderLayout.CENTER); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVis
32、ible(true); setBounds(100, 50, 528, 258); validate(); public void actionPerformed(ActionEvent e) if (e.getSource() = copyButton) saveComputerProcess.copy(); if (e.getSource() = clearButton) saveComputerProcess.setText(null); if (e.getSource() = saveButton) JFileChooser chooser = new JFileChooser();
33、int state = chooser.showSaveDialog(null); File file = chooser.getSelectedFile(); if (file != null && state = JFileChooser.APPROVE_OPTION) try String content = saveComputerProcess.getText(); StringReader read = new StringReader(content); BufferedReader in = new BufferedReader(read); FileWrite
34、r outOne = new FileWriter(file); BufferedWriter out = new BufferedWriter(outOne); String str = null; while (str = in.readLine() != null) out.write(str); out.newLine(); in.close(); out.close(); catch (IOException e1) public static void main(String args) new CalculatorWindow(); 3.2NumberButton类1、效果图Nu
35、mberButton创建的数字按钮效果如图3.3所示。图3.3 NumberButton创建的数字按钮2、UML图NumberButton类是javax.swing包中JButton的一个子类,所创建的对象是CalculatorWindow类中NumberButton型数组:numberButton中的元素。标明NumberButton类的主要成员变量、方法以及CalculatorWindow类之间组合关系的UML图如图3.4所示。JButtonNumberButtonCalculatorWindownumber:intnumberButton:NumberButtonNumberButton
36、(int):无类型getNumber():int图3.4 NumberButton类的UML图3、类设计模块名称NumberButton功能描述负责创建主窗口中的一个“数字”按钮接口与属性String getNumber()Function:返回数字符号 InPut: 无OutPut: 无Return:数字符号NumberButton()Function:是构造方法,创建NumberButton对象InPut: 无OutPut:无Return:空数据结构与算法Linkedlist(String)list 补充说明无4、代码(NumberButton.java)import java.awt.*
37、;import java.awt.event.*;import javax.swing.*;public class NumberButton extends JButton int number; public NumberButton(int number) super("" + number); this.number = number; setForeground(Color.blue); public int getNumber() return number; 3.3 OperationButton类1、效果图OperationButton创建的运算符按钮的效果
38、如图3.5所示。图3.5 OperationButton创建的数字按钮2、UML图OperationButton是Javax.swing包中JButton组件的子类。所创建的对象是CalculatorWindow类中OperationButton型数组:operationButton中的元素。标明OperationButton类的主要成员变量、方法以及和CalculatorWindow类直接的组合关系的UML如图3.6所示。JButtonOperationButtonCalculatorWindowoperationSign:StringOperationButton:OperationBut
39、tonOperationButton(String):无类型getOperation():String图3.6 OperationButton类的UML图3、类设计模块名称OperationButton功能描述创建主窗口中的一个“运算符”按钮接口与属性String getOperationSign()Function:返回操作符号InPut: 无OutPut: 无Return:运算符号OperationButton()Function:是构造方法,创建OperationButton对象InPut: SOutPut:无Return:空数据结构与算法无补充说明无4、代码(OperationButt
40、on.java)import java.awt.*;import java.awt.event.*;import javax.swing.*;public class OperationButton extends JButton String operateSign; public OperationButton(String s) super(s); operateSign = s; setForeground(Color.red); public String getOperateSign() return operateSign; 3.4 HandleDigit类1、效果图Handle
41、Digit类创建的对象无效果图。2、UML图HandleDigit类实现了ActionListener接口,创建的对象handleDigit是CalculatorWindow窗口的成员之一。标明HandleDigit类的主要成员变量、方法以及和CalculatorWindow类之间组合关系的UML图如图3.7所示。ActionListenerHandleDigitCalculatorWindowlist:LinkedList<String>resultShow:JTextFieldshowComputerProcess:JTextFieldhandleDigit:HandleDig
42、itHandleDigit(LinkedList<String>,JTextField,JTextField):无类型actionPerformed(ActionEvent):void图3.7 HandleDigit类的UML图3、类设计模块名称HandleDigit功能描述用户单击“数字”按钮时,负责处理和运算符有关的计算结果接口与属性Void actionPerformed()Function:处理list链表中存储的第一个操作数和第二个操作数InPut: 无OutPut: 无Return:空HandleDigit()Function:是构造方法,创建HandleDigit对象
43、InPut: t1,t2OutPut:无Return:空数据结构与算法Linkedlist(String)list补充说明无4、代码(HandleDigit.java)import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.LinkedList;import javax.swing.JTextField;public class HandleDigit implements ActionListener LinkedList<String> list; JText
44、Field resultShow; JTextField showComputerProcess; HandleDigit(LinkedList<String> list, JTextField t1, JTextField t2) this.list = list; resultShow = t1; showComputerProcess = t2; public void actionPerformed(ActionEvent e) NumberButton b = (NumberButton) e.getSource(); if (list.size() = 0) int n
45、umber = b.getNumber(); list.add("" + number); resultShow.setText("" + number); showComputerProcess.setText("" + list.get(0); else if (list.size() = 1) int number = b.getNumber(); String num = list.getFirst(); String s = num.concat("" + number); list.set(0, s);
46、 resultShow.setText(s); showComputerProcess.setText("" + list.get(0); else if (list.size() = 2) int number = b.getNumber(); list.add("" + number); resultShow.setText("" + number); showComputerProcess.setText("" + list.get(0) + "" + list.get(1) + &quo
47、t;" + list.get(2); else if (list.size() = 3) int number = b.getNumber(); String num = list.getLast(); String s = num.concat("" + number); list.set(2, s); resultShow.setText(s); showComputerProcess.setText("" + list.get(0) + "" + list.get(1) + "" + list.ge
48、t(2); 3.5 HandleOperation类1、效果图HandleOperation类创建的对象无效果图。2、UML图HandleOperation类实现了ActionListener接口,创建的对象handleOperation是CalculatorWindow窗口的成员之一。标明HandleOperation类的主要成员变量、方法以及和CalculatorWindow类之间组合关系的UML图如图3.8所示。ActionListenerHandleOperationCalculatorWindowlist:LinkedList<String>resultShow:JTex
49、tFieldshowComputerProcess:JTextFieldsaveComputerProcess:JTextAreahandleOperation:HandleOperationHandleOperation (LinkedList<String>,JTextField,JTextField,JTextArea):无类型actionPerformed(ActionEvent):void图3.8 HandleOperation类的UML图3、类设计模块名称HandleOperation功能描述用户单击“运算符”按钮时,负责处理和运算符有关的计算结果接口与属性Void a
50、ctionPerformed()Function:处理list链表中存储的运算符和必要的计算 InPut: 无OutPut: 无Return:空HandleOperation()Function:是构造方法,创建HandleOperationt对象InPut: t1,t2,t3OutPut:无Return:空数据结构与算法Linkedlist(String)list补充说明无4、代码(HandleOperation.java)import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.LinkedList;i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 转租写字间合同协议
- 车辆维保合同补充协议
- 运输土方公司合同协议
- 临床护理常识试题及答案
- 2024年无人机考试常见试题及答案大盘点
- 转房协议合同书模板
- 邻村买宅基地合同协议
- 中级审计师历年真题试题及答案汇编
- 2024年航空维修人员执照考试的解决方案及试题及答案编排
- 入团考试2025年全攻略试题及答案
- 2024年初三数学竞赛考试试题
- 2024年医院依法执业培训课件
- 24节气-中国人的时间美学智慧树知到期末考试答案章节答案2024年东北农业大学
- DL∕T 1009-2016 水电厂计算机监控系统运行及维护规程
- 阿里巴巴员工纪律制度
- 人教部编版七(下)语文《爱莲说》练习
- 关于菜鸟驿站转让合同范本
- DL-T1342-2014电气接地工程用材料及连接件
- 学校体育工作条例
- 《征兵入伍应征公民体格检查标准条文释义》
- 水准测量记录表自动计算(转点)
评论
0/150
提交评论