diff --git a/src/java2022spring/CalculatorStart.java b/src/java2022spring/CalculatorStart.java new file mode 100644 index 0000000000000000000000000000000000000000..6b1ac621f88b6d731aa49b3062abb035ece099a2 --- /dev/null +++ b/src/java2022spring/CalculatorStart.java @@ -0,0 +1,312 @@ +package java2022spring; + +import javax.swing.*; +import java2022spring.Science; +import java.awt.*; +import java.awt.event.*; + + @SuppressWarnings("unused") + public class CalculatorStart { + public static void main(String[] args) { + new Jisuan(); + } + } + @SuppressWarnings("serial") + class Jisuan extends JFrame implements ActionListener{ + JPanel Panel; + JTextField Text; + JMenuBar menubar; + public Jisuan(){ + this.setTitle("标准计算器"); //设置窗口标题 + this.setSize(350,450); //设置窗口大小 + this.setLayout(new BorderLayout()); //设置布局方式 + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //当点击关闭窗口时退出程序 + this.setLocationRelativeTo(null); //窗口出现位置固定在正中央 + this.setResizable(true); //窗体大小可以被用户改变 + Text=new JTextField(15); + Text.setHorizontalAlignment(JTextField.RIGHT); //计算器显示数字的文本框内容右对齐 + Text.setFont(new Font("TimesRoman",Font.BOLD,30)); //设置文本框字体样式及大小 + Text.setEditable(false); //文本框不可编辑 + Text.setBackground(Color.WHITE); + this.add(Text,BorderLayout.NORTH); //将文本框放至窗口北部 + + //**********************************设置菜单栏************************************ + JMenuBar menubar=new JMenuBar(); + JMenu menu2=new JMenu("选择"); + JMenu menu3=new JMenu("帮助"); + menubar.add(menu2); + menubar.add(menu3); + this.setJMenuBar(menubar); + //设置菜单栏下的菜单项 + JMenuItem biaozhunItem=new JMenuItem("标准计算器"); + JMenuItem kexueItem=new JMenuItem("科学计算器"); + JMenuItem shiyongItem=new JMenuItem("使用说明"); + menu2.add(biaozhunItem); //在编辑菜单栏中添加标准计算器菜单项 + menu2.add(kexueItem); //在编辑菜单栏中添加科学计算器菜单项 + kexueItem.addActionListener(new ActionListener() { //设置点击科学计算器弹出科学计算器窗口 + public void actionPerformed(ActionEvent arg0) { + ScienceJisuan kexue = new ScienceJisuan(); + kexue.setVisible(true); + } + } + ); + menu3.add(shiyongItem); //在帮助菜单栏中添加使用说明菜单项 + shiyongItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + JFrame use=new JFrame("使用说明"); + use.setSize(350,340); + use.setResizable(false); + use.setLocationRelativeTo(null); + JTextArea useText=new JTextArea("感谢您使用本计算器。\n操作说明:\n(1)点击编辑可以选择你想要的计算器类型;\n" + + "(2)点击按钮开始运算。\n按钮功能说明:\n(1)+为加号,-为减号,×为乘号,÷为除号,+/-为当\n前数字的正负转换;\n(2)BACK退格,C清空;\n" + + "(3)%除以一百,sqrt取平方根,²平方,³立方,1/x\n取倒数;\n(4)MS存储记忆当前数字,MC清空存储数字,MR呈\n现存储数字," + + "M+将存储数字与当前数字相加,M-将存\n储数字与当前数字相减;\n(5)sin正弦函数,cos余弦函数,tan正切函数,lg以\n十为底的对数,exp是e的n次方;" + + ""); + useText.setFont(new Font("TimesRoman",Font.BOLD,13)); + use.add(useText); + use.setVisible(true); + } + }); + + //************************************设置按钮************************************** + JButton button[]=new JButton[28]; + button[0]=new JButton("MC"); + button[1]=new JButton("MR"); + button[2]=new JButton("MS"); + button[3]=new JButton("M+"); + button[4]=new JButton("%"); + button[5]=new JButton("sqrt"); + button[6]=new JButton("²"); + button[7]=new JButton("1/x"); + button[8]=new JButton("BACK"); + button[9]=new JButton("C"); + button[10]=new JButton("³"); + button[11]=new JButton("÷"); + button[12]=new JButton("7"); + button[13]=new JButton("8"); + button[14]=new JButton("9"); + button[15]=new JButton("×"); + button[16]=new JButton("4"); + button[17]=new JButton("5"); + button[18]=new JButton("6"); + button[19]=new JButton("-"); + button[20]=new JButton("1"); + button[21]=new JButton("2"); + button[22]=new JButton("3"); + button[23]=new JButton("+"); + button[24]=new JButton("+/-"); + button[25]=new JButton("0"); + button[26]=new JButton("."); + button[27]=new JButton("="); + for(int i=4;i<=27;i++) { + button[i].setBackground(Color.WHITE); //设置按钮颜色 + button[i].setForeground(Color.BLACK); + button[i].setFont(new Font("",Font.PLAIN,15)); //设置按钮字体大小 + } + //设置按钮布局 + Panel=new JPanel(); + Panel.setLayout(new GridLayout(7,4)); + for(int i=0;i<=27;i++) { + Panel.add(button[i]); + } + this.add(Panel); //添加面板至窗口 + this.setVisible(true); //显示面板内容 + for(int i=0;i<=27;i++) //定义监听器 + button[i].addActionListener(this); + this.setVisible(true); + } + private StorageField storage=new StorageField(); //存储区 + private StringBuilder getnum=new StringBuilder(); + double num1,num2,num3; + double sum=0; + int a; + //设置按钮功能 + public void actionPerformed(ActionEvent e) { + String str=e.getActionCommand(); + if(str.equals("0")) + { + getnum.append("0"); //0 + Text.setText(getnum.toString()); + } + else if(str.equals("1")) //1 + { + getnum.append("1"); + Text.setText(getnum.toString()); + } + else if(str.equals("2")) //2 + { + getnum.append("2"); + Text.setText(getnum.toString()); + } + else if(str.equals("3")) //3 + { + getnum.append("3"); + Text.setText(getnum.toString()); + } + else if(str.equals("4")) //4 + { + getnum.append("4"); + Text.setText(getnum.toString()); + } + else if(str.equals("5")) //5 + { + getnum.append("5"); + Text.setText(getnum.toString()); + } + else if(str.equals("6")) //6 + { + getnum.append("6"); + Text.setText(getnum.toString()); + } + else if(str.equals("7")) //7 + { + getnum.append("7"); + Text.setText(getnum.toString()); + } + else if(str.equals("8")) //8 + { + getnum.append("8"); + Text.setText(getnum.toString()); + } + else if(str.equals("9")) //9 + { + getnum.append("9"); + Text.setText(getnum.toString()); + } + else if(str.equals(".")) //. + { + getnum.append("."); + Text.setText(getnum.toString()); + } + else if(str.equals("BACK")) //按下CE退格 + { + getnum.deleteCharAt(getnum.length()-1); + Text.setText(getnum.toString()); + } + else if(str.equals("C")) //按下C清空 + { + getnum=new StringBuilder(); + Text.setText(getnum.toString()); + } + else if(str.equals("+")) //+ + {a=1; + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + Text.setText("+"); + } + else if(str.equals("-")) //- + {a=2; + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + Text.setText("-"); + } + else if(str.equals("×")) { //× + num1=Double.parseDouble(Text.getText()); + a=3; + getnum=new StringBuilder(); + Text.setText("×"); + } + else if(str.equals("÷")) { //÷ + num1=Double.parseDouble(Text.getText()); + a=4; + getnum=new StringBuilder(); + Text.setText("÷"); + } + else if(str.equals("%")) { //取百分数 + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + sum=num1/100; + Text.setText(sum+""); + } + else if(str.equals("²")) { //平方 + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + Text.setText(num1*num1+""); + sum=num1*num1; + } + else if(str.equals("³")) { //立方 + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + Text.setText(num1*num1*num1+""); + sum=num1*num1*num1; + } + else if(str.equals("sqrt")) { //开根 + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + Text.setText(Math.sqrt(num1)+""); + sum=Math.sqrt(num1); + } + else if(str.equals("1/x")) { //倒数 + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + if(num1==0) { + Text.setText(num1+"不能求倒数"); + }else { + Text.setText(1/num1+""); + sum=1/num1; + } + } + else if(str.equals("+/-")) { //正负转换 + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + if(num1>0) { + sum=-num1; + Text.setText(sum+""); + } + else if(num1<0) { + sum=-num1; + Text.setText(sum+""); + } + } + + else if(str.equals("=")) { //按=实现算法 + num2=Double.parseDouble(Text.getText()); + if(a==1) { + sum=num1+num2; + Text.setText(sum+""); + } + else if(a==2){ + sum=num1-num2; + Text.setText(sum+""); + } + else if(a==3) { + sum=num1*num2; + Text.setText(sum+""); + } + else if(a==4) { + sum=num1/num2; + Text.setText(sum+""); + } + } + else if(str.equals("MC")) { //清空存储区 + storage.StorageJudge=true; + storage.StorageNum=0; + } + else if(str.equals("MR")) { //显示存储区存储数 + storage.StorageJudge=true; + Text.setText(storage.StorageNum+""); + } + else if(str.equals("MS")){ //存储文本框内的数 + num3=Double.parseDouble(Text.getText()); + storage.StorageNum=num3; + } + else if(str.equals("M+")) { //将存储数加上文本框内的数 + storage.StorageJudge=true; + num3=Double.parseDouble(Text.getText()); + storage.StorageNum+=num3; + } + } +class StorageField{ +public double StorageNum; //存储数据 +public boolean StorageJudge; //是否启动存储区 +public StorageField(){ + StorageNum=0; + StorageJudge=false; +} +} +} + + + + + \ No newline at end of file diff --git a/src/java2022spring/Science.java b/src/java2022spring/Science.java new file mode 100644 index 0000000000000000000000000000000000000000..600294b329d11a7a6f616ecff20665ed75ef38dd --- /dev/null +++ b/src/java2022spring/Science.java @@ -0,0 +1,364 @@ +package java2022spring; + +import javax.swing.*; + +import java2022spring.CalculatorStart; + +import java.awt.*; +import java.awt.event.*; + +@SuppressWarnings("unused") +public class Science{ + public static void main(String[] args) { + new ScienceJisuan(); +} +} +@SuppressWarnings("serial") +class ScienceJisuan extends JFrame implements ActionListener{ + JPanel Panel; + JPanel Panel2; + JTextField Text; + JMenuBar menubar; + public ScienceJisuan(){ + this.setTitle("科学计算器"); //设置窗口标题 + this.setSize(450,450); //设置窗口大小 + this.setLayout(new BorderLayout()); //设置布局方式 + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //当点击关闭窗口时退出程序 + this.setLocationRelativeTo(null); //窗口出现位置固定在正中央 + this.setResizable(true); //窗体大小可以被用户改变 + Text=new JTextField(15); + Text.setHorizontalAlignment(JTextField.RIGHT); //计算器显示数字的文本框内容右对齐 + Text.setFont(new Font("TimesRoman",Font.BOLD,30)); //设置文本框字体样式及大小 + Text.setEditable(false); + Text.setBackground(Color.WHITE); + this.add(Text,BorderLayout.NORTH); //将文本框放至窗口北部 + + //**********************************设置菜单栏************************************ + JMenuBar menubar=new JMenuBar(); + JMenu menu2=new JMenu("选择"); + JMenu menu3=new JMenu("帮助"); + menubar.add(menu2); + menubar.add(menu3); + this.setJMenuBar(menubar); + //设置菜单栏下的菜单项 + JMenuItem biaozhunItem=new JMenuItem("标准计算器"); + JMenuItem kexueItem=new JMenuItem("科学计算器"); + JMenuItem shiyongItem=new JMenuItem("使用说明"); + menu2.add(biaozhunItem); //在编辑菜单栏中添加标准计算器菜单项 + menu2.add(kexueItem); //在编辑菜单栏中添加科学计算器菜单项 + biaozhunItem.addActionListener(new ActionListener() { //设置点击标准计算器弹出科学计算器窗口 + public void actionPerformed(ActionEvent arg0) { + Jisuan biaozhun = new Jisuan(); + biaozhun.setVisible(true); + } + } + ); + menu3.add(shiyongItem); //在帮助菜单栏中添加使用说明菜单项 + shiyongItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + JFrame use=new JFrame("使用说明"); + use.setSize(350,340); + use.setResizable(false); + use.setLocationRelativeTo(null); + JTextArea useText=new JTextArea("感谢您使用本计算器。\n操作说明:\n(1)点击编辑可以选择你想要的计算器类型;\n" + + "(2)点击按钮开始运算。\n按钮功能说明:\n(1)+为加号,-为减号,×为乘号,÷为除号,+/-为当\n前数字的正负转换;\n(2)BACK退格,C清空;\n" + + "(3)%除以一百,sqrt取平方根,²平方,³立方,1/x\n取倒数;\n(4)MS存储记忆当前数字,MC清空存储数字,MR呈\n现存储数字," + + "M+将存储数字与当前数字相加,M-将存\n储数字与当前数字相减;\n(5)sin正弦函数,cos余弦函数,tan正切函数,lg以\n十为底的对数,exp是e的n次方;" + + ""); + useText.setFont(new Font("TimesRoman",Font.BOLD,13)); + use.add(useText); + use.setVisible(true); + } + }); + + //************************************设置第一个面板的按钮************************************** + JButton button[]=new JButton[28]; + button[0]=new JButton("MC"); + button[1]=new JButton("MR"); + button[2]=new JButton("MS"); + button[3]=new JButton("M+"); + button[4]=new JButton("%"); + button[5]=new JButton("sqrt"); + button[6]=new JButton("²"); + button[7]=new JButton("1/x"); + button[8]=new JButton("BACK"); + button[9]=new JButton("C"); + button[10]=new JButton("³"); + button[11]=new JButton("÷"); + button[12]=new JButton("7"); + button[13]=new JButton("8"); + button[14]=new JButton("9"); + button[15]=new JButton("×"); + button[16]=new JButton("4"); + button[17]=new JButton("5"); + button[18]=new JButton("6"); + button[19]=new JButton("-"); + button[20]=new JButton("1"); + button[21]=new JButton("2"); + button[22]=new JButton("3"); + button[23]=new JButton("+"); + button[24]=new JButton("+/-"); + button[25]=new JButton("0"); + button[26]=new JButton("."); + button[27]=new JButton("="); + for(int i=4;i<=27;i++) { + button[i].setBackground(Color.WHITE); //设置按钮颜色 + button[i].setForeground(Color.BLACK); + button[i].setFont(new Font("",Font.PLAIN,15)); //设置按钮字体大小 + } + //设置按钮布局 + Panel=new JPanel(); + Panel.setLayout(new GridLayout(7,4)); + for(int i=0;i<=27;i++) { + Panel.add(button[i]); + button[i].addActionListener(this); + } + this.add(Panel); //添加面板至窗口 + //*****************************设置第二个面板的按钮(科学计算器新增)************************************** + JButton button2[]=new JButton[7]; + button2[0]=new JButton("M-"); + button2[1]=new JButton("sin"); + button2[2]=new JButton("cos"); + button2[3]=new JButton("tan"); + button2[4]=new JButton("lg"); + button2[5]=new JButton("exp"); + button2[6]=new JButton("π"); + Panel2=new JPanel(); + Panel2.setLayout(new GridLayout(7,1)); + for(int i=0;i<=6;i++) { + Panel2.add(button2[i]); + button2[i].addActionListener(this); + } + this.add(Panel2,BorderLayout.EAST); + this.setVisible(true); + } + private StorageField storage=new StorageField(); //存储区 + private StringBuilder getnum=new StringBuilder(); + double num1,num2,num3; + double sum=0; + int a=0; + //设置按钮功能 + public void actionPerformed(ActionEvent e) { + String str=e.getActionCommand(); + if(str.equals("0")) + {getnum.append("0"); //0 + Text.setText(getnum.toString()); + } + else if(str.equals("1")) //1 + { + getnum.append("1"); + Text.setText(getnum.toString()); + } + else if(str.equals("2")) //2 + { + getnum.append("2"); + Text.setText(getnum.toString()); + } + else if(str.equals("3")) //3 + { + getnum.append("3"); + Text.setText(getnum.toString()); + } + else if(str.equals("4")) //4 + { + getnum.append("4"); + Text.setText(getnum.toString()); + } + else if(str.equals("5")) //5 + { + getnum.append("5"); + Text.setText(getnum.toString()); + } + else if(str.equals("6")) //6 + { + getnum.append("6"); + Text.setText(getnum.toString()); + } + else if(str.equals("7")) //7 + { + getnum.append("7"); + Text.setText(getnum.toString()); + } + else if(str.equals("8")) //8 + { + getnum.append("8"); + Text.setText(getnum.toString()); + } + else if(str.equals("9")) //9 + { + getnum.append("9"); + Text.setText(getnum.toString()); + } + else if(str.equals(".")) //. + { + getnum.append("."); + Text.setText(getnum.toString()); + } + else if(str.equals("π")) + {getnum.append("3.141592653589793"); + Text.setText(getnum.toString()); + } + + if(str.equals("BACK")) //按下CE退格 + { + getnum.deleteCharAt(getnum.length()-1); + Text.setText(getnum.toString()); + } + else if(str.equals("C")) //按下C清空 + { + getnum=new StringBuilder(); + Text.setText(getnum.toString()); + } + else if(str.equals("+")) //+ + { + a=1; + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + Text.setText("+"); + } + else if(str.equals("-")) //- + {a=2; + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + Text.setText("-"); + } + else if(str.equals("×")) { //× + num1=Double.parseDouble(Text.getText()); + a=3; + getnum=new StringBuilder(); + Text.setText("×"); + } + else if(str.equals("÷")) { //÷ + num1=Double.parseDouble(Text.getText()); + a=4; + getnum=new StringBuilder(); + Text.setText("÷"); + } + else if(str.equals("%")) { //取百分数 + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + sum=num1/100; + Text.setText(sum+""); + } + else if(str.equals("²")) { //平方 + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + Text.setText(num1*num1+""); + sum=num1*num1; + } + else if(str.equals("³")) { //立方 + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + Text.setText(num1*num1*num1+""); + sum=num1*num1*num1; + } + else if(str.equals("sqrt")) { //开根 + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + Text.setText(Math.sqrt(num1)+""); + sum=Math.sqrt(num1); + } + else if(str.equals("1/x")) { //倒数 + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + if(num1==0) { + Text.setText(num1+"不能求倒数"); + }else { + Text.setText(1/num1+""); + sum=1/num1; + } + } + else if(str.equals("+/-")) { //正负转换 + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + if(num1>0) { + sum=-num1; + Text.setText(sum+""); + } + else if(num1<0) { + sum=-num1; + Text.setText(sum+""); + } + } + + else if(str.equals("=")) { //按=实现算法 + num2=Double.parseDouble(Text.getText()); + if(a==1) { + sum=num1+num2; + Text.setText(sum+""); + } + else if(a==2){ + sum=num1-num2; + Text.setText(sum+""); + } + else if(a==3) { + sum=num1*num2; + Text.setText(sum+""); + } + else if(a==4) { + sum=num1/num2; + Text.setText(sum+""); + } + } + else if(str.equals("MC")) { //清空存储区 + storage.StorageJudge=true; + storage.StorageNum=0; + } + else if(str.equals("MR")) { //显示存储区存储数 + storage.StorageJudge=true; + Text.setText(storage.StorageNum+""); + } + else if(str.equals("MS")){ //存储文本框内的数 + num3=Double.parseDouble(Text.getText()); + storage.StorageNum=num3; + } + else if(str.equals("M+")) { //将存储数加上文本框内的数 + storage.StorageJudge=true; + num3=Double.parseDouble(Text.getText()); + storage.StorageNum+=num3; + } + else if(str.equals("M-")) { + storage.StorageJudge=true; + num3=Double.parseDouble(Text.getText()); + storage.StorageNum-=num3; + } + else if(str.equals("sin")) { + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + sum=Math.sin(num1); + Text.setText(sum+""); + } + else if(str.equals("cos")) { + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + sum=Math.cos(num1); + Text.setText(sum+""); + } + else if(str.equals("tan")) { + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + sum=Math.tan(num1); + Text.setText(sum+""); + } + else if(str.equals("lg")) { + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + sum=Math.log10(num1); + Text.setText(sum+""); + } + else if(str.equals("exp")) { + num1=Double.parseDouble(Text.getText()); + getnum=new StringBuilder(); + sum=Math.exp(num1); + Text.setText(sum+""); + } + } +class StorageField{ +public double StorageNum; //存储数据 +public boolean StorageJudge; //是否启动存储区 +public StorageField(){ +StorageNum=0; +StorageJudge=false; +} +} +} \ No newline at end of file