版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、简易计算器总结1、计算器设计背景日常生活中我们经常会遇到一些小型数据计算的问题,本课程就是以此为出发点,设计了这样一个简单的计算器,用以实现基本的数学运算。在java语言当中通过定义类,类中的各种方法实现对计算器相关功能的实现,并通过与用户自己手动输入并选择运算功能实现计算功能,是一个完全由用户控制的简易计算器。 2、需求环境硬件要求:一台计算机。软件配置:WINDOWS系统、JDK 1.7、myeclipse 3、 计算器设计思路计算器最主要的就是实用性,要简单,便于操作。程序界面是一个窗口的形式展现并由用户自己完全手动控制。并以设计的要求为基础,在实现课程设计
2、所给的功能以外,要对界面的美观进行了优化,看起来更人性化。4、计算器实现代码package com.cqeec.sc;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.GridLayout;import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.
3、KeyEvent;import javax.swing.BorderFactory;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;import jav
4、ax.swing.border.BevelBorder;public class Calculator extends JFrame private static final long serialVersionUID = 1L;/ 定义一级菜单名称private final String ONE_MENU_NAME = "编辑(E)", "查看(V)", "帮助(H)" ;/ 定义一级菜单的热键private final int ONE_MENU_MNEMONIC = KeyEvent.VK_E, KeyEvent.VK_V,Key
5、Event.VK_H ;/ 定义菜单private JMenu oneMenu;/ 定义显示器private JTextField display;/ 定义左边面板MC、MR、MS、M+操作按钮标签private static final String BUTTON_MX_NAME = "MC", "MR", "MS", "M+" ;/ 定义左边面板MC、MR、MS、M+操作按钮private JButton buttonMX;/ 定义清除系列按钮标签private static final String BUTT
6、ON_CLEAR_NAME = "Backspace", "CE", "C" ;/ 定义清除系统按钮private JButton buttonClear;/ 定义数字,运算符,功能等按钮private static final String BUTTON_AN_NAME = "1/x", "log", "7", "8","9", "÷", "n!", "sqrt",
7、 "4", "5", "6", "×", "sin", "x2", "1", "2","3", "-", "cos", "x3", "0", "±", ".", "+", "tan", "%", ""
8、, "e","' "", "=" ;private JButton buttonAN;/ M的值private double m;/ 计算器标签,同时也用于显示M变量的值private JLabel labelCalculator;/ 结果private double result;/ 标志量,true表示开始新的输入,false表示不是private boolean isStratNewInput;/ 保存运算符private String operator = "="public Calcul
9、ator() / 创建窗体this.setFrame();/ 创建菜单this.createMenu();private void setFrame() / 设置窗体标题this.setTitle("计算器");/ 改变大小this.setSize(500, 400);/ 使窗体居于屏幕中间this.setLocationRelativeTo(null);/ 设置窗体的默认关闭操作this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/ 让窗体不能改变大小this.setResizable(false);/ 更改窗体的图标t
10、his.setIconImage(new ImageIcon("images/jisuanqi.jpg").getImage();private void createMenu() JMenuBar menuBar = new JMenuBar();/ 创建菜单oneMenu = new JMenuONE_MENU_NAME.length;/ 通过循环将一级菜单创建出来并添加到菜单栏for (int i = 0; i < ONE_MENU_NAME.length; i+) / 创建一级菜单并保存到数组oneMenui = new JMenu(ONE_MENU_NAME
11、i);/ 设置一级菜单栏热键oneMenui.setMnemonic(ONE_MENU_MNEMONICi);/ 将一级菜单添加到菜单栏menuBar.add(oneMenui);/ 将菜单栏添加到窗体this.setJMenuBar(menuBar);/ 获取窗体的内容面板的布局管理器BorderLayout layout = (BorderLayout) this.getContentPane().getLayout();/ 设置垂直间距layout.setVgap(5);/ 创建显示器display = new JTextField("0");/ 右对齐display
12、.setHorizontalAlignment(JTextField.RIGHT);/ 设置字体大小display.setFont(new Font("", Font.ITALIC, 38);/ 设置禁用显示器display.setEnabled(false);/ 设置显示器与文本距离display.setMargin(new Insets(5, 0, 5, 5);/ 设置显示器位置this.add(display, BorderLayout.NORTH);/ 创建左边面板JPanel leftPanel = new JPanel(new GridLayout(5, 1,
13、0, 5);/ 设置面板的宽度leftPanel.setPreferredSize(new Dimension(80, 80);/ 创建计算器标签labelCalculator = new JLabel("计算器");/ 设置标签文字居中对齐labelCalculator.setHorizontalAlignment(JLabel.CENTER);/ 设置计算器标签凹下去的效果labelCalculator.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED);/ 将计算器面板添加到左面板上leftPa
14、nel.add(labelCalculator);MAction mAction = new MAction();/ 创建M系列按钮/ 分配M系列按钮数组大小buttonMX = new JButtonBUTTON_MX_NAME.length;/ 循环创建M系列按钮for (int n = 0; n < BUTTON_MX_NAME.length; n+) / 创建按钮并存入数组中buttonMXn = new JButton(BUTTON_MX_NAMEn);/ 设置按钮不要焦点框buttonMXn.setFocusable(false);/ 设置按钮前景色buttonMXn.set
15、Foreground(Color.red);/ 设置按钮动作命令buttonMXn.setActionCommand(BUTTON_MX_NAMEn);buttonMXn.addActionListener(mAction);/ 添加按钮动作监听buttonMXn.addActionListener(mAction);if (n = 0 | n = 1) buttonMXn.setEnabled(false);/ 将按钮添加到左面板上leftPanel.add(buttonMXn);/ 将左面板添加到窗体的左边this.add(leftPanel, BorderLayout.WEST);/ 定
16、义右面板JPanel rightPanel = new JPanel(new BorderLayout(0, 5);/ 定义Backspace、CE、C按钮Clear clearProcess = new Clear();JPanel topPanel = new JPanel(new GridLayout(1, 3, 6, 0);topPanel.setPreferredSize(new Dimension(0, 40);buttonClear = new JButtonBUTTON_CLEAR_NAME.length;for (int i = 0; i < BUTTON_CLEAR_
17、NAME.length; i+) buttonCleari = new JButton(BUTTON_CLEAR_NAMEi);buttonCleari.setFocusable(false);buttonCleari.setForeground(Color.BLACK);buttonCleari.setActionCommand(BUTTON_CLEAR_NAMEi);buttonCleari.addActionListener(clearProcess);topPanel.add(buttonCleari);/ 将Backspace、CE、C按钮面板放到右面板北边rightPanel.ad
18、d(topPanel, BorderLayout.NORTH);/ 定义数字按钮事件处理程序类对象NumAction numAction = new NumAction();SignAction signAction = new SignAction();/ 定义数字、运算符、功能等按钮JPanel bottomPanel = new JPanel(new GridLayout(5, 6, 8, 8);buttonAN = new JButtonBUTTON_AN_NAME.length;for (int i = 0; i < BUTTON_AN_NAME.length; i+) but
19、tonANi = new JButton(BUTTON_AN_NAMEi);buttonANi.setFocusable(false);/ 设置按钮动作命令buttonANi.setActionCommand(BUTTON_AN_NAMEi);/ 为数字按钮添加监听if ("0123456789±".contains(BUTTON_AN_NAMEi) buttonANi.addActionListener(numAction);if (".".equals(BUTTON_AN_NAMEi) buttonANi.addActionListener
20、(new DotAction();/ 定义按钮文字颜色if ("÷×-+=".indexOf(BUTTON_AN_NAMEi) >= 0) buttonANi.setForeground(Color.RED);buttonANi.addActionListener(signAction); else if ("e' "".indexOf(BUTTON_AN_NAMEi) >= 0) buttonANi.setForeground(Color.YELLOW);buttonANi.addActionListe
21、ner(signAction); else if ("0123456789±.".indexOf(BUTTON_AN_NAMEi) >= 0) buttonANi.setForeground(Color.BLUE);buttonANi.setActionCommand(BUTTON_AN_NAMEi);buttonANi.addActionListener(signAction); else buttonANi.setForeground(Color.MAGENTA);buttonANi.setActionCommand(BUTTON_AN_NAMEi);b
22、uttonANi.addActionListener(signAction);bottomPanel.add(buttonANi);/ 将数字、运算符、功能等按钮面板放到右面板的中间rightPanel.add(bottomPanel, BorderLayout.CENTER);/ 将右面板添加到窗体this.add(rightPanel, BorderLayout.CENTER);/ 显示窗体this.setVisible(true);/* * 数字、±(正负号)按钮事件处理程序类 */class NumAction implements ActionListener public
23、 void actionPerformed(ActionEvent e) / 获取事件源对象传过来的动作命令String cmd = e.getActionCommand();if (isStratNewInput) display.setText("");isStratNewInput = false;if ("±".equals(cmd) / 正负号if ("0".equals(display.getText() display.setText("-"); else double num;String
24、 strNum = display.getText();if (strNum.contains(".") num = Double.parseDouble(strNum) * -1;strNum = String.valueOf(num); else num = Double.parseDouble(strNum) * -1;strNum = String.valueOf(num);if (strNum.contains("E") else strNum = strNum.substring(0, strNum.length() - 2);display
25、.setText(strNum); else / 数字if ("0".equals(display.getText() display.setText("");display.setText(display.getText() + cmd);/* * 小数点按钮事件处理程序 */class DotAction implements ActionListener public void actionPerformed(ActionEvent e) if (!display.getText().contains(".") display.
26、setText(display.getText() + ".");/* * Backspace、CE、C按钮事件处理程序类 */class Clear implements ActionListener public void actionPerformed(ActionEvent e) String cmd = e.getActionCommand();if ("Backspace".equals(cmd) / 删除一个String strNum = display.getText();if (strNum.length() = 0 | "0
27、".equals(strNum) strNum = "0" else strNum = strNum.substring(0, strNum.length() - 1);strNum = "".equals(strNum) ? "0" : strNum;display.setText(strNum); else if ("CE".equals(cmd) / 清除显示器上的数字,显示零display.setText("0"); else if ("C".equals(
28、cmd) / 清除M存储的值和显示器上的数字,显示零display.setText("0");labelCalculator.setText("计算器");m = 0;result = 0;isStratNewInput = false;/* * MC、MR、MS、M+按钮事件处理程序类 */class MAction implements ActionListener public void actionPerformed(ActionEvent e) String cmd = e.getActionCommand();if ("MC&quo
29、t;.equals(cmd) labelCalculator.setText("计算器");m = 0;buttonMX0.setEnabled(false);buttonMX1.setEnabled(false); else if ("MR".equals(cmd) String strM = String.valueOf(m);if (strM.charAt(strM.length() - 1) = '0') strM = strM.substring(0, strM.length() - 2);display.setText(str
30、M); else if ("MS".equals(cmd) String strNum = display.getText();m = Double.parseDouble(strNum);strNum = String.valueOf(m);if (strNum.charAt(strNum.length() - 1) = '0') strNum = strNum.substring(0, strNum.length() - 2);labelCalculator.setText(String.valueOf(m);buttonMX0.setEnabled(t
31、rue);buttonMX1.setEnabled(true); else if ("M+".equals(cmd) m = m + m;labelCalculator.setText(String.valueOf(m);buttonMX0.setEnabled(true);buttonMX1.setEnabled(true);class SignAction implements ActionListener public void actionPerformed(ActionEvent e) String cmd = e.getActionCommand();doubl
32、e num = Double.parseDouble(display.getText();if ("1/x".equals(cmd) if (num = 0) / 弹出提示JOptionPane.showMessageDialog(null,"<html>分母<span style="color:red;">不能</span>为零!</html>","错误", JOptionPane.ERROR_MESSAGE); else display.setText(Strin
33、g.valueOf(1 / num); else if ("log".equals(cmd) if (num <= 0) / 弹出提示JOptionPane.showMessageDialog(null, "输入的指数必须大于零", "错误",JOptionPane.ERROR_MESSAGE); else display.setText(String.valueOf(Math.log(num); else if ("n!".equals(cmd) if (num < 0) JOptionPane.sh
34、owMessageDialog(null, "计算阶乘的数不能小于零", "错误",JOptionPane.ERROR_MESSAGE); else double s = 1;for (int i = 1; i < num; i+) s *= i;display.setText(String.valueOf(s); else if ("sqrt".equals(cmd) if (num <= 0) / 弹出提示JOptionPane.showMessageDialog(null, "输入的数必须大于零"
35、, "错误",JOptionPane.ERROR_MESSAGE); else display.setText(String.valueOf(Math.sqrt(num); else if ("sin".equals(cmd) display.setText(String.valueOf(Math.sin(num); else if ("x2".equals(cmd) display.setText(String.valueOf(Math.pow(num, 2); else if ("cos".equals(cmd
36、) display.setText(String.valueOf(Math.cos(num); else if ("x3".equals(cmd) display.setText(String.valueOf(Math.pow(num, 3); else if ("tan".equals(cmd) display.setText(String.valueOf(Math.tan(num); else if ("%".equals(cmd) num = num / 100;display.setText(String.valueOf(nu
37、m); else if ("".equals(cmd) display.setText(String.valueOf(Math.PI); else if ("e".equals(cmd) String strNum = display.getText();if (strNum.contains(".") String strZS;/ 小数strNum = String.valueOf(Double.parseDouble(strNum);if (strNum.contains("E") display.setTex
38、t(strNum.replace('E', 'e'); else / 取整数部分strZS = strNum.substring(0, strNum.indexOf(".");/ 判断小数的整数部分长度是否大于1strZS = String.valueOf(Math.abs(Long.parseLong(strZS);if (strZS.length() > 1) / 左移小数点strZS = strZS.substring(0, 1)+ "."+ strZS.substring(1, strZS.length()+
39、 strNum.substring(strNum.indexOf(".") + 1,strNum.length() + "e+"+ (strZS.length() - 1);if (strNum.contains("-") strZS = "-" + strZS;display.setText(strZS); else if ("0".equals(strZS) | "-0".equals(strZS) / 取出小数部分String strXS = strNum.substr
40、ing(strNum.indexOf(".") + 1,strNum.length();/ 统计小数点后零的个数+1(次方数)int count = 0;for (int i = 0; strXS.charAt(i) = '0' i+) count+;count = count + 1;/ 取出底数strXS = String.valueOf(Long.parseLong(strXS);strXS = strXS.substring(0, 1) + "."+ strXS.substring(1, strXS.length();/ 连接strNum = strXS + "e-" + count; else / 不动strNum = strNum + "e+0"display.setText(strNum); else / 不是小数double ds;if (strNum.contains("-") ds = Double.pa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 亲子爬山活动策划方案(3篇)
- 区块链医疗数据共享平台的技术架构与实现
- 康复护理中的康复预后判断
- 妇产科护理绩效考核
- 动态监测表面活性蛋白D对AECOPD肺损伤评估
- 剂量优化实验设计
- 创新生物材料试验中知情同意的沟通策略
- 创伤救治MDT团队协作效率提升
- 口腔颌面外科患者护理实践指南(2025年版)
- 压疮护理团队建设图
- 2026年黑龙江农业工程职业学院单招职业倾向性测试题库附答案解析
- 2026年设计师雇佣合同协议书
- 植保无人机培训课件
- 2026年AR辅助医疗手术报告及医疗科技前沿报告
- 南京城市介绍
- 2025年河北邯郸市永年区公开招聘医院人事代理人员112名笔试参考试题附答案解析
- 2025年餐饮产业链配套服务模式研究报告
- IBD肠道黏膜免疫稳态维持策略
- 食品安全五要素培训课件
- 国企职务犯罪培训课件
- 发改委审批办公室课件
评论
0/150
提交评论