diff --git a/src/java2020spring/Calculator.java b/src/java2020spring/Calculator.java new file mode 100644 index 0000000000000000000000000000000000000000..e9caeb7d33451e0248d2ec010b41dff677a072be --- /dev/null +++ b/src/java2020spring/Calculator.java @@ -0,0 +1,391 @@ +package java2020spring; + +import javax.swing.*; + +import java.awt.CardLayout; +import java.awt.Font; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.text.DecimalFormat; + + +import static javax.swing.JFrame.*; + +public class Calculator extends JFrame implements ActionListener{ + JMenuBar menubar; + JMenu menu; + JMenuItem item1,item2; + JTextField textField; + JPanel p1,p2,p3,p; + CardLayout card =new CardLayout(); + JSplitPane splitPane=new JSplitPane(JSplitPane.VERTICAL_SPLIT,p1,p); + String[] keys1= {"MS","MC","MR","M+","%","CE","C","BACK","1/x","x^2","√x","/","7","8","9","*","4","5","6","-","1","2","3","+","+/-","0",".","="}; + String[] keys2= {"MS","MC","MR","M+","M-","π","e","CE","C","BACK","x^2","√x","sin","cos","tan","√x^2","1/x","|x|","n!","/","x^y","7","8","9","*","10^x","4","5","6","-","log","1","2","3","+","ln","+/-","0",".","="}; + String operator="=";//当前的运算符号 + boolean firstDigit=true,operateFlag=true;//判断是否为输入的第一个字;判断操作是否正确 + double resultNum=0;//计算结果 + double store=0; + + + public Calculator(String s) { + p=new JPanel(); + p.setLayout(card); + setTitle(s); + setContentPane(splitPane); + setMenu(); + setText(); + setNormativeCalulatorButton(); + setScientificCalulatorButton(); + splitPane.add(p); + setLocation(20,30); + setSize(450,500); + setVisible(true); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + } + //设置菜单 + void setMenu() { + menubar=new JMenuBar(); + menu=new JMenu("计算机种类"); + item1=new JMenuItem("标准计算器"); + item2=new JMenuItem("科学计算器"); + menu.add(item1); + menu.addSeparator(); + menu.add(item2); + menubar.add(menu); + setJMenuBar(menubar); + item1.addActionListener(this); + item2.addActionListener(this); + } + + //设置文本区 + void setText() { + p1=new JPanel(); + textField=new JTextField(20); + textField.setHorizontalAlignment(JTextField.RIGHT); + textField.setFont(new Font("楷体",Font.BOLD,30)); + textField.setEditable(false); + textField.setBorder(null); + p1.add(textField); + splitPane.add(p1); + } + //设置标准计算器按钮 + void setNormativeCalulatorButton() { + p2=new JPanel(); + p2.setLayout(new GridLayout(7, 4, 2, 2)); + String[] keys1= {"MS","MC","MR","M+","%","CE","C","BACK","1/x","x^2","√x","/","7","8","9","*","4","5","6","-","1","2","3","+","+/-","0",".","="}; + JButton buttons[] = new JButton[keys1.length]; + for(int i=0;i1) { + resultNum=resultNum*(res-1); + res--; + } + textField.setText(String.valueOf(resultNum)); + } + } + + + + + //实现退一格的功能 + if(command.equals("BACK")) { + String text=textField.getText(); + int i=text.length(); + if(i>0) { + text=text.substring(0,i-1); + + if(text.length()==0) { + textField.setText("0"); + firstDigit=true; + operator="="; + } + else { + textField.setText(text); + } + } + } + + + + //实现CE的功能 + else if(command.equals("CE")) { + textField.setText("0"); + firstDigit=true; + } + + //实现C即归零的功能 + else if(command.equals("C")) { + textField.setText("0"); + firstDigit=true; + operator="="; + } + + else if(command.equals("%")||command.equals("1/x")||command.equals("x^2")||command.equals("√x")) { + operator=command; + if(operator.equals("%")) { + resultNum=getNumberFromText()/100; + + } + //判断除数不能零 + else if(operator.equals("1/x")) { + resultNum=getNumberFromText(); + if(resultNum==0) { + textField.setText("除数不能为零"); + operateFlag=false; + } + else { + resultNum=1/getNumberFromText(); + + } + } + + + else if(operator.equals("x^2")) { + resultNum =Math.pow(getNumberFromText(),2); + } + + //实现根号运算、判断根号内不能为负数 + else if(operator.equals("√x")) { + if (resultNum < 0) { + operateFlag = false; + textField.setText("根号内不能为负"); + } + else { + resultNum = Math.sqrt(getNumberFromText()); + + } + firstDigit=true; + operateFlag=true; + } + } + + //实现+、-、*、/、=的功能 + else if(command.equals("/")||command.equals("+")||command.equals("-")||command.equals("*")||command.equals("=")||command.equals("x^y")){ + + //判断除数不为零 + if(operator.equals("/")) { + if(getNumberFromText() == 0.0) { + operateFlag=false; + textField.setText("除数不能为零"); + } + else { + resultNum /= getNumberFromText(); + + } + } + else if(operator.equals("+")) { + + resultNum += getNumberFromText(); + + } + else if(operator.equals("-")) { + resultNum -= getNumberFromText(); + + } + else if(operator.equals("*")) { + resultNum *= getNumberFromText(); + + } + else if(operator.equals("=")) { + resultNum = getNumberFromText(); + } + + else if(operator.equals("x^y")) { + + resultNum=Math.pow(resultNum,getNumberFromText()); + } + + if(operateFlag) { + long t1; + double t2; + t1=(long)resultNum; + t2=resultNum-t1; + if(t2==0) { + textField.setText(String.valueOf(t1));} + else {textField.setText(String.valueOf(new DecimalFormat("0.0000").format(resultNum))); + } + } + operator=command; + firstDigit=true; + operateFlag=true; + + } + + else if(command.equals("+/-")) { + resultNum = getNumberFromText() * (-1); + if(operateFlag) { + long t1; + double t2; + t1=(long)resultNum; + t2=resultNum-t1; + if(t2==0) { + textField.setText(String.valueOf(t1)); + } + else {textField.setText(String.valueOf(new DecimalFormat("0.0000").format(resultNum))); + } + } + firstDigit=true; + operateFlag=true; + } + + //判断小数点错误 + else if("0123456789.".indexOf(command) >= 0) { + if(firstDigit) { + textField.setText(command); + } + else if(command.equals(".")&&(textField.getText().indexOf(".")<0)) { + textField.setText(textField.getText()+"."); + } + else if(command.equals(".")==false) { + textField.setText(textField.getText()+command); + } + firstDigit=false; + } + + //实现记忆储存的功能 + else if(command.equals("MS")||command.equals("MC")||command.equals("MR")||command.equals("M+")||command.equals("M-")) { + + if(command.equals("MS")) { + store=Double.valueOf(textField.getText()); + } + else if(command.equals("MC")) { + store=0; + } + else if(command.equals("MR")) { + textField.setText(String.valueOf(store)); + } + else if(command.equals("M+")) { + store=store+Double.valueOf(textField.getText()); + } + + else if(command.equals("M-")) { + store=store-Double.valueOf(textField.getText()); + } + + } +} + + //将文本区中的数字型字符转化为数字 + double getNumberFromText() { + double number=0; + try{ + number=Double.parseDouble(textField.getText()); + } + catch(NumberFormatException e) { + + } + return number; + } +} + + + diff --git a/src/java2020spring/Project.java b/src/java2020spring/Project.java new file mode 100644 index 0000000000000000000000000000000000000000..872f9ded4728ea9d4985d586aa7d4e91633a8286 --- /dev/null +++ b/src/java2020spring/Project.java @@ -0,0 +1,17 @@ +package java2020spring; + +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.*; + +public class Project { + + public static void main(String[] args) { + + Calculator calculator=new Calculator("计算器"); + + + } + +} diff --git a/src/java2020spring/Test.java b/src/java2020spring/Test.java deleted file mode 100644 index fc09c195f566d0e707f5e8a2f05fd168069c73a7..0000000000000000000000000000000000000000 --- a/src/java2020spring/Test.java +++ /dev/null @@ -1,10 +0,0 @@ -package java2020spring; - -public class Test { - - public static void main(String[] args) { - System.out.println("Hello world!"); - - } - -}