java计算器说明书
- 格式:docx
- 大小:363.91 KB
- 文档页数:31
Java程序设计说明书设计题目:Java计算器学生姓名:指导教师:专业名称:计算机科学与技术所在院系:目录摘要2第1章计算器概述1.1设计目的 4 1.2功能模块设计 4 1.3系统功能图 4设计实现的详细步骤2.2.1 计算器界面72.2.2 界面设计代码7 2.3程序运行效果9 第3章设计中遇到的重点及难点 (13)3.1 设计中的重点 (13)3.2 设计中的难点 (13)3.2.1 设计难点1:布局 (13)3.2.2 设计难点2:代码 (13)3.2.3设计难点3:运行结果 (14)3.3 本章总结 (14)第4章本次设计中存在不足与改良方案 (15)4.1设计不足 (15)4.2改良方案 (15)4.3本章总结 (18)结论 (19)参考文献 (20)JAVA课程设计说明书摘要一、计算器概述1、1设计计算器的目的:该计算器是由Java语言编写的,可以进行十进制下的四则运算(加、减、乘、除)、开平方、百分号、求倒数,还可以实现其他按钮的功能。
添加了一个编辑、查看、帮助的主菜单并能实现其功能。
Backspace 表示逐个删除,CE 表示全部清除,C 表示一次运算完成后,单击“C”按钮即可清除当前的运算结果,再次输入时可开始新的运算,MC 表示清除储存数据,MR 表示读取储存的数据,MS 表示将所显示的数存入存储器中,存储器中原有的数据被冲走,M+ 表示计算结果并加上已经储存的数。
界面类似Windows 自带的计算器。
该计算器围绕Java编程语言在编程方面的具体应用,论述了使用面向对象方法,对计算器程序进行需求分析、概要设计、详细设计,最后使用Java编程实现的全过程。
在编程使用Java语言,是目前比较流行的编程语言。
在当今这个网络的时代,java语言在网络编程方面的优势使得网络编程有了更好的选择。
Java语言最大的特点是具有跨平台性,使其不受平台不同的影响,得到了广泛的应用。
关键词:Java语言、标准、计算器第1章标准计算器概述1.1设计目的1)复习、巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握;2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。
import java.awt.*;import java.awt.event.*;import javax.swing.*;public class jisuanqi extends JFrame implements ActionListener,ItemListener{JTextField text;JTextField textMemory;boolean clickable;double memoryd; //使用内存中存储的数字int memoryi;String copy;public jisuanqi(){super("计算器");setSize(357,253);}public void init(){clickable = true;//添加菜单栏MenuBar myB=new MenuBar();setMenuBar(myB);Menu m1=new Menu("编辑(E)");MenuItem m11= new MenuItem("复制(C) Ctrl+C");m11.addActionListener(this);m1.add(m11);MenuItem m12=new MenuItem("粘贴(P) Ctrl+V");m12.addActionListener(this);m1.add(m12);myB.add(m1);Menu m2=new Menu("查看(V)");m2.add(new MenuItem("标准型(T)"));m2.add(new MenuItem("科学型(S)"));m2.addSeparator();m2.add(new MenuItem("数字分组(I)"));m2.addActionListener(this);myB.add(m2);Menu m3=new Menu("帮助(H)");MenuItem m31=new MenuItem("帮助主题(H)");m31.addActionListener(this);m3.add(m31);m3.addSeparator();MenuItem m32=new MenuItem("关于计算器(A)");m32.addActionListener(this);m3.add(m32);myB.add(m3);//////////JPanel pa1=new JPanel();pa1.setBackground(new Color(236,231,210));text=new JTextField("0.",31);pa1.add("North",text);//面板添加和按钮的设置JPanel pa=new JPanel();JPanel pa2=new JPanel();JButton bt1=new JButton("Backspace");JButton bt2=new JButton("CE");JButton bt3=new JButton("C");bt1.addActionListener(this);bt2.addActionListener(this);bt3.addActionListener(this);pa2.add(bt1);pa2.add(bt2);pa2.add(bt3);pa.setLayout(new BorderLayout());pa.add(pa2,"North");JPanel p1=new JPanel();p1.setLayout(new GridLayout(4,1,2,5));JButton bt4=new JButton("MC");JButton bt5=new JButton("MR");JButton bt6=new JButton("MS");JButton bt7=new JButton("M+");p1.add(bt4);p1.add(bt5);p1.add(bt6);p1.add(bt7);pa.add(p1,"West");JPanel p = new JPanel();p.setLayout(new GridLayout(4, 5,2,5));String buttons[] = {"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0" ,".","=","+","+/-"};JButton btn[]=new JButton[buttons.length];for (int i = 0; i < buttons.length; i++){addButton(p, buttons[i]);pa.add(p, "Center");}pa1.add("South",pa);this.getContentPane().add(pa1);}private void addButton(Container c, String s){ JButton b = new JButton(s);c.add(b);b.addActionListener(this);}//功能的实现public void actionPerformed(ActionEvent evt){String s = evt.getActionCommand();if(s.equals("CE")||s.equals("C")){text.setText("");}////////////////////else if(s.equals("+/-"))//单击"+/-"选择输入的运算数是正数还是负数{ double x;x=Double.parseDouble(text.getText().trim());text.setText(""+(-x));}elseif (s == "sqrt") {String s1 = text.getText();if (s1.charAt(0) == '-'&& clickable == true) {text.setText("负数不能开根号");clickable = false;}elsetext.setText(Double.toString(ng.Math.sqrt(Double. parseDouble(text.getText()))));}else if(s.equals("%"))//单击了"%"按钮{ double x;x=Double.parseDouble(text.getText().trim());text.setText(""+(0.01*x));// str.setLength(0);//y=0d;}else if(s.equals("1/x"))//单击了"1/X"按钮{ double x;x=Double.parseDouble(text.getText().trim());if(x==0){text.setText("除数不能为零");}else{text.setText(""+(1/x));}//按下'+/-'按钮时处理if (s== "+/-" && clickable == true) {boolean isNumber = true;String s1 = text.getText();for (int i = 0; i < s.length(); i++)if (! (s1.charAt(i) >= '0' && s1.charAt(i) <= '9' || s1.charAt(i) == '.' ||s1.charAt(i) == '-')) {isNumber = false;break;}if (isNumber == true) {//如果当前字符串首字母有'-'号,代表现在是个负数,再按下时,则将首符号去掉if (s.charAt(0) == '-') {text.setText("");for (int i = 1; i < s1.length(); i++) {char a = s1.charAt(i);text.setText(text.getText() + a);}}//如果当前字符串第一个字符不是符号,则添加一个符号在首字母处 elsetext.setText('-' + s);}}//计算器有关内存操作//'MC'的操作,将内存清0elseif (s == "MC" && clickable == true) {memoryd = memoryi = 0;textMemory.setText("");}//'MS'的操作,将当前文本框内容保存入内存,显示'M'elseif (s == "MS" && clickable == true) {boolean isDot = false;textMemory.setText(" M");for (int i = 0; i < text.getText().length(); i++)if ('.' == text.getText().charAt(i)) {isDot = true;break;}//如果是double,则存入memoryd(double存储器)if (isDot == true) {memoryd = Double.parseDouble(text.getText());memoryi = 0; //保证存储器中存放最新的值}//如果是int,则存入memoryi(int存储器)else {memoryi = Integer.parseInt(text.getText());memoryd = 0; //保证存储器中存放最新的值}}//'MR'的操作,将存储器中的信息输出elseif (s == "MR" && clickable == true) {if (memoryd != 0)text.setText(Double.toString(memoryd));if (memoryi != 0)text.setText(Integer.toString(memoryi));}//'M+'的功能,将当前文本框里的数据和存储器中数据相加后,再存入存储器elseif (s == "M+" && clickable == true) {boolean isDot = false;for (int i = 0; i < text.getText().length(); i++)if ('.' == text.getText().charAt(i)) {isDot = true;break;}if (memoryi != 0) { //存储中是一个int型数if (isDot == false) //被加数是一个int型数memoryi += Integer.parseInt(text.getText());else { //被加数是一个double型数,则将int存储器中数传入double存储器与当前数相加,int存储器清零memoryd = memoryi + Double.parseDouble(text.getText()); memoryi = 0;}elsememoryd += Double.parseDouble(text.getText());}}//按下'复制'菜单栏elseif (s.equals("复制(C) Ctrl+C")) {copy = text.getText();}//按下'粘贴'菜单栏elseif (s .equals("粘贴(P) Ctrl+V") ) {text.setText(copy);}//按下'Backspace'键,利用循环将当前字符串中的最后一个字母删除 elseif (s.equals("Backspace") && clickable == true) {String s1 = text.getText();text.setText("");for (int i = 0; i < s1.length() - 1; i++) {char a = s1.charAt(i);text.setText(text.getText() + a);}}/* //按下'帮助主题'菜单栏if (s == "帮助主题(H)") {JOptionPane.showMessageDialog(panel, scrollHelp);}*////////////elseif ('0' <= s.charAt(0) && s.charAt(0) <= '9' || s.equals(".")) { // text.setText("");if (start)text.setText(s);else text.setText(text.getText() + s);start = false;}else{ if (start){ if (s.equals("-")){ text.setText(s); start = false; }else op = s;else{double x=Double.parseDouble(text.getText()); calculate(x);op = s;start = true;}}}public void calculate(double n){ if (op.equals("+")) arg += n;else if (op.equals("-")) arg -= n;else if (op.equals("*")) arg *= n;else if (op.equals("/")) arg /= n;else if (op.equals("=")) arg = n;text.setText("" + arg);}private double arg = 0;private String op = "=";private boolean start = true;///////public void itemStateChanged(ItemEvent e) {}public static void main(String args[]){JFrame frame=new JFrame();jisuanqi myMenu=new jisuanqi();myMenu.init();myMenu.setVisible(true);frame.show();}}。
目录:摘要..............................................................................3. 实训题目 (3)实验环境 (3)进度安排 (3)设计步骤 (3)设计功能模块图 (3)布局界面 (4)按键功能 (5)数字按钮的实现 (5)操作符的实现 (5)记忆功能按钮的实现 (6)撤销清除按钮的实现 (6)小数点的优化 (7)测试 (7)功能完善 (11)实验心得 (12)参考文献 (12)摘要:本计算器可以进行十进制下的四则运算(加、减、乘、除)、开根号、百分号、求倒数,还可以实现数值的符号转换及计算器有关内存操作。
Backspace表示退格, CE表示将当前文本框内数据清除,C表示文本框内数据清除,同时var,answer清0。
此外还提供了“编辑”、“帮助”两个菜单项,使用者可通过使用菜单项实现某些功能。
一、实验题目计算器二、实验环境:中金B601机房三、进度安排四、设计步骤1、设计功能模块图:2、布局界面1)、利用Java GUI 布局,使用其中的Swing 和AWT;Awt是Java提供的用来建立和设置Java的图形用户界面的基本工具。
AWT由Java中的java.awt包提供,里面包含了许多可用来建立与平台无关的图形用户界面(GUI)的类,这些类又被称为组件。
Swing用来创建图形界面。
导入Swing;如:import javax.swing.JButton;设计窗体,窗体名称Calculator2继承ActionListener接口。
JFrame frame // JFrame是带有标题和边框的顶层窗口。
可以使用frame = new JFrame("计算器")设置计算器的标题栏;JTextField textAnswer; //JTextField是一个轻量级组件,它允许编辑单行文本。
程序中使用textAnswer = new JTextField(15);textAnswer.setText("");textAnswer.setEditable(false);textAnswer.setBackground(new Color(255, 255, 255))设置输入框的属性。
基本思想:建立窗口时,我后面才想到把所有的组件先放到Container容器中。
我先把计算器分解成,菜单栏,输入区,按钮区,分别对三个函数实现相应的操作,最后在计算器构造函数调用绑定到窗口。
我创建了计算符操作按钮、非计算操作按钮、菜单监听器,三个监听器来实现菜单和按钮监听。
对于各组件我采用GridBagLayout可变布局,再GridBagConstraints对布局组件布局设置。
JTextField输入区全局定义为了方便按钮的输入。
创建一个按钮函数,有利于添加的按钮布局设置以及根据不同类型的按钮添加不同的监听器。
因为计算器有整数和小数计算的区别,我创建一个数值类根据不同的值,计算后返回不同的类型,在类内部实现数值的计算操作。
最后单独一个函数来实现计算操作。
import java.awt.Container;import java.awt.Font;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JTextField;public class Caculat extends JFrame{private GridBagLayout layout=new GridBagLayout();//可变布局private GridBagConstraints constraints=new GridBagConstraints();//布局设置private Container container=new Container();//容器,用于储存组件,最后一起添加到窗口JTextField textField=new JTextField();//输入区int fpoint=0;//textField 光标定位String last="0";//存储最后输入的数字String copty="";//编辑时使用Numer result=new Numer();//结果暂存Numer num=new Numer();//输入暂存private String lastCommand="=";//保存+,-,*,/,=命令Numer M;//结果存储器boolean upfirst=true;//判断是否首次使用向上private boolean start=false;//判断是否为数字的开始private boolean setoperator=false;//判断是否使用计算符private boolean den=false;//判断是否刚刚使用等号public Caculat(){super("计算器");container.setLayout(layout);addMenu();addTextField();addButton();add(container);//添加菜单private void addMenu(){JMenu menus[]=new JMenu[3];//主菜单menus[0]=new JMenu("查看(V)");menus[0].setMnemonic('F');menus[1]=new JMenu("编辑(E)");menus[1].setMnemonic('E');menus[2]=new JMenu("帮助(H)");menus[2].setMnemonic('H');JMenuItem lookItem[]=new JMenuItem[2];//子菜单JMenuItem aditItem[]=new JMenuItem[3];JMenuItem helpItem[]=new JMenuItem[2];lookItem[0]=new JMenuItem("普通型(O)");lookItem[0].setMnemonic('O');//快捷键lookItem[1]=new JMenuItem("标准型(T)");lookItem[1].setMnemonic('T');aditItem[0]=new JMenuItem("复制(C) Ctrl+C");//这个不会,只知道Alt+C aditItem[0].setMnemonic('C');aditItem[1]=new JMenuItem("粘贴(P) Ctrl+V");aditItem[1].setMnemonic('P');aditItem[2]=new JMenuItem("自由编辑(F)");aditItem[2].setMnemonic('F');helpItem[0]=new JMenuItem("关于主题(H)");helpItem[0].setMnemonic('H');helpItem[1]=new JMenuItem("关于计算器(A)");MenuAction menuaction=new MenuAction();//菜单监听器lookItem[0].addActionListener(menuaction);lookItem[1].addActionListener(menuaction);aditItem[0].addActionListener(menuaction);aditItem[1].addActionListener(menuaction);aditItem[2].addActionListener(menuaction);helpItem[0].addActionListener(menuaction);helpItem[1].addActionListener(menuaction);JMenuBar bar=new JMenuBar();//菜单容器吧menus[0].add(lookItem[0]);menus[0].add(lookItem[1]);menus[1].add(aditItem[0]);menus[1].add(aditItem[1]);menus[1].add(aditItem[2]);menus[2].add(helpItem[0]);menus[2].add(helpItem[1]);setJMenuBar(bar);//把菜单绑到窗口上的方法bar.add(menus[0]);bar.add(menus[1]);bar.add(menus[2]);//添加输入区private void addTextField(){constraints.gridx=0;//组件x位置constraints.gridy=1;//组件y位置constraints.gridheight=1;//组件高度constraints.gridwidth=5;//组件宽度constraints.fill=GridBagConstraints.BOTH;//组件随显示变化的选项constraints.weightx=1;//水平扩展,即显示变化时,长度变化constraints.weighty=1;//垂直扩展,即高度变化textField.setHorizontalAlignment(JTextField.RIGHT);//光标右边显示textField.setEditable(false);//不可编辑textField.setFont(new Font("Serif",Font.PLAIN,18));//显示字体layout.setConstraints(textField, constraints);//把布局设置应用到组件上container.add(textField);//把该组件添加到容器中//添加按钮区private void addButton(){InsertAction insert=new InsertAction();CommandAction command=new CommandAction();addbutton("MC",0,2,1,1,command);addbutton("MR",1,2,1,1,command);addbutton("MS",2,2,1,1,command);addbutton("M+",3,2,1,1,command);addbutton("M-",4,2,1,1,command);addbutton("Delete",0,3,1,1,insert );addbutton("CE",1,3,1,1,insert);addbutton("C",2,3,1,1,insert);addbutton("±",3,3,1,1,insert);addbutton("√",4,3,1,1,command);addbutton("7",0,4,1,1,insert);addbutton("8",1,4,1,1,insert);addbutton("9",2,4,1,1,insert);addbutton("÷",3,4,1,1,command);addbutton("%",4,4,1,1,command);addbutton("4",0,5,1,1,insert);addbutton("5",1,5,1,1,insert);addbutton("6",2,5,1,1,insert);addbutton("×",3,5,1,1,command);addbutton("1/x",4,5,1,1,command);addbutton("1",0,6,1,1,insert);addbutton("2",1,6,1,1,insert);addbutton("3",2,6,1,1,insert);addbutton("-",3,6,1,1,command);addbutton("+",4,6,1,1,command);addbutton("0",0,7,1,1,insert);addbutton(".",1,7,1,1,insert);addbutton("=",4,7,1,1,command);addbutton("←",2,7,1,1,command);addbutton("→",3,7,1,1,command);//单个按钮设置private void addbutton(String label,int x,int y,int height,int width,ActionListener listener){JButton button=new JButton(label);constraints.gridx=x;constraints.gridy=y;constraints.gridheight=height;constraints.gridwidth=width;constraints.fill=GridBagConstraints.BOTH;button.addActionListener(listener);layout.setConstraints(button,constraints);container.add(button);//container.//非计算符监听器。
JAVA综合程序设计与分析一、题目:用java语言编写科学计算器,要求完成加、减、乘、除以及基本函数处理还有数的进制转换。
二、摘要:本计算器可以进行简单的四则运算(加、减、乘、除)但仅限于十进制下,还可以进行(二进制,八进制,十进制)之间的相互转换,还有基本三角函数和平方根,对数等基本数学函数运算三、功能说明:A.运用两个面板的叠加做出界面。
B.通过在按钮的单击事件处理方法中调用类的成员方法calculate ()来进行简易计算器的各种运算,并正确实现运算功能。
C.调用Math包中的方法实现各函数功能。
D.添加菜单条,列出‘选项’、‘进制转换’、‘帮助’等菜单选项,并分别实现‘选项’中‘退出’的功能,通过调用Integer包中的方法实现二进制、八进制的转换,‘帮助'菜单栏中‘用法’的提示对话框。
E.整个程序对话框可实现最小化、最大化、关闭。
四、详细设计package计算器;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Calculator extends Frame implements ActionListener, WindowListener{private Container container;private GridBagLayout layout;private GridBagConstraints constraints;private JTextField displayField; //计算结果显示区private String lastCommand; //保存+,-,*,/,=命令0private double result; //保存计算结果private boolean start; //判断是否为数字的开始private JMenuBar menubar;private JMenuItem m_exit,m2_ejz,m2_bjz;private Dialog dialog;private Label label_dialog;private JButtonbutton_sqrt,button_plusminus,button_CE,button_cancel,button_1,button_ 2,button_3,button_4,button_5,button_6,button_7,button_8,button_9,button _0,button_plus,button_minus,button_multiply,button_divide,button_point, button_equal,button_log,button_tan,button_cos,button_sin,button_exp;public Calculator() //构造方法设置布局、为按钮注册事件监听器{super("Calculator");this.setLocation(240,200);this.setSize(350,300);this.setResizable(true);this.setLayout(new GridLayout(7,1));this.addmyMenu(); //调用成员方法添加菜单displayField=new JTextField(30);this.add(displayField);displayField.setEditable(true);start=true;result=0;lastCommand = "=";JPanel panel0=new JPanel();panel0.setLayout(new GridLayout(1,4,4,4));JPanel panel1=new JPanel();panel1.setLayout(new GridLayout(1,5,4,4));this.add(panel1);button_sqrt=new JButton("sqrt");button_plusminus=new JButton("+/-");button_exp=new JButton("exp");button_CE=new JButton("退格");button_cancel=new JButton("C");JPanel panel2=new JPanel();panel2.setLayout(new GridLayout(1,5,4,4));this.add(panel2);button_7=new JButton("7");button_8=new JButton("8");button_9=new JButton("9");button_log=new JButton("log");button_divide=new JButton("/");JPanel panel3=new JPanel();panel3.setLayout(new GridLayout(1,5,4,4));this.add(panel3);button_4=new JButton("4");button_5=new JButton("5");button_6=new JButton("6");button_tan=new JButton("tan");button_multiply=new JButton("*");JPanel panel4=new JPanel();panel4.setLayout(new GridLayout(1,5,4,4));this.add(panel4);button_1=new JButton("1");button_2=new JButton("2");button_3=new JButton("3");button_cos=new JButton("cos");button_minus=new JButton("-");JPanel panel5=new JPanel();panel5.setLayout(new GridLayout(1,5,4,4));this.add(panel5);button_0=new JButton("0");button_point=new JButton(".");button_equal=new JButton("=");button_sin=new JButton("sin");button_plus=new JButton("+");panel1.add(button_sqrt);panel1.add(button_plusminus);panel1.add(button_exp);panel1.add(button_CE);panel1.add(button_cancel);panel2.add(button_7);panel2.add(button_8);panel2.add(button_9);panel2.add(button_log);panel2.add(button_divide);panel3.add(button_4);panel3.add(button_5);panel3.add(button_6);panel3.add(button_tan);panel3.add(button_multiply);panel4.add(button_1);panel4.add(button_2);panel4.add(button_3);panel4.add(button_cos);panel4.add(button_minus);panel5.add(button_0);panel5.add(button_point);panel5.add(button_equal);panel5.add(button_sin);panel5.add(button_plus);button_sqrt.addActionListener(this);button_plusminus.addActionListener(this);button_exp.addActionListener(this);button_CE.addActionListener(this);button_cancel.addActionListener(this);button_7.addActionListener(this);button_8.addActionListener(this);button_9.addActionListener(this);button_log.addActionListener(this);button_divide.addActionListener(this);button_4.addActionListener(this);button_5.addActionListener(this);button_6.addActionListener(this);button_tan.addActionListener(this);button_multiply.addActionListener(this);button_1.addActionListener(this);button_2.addActionListener(this);button_3.addActionListener(this);button_cos.addActionListener(this);button_minus.addActionListener(this);button_0.addActionListener(this);button_point.addActionListener(this);button_equal.addActionListener(this);button_sin.addActionListener(this);button_plus.addActionListener(this);this.addWindowListener(new WinClose()); //注册窗口监听器this.setVisible(true);}private void addmyMenu() //菜单的添加{JMenuBar menubar=new JMenuBar();this.add(menubar);JMenu m1=new JMenu("选项");JMenu m2=new JMenu("进制转换");JMenuItem m1_exit=new JMenuItem("退出");m1_exit.addActionListener(this);JMenuItem m2_ejz=new JMenuItem("二进制");m2_ejz.addActionListener(this);JMenuItem m2_bjz=new JMenuItem("八进制");m2_bjz.addActionListener(this);JMenu m3 = new JMenu(" 帮助");JMenuItem m3_Help = new JMenuItem("用法");m3_Help.addActionListener(this);dialog = new Dialog(this,"提示",true); //模式窗口dialog.setSize(240,80);label_dialog = new Label("",Label.CENTER); //标签的字符串为空,居中对齐dialog.add(label_dialog);dialog.addWindowListener(this); //为对话框注册窗口事件监听器m1.add(m1_exit);menubar.add(m1);m2.add(m2_ejz);m2.add(m2_bjz);menubar.add(m2);m3.add(m3_Help);menubar.add(m3); }public void actionPerformed(ActionEvent e) //按钮的单击事件处理方法{if(e.getSource().equals(button_1)||e.getSource().equals(button_2) ||e.getSource().equals(button_3)||e.getSource().equals(button_4)||e.getSource().equals(button_5)|| e.getSource().equals(button_6)||e.getSource().equals(button_7)|| e.getSource().equals(button_8)||e.getSource().equals(button_9) ||e.getSource().equals(button_0)||e.getSource().equals(button_point)||e.getSource().equals(button_plusm inus)||e.getSource().equals(button_cancel)||e.getSource().equals(button_CE)) { //非运算符的处理方法String input=e.getActionCommand();if (start){displayField.setText("");start=false;if(input.equals("+/-"))displayField.setText(displayField.getText()+"-");}if(!input.equals("+/-")){String str=displayField.getText();if(input.equals("退格")) //退格键的实现方法{if(str.length()>0)displayField.setText(str.substring(0,str.length()-1));}else if(input.equals("C")) //清零键的实现方法{displayField.setText("0");start=true;}elsedisplayField.setText(displayField.getText()+input);}}else if (e.getActionCommand()=="二进制") //二进制的转换{int n=Integer.parseInt(displayField.getText());displayField.setText(Integer.toBinaryString(n));}else if (e.getActionCommand()=="八进制") //八进制的转换{int n=Integer.parseInt(displayField.getText());displayField.setText(Integer.toOctalString(n));}else if (e.getActionCommand()=="退出") //选项中退出的处理方法{System.exit(0);}else if(e.getActionCommand()=="用法") //按下'帮助'菜单栏中用法的处理方法{label_dialog.setText("sqrt,exp等键是先输运算符再输数字\n");dialog.setLocation(400,250);dialog.setVisible(true);}else//各运算符的识别{String command=e.getActionCommand();if(start){lastCommand=command;}else{calculate(Double.parseDouble(displayField.getText()));lastCommand=command;start=true;}}}public void calculate(double x) //各运算符的具体运算方法{double d=0;if (lastCommand.equals("+"))result+= x;else if (lastCommand.equals("-"))result-=x;else if (lastCommand.equals("*"))result*=x;else if (lastCommand.equals("/"))result/=x;else if (lastCommand.equals("="))result=x;else if (lastCommand.equals("sqrt")){d=Math.sqrt(x);result=d;}else if (lastCommand.equals("exp")){d=Math.exp(x);result=d;}else if (lastCommand.equals("log")){d=Math.log(x);result=d;}else if (lastCommand.equals("tan")){d=Math.tan(x);result=d;}else if (lastCommand.equals("cos")){d=Math.cos(x);result=d;}else if (lastCommand.equals("sin")){d=Math.sin(x);result=d;}displayField.setText(""+ result);}public void windowClosing(WindowEvent e){if(e.getSource()==dialog)dialog.setVisible(false); //隐藏对话框elseSystem.exit(0);}public void windowOpened(WindowEvent e) { }public void windowActivated(WindowEvent e) { }public void windowDeactivated(WindowEvent e) { }public void windowClosed(WindowEvent e) { }public void windowIconified(WindowEvent e) { }public void windowDeiconified(WindowEvent e) { }public static void main(String args[]){Calculator calculator=new Calculator();}}class WinClose implements WindowListener{public void windowClosing(WindowEvent e) //单击窗口关闭按钮时触发并执行实现窗口监听器接口中的方法{System.exit(0); //结束程序运行}public void windowOpened(WindowEvent e){}public void windowActivated(WindowEvent e){}public void windowDeactivated(WindowEvent e){}public void windowClosed(WindowEvent e){}public void windowIconified(WindowEvent e){}public void windowDeiconified(WindowEvent e){}}五、程序运行结果1.界面2.基本运算,如54 -12 =42:3.数学函数运算,如9的开平方为3:六、总结与体会总结:(1)通过编写这个相对复杂的程序,让我认识解决实际问题前应现建立模型,再通过建立的模型使问题简单化,从而解决问题。
//只可以做简易的加减乘除运算//每次运算结束之后必须按一下清除才可以进行第二次运算import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.Event;public class Calculator {Button[] bt = new Button[10];//数字键Button bp,bj,bc,bu,bq,be;//分别对应的是加,减,乘,除,清除,等于public String numCache="";//缓存拿到的值,这个地方如果不赋初值的话会报错,就是必须在第一次使用前按下清除键public int num1,num2;//参加运算的值public String showNum="";//文本框显示的值public String operator="";//显示的运算符TextField tf;//文本框public int result;public static void main(String[] args) {new Calculator().setFrame();}/*frame*/public void setFrame() {Frame mFrame = new Frame("java简易计算器");//窗口Panel p1 = new Panel();//文本框的容器tf = new TextField(30);//文本框p1.add(tf);//添加文本框进入容器mFrame.add(p1,BorderLayout.NORTH);//将p1放到mFrame的北区域Panel p2 = new Panel();//存放button的容器p2.setLayout(new GridLayout(4,4));//放置button的p2容器,默认添加到center区//添加按钮bt[0] = new Button("0");bt[1] = new Button("1");bt[2] = new Button("2");bt[3] = new Button("3");bt[4] = new Button("4");bt[5] = new Button("5");bt[6] = new Button("6");bt[7] = new Button("7");bt[8] = new Button("8");bt[9] = new Button("9");bp = new Button("+");bj = new Button("-");bc= new Button("*");bu= new Button("/");bq= new Button("清除");be= new Button("=");//将button添加进panelfor(int i=0;i<10;i++) {p2.add(bt[i]);}p2.add(bp);p2.add(bj);p2.add(bc);p2.add(bu);p2.add(bq);p2.add(be);bp.addActionListener(new Monitor());bj.addActionListener(new Monitor());bc.addActionListener(new Monitor());bu.addActionListener(new Monitor());bq.addActionListener(new Monitor());be.addActionListener(new Monitor());mFrame.add(p2);mFrame.pack();//注册监听器类for(int i=0;i<10;i++) {bt[i].addActionListener(new Monitor());}mFrame.setBackground(Color.GRAY);//窗口的背景颜色mFrame.setVisible(true);//显示窗口mFrame.addWindowListener(new WindowAdapter(){//窗口的关闭事件public void windowClosing(WindowEvent e) {System.exit(-1);}});}//frame构造方法结束,第9行开始//事件监听class Monitor implements ActionListener {public void actionPerformed(ActionEvent e) {Button b = (Button)e.getSource();String str = b.getActionCommand();//如果按下的是运算符if(str.equals("+")||str.equals("-")||str.equals("*")||str.equals("/")) {//按下的是运算符if((numCache)!="") {num1 = Integer.parseInt(numCache);}operator = str;tf.setText(operator);numCache = "";showNum = "";//如果按下的是清除键}else if(str.equals("清除")) {showNum = "";numCache="";tf.setText("0.");//如果按下的是等号}else if(str.equals("=")) {num2 = Integer.parseInt(numCache);if(operator.equals("+")) {result = num1+num2;}else if(operator.equals("-")) {result = num1-num2;}else if(operator.equals("*")) {result = num1*num2;}else{if(num2==0) {tf.setText("被除数不能为零");return;}result = num1/num2;}tf.setText(result+"");num1 = 0;num2 = 0;result = 0;}else {//如果按下的是数字showNum = showNum+b.getActionCommand();numCache = numCache+b.getActionCommand();tf.setText(showNum);}}}}//bug报告:(注:素材和资料部分来自网络,供参考。
JAVA科学计算器Java是一种广泛应用于科学计算和数据分析领域的编程语言,拥有强大的数学计算库和丰富的科学计算函数,因此非常适合用于开发科学计算器。
本文将介绍如何使用Java开发一个功能强大的科学计算器。
一、需求分析1.支持基本的四则运算(加、减、乘、除)2.支持高级的数学函数(三角函数、指数函数、对数函数等)3.支持科学计数法(输入和显示均支持科学计数法)4.支持清空功能,删除单个字符功能5.支持键盘输入和界面按钮输入两种方式输入计算表达式二、界面设计1. 界面采用图形用户界面(GUI)设计,使用Swing或JavaFX等界面库进行开发2.使用文本框显示计算结果和表达式3.使用按钮实现数字和运算符的输入4.添加清空按钮和删除按钮5.添加科学计数法开关按钮三、代码实现1. 创建一个继承自JFrame的主窗口类,设置窗口标题、大小和关闭方式```public class ScientificCalculator extends JFrameprivate JTextField outputField;//其他界面组件声明public ScientificCalculatosuper("科学计算器");setSize(400, 600);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//初始化界面组件并添加到窗口//...setVisible(true);}```2. 创建一个继承自JPanel的面板类,用于放置计算器的按钮和文本框```public class CalculatorPanel extends JPanelprivate JTextField outputField;//其他按钮和变量声明public CalculatorPanesetLayout(new BorderLayout();//初始化界面组件并添加到面板//...}```3.在面板类中添加按钮事件监听器,实现按钮的点击响应```public class CalculatorPanel extends JPanel implements ActionListenerprivate JTextField outputField;private JButton[] numberButtons;private JButton[] operatorButtons;//其他按钮和变量声明public CalculatorPanesetLayout(new BorderLayout();//初始化界面组件并添加到面板//...//添加按钮事件监听器for (JButton button : numberButtons)button.addActionListener(this);}for (JButton button : operatorButtons)button.addActionListener(this);}//其他按钮添加监听器//设置文本框只读outputField.setEditable(false);}public void actionPerformed(ActionEvent e)//根据按钮的命令执行相应的操作//...}```4.在按钮事件监听器中实现计算逻辑,调用数学库中的函数完成计算```public void actionPerformed(ActionEvent e)//清空操作outputField.setText("");//删除操作String currentText = outputField.getText(;outputField.setText(currentText.substring(0,currentText.length( - 1));} else//数字或运算符输入}```5.在启动类中创建主窗口对象,并将面板对象添加到主窗口中```public class Mainpublic static void main(String[] args)SwingUtilities.invokeLater(( ->ScientificCalculator calculator = new ScientificCalculator(;calculator.add(new CalculatorPanel();});}```四、测试与优化在开发完成后,需要对科学计算器进行测试,保证其功能正常,并进行优化,确保使用体验良好,例如添加键盘监听器,支持键盘输入,修复可能出现的Bug等。
四则运算计算器设计说明书一.设计目标本次计算器的程序设计,通过使用JA V A中的AWT包和Swing包的类库设计图形界面的计算器。
此计算器能够完成加减乘除的四则混合运算。
利用面向对象程序设计的思想,将各个组件的事件响应分别用不同的方式表达出来,并且使用了图形界面中的事件委托机制来处理事件响应。
二.设计流程1. 分析该计算器需要完成的功能。
用户能够完成添加括号和负号的四则混合运算,并且计算器能够自动识别运算符的优先级,根据用户输入的运算表达式,自动计算出相应的结果。
同时还完成了计算器中C按钮清屏功能和Backspace退格键。
2. 考虑异常处理。
(1)当输入的表达式中出现除零的操作,显示框将显示“Infinity(无穷大)”。
(2)当输入的表达式错误时,将弹出提示框显示“表达式错误请重新输入”(3)当计算器的显示文本框里为没有输入内容时直接点击等号按钮,将弹出提示框显示“对不起,您没有任何输入,请重新输入:”。
(4)当第一次输入乘号键,除号键,右括号,小数点,求余键,等号键,ce 键,Backspace键时提示错误。
4. 考虑数据的处理目标计算表达式通过点击计算器界面上的按钮进行输入,当按下等号之后,计算器通过调用JA V A中script这个包中的相关类和方法来实现数据的处理。
5. 编码实现计算器的功能。
(1)新建相关的文件。
(2)引入JA V A中相关的包。
(3)新建类Jsq,并继承了类Frame,而且实现了接口ActionListener(4)定义相关的变量,创建相关组件,并对组件的属性进行设置。
(5)对所创建的组件进行布局,完成界面的实现。
(6)为各个组件添加事件监听器。
(7)重写事件接口ActionListener的方法public void actionPerformed(ActionEvent e)。
(8)为各个组件编写事件代码,完成每个按钮的不同功能。
三.测试过程的截图1. 程序初始运行界面2运算测试3.混合运算测试:异常处理测试:1.输入错误的表达式2、除数为0时:四.设计结果此计算器以完成设计,所有功能都以实现,并达到了预想的设计目标。
Java实训作业题目:Java实现简易计算器学院:姓名:学号:班级:20 年月一、实验目的通过课程设计,主要要达到两个目的,一是检验和巩固专业知识、二是提高综合素质和能力。
此次课程设计实训主要是Java语言程序设计的实现。
通过该课程设计,可以将课堂上掌握的理论知识与处理数据的业务相结合,以检验自己掌握知识的宽度、深度及对知识的综合运用能力。
二、实验要求用Java编写一个简单的计算器,使其能够实现最基本的功能,如简单的加、减、乘、除;平方根,倒数,平方等功能。
三、详细内容1.界面设计界面设计使用GUI,其中有用到swing组件的TextField和Button,用到awt中的BorderLayout和GridLayout布局管理方式,其图形界面如图1-1所示:图1-1其中主要代码为:public mainWindow(){this.setTitle("计算器");//用户图形界面标题this.setVisible(true);//用户图形界面可缩小this.setResizable(false);//用户图形界面不可放大this.setSize(350,300);//设置用户图形界面的大小this.setLocation(400,150);//用户图形界面在屏幕中的显示位置JPanel panel1 = new JPanel();//新建一个画板JPanel panel2 = new JPanel();button1 = new JButton("1");...reset = new JButton("CE");Container container = this.getContentPane();container.add(panel2,BorderLayout.NORTH);container.add(panel1);panel1.setLayout(new GridLayout(5,4));//将画板1分为4行5列result.setEnabled(false);result.setFont(new Font("Dialog",Font.BOLD,25));//运算结果的字体大小result.setEditable(false);result.setHorizontalAlignment(SwingConstants.RIGHT);panel1.add(reciprocal);//分别将20个按钮依次添加到画板panel1中,并设置各自的大小reciprocal.setFont(new Font("Dialog",Font.PLAIN,20));...panel1.add(divide);divide.setFont(new Font("Dialog",Font.PLAIN,20));panel2.setLayout(new GridLayout());panel2.add(result);//画板panel2添加运算结果2.四则运算较为简单的实现了简单的加、减、乘、除运算,主要代码如下:ActionListener equal1 = new ActionListener(){ //实现四则运算public void actionPerformed(ActionEvent e){String str = result.getText();b = DatatypeConverter.parseDouble(str);{if(flag == "+")c = a + b;else if(flag == "-")c = a - b;else if(flag == "*")c = a * b;else if(flag == "/" || b != 0)c = a / b;}if(flag != "=")result.setText("" + c);elseresult.setText("零不能做除数!");a = 0;b = 0;c = 0;flag = "";}};3.其他功能另外添加了平方根,倒数,平方等功能,主要代码如下:平方根运算的实现:ActionListener sqrt1= new ActionListener(){public void actionPerformed(ActionEvent e){String str = result.getText();double i = DatatypeConverter.parseDouble(str);i = Math.sqrt(i);result.setText("" + i);}};倒数运算的实现:ActionListener reciprocal1 = new ActionListener(){ public void actionPerformed(ActionEvent e){String str = result.getText();double i = DatatypeConverter.parseDouble(str);i = 1/i;result.setText("" + i);}};平方运算的实现:ActionListener square1 = new ActionListener(){public void actionPerformed(ActionEvent e){String str = result.getText();double i = DatatypeConverter.parseDouble(str);i = i*i;result.setText("" + i);}};4.程序测试经测试发现本计算器基本功能均能实现,可正常运行计算,针对功能实现的代码部分过于简单,可以对其进行改善提高,方便用户使用!5.实训小结通过对计算器窗体的编写,熟悉了java图形用户界面的设计原理和程序结构,熟悉了java中awt和swing的组合。
*******************实践教学*******************XXXX大学计算机与通信学院秋季学期java 课程设计题目:迷你计算器专业班级:姓名:学号:指导教师:成绩:序言 (3)摘要 (3)系统分析与设计 (4)设计方案构思: (4)详细设计 (7)数字按键监听类 (7)运算按键监听类 (8)记忆操作监听类 (10)测试方案 (10)测试用例 (11)测试结果 (12)软件使用说明书 (15)按键说明: (15)设计总结 (16)参考文献 (16)附录代码: (17)application版本的迷你计算器 (17)applet版本的迷你计算器 (25)学习完Java语言课程以后,利用这一次的课程设计进行自我检验的一次实践。
通过该题目的设计,培养面向对象程序设计的思想,要求达到熟练掌握Java语言的基本知识和技能,基本掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
同时强调好的程序设计风格,提高解决实际问题的能力。
而我的课题是设计《迷你计算器》,它要求利用所学过的java语言进行设计,并要求可视化界面。
通过查阅有关java知识方面的书籍资料来帮助自己完成课程设计,涉及的知识点有以下几点:利用面向对象的思想首先考虑设计程序的大致框架结构以及相关功能,设计相关的类结构;由于使用可视化界面,免不了要使用有关界面的设计知识,有AWT、swing来设计人机交互的界面。
而事件的相关知识起到人机媒介的作用,要求利用到接口(interface)实现事件的监听;此次的课程设计包括两个版本:application 和Applet小应用程序,所以需要了解两个的开发流程,以及两者的区别点。
有关这次是的设计只是简略的迷你计算器的设计,采用清晰,简明的设计层次,同时可以检验对java语言的基本掌握情况。
摘要计算器是一种很常用的计算工具,它在计算方面、日常生活中给我们提供很大的方便,在编辑此程序时,除了包括常用的加法运算算法、减法运算算法、乘法运算算法、除法运算算法等四大模块之外。
*******************实践教学*******************XXXX大学计算机与通信学院秋季学期java 课程设计题目:迷你计算器专业班级:姓名:学号:指导教师:成绩:序言 (3)摘要 (3)系统分析与设计 (4)设计方案构思: (4)详细设计 (7)数字按键监听类 (7)运算按键监听类 (8)记忆操作监听类 (10)测试方案 (10)测试用例 (11)测试结果 (12)软件使用说明书 (15)按键说明: (15)设计总结 (16)参考文献 (16)附录代码: (17)application版本的迷你计算器 (17)applet版本的迷你计算器 (25)学习完Java语言课程以后,利用这一次的课程设计进行自我检验的一次实践。
通过该题目的设计,培养面向对象程序设计的思想,要求达到熟练掌握Java语言的基本知识和技能,基本掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
同时强调好的程序设计风格,提高解决实际问题的能力。
而我的课题是设计《迷你计算器》,它要求利用所学过的java语言进行设计,并要求可视化界面。
通过查阅有关java知识方面的书籍资料来帮助自己完成课程设计,涉及的知识点有以下几点:利用面向对象的思想首先考虑设计程序的大致框架结构以及相关功能,设计相关的类结构;由于使用可视化界面,免不了要使用有关界面的设计知识,有AWT、swing来设计人机交互的界面。
而事件的相关知识起到人机媒介的作用,要求利用到接口(interface)实现事件的监听;此次的课程设计包括两个版本:application 和Applet小应用程序,所以需要了解两个的开发流程,以及两者的区别点。
有关这次是的设计只是简略的迷你计算器的设计,采用清晰,简明的设计层次,同时可以检验对java语言的基本掌握情况。
摘要计算器是一种很常用的计算工具,它在计算方面、日常生活中给我们提供很大的方便,在编辑此程序时,除了包括常用的加法运算算法、减法运算算法、乘法运算算法、除法运算算法等四大模块之外。
还特意添加了阶乘、正弦、余弦和指数运算。
其次程序按照要求利用AWT、swing图形界面技术进行windows系统迷你计算器的模拟设计,用到的接口、对象、类等方法,同时对编程过程中所编写的实验代码也不同程度的进行细化的要求,所以在编程的过程中难免遇到了一些困难,所以在完成本次系统的过程中过程中充满了挑战与机遇。
关键字:AWT、swing、类、接口、事件监听系统分析与设计设计方案构思:本程序采用模块化设计,调试方便,程序的可读性好。
在老师的指导下,由主程序启动简易计算器,根据使用者的需要可以在简易计算器中进行运算操作,若不能满足用户功能,可以选择使用科学计算器,具体操作与目前市面上的计算器差不多,用户还可以选择使用说明进行查看具体操作。
由于时间及个人水平的问题,科学计算中还有很多功能未实现。
具体思路:用户输入(点击)某一数字或操作符,程序将自行判断是操作数还是操作符。
迷你计算器包括以下部分:表按键布局数字按钮(0~9):10个内存操作按钮(MC、MR、MS、M+、M-)::5个运算按钮(+、-、*、/、n!、cos、sin、x y、、±、=):10个清零操作按钮(<-、CE、C):3个事件分为三个类进行操作,如以下部分:Public class NumberListener implements ActionListener//监听数字按钮public class OperatorListener implements ActionListener//监听运算按钮publicclassMemoryListenerimplements ActionListener//监听MC、MR、MS、M+、M-等按钮Application版本中,以上三个个类作为主类的内部类,即public class MyCalculator extends JFrame//主类直接继承swing的框架类JFrame,并采用网格包布局Applet版本中,以上三个类也作为其内部类,即public class AplCalculator extends Applet//主类继承Applet类采用网格包布局方案设计步骤:1、创建主类MyCalculator并继承JFrame2、创建以上三个类做为MyCalculator类的内部类Application版本图application版本类层次结构Applet版本图applet版本类层次结构详细设计数字按键监听类实现用户输入数据时进行监听并在文本框做出相应按键的显示,以下是该类的详细设计。
public class NumberListener implements ActionListener{//实现动作监听public void actionPerformed(ActionEvent e){//覆盖actionPerformed函数String input = e.getActionCommand();if(StartSymbol){//判断输入数字是否开始StartSymbol = false;show1.setText("");if(input.equals("±"))show1.setText(show1.getText() + "-");}if (!input.equals("±")){if(input == "CE"){show1.setText("");//input=null;StartSymbol = true;}else if(input == "C"){show1.setText("0");//input=null;operator = "=";StartSymbol = true;}else if(input == "<—"){String str = show1.getText();if(!ResultSymbol&&str.length() > 0)show1.setText(str.substring(0, str.length() - 1));else show1.setText("" + result);}else{show1.setText(show1.getText() + input);ResultSymbol = false;}}}}运算按键监听类用来实现当用户使用计算某个已有的运算时,时间监听类监听并做出相应的运算操作,以下是详细的类设计。
public class OperatorListener implements ActionListener{public void actionPerformed(ActionEvent e){String command = e.getActionCommand();if(StartSymbol){operator = command;SGCalculator(operator);//SGCalculator(Double.valueOf(show1.getText()));}else{DBCalculator(Double.valueOf(show1.getText()));operator = command;SGCalculator(operator);StartSymbol = true;ResultSymbol = true;}}public void DBCalculator(double y){if(operator == "+"){result += y;}else if(operator == "-"){result -= y;}else if(operator == "*"){result *= y;}else if(operator == "/"){result /= y;}else if(operator == "x^y"){double x = result;for(;y>1;y--) result *= x;}else if(operator == "="){result = y;}show1.setText("" + result);}public void SGCalculator(String operator) {if(operator == "sin"){result = Math.sin(result);}else if(operator == "cos"){result = Math.cos(result);}else if(operator == "n!"){for(double x = result -1;x>1;x--)result *= x;}show1.setText("" + result);}}记忆操作监听类实现方便用户记忆计算结果,当用户使用监听的按键时,该类进行监听并做出相应的判断,从而记忆当前显示的数据。
public class MemoryListener implements ActionListener{public void actionPerformed(ActionEvent e){String press = e.getActionCommand();if(press == "MC"){memory = 0;show1.setText(""+memory);}else if(press == "MR"){show1.setText(""+memory);}else if(press == "MS"){memory = Double.valueOf(show1.getText());}else if(press == "M+"){memory += Double.valueOf(show1.getText());}else if(press == "M-"){memory -= Double.valueOf(show1.getText());}StartSymbol = true;}}在函数addButton(JPanel p,String label, int row, int column, int with,int height, ActionListener listener)中将以上三个事件监听类添加到相应的按钮。