diff --git a/src/java2020spring/ComputerFrame.java b/src/java2020spring/ComputerFrame.java new file mode 100644 index 0000000000000000000000000000000000000000..50e609de64ff14dbe9060b6a715e0a60405b8728 --- /dev/null +++ b/src/java2020spring/ComputerFrame.java @@ -0,0 +1,242 @@ +package java2020spring; + + + +import java.awt.BorderLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.*; +import java.awt.*; + +import javax.swing.*; +import java.util.ArrayList; +import java.util.List; +public class ComputerFrame extends JFrame implements ActionListener{ + + //菜单 + JMenuBar menubar; + JMenu menu1,menu2; + JMenuItem menuItem; + //菜单中的单选框:标准型,科学型 + JRadioButton radioSt,radioSc; + //菜单中的单选框:度数 + JRadioButton 弧度转角度,角度转弧度; + //菜单中的单选框:多少进制 + JRadioButton R16,R10,R8,R2; + //分组 + ButtonGroup group1,group2,group3; + //菜单中的复选框:数字分组 + JCheckBox checkbox; + +void MenuBar() { + //只加了一行菜单 + menubar=new JMenuBar(); + menu1=new JMenu("编辑"); + menu2=new JMenu("查看"); + menuItem=new JMenuItem("帮助"); + menuItem.addActionListener(this); + menu1.add(menuItem); + + //菜单中的单选框:标准型,科学型 + group1=new ButtonGroup(); + radioSt=new JRadioButton("标准型"); + + + group1.add(radioSt); + + menu2.add(radioSt); + + //菜单中的单选框:多少进制 + group2=new ButtonGroup(); + R16=new JRadioButton("十进制转十六进制"); + R10=new JRadioButton("十进制转十进制"); + R8=new JRadioButton("十进制转八进制"); + R8.addActionListener(this); + R2=new JRadioButton("十进制转二进制"); + R2.addActionListener(this); + + group2.add(R16); + group2.add(R10); + group2.add(R8); + group2.add(R2); + menu2.add(R16); + menu2.add(R10); + menu2.add(R8); + menu2.add(R2); + //菜单中的单选框:度数 + group3=new ButtonGroup(); + 弧度转角度=new JRadioButton("弧度转角度"); + 角度转弧度=new JRadioButton("角度转弧度"); + + 弧度转角度.addActionListener(this); + 角度转弧度.addActionListener(this); + group3.add(弧度转角度); + group3.add(角度转弧度); + + menu2.add(弧度转角度); + menu2.add(角度转弧度); + + //菜单中的复选框:数字分组 + checkbox=new JCheckBox("数字分组"); + menu2.add(checkbox); + //只加了一行菜单 + menubar.add(menu1); + menubar.add(menu2); + + setJMenuBar(menubar); +} + JTextField text=null; + JButton button=null; + Box Nbox; + + String nameComputer[]= {"%","√","x²","1/x","CE","C","back","/","7","8","9","*","4","5","6","-","1","2","3","+","+/-","0",".","="}; + String M[]= {"MC","MR","MS","M+","M-"}; + ComputerOperation operation=new ComputerOperation(); + + ComputerFrame(){ + //底层 + JPanel panel=new JPanel(); + panel.setLayout(new BorderLayout()); + + //NORTH + JPanel panel1=new JPanel(); + panel1.setLayout(new GridLayout(1,5,2,10)); + setMButton(panel1); + Nbox=Box.createVerticalBox(); + + Nbox.add(getTextField()); + + Box.createVerticalStrut(10); + Nbox.add(panel1); + panel.add(Nbox,BorderLayout.NORTH); + + //CENTER + JPanel panel2=new JPanel(); + panel2.setLayout(new GridLayout(6,4,3,3)); + setAllButton(panel2); + panel.add(panel2,BorderLayout.CENTER); + panel1.setPreferredSize(new Dimension(400, 60)); + + + this.add(panel); + this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + this.setVisible(true); + } + //剩余键 + private void setAllButton(JPanel panel2) { + JButton[] aButton=new JButton[nameComputer.length]; + + for(int i=0;i list=new ArrayList(); + while(b2!=0){ + a2=b2%2; + list.add(a2); + b2=b2/2; + } + for(int j=list.size()-1;j>=0;j--){ + sum=sum+list.get(j)+""; + } + text.setText(sum); + } + } + if(e.getSource()==R8) { + if(text.getText().indexOf(".")==-1) {//只能将10进制转为八进制,以后再修改 + + int b2=Integer.parseInt(text.getText()); + int a2; + String sum="0"; + List list=new ArrayList(); + while(b2!=0){ + a2=b2%8; + list.add(a2); + b2=b2/8; + } + for(int j=list.size()-1;j>=0;j--){ + sum=sum+list.get(j)+""; + } + text.setText(sum); + } + } + if(e.getSource()==R16) {//只能将10进制转为十六进制,以后再修改 + if(text.getText().indexOf(".")==-1) { + int b2=Integer.parseInt(text.getText()); + int a2; + String sum="0"; + List list=new ArrayList(); + while(b2!=0){ + a2=b2%16; + list.add(a2); + b2=b2/16; + } + for(int j=list.size()-1;j>=0;j--){ + sum=sum+list.get(j)+""; + } + text.setText(sum); + } + } + if(e.getSource()==弧度转角度) {//只能将弧度转为角度 + text.setText(String.valueOf((Math.PI/180)*Double.valueOf(text.getText()))); + } + if(e.getSource()==角度转弧度) {//只能将角度转为弧度 + text.setText(String.valueOf((180/Math.PI)*Double.valueOf(text.getText()))); + } + if(e.getSource()==menuItem) { + JOptionPane.showMessageDialog(null, "简单计算器"); + + } + } + catch(Exception e2) { + System.out.println(e2.getMessage()); + } + } +} diff --git a/src/java2020spring/ComputerOperation.java b/src/java2020spring/ComputerOperation.java new file mode 100644 index 0000000000000000000000000000000000000000..545f42551e5e56a5ff56395994854a7a83c88e82 --- /dev/null +++ b/src/java2020spring/ComputerOperation.java @@ -0,0 +1,165 @@ +package java2020spring; +import java.math.BigDecimal; +import java2020spring.MyMath; + + + +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.math.BigDecimal; +public class ComputerOperation { + + static String num1="0"; + static String getnum=null; + double store; + String numString="0123456789."; + String calString="+-*/"; + boolean isCal=false; + boolean isSecondNum=false; + static String operation=null; + MyMath myMath=new MyMath(); + + //调用 + public String calculate(String cmd, String text) { + if(cmd.equals("C")) { + return cleanAll(); + }else if(cmd.equals("CE")) { + return clean(text); + }else if(cmd.equals("back")) { + return back(text); + }else if(cmd.equals("+/-")) { + return oppsite(text); + }else if(cmd.equals("x²")) { + return squart(text); + }else if(cmd.equals("√")) { + return sqrt(text); + }else if(cmd.equals("1/x")) { + return bottom(text); + }else if(numString.indexOf(cmd) != -1) {//来一个数字+cmd+就要立刻先算,要分清第一还是第二个数字 + return getNumber(cmd,text); + }else if(calString.indexOf(cmd) != -1) { + return calOperatoin(cmd,text); + }else if(cmd.equals("=")) { + return cal(text,true); + }else if(cmd.equals("%")) { + return persent(text,true); + }else { + return M(cmd,text); + } + + + + + } + private String cal(String text, boolean b) { + isSecondNum=true; + + getnum=myMath.getResult(operation, getnum, text); + isSecondNum=false; + operation=null; + return getnum; + } + public String calOperatoin(String cmd, String text) { + if(getnum==null||operation==null) { + getnum=text; + operation=cmd; + }else { + getnum=myMath.getResult(operation, getnum, text); + operation=cmd; + } + + + isSecondNum=true; + + return getnum; +} + //实现 + //数字 + public String getNumber(String cmd,String text) { + + String result = cmd; + // text不等于0 + if (!"0".equals(text)) { + if (isSecondNum) { + isSecondNum = false; + } else { + result = text + result; + } + } + if (result.indexOf(".") == 0) { + result = "0" + result; + } + if(text.indexOf(".")!=-1 &&cmd==".") { + result=text; + } + return result; + } + //C + public String cleanAll() { + operation=null; + getnum=null; + return "0"; + } + + //CE + public String clean(String text) { + + return "0"; + } + //BACK + public String back(String text) { + if (text=="0"||text=="") { + return "0"; + }else return text.substring(0,text.length()-1); + } + //相反数 + public String oppsite(String text) { + if(text.indexOf("-")==0) { + return text.substring(1,text.length()); + }else { + return "-"+text; + } + } + //平方 + public String squart(String text) { + + Double one=Double.valueOf(text); + return String.valueOf(one*one);//有点奇怪 + } + //开方 + public String sqrt(String text) { + //感觉不对劲 + return String.valueOf(Math.sqrt(Double.valueOf(text))); + + } + public String persent(String text, boolean b) { + + return String.valueOf(Double.valueOf(text)/100); + + } + //倒数 + public String bottom(String text) { + if (text.equals("0")){ + return text; + }else{ + //要改 + return String.valueOf(MyMath.divide(1, Double.valueOf(text))); + } + } + //储存 + public String M(String cmd,String text) { + if(cmd.equals("M+")) { + store =MyMath.add(store,Double.valueOf(text)); + + } else if(cmd.equals("M-")) { + store =MyMath.subtract(store,Double.valueOf(text)); + }else if(cmd.equals("MC")) { + store=0; + }else if(cmd.equals("MR")) { + return String.valueOf(store); + }else if(cmd.equals("MS")) { + store = Double.valueOf(text).doubleValue(); + } + return null; + } + } diff --git a/src/java2020spring/MainClass.java b/src/java2020spring/MainClass.java new file mode 100644 index 0000000000000000000000000000000000000000..944327146367c24cfd34f89c31dac57db9ef56d0 --- /dev/null +++ b/src/java2020spring/MainClass.java @@ -0,0 +1,22 @@ +package java2020spring; + +import javax.swing.JFrame; + + + + + +public class MainClass { + + public static void main(String[] args) { + ComputerFrame frame; + frame=new ComputerFrame(); + frame.setTitle("计算器"); + frame.setBounds(10,10,450,600);//设置多高宽,还要改 + frame.MenuBar(); + frame.setVisible(true); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + +} + diff --git a/src/java2020spring/MyMath.java b/src/java2020spring/MyMath.java new file mode 100644 index 0000000000000000000000000000000000000000..383705979ae98728f78c085cde2e63a00e94a1c7 --- /dev/null +++ b/src/java2020spring/MyMath.java @@ -0,0 +1,45 @@ +package java2020spring; + +public class MyMath { +Double operation,firstNum,secondNum; +Double result; + public String getResult(String operation,String num1,String num2){ + + if(operation.equals("*")) { + result=Double.valueOf(num1).doubleValue()*Double.valueOf(num2).doubleValue(); + }else if(operation.equals("-")) { + result=Double.valueOf(num1).doubleValue()-Double.valueOf(num2).doubleValue(); + }else if(operation.equals("+")) { + result=Double.valueOf(num1).doubleValue()+Double.valueOf(num2).doubleValue(); + }else if(operation.equals("/")) { + if(num1.equals("0")) { + + result=0.0; + } + result=Double.valueOf(num1).doubleValue()/Double.valueOf(num2).doubleValue(); + + } + return String.valueOf(result); + + } + + public static double divide(int i, Double valueOf) { + + + + return 1/valueOf; + } + + + public static double add(double store, Double valueOf) { + + return store+valueOf; + } + + + public static double subtract(double store, Double valueOf) { + + return store-valueOf; + } + +} \ No newline at end of file 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!"); - - } - -}