diff --git a/src/java2022spring/Cclass.java b/src/java2022spring/Cclass.java new file mode 100644 index 0000000000000000000000000000000000000000..9fd5fb055e9be4bff89e7208fda9fdc58b128d83 --- /dev/null +++ b/src/java2022spring/Cclass.java @@ -0,0 +1,119 @@ +package java2022spring; +import java.awt.*; +import javax.swing.*; +import java.awt.event.*; +public class Cclass extends JPanel{ + public static double cucunqi; + public static JButton ccq; + public Cclass() { + this.setLayout(new GridLayout(5,6,12,12)); + ccq=new JButton("储存器:"); + this.add(ccq); + ccq.setEnabled(false); + ccq.setFont(new Font("宋体", Font.PLAIN, 11)); + ccq.setBackground(Color.black); + JButton backspace=new JButton("Backspace");//创建按键 + JButton CE=new JButton("CE"); + JButton C=new JButton("C"); + JButton zuokuohao=new JButton("("); + JButton youkuohao=new JButton(")"); + JButton MC=new JButton("MC"); + JButton anjian7=new JButton("7"); + JButton anjian8=new JButton("8"); + JButton anjian9=new JButton("9"); + JButton xiegan=new JButton("/"); + JButton Sqrt=new JButton("sqrt"); + JButton MR=new JButton("MR"); + JButton anjian4=new JButton("4"); + JButton anjian5=new JButton("5"); + JButton anjian6=new JButton("6"); + JButton chenghao=new JButton("*"); + JButton baifenhao=new JButton("%"); + JButton MS=new JButton("MS"); + JButton anjian1=new JButton("1"); + JButton anjian2=new JButton("2"); + JButton anjian3=new JButton("3"); + JButton jianhao=new JButton("-"); + JButton xfengzhi1=new JButton("1/x"); + JButton Mjia=new JButton("M+"); + JButton anjian0=new JButton("0"); + JButton jiecheng=new JButton("!"); + JButton xiaosudian=new JButton("."); + JButton jiahao=new JButton("+"); + JButton denghao=new JButton("="); + + this.add(backspace);//添加按键 + this.add(CE); + this.add(C); + this.add(zuokuohao); + this.add(youkuohao); + this.add(MC); + this.add(anjian7); + this.add(anjian8); + this.add(anjian9); + this.add(xiegan); + this.add(Sqrt); + this.add(MR); + this.add(anjian4); + this.add(anjian5); + this.add(anjian6); + this.add(chenghao); + this.add(baifenhao); + this.add(MS); + this.add(anjian1); + this.add(anjian2); + this.add(anjian3); + this.add(jianhao); + this.add(xfengzhi1); + this.add(Mjia); + this.add(anjian0); + this.add(jiecheng); + this.add(xiaosudian); + this.add(jiahao); + this.add(denghao); + + Sanchu sanchu=new Sanchu();//申明监视器 + suru Suru=new suru(); + Shuchu shuchu=new Shuchu(); + Genghao genghao=new Genghao(shuchu); + Daosu daosu=new Daosu(shuchu); + Cucun cucun=new Cucun(shuchu); + Xianshi xianshi=new Xianshi(); + Xiangjia xiangjia=new Xiangjia(shuchu); + + zuokuohao.addActionListener(Suru); + youkuohao.addActionListener(Suru); + anjian7.addActionListener(Suru); + anjian8.addActionListener(Suru); + anjian9.addActionListener(Suru); + xiegan.addActionListener(Suru); + anjian4.addActionListener(Suru); + anjian5.addActionListener(Suru); + anjian6.addActionListener(Suru); + chenghao.addActionListener(Suru); + baifenhao.addActionListener(Suru); + anjian1.addActionListener(Suru); + anjian2.addActionListener(Suru); + anjian3.addActionListener(Suru); + jianhao.addActionListener(Suru); + anjian0.addActionListener(Suru); + xiaosudian.addActionListener(Suru); + jiahao.addActionListener(Suru); + jiecheng.addActionListener(Suru); + + backspace.addActionListener(sanchu);//为按键添加监视器 + C.addActionListener(sanchu); + CE.addActionListener(sanchu); + denghao.addActionListener(shuchu); + Sqrt.addActionListener(genghao); + xfengzhi1.addActionListener(daosu); + MS.addActionListener(cucun); + MR.addActionListener(xianshi); + MC.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + cucunqi=0; + } + }); + Mjia.addActionListener(xiangjia); + } +} diff --git a/src/java2022spring/Cucun.java b/src/java2022spring/Cucun.java new file mode 100644 index 0000000000000000000000000000000000000000..001f85545bf45336946cff37729278e00871392e --- /dev/null +++ b/src/java2022spring/Cucun.java @@ -0,0 +1,11 @@ +package java2022spring; +import java.awt.event.*; +public class Cucun implements ActionListener{ + Shuchu shuchu2; + public Cucun(Shuchu shuchu) { + shuchu2=shuchu; + } + public void actionPerformed(ActionEvent e) { + Cclass.cucunqi=Double.parseDouble(shuchu2.jisuan(Mainclass.jieguo.getText())); + } +} diff --git a/src/java2022spring/Daosu.java b/src/java2022spring/Daosu.java new file mode 100644 index 0000000000000000000000000000000000000000..f3277ffe07c61374a4f6a290f99a0f059ed1aa54 --- /dev/null +++ b/src/java2022spring/Daosu.java @@ -0,0 +1,18 @@ +package java2022spring; +import java.awt.event.*; +public class Daosu implements ActionListener{ + Shuchu shuchu2; + public Daosu(Shuchu shuchu) { + shuchu2=shuchu; + } + public void actionPerformed(ActionEvent e) { + if(Double.parseDouble(shuchu2.jisuan(Mainclass.jieguo.getText()))==0) { + Mainclass.jieguo.setText("分母不能为0,请重新输入"); + } + else { + double chuli=1/Double.parseDouble(shuchu2.jisuan(Mainclass.jieguo.getText())); + Mainclass.jieguo.setText(String.valueOf(chuli)); + } + + } +} diff --git a/src/java2022spring/Genghao.java b/src/java2022spring/Genghao.java new file mode 100644 index 0000000000000000000000000000000000000000..e4c1b8785b17c8e767a3a0ca0e3fc6716507a260 --- /dev/null +++ b/src/java2022spring/Genghao.java @@ -0,0 +1,19 @@ +package java2022spring; + +import java.awt.event.*; +public class Genghao implements ActionListener{ + Shuchu shuchu1; + public Genghao(Shuchu shuchu) { + shuchu1=shuchu; + } + public void actionPerformed(ActionEvent e) { + if(Double.parseDouble(shuchu1.jisuan(Mainclass.jieguo.getText()))<0) { + Mainclass.jieguo.setText("数字或表达式结果小于0,请重新输入"); + } + else { + String kaigenghao=String.valueOf(Math.sqrt(Double.parseDouble(shuchu1.jisuan(Mainclass.jieguo.getText())))); + Mainclass.jieguo.setText(kaigenghao); + } + + } +} diff --git a/src/java2022spring/Help.java b/src/java2022spring/Help.java new file mode 100644 index 0000000000000000000000000000000000000000..0a5e97bea57ac73857344a3f7b12301908062f5c --- /dev/null +++ b/src/java2022spring/Help.java @@ -0,0 +1,24 @@ +package java2022spring; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.*; +import javax.swing.*; +public class Help implements ActionListener{ + public void actionPerformed(ActionEvent e) { + JOptionPane.showMessageDialog(null,"这里是计算器的" + + "使用说明:\n" + + "本计算器可进行连续的加减乘除和括号运算,具有储存数字,阶乘,开根号等功能,以下是一些按键的使用说明:\n" + + "(1)backspace:退格,删除当前输入数字中的最后一位\r\n" + + "(2)CE:清除,清除显示的数字。\r\n" + + "(3)C:归零,清除当前的计算。\r\n" + + "(4)MC:清除存储器中的数值。\r\n" + + "(5)MR:将存于存储器中的数显示在计算器的显示框上。\r\n" + + "(6)MS:将显示框的数值存于存储器中。\r\n" + + "(7)M+:将显示框的数或表达式的结果与存储器中的数相加并进行存储。\r\n" + + "(8)Sqrt:计算显示数字的平方根。\r\n" + + "(9)1/x:输出显示框中的数字或表达式的倒数.\r\n" + + "(10)!:计算数字的阶乘,可与基础运算一起算。\r\n" + + "(11)储存器:左上角是储存器中数字的显示位置,点击【查看】中的【查看储存器】可显示当前储存器中的数字,储存器中的数字默认为0。\r\n" + + "由于时间问题,其他功能还未开发,在使用中可能有些bug,请多包涵,谢谢!","使用说明",JOptionPane.INFORMATION_MESSAGE); + } +} diff --git a/src/java2022spring/Mainclass.java b/src/java2022spring/Mainclass.java new file mode 100644 index 0000000000000000000000000000000000000000..d8deca1e03627bfdf531ff5a87589bf220b61331 --- /dev/null +++ b/src/java2022spring/Mainclass.java @@ -0,0 +1,42 @@ +package java2022spring; +import java.awt.*; +import javax.swing.*; +public class Mainclass { + static JTextArea jieguo; + public static void main(String[] args) { + // TODO 自动生成的方法存根 + JFrame jiemian=new JFrame("计算器");//底层窗口 + jiemian.setVisible(true); + jiemian.setLayout(new BorderLayout()); + jiemian.setBounds(100,100,700,350); + + jieguo=new JTextArea(1,100); + jieguo.setText("0"); + jieguo.setFont(new Font("宋体", Font.PLAIN, 20)); + Cclass c=new Cclass(); + jiemian.add(jieguo,BorderLayout.NORTH); + jiemian.add(c,BorderLayout.CENTER); + jiemian.validate(); + + JMenuBar xuanxiang=new JMenuBar();//菜单 + jiemian.setJMenuBar(xuanxiang); + JMenu chakan=new JMenu("查看(V)"); + JMenu banzhu=new JMenu("帮助(H)"); + JMenuItem cucunqi=new JMenuItem("查看储存器"); + JMenuItem guanyu=new JMenuItem("关于计算器"); + xuanxiang.add(chakan); + chakan.add(cucunqi); + xuanxiang.add(chakan); + xuanxiang.add(banzhu); + banzhu.add(guanyu); + jiemian.validate(); + + Help help=new Help(); + Neirong neirong=new Neirong(); + cucunqi.addActionListener(neirong); + guanyu.addActionListener(help); + + jiemian.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + +} diff --git a/src/java2022spring/Neirong.java b/src/java2022spring/Neirong.java new file mode 100644 index 0000000000000000000000000000000000000000..a595a2cffbeeae23325e0f96be2ecf73f36e22ee --- /dev/null +++ b/src/java2022spring/Neirong.java @@ -0,0 +1,8 @@ +package java2022spring; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +public class Neirong implements ActionListener{ + public void actionPerformed(ActionEvent e) { + Cclass.ccq.setText("储存器:"+String.valueOf(Cclass.cucunqi)); + } +} diff --git a/src/java2022spring/Sanchu.java b/src/java2022spring/Sanchu.java new file mode 100644 index 0000000000000000000000000000000000000000..5fabb1eb55ed55522178c033ba882924f2c7fc7a --- /dev/null +++ b/src/java2022spring/Sanchu.java @@ -0,0 +1,14 @@ +package java2022spring; +import java.awt.event.*; +import javax.swing.*; +import java.awt.*; +public class Sanchu implements ActionListener{ + public void actionPerformed(ActionEvent e) { + if(e.getActionCommand().equals("Backspace")) { + Mainclass.jieguo.setText(Mainclass.jieguo.getText().substring(0,Mainclass.jieguo.getText().length()-1)); + } + if(e.getActionCommand().equals("C")) { + Mainclass.jieguo.setText("0"); + } + } +} diff --git a/src/java2022spring/Shuchu.java b/src/java2022spring/Shuchu.java new file mode 100644 index 0000000000000000000000000000000000000000..5c66daf560c9a1cfe608418f1c29916969066b2d --- /dev/null +++ b/src/java2022spring/Shuchu.java @@ -0,0 +1,129 @@ +package java2022spring; +import java.awt.event.*; +import java.util.*; + +public class Shuchu implements ActionListener{ + Stack shuzi=null;//存放数字的栈 + Stack fuhao=null;//存放运算符号的栈 + public void actionPerformed(ActionEvent e) { + String biaodashi=Mainclass.jieguo.getText(); + Mainclass.jieguo.append("="+jisuan(biaodashi)); + } + public String jisuan(String bds) { + bds+="="; + shuzi=new Stack(); + shuzi.clear(); + fuhao=new Stack(); + fuhao.clear(); + StringBuffer string=new StringBuffer();//可变字符序列存放数字串 + for(int i=0;i=1;k--) { + suzi2*=k; + } + shuzi.push(String.valueOf(suzi2));//压入数字栈 + string=new StringBuffer(""); + } + else { + shuzi.push(suzi); + string=new StringBuffer(""); + } + + } + while(youxianji(a)&&(!fuhao.empty())) { + double number1=Double.parseDouble(shuzi.pop()); + double number2=Double.parseDouble(shuzi.pop()); + switch(fuhao.pop().toString()) { + case "+": + shuzi.push(String.valueOf(number2+number1)); + break; + case "-": + shuzi.push(String.valueOf(number2-number1)); + break; + case "*": + shuzi.push(String.valueOf(number2*number1)); + break; + case "/": + if(number1==0) + return "除数不能为0,请按C键后重新输入"; + else + shuzi.push(String.valueOf(number2/number1)); + break; + default: + break; + } + } + if(a!='=') { + fuhao.push(String.valueOf(a));//压入符号栈 + if(a==')') {//去掉括号,方法来源于网络 + fuhao.pop(); + fuhao.pop(); + } + + } + + } + } + + return shuzi.pop(); + + } + public boolean ifnumber(char b) {//判断b是否为数字中的一部分 + if((b>='0'&&b<='9')||b=='.'||b=='%'||b=='!') { + return true; + } + else { + return false; + } + } + public boolean youxianji(char c) {//判断运算符号优先级和决定要不要算前面的表达式 + if(fuhao.empty()) + return false; + String fuhao1=String.valueOf(fuhao.peek()); + if(fuhao1.equals("(")) + return false; + switch(c) { + + case '(': + return false; + + case '*':{ + if(fuhao1.equals("+")||fuhao1.equals("-")) + return false; + else + return true; + } + case '/':{ + if(fuhao1.equals("+")||fuhao1.equals("-")) + return false; + else + return true; + } + case '+': + return true; + case '-': + return true; + case ')': + return true; + case '=': + return true; + } + + + return false; + } +} diff --git a/src/java2022spring/Test.java b/src/java2022spring/Test.java deleted file mode 100644 index 24deb29bfc0e5f50fdedcd21b504e77b529d48b6..0000000000000000000000000000000000000000 --- a/src/java2022spring/Test.java +++ /dev/null @@ -1,7 +0,0 @@ -package java2022spring; - -public class Test { - public static void main(String[] args) { - System.out.println("Hello world!"); - } -} diff --git a/src/java2022spring/Xiangjia.java b/src/java2022spring/Xiangjia.java new file mode 100644 index 0000000000000000000000000000000000000000..b7292f94736ea3c0468e1fb5ad906bbac681cd19 --- /dev/null +++ b/src/java2022spring/Xiangjia.java @@ -0,0 +1,12 @@ +package java2022spring; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +public class Xiangjia implements ActionListener{ + Shuchu shuchu2; + public Xiangjia(Shuchu shuchu) { + shuchu2=shuchu; + } + public void actionPerformed(ActionEvent e) { + Cclass.cucunqi+=Double.parseDouble(shuchu2.jisuan(Mainclass.jieguo.getText())); + } +} diff --git a/src/java2022spring/Xianshi.java b/src/java2022spring/Xianshi.java new file mode 100644 index 0000000000000000000000000000000000000000..89255ed2eb54d644564a2590998942f86747ce9f --- /dev/null +++ b/src/java2022spring/Xianshi.java @@ -0,0 +1,8 @@ +package java2022spring; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +public class Xianshi implements ActionListener{ + public void actionPerformed(ActionEvent e) { + Mainclass.jieguo.setText(String.valueOf(Cclass.cucunqi)); + } +} diff --git a/src/java2022spring/suru.java b/src/java2022spring/suru.java new file mode 100644 index 0000000000000000000000000000000000000000..5a1d6ce3d8ec299be7d662aef2ebb1eee857fa6c --- /dev/null +++ b/src/java2022spring/suru.java @@ -0,0 +1,19 @@ +package java2022spring; +import java.awt.event.*; +import javax.swing.*; +import java.awt.*; +public class suru implements ActionListener{ + public void actionPerformed(ActionEvent e) { + if(Mainclass.jieguo.getText().equals("0")) { + if(e.getActionCommand().equals(".")) {//防止出现第一个数无法输入小于1的小数的情况 + Mainclass.jieguo.append(e.getActionCommand()); + } + else { + Mainclass.jieguo.setText(e.getActionCommand()); + } + } + else { + Mainclass.jieguo.append(e.getActionCommand()); + } + } +}