⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 caculator.java

📁 java科学计算器源码,供大家参考
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.math.*;

//**********************[窗体及功能类]***********************
class Window extends JFrame implements ActionListener,KeyListener,ItemListener
{
	double pi=3.1415926535897932384626433832795;

	//************--------菜单条相关声明--------**************

	JMenuBar menubar;
	JMenu menu1,menu2,menu3;
	JMenuItem item1,item2,item3,item4,item5,item6;

	//**************--------布局相关声明--------**************

	Box basebox;
	JPanel panel,panel1,panel2,panel3,panel4,panel22;

	//************--------文本框相关声明--------**************

	JTextField t_show;//主显示框
	JLabel Null;//为布局而设的空插件
	JTextField t_M,t_K;//t_M指示储存器状态,t_K指示括号状态

	//************----------按钮相关声明--------**************

	JButton b_Backspace,b_CE,b_C;//操作区按钮
	JButton b_MC,b_MR,b_MS,b_Madd;//存储器区按钮
	JButton b_0,b_1,b_2,b_3,b_4,b_5,b_6,b_7,b_8,b_9;//数字区按键
	JButton b_add,b_sub,b_mul,b_div,b_sqrt,b_dao,b_sign,b_dian,b_deng,b_100;//标准操作按键
	JButton b_xy,b_ln,b_log,b_pi,b_x2,b_x3,b_sin,b_cos,b_tan,b_k1,b_k2,b_n;//科学操作按键
	ButtonGroup group;//单选域
	JRadioButton j,h;//单选扭,j是角度,h是弧度

	//************----------数据相关声明--------**************

	double d[]={0,0,0,0,0,0,0,0,0,0,0};//数据1~10
	String t[]={"0","0","0","0","0","0","0","0","0","0","0"};//数据相应的字符串型
	//记录运算符 mark指示当前是那个操作符1-mark1,2-mark2. mark[1],[2]表示 0无 1加 2减 3乘 4除
	int mark=1,marks[]={0,0,0,0,0};
	int state=1;//记录状态 说明现在输入的是第几个数
	int start=0;//记录状态 0说明第一次输入,数字替换以前内容,1说明在尾部添加数字
	int deng=0;//记录是否进行过'='运算 0没有 1有
	int k1=0,k2=0;//记录括号状态
	double Mdate=0;//M储存器内数值
	int radio=1;//1记录单选钮选中“角度”,2-弧度

	Window(String s,int style)//style表征窗体类型 1代表标准型 2代表科学型
	{
		//**************--------窗体设置---------***************
		super(s);
		if(style==1)
			setBounds(100,100,380,270);
		else
			setBounds(100,100,550,270);
		setVisible(true);
		setResizable(false);

		//**************-------菜单条设置--------***************
		menubar = new JMenuBar();
		menu1 = new JMenu("编辑(E)");
		menu1.setMnemonic(KeyEvent.VK_E);//设置快捷键Alt+E
		item1 = new JMenuItem("复制",new ImageIcon("copy.jpg"));
		item1.addActionListener(this);
		item2 = new JMenuItem("粘贴",new ImageIcon("cv.jpg"));
		item2.addActionListener(this);
		item1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
		item2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));

		menu2 = new JMenu("查看(V)");
		menu2.setMnemonic(KeyEvent.VK_V);//设置快捷键Alt+V
		item3 = new JMenuItem("标准型",new ImageIcon("a.jpg"));
		item3.addActionListener(new ActionListener() { 
			public void actionPerformed(ActionEvent e) { 
				dispose();//释放当前窗口
				new Window("标准型计算器",1).setVisible(true); 
			} 
		}); 
		item4 = new JMenuItem("科学型",new ImageIcon("b.jpg"));
		item4.addActionListener(new ActionListener() { 
			public void actionPerformed(ActionEvent e) { 
				dispose();//释放当前窗口
				new Window("科学型计算器",2).setVisible(true); 
			} 
		}); 


		menu3 = new JMenu("帮助(H)");
		menu3.setMnemonic(KeyEvent.VK_H);//设置快捷键Alt+H
		item5 = new JMenuItem("帮助",new ImageIcon("help.jpg"));
		item5.addActionListener(this);
		item6 = new JMenuItem("关于",new ImageIcon("about.jpg"));
		item6.addActionListener(this);

		menu1.add(item1);
		menu1.addSeparator();
		menu1.add(item2);
		menu2.add(item3);
		menu2.addSeparator();
		menu2.add(item4);
		menu3.add(item5);
		menu3.addSeparator();
		menu3.add(item6);
		menubar.add(menu1);
		menubar.add(menu2);
		menubar.add(menu3);
		setJMenuBar(menubar);

		//**************---------面板设置---------**************

		basebox = Box.createVerticalBox();
		FlowLayout flow = new FlowLayout();
		flow.setAlignment(FlowLayout.RIGHT);

		panel1 = new JPanel();
		if (style==1)
			t_show = new JTextField(32);//显示文本框
		else
			t_show = new JTextField(48);//显示文本框
		t_show.setText("0");
		t_show.setEditable(false);
		t_show.setHorizontalAlignment(SwingConstants.RIGHT);//显示右对齐
		t_show.setBackground(Color.white);
		panel1.setLayout(flow);
		panel1.add(t_show);
		basebox.add(panel1);
		
		panel2 = new JPanel();
		panel2.setLayout(flow);
		t_K = new JTextField(5);
		t_K.setHorizontalAlignment(SwingConstants.CENTER);//显示右对齐
		t_K.setText(" — ");
		t_K.setEditable(false);
		Null = new JLabel("              ");
		t_M = new JTextField(5);
		t_M.setHorizontalAlignment(SwingConstants.CENTER);//显示右对齐
		t_M.setText(" — ");
		t_M.setEditable(false);
		b_Backspace = new JButton(" Backspace ");
		b_CE = new JButton("   CE   ");
		b_C = new JButton("    C    ");

		panel22 = new JPanel();
		panel22.setLayout(new GridLayout(1,style,2,1));
		if(style==2)
		{
			group = new ButtonGroup();
			j = new JRadioButton("角度",true);
			j.addItemListener(this);j.addKeyListener(this);
			h = new JRadioButton("弧度",false);
			h.addItemListener(this);h.addKeyListener(this);
			group.add(j);
			group.add(h);
			panel22.add(t_K);
		}
		panel22.add(t_M);
		
		if(style==2)
		{
			panel2.add(j);
		    panel2.add(h);
		}
		panel2.add(panel22);
		panel2.add(Null);
		panel2.add(b_Backspace);
		panel2.add(b_CE);
		panel2.add(b_C);

		
		basebox.add(panel2);

		panel = new JPanel();
		panel3 = new JPanel();
		panel3.setLayout(new GridLayout(4,6,3,2));

		//声明添加所需按钮
		b_MC = new JButton("MC");
		b_MR = new JButton("MR");
		b_MS = new JButton("MS");
		b_Madd = new JButton("M+");
		b_0 = new JButton("0");
		b_1 = new JButton("1");
		b_2 = new JButton("2");
		b_3 = new JButton("3");
		b_4 = new JButton("4");
		b_5 = new JButton("5");
		b_6 = new JButton("6");
		b_7 = new JButton("7");
		b_8 = new JButton("8");
		b_9 = new JButton("9");
		b_add = new JButton("+");
		b_sub = new JButton("-");
		b_mul = new JButton("×");
		b_div = new JButton("÷");
		b_deng = new JButton("=");
		b_dian = new JButton(".");
		b_sign = new JButton("+/-");
		b_100 = new JButton("%");
		b_dao = new JButton("1/x");
		b_sqrt = new JButton("sqrt");

		panel3.add(b_MC);  panel3.add(b_7);  panel3.add(b_8);   panel3.add(b_9);   panel3.add(b_div);  panel3.add(b_sqrt);
		panel3.add(b_MR);  panel3.add(b_4);  panel3.add(b_5);   panel3.add(b_6);   panel3.add(b_mul);panel3.add(b_100);
		panel3.add(b_MS);  panel3.add(b_1);  panel3.add(b_2);   panel3.add(b_3);   panel3.add(b_sub);  panel3.add(b_dao);
		panel3.add(b_Madd);panel3.add(b_0);  panel3.add(b_sign);panel3.add(b_dian);panel3.add(b_add);  panel3.add(b_deng);
		
		panel4 = new JPanel();
		panel4.setLayout(new GridLayout(4,3,3,2));
		b_xy = new JButton("x^y");
		b_ln = new JButton("ln");
		b_log = new JButton("log");
		b_pi = new JButton("π");
		b_x2 = new JButton("x^2");
		b_x3 = new JButton("x^3");
		b_k1 = new JButton("(");
		b_k2 = new JButton(")");
		b_sin = new JButton("sin");
		b_cos = new JButton("cos");
		b_tan = new JButton("tan");
		b_n = new JButton("n!");
		panel4.add(b_pi);  panel4.add(b_k1);  panel4.add(b_k2);
		panel4.add(b_tan);  panel4.add(b_xy);  panel4.add(b_ln);
		panel4.add(b_cos);  panel4.add(b_x3);  panel4.add(b_log);
		panel4.add(b_sin);  panel4.add(b_x2);  panel4.add(b_n);

		panel.setLayout(flow);
		if (style==2)
		{
			panel.add(panel4);
		}
		panel.add(panel3);
		basebox.add(panel);

		//添加键盘事件
		addKeyListener(this);
		//给按钮添加监听器,监听事件
		b_Backspace.addActionListener(this);b_Backspace.addKeyListener(this);
		b_CE.addActionListener(this);b_CE.addKeyListener(this);
		b_C.addActionListener(this);b_C.addKeyListener(this);
		b_MC.addActionListener(this);b_MC.addKeyListener(this);
		b_MR.addActionListener(this);b_MR.addKeyListener(this);
		b_MS.addActionListener(this);b_MS.addKeyListener(this);
		b_Madd.addActionListener(this);b_Madd.addKeyListener(this);
		b_0.addActionListener(this);b_0.addKeyListener(this);
		b_1.addActionListener(this);b_1.addKeyListener(this);
		b_2.addActionListener(this);b_2.addKeyListener(this);
		b_3.addActionListener(this);b_3.addKeyListener(this);
		b_4.addActionListener(this);b_4.addKeyListener(this);
		b_5.addActionListener(this);b_5.addKeyListener(this);
		b_6.addActionListener(this);b_6.addKeyListener(this);
		b_7.addActionListener(this);b_7.addKeyListener(this);
		b_8.addActionListener(this);b_8.addKeyListener(this);
		b_9.addActionListener(this);b_9.addKeyListener(this);
		b_add.addActionListener(this);b_add.addKeyListener(this);
		b_sub.addActionListener(this);b_sub.addKeyListener(this);
		b_mul.addActionListener(this);b_mul.addKeyListener(this);
		b_div.addActionListener(this);b_div.addKeyListener(this);
		b_dian.addActionListener(this);b_dian.addKeyListener(this);
		b_sign.addActionListener(this);b_sign.addKeyListener(this);
		b_sqrt.addActionListener(this);b_sqrt.addKeyListener(this);
		b_100.addActionListener(this);b_100.addKeyListener(this);
		b_deng.addActionListener(this);b_deng.addKeyListener(this);
		b_dao.addActionListener(this);b_dao.addKeyListener(this);

		b_pi.addActionListener(this);b_pi.addKeyListener(this);
		b_k1.addActionListener(this);b_k1.addKeyListener(this);
		b_k2.addActionListener(this);b_k2.addKeyListener(this);
		b_xy.addActionListener(this);b_xy.addKeyListener(this);
		b_x2.addActionListener(this);b_x2.addKeyListener(this);
		b_x3.addActionListener(this);b_x3.addKeyListener(this);
		b_sin.addActionListener(this);b_sin.addKeyListener(this);
		b_cos.addActionListener(this);b_cos.addKeyListener(this);
		b_tan.addActionListener(this);b_tan.addKeyListener(this);
		b_n.addActionListener(this);b_n.addKeyListener(this);
		b_ln.addActionListener(this);b_ln.addKeyListener(this);
		b_log.addActionListener(this);b_log.addKeyListener(this);
		//t_M.addKeyListener(this);

		//**************------底层添加布局-------***************
		Container con = getContentPane();
		con.setLayout(new FlowLayout());
		con.add(basebox);
		
		validate();
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	}
	//*************----------相关方法-----------***************

	void input(String s)//输入数字的函数
	{
			if (start==0)
			{
				t[state]=s;
				start=1;
			}
			else
			{
				t[state]=t_show.getText()+s;
			}
			d[state]=Double.parseDouble(t[state]);
			t_show.setText(t[state]);
	}

	void clear()//清楚当前状态
	{
		t[state]="0"; d[state]=0; start=0;
	}

	String n(String s)//计算阶乘
	{
		BigInteger ss=new BigInteger(s);
		BigInteger result=new BigInteger("1"),r=new BigInteger("1"),re=new BigInteger("1");
		while(re.compareTo(ss)<0)
		{
            re=re.add(r);
			result=result.multiply(re);
		}
		return result.toString();
	}

	double op(double x)//三角函数结果处理
	{
		int z=(int)(x*1000000);
		if(z%10>=5)
			z=z+10-z%10;
		return (double)z/1000000;
	}

	void done()//进行运算的函数
	{
		deng=1;
		switch(marks[mark])
		{
			case 1:
				d[2*mark-1]=d[2*mark-1]+d[2*mark];
				t[2*mark-1]=String.valueOf(d[2*mark-1]);
				t_show.setText(t[2*mark-1]);
				break;
			case 2:
				d[2*mark-1]=d[2*mark-1]-d[2*mark];
				t[2*mark-1]=String.valueOf(d[2*mark-1]);
				t_show.setText(t[2*mark-1]);
				break;
			case 3:
				d[2*mark-1]=d[2*mark-1]*d[2*mark];
				t[2*mark-1]=String.valueOf(d[2*mark-1]);
				t_show.setText(t[2*mark-1]);
				break;
			case 4:
				if(d[2*mark]==0)
				{
					t_show.setText("除数不能为0");
					start=0;
					break;
				}
				d[2*mark-1]=d[2*mark-1]/d[2*mark];
				t[2*mark-1]=String.valueOf(d[2*mark-1]);
				t_show.setText(t[2*mark-1]);
				break;
			case 5:
				d[state]=Math.pow(d[state-1],d[state]);
				t[state]=String.valueOf(d[state]);
				t_show.setText(t[state]);
			default:
				break;
		}
	}
	
	//*************----------相关事件-----------***************

	public void actionPerformed(ActionEvent e)
	{
		//菜单条内的按钮事件#######################################
		if(e.getSource() == item1)//复制
		{
			t_show.setEditable(true);
			t_show.selectAll();
			t_show.copy();
			t_show.setEditable(false);
		} 
		else if(e.getSource() == item2)//粘贴
		{
			t_show.setEditable(true);
			t_show.selectAll();
			t_show.paste();
			validate();
			t_show.setEditable(false);
		}
		else if(e.getSource() == item5)//帮助
		{
			String s = "标准型:\r\nBackspace — 逐个删除\r\nsqrt — 开平方\r\nC — 全部清除\r\nCE — 一次运算完成后,单击“CE”按钮即可清除当前的运算结果,再次输入时可开始新的运算\r\nMC — 是清除储存数据\r\nMR — 是读取储存的数据\r\nMS — 将所显示的数存入存储器中,存储器中原有的数据被冲走,“—”也会变为“M”\r\nM+ — 是计算结果并加上已经储存的数\r\n1/x — 求倒数\r\n+/- — 改变当前数的符号\r\n% — 计算a*(b%),如输入a-b%=a-a*(b%);例:50+25%它会先计算出50*(25%)=12.5,然后按等号后,显示62.5(即50+12.5)\r\n科学型:\r\nsin — 计算三角函数sin值(默认角度制)\r\ncos — 计算三角函数cos值(默认角度制)\r\ntan — 计算三角函数tan值(默认角度制)\r\nn! — 计算n的阶乘(只限于100以内的数)\r\nlog — 计算以10为底的对数\r\nln — 计算自然对数\r\nx^y — 计算x的y次方\r\n        计算器的运算结果可以导入到别的应用程序中,用户可以选择“编辑”—“复制”把运算结果粘贴到别处,也可以从别的地方复制好运算算式后,选择“编辑”—“粘贴”到计算器中进行运算。";
			Dialog d = new Dialog(this,"帮助主题",s,550,520);
		} 
		else if(e.getSource() == item6)//关于
		{
			String s = "版权所有 (c) 2007\r\n制作者:张雪松   班级:计应0604   学号:061300414";
			Dialog d = new Dialog(this,"关于软件",s,360,100);
		}

		//操作指令事件##############################################
		else if(e.getSource() == b_Backspace)
		{
			if (t_show.getText().length() <= 1) 
			{
				t[state] = "0";
				start = 0;//说明重新输入,清空以前数据
			}
			else 
			{
				t[state] = t_show.getText().substring(0, t_show.getText().length()-1);
			}
			d[state] = Double.parseDouble(t[state]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -