Java科学计算器程序代码.docx

上传人:b****8 文档编号:10251557 上传时间:2023-02-09 格式:DOCX 页数:18 大小:55.95KB
下载 相关 举报
Java科学计算器程序代码.docx_第1页
第1页 / 共18页
Java科学计算器程序代码.docx_第2页
第2页 / 共18页
Java科学计算器程序代码.docx_第3页
第3页 / 共18页
Java科学计算器程序代码.docx_第4页
第4页 / 共18页
Java科学计算器程序代码.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

Java科学计算器程序代码.docx

《Java科学计算器程序代码.docx》由会员分享,可在线阅读,更多相关《Java科学计算器程序代码.docx(18页珍藏版)》请在冰豆网上搜索。

Java科学计算器程序代码.docx

Java科学计算器程序代码

计算器布局显示:

功能举例:

①13+20=33

②-7*14=-98:

先输入7,再单击-/+将其变成负数,然后依次单击×号、14与=

③7!

=5040

④sin30°=0.5:

先输入30,然后按下′″按钮转换成角度值,再按下sin即可显示结果

⑤sqrt(4)=2:

利用鼠标点击4后再点击sqrt按键即可显示结果

⑥2*π=6.2832

……

源程序如下:

importjava.awt.BorderLayout;

importjava.awt.Color;

importjava.awt.Dimension;

importjava.awt.Font;

import java.awt.GridLayout;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.text.DecimalFormat;

import javax.swing.BorderFactory;

importjavax.swing.ButtonGroup;

import javax.swing.JButton;

importjavax.swing.JCheckBoxMenuItem;

importjavax.swing.JFrame;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

importjavax.swing.JPanel;

import javax.swing.JRadioButtonMenuItem;

importjavax.swing.JTextField;

publicclassCalucatorextendsJFrame{

private JTextFieldtf;

privateJPanelpanel1,panel2,panel3,panel4;

ﻩprivate JMenuBar myBar;

private JMenumenu1, menu2,menu3;

ﻩprivateJMenuItemeditItem1,editItem2, help1,help2, help3;

privateJRadioButtonMenuItemseeItem1,seeItem2;//单选框

ﻩprivateJCheckBoxMenuItemseeItem3;//复选框

ﻩprivate ButtonGroupbgb;

ﻩprivateStringback;

ﻩprivate booleanIfResult=true,flag=false;

private Stringoper= "=";

privatedouble result=0;

ﻩprivateNumnumActionListener;

privateDecimalFormatdf;

ﻩpublic Calucator(){

super("科学计算器");//设置标题栏

df=newDecimalFormat("#.####");//保留四位小数

ﻩthis.setLayout(new BorderLayout(10,5));

ﻩﻩpanel1 =newJPanel(newGridLayout(1,3,10, 10));

ﻩpanel2=newJPanel(new GridLayout(5, 6,5,5));//5行6列

ﻩﻩpanel3=newJPanel(newGridLayout(5,1, 5,5));

ﻩpanel4=newJPanel(newBorderLayout(5,5));

/**

ﻩ *菜单栏

ﻩﻩ*/

ﻩmyBar= new JMenuBar();

ﻩmenu1 =newJMenu("编辑(E)");

menu2= new JMenu("查看(V)");

ﻩﻩmenu3=newJMenu("帮助(H)");

ﻩmenu1.setFont(newFont("宋体", Font.PLAIN, 12));

ﻩmenu2.setFont(newFont("宋体",Font.PLAIN,12));

ﻩﻩmenu3.setFont(newFont("宋体",Font.PLAIN,12));

ﻩ/**

ﻩ *编辑栏

ﻩ*/

ﻩﻩeditItem1 =newJMenuItem("复制(C)Ctrl+C");

editItem2 =newJMenuItem("粘贴(P)Ctrl+V");

ﻩeditItem1.setFont(newFont("宋体",Font.PLAIN,12));

editItem2.setFont(new Font("宋体",Font.PLAIN,12));

ﻩ/**

* 查看栏

*/

ﻩseeItem1=new JRadioButtonMenuItem("科学型(T)");

ﻩseeItem2= new JRadioButtonMenuItem("标准型(S)");

ﻩﻩseeItem3 = newJCheckBoxMenuItem("数字分组(I)");

seeItem1.setFont(newFont("宋体",Font.PLAIN,12));

ﻩseeItem2.setFont(new Font("宋体",Font.PLAIN,12));

ﻩﻩseeItem3.setFont(newFont("宋体",Font.PLAIN,12));

ﻩﻩ/**

ﻩ *帮助栏

ﻩ*/

ﻩﻩhelp1 =new JMenuItem("帮助主题(H)");

ﻩhelp2= newJMenuItem("关于计算器(A)");

ﻩﻩhelp1.setFont(new Font("宋体",Font.PLAIN,12));

ﻩﻩhelp2.setFont(new Font("宋体",Font.PLAIN,12));

ﻩbgb = new ButtonGroup();//选项组

ﻩﻩmenu1.add(editItem1);

ﻩmenu1.add(editItem2);

ﻩﻩmenu2.add(seeItem1);

ﻩmenu2.add(seeItem2);

ﻩmenu2.addSeparator();//添加一条分割线

menu2.add(seeItem3);

ﻩmenu3.add(help1);

ﻩﻩmenu3.addSeparator();//添加一条分割线

ﻩmenu3.add(help2);

ﻩﻩmyBar.add(menu1);

myBar.add(menu2);

ﻩmyBar.add(menu3);

ﻩthis.setJMenuBar(myBar);

numActionListener=newNum();//实现数字监听

ﻩ/**

ﻩ * 文本域,即为计算器的屏幕显示区域

ﻩ */

ﻩtf= newJTextField();

ﻩtf.setEditable(false);//文本区域不可编辑

tf.setBackground(Color.white);//文本区域的背景色

ﻩﻩtf.setHorizontalAlignment(JTextField.RIGHT);//文字右对齐

ﻩtf.setText("0");

ﻩtf.setBorder(BorderFactory.createLoweredBevelBorder());

init();//对计算器进行初始化

ﻩ}

/**

ﻩ* 初始化操作

ﻩ*添加按钮

*/

ﻩprivatevoid init(){

addButton(panel1,"Backspace",newClear(),Color.red);

ﻩﻩaddButton(panel1,"CE",newClear(),Color.red);

addButton(panel1,"C",newClear(),Color.red);

ﻩaddButton(panel2,"1/x",newSigns(), Color.magenta);

ﻩaddButton(panel2, "log",newSigns(),Color.magenta);

ﻩaddButton(panel2, "7", numActionListener, Color.blue);

addButton(panel2,"8",numActionListener, Color.blue);

addButton(panel2,"9",numActionListener,Color.blue);

ﻩaddButton(panel2,"÷",newSigns(),Color.red);

ﻩﻩaddButton(panel2,"n!

",newSigns(),Color.magenta);

ﻩaddButton(panel2,"sqrt", newSigns(), Color.magenta);

ﻩaddButton(panel2,"4",numActionListener,Color.blue);

addButton(panel2,"5", numActionListener,Color.blue);

ﻩﻩaddButton(panel2,"6", numActionListener, Color.blue);

addButton(panel2,"×", new Signs(),Color.red);

addButton(panel2,"sin",newSigns(),Color.magenta);

ﻩﻩaddButton(panel2,"x^2",new Signs(), Color.magenta);

ﻩaddButton(panel2,"1", numActionListener,Color.blue);

addButton(panel2,"2",numActionListener,Color.blue);

ﻩaddButton(panel2,"3",numActionListener,Color.blue);

ﻩﻩaddButton(panel2,"-",newSigns(),Color.red);

addButton(panel2,"cos",newSigns(),Color.magenta);

addButton(panel2,"x^3",newSigns(),Color.magenta);

ﻩﻩaddButton(panel2, "0", numActionListener,Color.blue);

ﻩaddButton(panel2, "-/+",newClear(),Color.blue);

ﻩaddButton(panel2,".",new Dot(),Color.blue);

addButton(panel2, "+",newSigns(),Color.red);

ﻩaddButton(panel2,"tan",newSigns(),Color.magenta);

ﻩaddButton(panel2,"%", newSigns(),Color.magenta);

addButton(panel2,"π", numActionListener,Color.orange);

ﻩaddButton(panel2,"e", numActionListener,Color.orange);

ﻩﻩaddButton(panel2,"′″", newSigns(),Color.orange);

ﻩaddButton(panel2,"=",newSigns(),Color.red);

 

ﻩJButtonbtns=new JButton("计算器");

ﻩbtns.setBorder(BorderFactory.createLoweredBevelBorder());

ﻩbtns.setEnabled(false);//按钮不可操作

btns.setPreferredSize(newDimension(20,20));

ﻩﻩpanel3.add(btns);//加入按钮

ﻩﻩaddButton(panel3,"MC",null,Color.red);

addButton(panel3,"MR",null, Color.red);

addButton(panel3, "MS",null, Color.red);

ﻩaddButton(panel3,"M+",null,Color.red);

ﻩﻩpanel4.add(panel1, BorderLayout.NORTH);

ﻩpanel4.add(panel2,BorderLayout.CENTER);

ﻩthis.add(tf,BorderLayout.NORTH);

ﻩthis.add(panel3,BorderLayout.WEST);

ﻩﻩthis.add(panel4);

pack();

this.setResizable(false);//窗口不可改变大小

ﻩthis.setLocation(300,200);

ﻩthis.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ﻩ}

/**

* 统一设置按钮的的使用方式

ﻩ*@parampanel

ﻩ*@paramname

* @paramaction

*@paramcolor

 */

privatevoid addButton(JPanelpanel,Stringname, ActionListeneraction, Color color){

ﻩﻩJButtonbt= newJButton(name);

panel.add(bt);//在面板上增加按钮

ﻩbt.setForeground(color);//设置前景(字体)颜色

ﻩbt.addActionListener(action);//增加监听事件

ﻩ}

/**

ﻩ *计算器的基础操作(+-× ÷)

*@param x

*/

ﻩprivate voidgetResult (doublex){

ﻩif(oper=="+"){result+=x;}

else if(oper == "-"){result-=x;}

ﻩelse if(oper=="×"){result*=x;}

ﻩﻩelseif(oper== "÷"){result/=x;}

ﻩﻩelseif(oper=="="){result =x;}

ﻩﻩtf.setText(df.format(result));

}

ﻩ/**

*运算符号的事件监听

*/

ﻩclassSignsimplementsActionListener{

publicvoidactionPerformed(ActionEvente){

ﻩ/*

ﻩﻩ*用ActionEvent对象的getActionCommand()方法

ﻩﻩ*取得与引发事件对象相关的字符串

ﻩﻩ*/

ﻩStringstr=e.getActionCommand();

ﻩ/*sqrt求平方根 */

ﻩﻩif(str.equals("sqrt")){

ﻩﻩdoublei =Double.parseDouble(tf.getText());

if(i>=0){

ﻩﻩﻩ/*

ﻩﻩﻩﻩ* String.valueOf()转换为字符串

ﻩﻩﻩ*df.format()按要求保留四位小数

ﻩ *Math.sqrt()求算数平方根

ﻩﻩ*/

ﻩﻩﻩtf.setText(String.valueOf(df.format(Math.sqrt(i))));

ﻩﻩﻩ}

ﻩﻩelse{

ﻩtf.setText("负数不能开平方根");

ﻩﻩﻩ}

}

ﻩ/* log求常用对数*/

elseif(str.equals("log")){

ﻩdoublei=Double.parseDouble(tf.getText());

ﻩﻩif(i>0){

ﻩﻩﻩtf.setText(String.valueOf(df.format(Math.log(i))));

ﻩﻩﻩﻩ}else{

tf.setText("负数不能求对数");

ﻩﻩ}

ﻩﻩ}

ﻩﻩ/*%求百分比*/

ﻩelseif(str.equals("%")){

ﻩﻩﻩtf.setText(df.format(Double.parseDouble(tf.getText())/100));

ﻩ}

ﻩ/*1/x求倒数*/

ﻩelseif(str.equals("1/x")){

ﻩif(Double.parseDouble(tf.getText())== 0){

ﻩﻩtf.setText("除数不能为零");

ﻩﻩ}else{

ﻩﻩﻩtf.setText(df.format(1 /Double.parseDouble(tf.getText())));

ﻩ}

ﻩ}

/* sin求正弦函数*/

ﻩﻩelseif(str.equals("sin")){

ﻩﻩdouble i =Double.parseDouble(tf.getText());

ﻩtf.setText(String.valueOf(df.format(Math.sin(i))));

}

ﻩ/*cos求余弦函数*/

ﻩﻩelseif(str.equals("cos")){

ﻩﻩdoublei= Double.parseDouble(tf.getText());

ﻩtf.setText(String.valueOf(df.format(Math.cos(i))));

}

ﻩﻩ/*tan求正切函数*/

ﻩelse if(str.equals("tan")){

ﻩﻩﻩdouble i =Double.parseDouble(tf.getText());

ﻩtf.setText(String.valueOf(df.format(Math.tan(i))));

ﻩﻩ}

ﻩﻩ/*n!

求阶乘 */

elseif(str.equals("n!

")){

ﻩﻩﻩdoublei = Double.parseDouble(tf.getText());

ﻩif((i%2==0)||(i%2==1))//判断为整数放进行阶乘操作

ﻩﻩﻩﻩ{

ﻩintj= (int)i;//强制类型转换

ﻩﻩintresult=1;

ﻩﻩﻩﻩfor(int k=1;k<=j;k++)

ﻩﻩﻩﻩﻩresult *=k;

ﻩtf.setText(String.valueOf(result));

ﻩﻩ}

ﻩﻩelse

ﻩﻩﻩ{

ﻩﻩﻩﻩtf.setText("无法进行阶乘");

ﻩﻩﻩﻩ}

ﻩ}

/*x^2求平方*/

ﻩelseif(str.equals("x^2")){

ﻩdoublei =Double.parseDouble(tf.getText());

ﻩﻩﻩtf.setText(String.valueOf(df.format(i*i)));

ﻩ}

ﻩﻩ/*x^3求立方 */

ﻩﻩelseif(str.equals("x^3")){

ﻩﻩdoublei=Double.parseDouble(tf.getText());

ﻩﻩtf.setText(String.valueOf(df.format(i*i*i)));

ﻩ}

ﻩﻩ/*′″角度转换*/

ﻩ/**

ﻩ* 将角度值转换成弧度值,方便三角函数的计算

ﻩﻩ*/

ﻩﻩelseif(str.equals("′″")){

ﻩdoublei =Double.parseDouble(tf.getText());

ﻩﻩﻩtf.setText(String.valueOf(i/180*Math.PI));

ﻩﻩ}

ﻩﻩelse{

ﻩﻩif(flag){

ﻩﻩﻩﻩIfResult=false;

ﻩ}

ﻩﻩif(IfResult){

ﻩﻩoper= str;

ﻩﻩ}else{

ﻩﻩﻩgetResult(Double.parseDouble(tf.getText()));

ﻩﻩﻩﻩoper=str;

ﻩﻩﻩIfResult=true;

ﻩﻩﻩ}

ﻩﻩﻩ}

}

}

/**

 * 清除按钮的事件监听

 */

ﻩclassClear implements ActionListener{

ﻩﻩpublicvoidactionPerformed(ActionEvente){

ﻩﻩ/*

ﻩ* 用ActionEvent对象的getActionCommand()方法

ﻩ*取得与引发事件对象相关的字符串

ﻩﻩ*/

ﻩStringstr=e.getActionCommand();

ﻩﻩif(str=="C"){

ﻩﻩtf.setText("0");

ﻩﻩﻩﻩIfResult=true;

ﻩﻩﻩresult= 0;

ﻩ}else if(str=="-/+"){

ﻩﻩﻩﻩdoublei=0-Double.parseDouble(tf.getText().trim());

ﻩﻩtf.setText(df.format(i));

ﻩ}else if(str=="Backspace"){

ﻩﻩﻩif(Double.parseDouble(tf.getText())>0){

ﻩﻩif(tf.getText().length()>1){

ﻩtf.setText(tf.getText().

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1