已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA程序设计课程作业 关于计算器的设计说明 电信06XX班 王XX 012006012XXX 郭XX 012006012XXX 陈 X 012006012XXX一 实验目的1、 通过编写计算器程序,以达到熟悉和掌握JAVA的目的。2、 在编程的过程中,提升自己的能力。3、 能够有效的增强团队合作的能力。 二 实验内容 1、编写一个计算器,应该有如图类似的图形用户界面。 2、能够实现普通的加减乘除运算。 3、可以适当的增加一些科学计算器的功能。 三程序设计及源码实现: 程序设计结构: copyItem editItempasteItemtItem mainMenu viewMenu sItem (NORTH)numberGrouptopHelp helpMenuaboutHelp Panel textAnswer (CENTER) textMemory labelMenSpace Panel2 buttonN (NORTH) buttonBk button Ce button CPanel1 (SOUTH) button MC 7 8 9 Div Sqrt button MR 4 5 6 * % Panel3 button MS 1 2 3 - Dao (CENTER) button M+ 0 +/- Dot + +Calculator面板数字按钮触发事件加减乘除按钮触发事件=输出结果事件Sqr,%,+/-,CE,C,Backspace 按钮触发事件MR,MC,MS,M+按钮触发的事件源码如下:import java.awt.*; import java.lang.*; import javax.swing.*; import javax.swing.event.*; import java.awt.event.*; import java.text.DecimalFormat; public class Calculator implements ActionListener /导入动作监听接口 /设计面板中的组件 JFrame frame; JTextField textAnswer; JPanel panel, panel1, panel2, panel3; JMenuBar mainMenu; JTextField textMemory; JLabel labelMemSpace; /labelMemSpace单纯做摆设,控制面板的形状 JButton buttonBk, buttonCe, buttonC; JButton button; JButton buttonMC, buttonMR, buttonMS, buttonMAdd; JButton buttonDot, buttonAddAndSub, buttonAdd, buttonSub, buttonMul, buttonDiv, buttonMod ,buttonN; JButton buttonSqrt, buttonDao, buttonEqual; JMenu editMenu, viewMenu, helpMenu; JMenuItem copyItem, pasteItem, tItem, sItem, numberGroup, topHelp, aboutCal; DecimalFormat df; /设置数据输出精度 boolean clickable; /控制当前能否按键 double memoryd; /使用内存中存储的数字 int memoryi; double vard, answerd; /用来保存double型数据的中间值(vard)和最后结果(answerd) short key = -1, prekey = -1; /key用来保存当前进行何种运算,prekey用来保存前次进行何种运算 String copy; /做复制用 JTextArea help; /帮助 JScrollPane scrollHelp; /构造函数 public Calculator() clickable = true; answerd = 0; frame = new JFrame(计算器); df = new DecimalFormat(0.#); /设置数据输出精度(对于double型值) textAnswer = new JTextField(15); textAnswer.setText( ); textAnswer.setHorizontalAlignment(JTextField.RIGHT); /文本右对齐 textAnswer.setEditable(false); /设置为不可编辑 textAnswer.setBackground(new Color(255, 255,255);/白底色 panel = new JPanel(); frame.setContentPane(panel); / panel1 = new JPanel(); panel2 = new JPanel(); panel.setLayout(new BorderLayout(); /设计整个面板 mainMenu = new JMenuBar(); editMenu = new JMenu(编辑(E); viewMenu = new JMenu(查看(V); helpMenu = new JMenu(帮助(H); copyItem = new JMenuItem( 复制(C) Ctrl+C); copyItem.addActionListener(this); /增加动作事件监听 pasteItem = new JMenuItem( 粘贴(V) Ctrl+V); pasteItem.addActionListener(this); /增加动作事件监听 editMenu.add(copyItem); editMenu.add(pasteItem); tItem = new JMenuItem(标准型(T); tItem.addActionListener(this); /增加动作事件监听 sItem = new JMenuItem( 科学型(S); sItem.addActionListener(this); /增加动作事件监听 numberGroup = new JMenuItem( 数字分组(I); numberGroup.addActionListener(this); /增加动作事件监听 viewMenu.add(tItem); viewMenu.add(sItem); viewMenu.add(numberGroup); topHelp = new JMenuItem( 帮助主题(H); topHelp.addActionListener(this); /增加动作事件监听 help = new JTextArea(5, 20); scrollHelp = new JScrollPane(help); help.setEditable(false); help.append(执行简单计算n); help.append(1. 键入计算的第一个数字。n); help.append(2. 单击“+”执行加、“-”执行减、“*”执行乘或“/”执行除。n); help.append(3. 键入计算的下一个数字。n); help.append(4. 输入所有剩余的运算符和数字。n); help.append(5. 单击“=”。n); aboutCal = new JMenuItem( 关于计算器(A); aboutCal.addActionListener(this); helpMenu.add(topHelp); helpMenu.add(aboutCal); mainMenu.add(editMenu); mainMenu.add(viewMenu); mainMenu.add(helpMenu); panel.add(mainMenu, BorderLayout.NORTH); /利用布局管理器来布局面板,菜单在最上面 panel.add(textAnswer, BorderLayout.CENTER); panel.add(panel1, BorderLayout.SOUTH); panel1.setLayout(new BorderLayout(); textMemory = new JTextField(3); textMemory.setEditable(false); textMemory.setBackground(new Color(217, 217, 217); labelMemSpace = new JLabel( ); buttonBk = new JButton(Backspace); buttonBk.setForeground(new Color(255, 0, 0); buttonCe = new JButton(CE); buttonCe.setForeground(new Color(255, 0, 0); buttonC = new JButton(C); buttonC.setForeground(new Color(255, 0, 0); buttonN = new JButton(n!); buttonN.setForeground(new Color(255, 0, 0); buttonBk.addActionListener(this); /增加动作事件监听 buttonCe.addActionListener(this); buttonC.addActionListener(this); buttonN.addActionListener(this); panel1.add(panel2, BorderLayout.NORTH); panel2.setLayout(new FlowLayout(FlowLayout.RIGHT);/右对齐 panel2.add(textMemory); panel2.add(labelMemSpace); panel2.add(buttonN); panel2.add(buttonBk); panel2.add(buttonCe); panel2.add(buttonC); panel3 = new JPanel(); panel1.add(panel3, BorderLayout.CENTER); button = new JButton10; /数字键 for (int i = 0; i button.length; i+) buttoni = new JButton(Integer.toString(i); /数字按钮命名 buttoni.setForeground(new Color(0, 0, 255); /颜色为蓝色 buttonMC = new JButton(MC); buttonMC.setForeground(new Color(255, 0, 0); buttonMR = new JButton(MR); buttonMR.setForeground(new Color(255, 0, 0); buttonMS = new JButton(MS); buttonMS.setForeground(new Color(255, 0, 0); buttonMAdd = new JButton(M+); buttonMAdd.setForeground(new Color(255, 0, 0); buttonDot = new JButton(.); buttonDot.setForeground(new Color(0, 0, 255); buttonAddAndSub = new JButton(+/-); buttonAddAndSub.setForeground(new Color(0, 0, 255); buttonAdd = new JButton(+); buttonAdd.setForeground(new Color(255, 0, 0); buttonSub = new JButton(-); buttonSub.setForeground(new Color(255, 0, 0); buttonMul = new JButton(*); buttonMul.setForeground(new Color(255, 0, 0); buttonDiv = new JButton(/); buttonDiv.setForeground(new Color(255, 0, 0); buttonMod = new JButton(%); buttonMod.setForeground(new Color(0, 0, 255); buttonSqrt = new JButton(sqrt); buttonSqrt.setForeground(new Color(0, 0, 255); buttonDao = new JButton(1/x); buttonDao.setForeground(new Color(0, 0, 255); buttonEqual = new JButton(=); buttonEqual.setForeground(new Color(255, 0, 0); /将所有行为与监听绑定 panel3.setLayout(new GridLayout(4, 6,5,5);/对panel3进行布局分为4行6列 panel3.add(buttonMC); buttonMC.addActionListener(this); panel3.add(button7); button7.addActionListener(this); panel3.add(button8); button8.addActionListener(this); panel3.add(button9); button9.addActionListener(this); panel3.add(buttonDiv); buttonDiv.addActionListener(this); panel3.add(buttonSqrt); buttonSqrt.addActionListener(this); panel3.add(buttonMR); buttonMR.addActionListener(this); panel3.add(button4); button4.addActionListener(this); panel3.add(button5); button5.addActionListener(this); panel3.add(button6); button6.addActionListener(this); panel3.add(buttonMul); buttonMul.addActionListener(this); panel3.add(buttonMod); buttonMod.addActionListener(this); panel3.add(buttonMS); buttonMS.addActionListener(this); panel3.add(button1); button1.addActionListener(this); panel3.add(button2); button2.addActionListener(this); panel3.add(button3); button3.addActionListener(this); panel3.add(buttonSub); buttonSub.addActionListener(this); panel3.add(buttonDao); buttonDao.addActionListener(this); panel3.add(buttonMAdd); buttonMAdd.addActionListener(this); panel3.add(button0); button0.addActionListener(this); panel3.add(buttonAddAndSub); buttonAddAndSub.addActionListener(this); panel3.add(buttonDot); buttonDot.addActionListener(this); panel3.add(buttonAdd); buttonAdd.addActionListener(this); panel3.add(buttonEqual); buttonEqual.addActionListener(this); frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); frame.pack(); frame.show(); /设置各个按钮行为 public void actionPerformed(ActionEvent event) / boolean sign = false; /判断是否是double型数参与运算,是为true,不是为false Object temp = event.getSource(); /temp 为事件源 try /如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后 for (int i = 0; i = 9; i+) if (temp = buttoni & clickable = true) if (prekey=5)/若上次为=号则先要清空屏幕,重新开始计算 textAnswer.setText( ); prekey=-1;/prekey复位 textAnswer.setText(textAnswer.getText() + Integer.toString(i); /将键入的数字存放在textAnswer中 /按下.按钮时,判断当前文本框内字符串中含不含.,如果已含,则不允许再插入. if (temp = buttonDot & clickable = true) boolean isDot = false; if (textAnswer.getText().length() = 0) isDot = true; /没有数字时可以键入小数点,键入后isDot设为true for (int i = 0; i textAnswer.getText().length(); i+) if (. = textAnswer.getText().charAt(i) /查找已输入部分有无小数点 isDot = true; break; /找到后跳出循环 if (isDot = false) /没有.则允许插入. textAnswer.setText(textAnswer.getText() + .); if ( (temp = buttonAdd | temp = buttonSub | temp = buttonMul |temp = buttonDiv) & clickable = true) /为+操作的情况 if (temp = buttonAdd) switch (prekey) case 0: /0为加,1为减法,2为乘法,3为除法 answerd += Double.parseDouble(textAnswer.getText(); break; case 1: answerd -= Double.parseDouble(textAnswer.getText(); break; case 2: answerd *= Double.parseDouble(textAnswer.getText(); break; case 3: if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText(error除数不能为零); /判断除数是否为零 clickable = false; /此时也不能再输入了 else answerd /= Double.parseDouble(textAnswer.getText(); break; default: answerd = Double.parseDouble(textAnswer.getText(); textAnswer.setText(); prekey = key = 0; /key为上一次加减乘除的符号 /为-时操作 if (temp = buttonSub) switch (prekey) case 0: answerd += Double.parseDouble(textAnswer.getText(); break; case 1: answerd -= Double.parseDouble(textAnswer.getText(); break; case 2: answerd *= Double.parseDouble(textAnswer.getText(); break; case 3: if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText(除数不能为零); clickable = false; else answerd /= Double.parseDouble(textAnswer.getText(); break; default: answerd = Double.parseDouble(textAnswer.getText(); textAnswer.setText(); prekey = key = 1; /为*操作时 if (temp = buttonMul) switch (prekey) case 0: answerd += Double.parseDouble(textAnswer.getText(); break; case 1: answerd -= Double.parseDouble(textAnswer.getText(); break; case 2: answerd *= Double.parseDouble(textAnswer.getText(); break; case 3: if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText(除数不能为零); clickable = false; else answerd /= Double.parseDouble(textAnswer.getText(); break; default: answerd = Double.parseDouble(textAnswer.getText(); textAnswer.setText(); prekey = key = 2; /为/操作时 if (temp = buttonDiv) switch (prekey) case 0: answerd += Double.parseDouble(textAnswer.getText(); break; case 1: answerd -= Double.parseDouble(textAnswer.getText(); break; case 2: answerd *= Double.parseDouble(textAnswer.getText(); break; case 3: if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText(除数不能为零); clickable = false; else answerd /= Double.parseDouble(textAnswer.getText(); break; default: answerd = Double.parseDouble(textAnswer.getText(); textAnswer.setText(); prekey = key = 3; /当输入=操作时 if (temp = buttonEqual & clickable = true) /如果连续按=,则进行连续运算 if (prekey = 5) if (key = 0)/最后一次是加法计算,所以连续加 answerd += vard; textAnswer.setText(df.format(answerd); if (key = 1) answerd -= vard; textAnswer.setText(df.format(answerd); if (key = 2) answerd *= vard; textAnswer.setText(df.format(answerd); if (key = 3) if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText(除数不能为零); clickable = false; /禁用键盘 else answerd /= vard; textAnswer.setText(df.format(answerd); else vard = Double.parseDouble(textAnswer.getText();/vard为最后一次输入的数 if (key = 0) answerd += Double.parseDouble(textAnswer.getText();/ 计算结果 textAnswer.setText(df.format(answerd); /answerd格式化 if (key = 1) ans
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2.1区域发展的自然环境基础课件高中地理人教版选择性必修2
- 2026年医学基础-解剖学题库(得分题)附参考答案详解(培优B卷)
- 2026年心理治疗通关模拟卷带答案详解(轻巧夺冠)
- 2026年混凝土技术人员每日一练试卷带答案详解(轻巧夺冠)
- 2026年公用设备工程师之专业基础知识(暖通空调+动力)试题(得分题)附答案详解(基础题)
- 2026年注册岩土工程师题库检测试题附参考答案详解(培优A卷)
- 【低空经济】低空经济与智慧高速融合发展方案
- 2026年原创课件幼儿园
- 2026年幼儿园微课程交流
- 2026年幼儿园护齿知识
- 2025房屋买卖合同范本(下载)
- 2025年哈尔滨工业大学管理服务岗位招聘考试笔试试题(含答案)
- (2025年标准)山地开路协议书
- 2025年陕西高中学业水平合格性考试化学试卷真题(含答案)
- DB23∕T 3082-2022 黑龙江省城镇道路设计规程
- 江苏棋牌室管理暂行办法
- 聚合工艺作业培训课件
- 酒店安全设施维护规定
- 2024年中国烟草总公司江西省公司考试真题试卷及答案
- 单位见习人员管理制度
- T/GXAS 830-2024经桡动脉穿刺介入诊疗患者术肢管理规范
评论
0/150
提交评论