一个漂亮的java计算器(实验报告)

这是一个用java实现的计算器,本来没想发上来的,隔了数年,今天偶尔又看到了这个计算器的实验报告,所以就上传上来了,希望能对有这个需求的小伙伴提供帮助吧!这里就直接将实验报告的关键代码演示内容帖上来了,注释就不加了

界面如下

新建java项目复制下面内容就行了

  1. 实验内容

程序:

package com.yunzhi.GUI;

import java.awt.Cursor;

import java.awt.FlowLayout;

import java.awt.GridBagConstraints;

import java.awt.GridBagLayout;

import java.awt.GridLayout;

import java.awt.Insets;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowEvent;

import java.awt.event.WindowListener;

 

import javax.swing.JButton;

import javax.swing.JDialog;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JPanel;

import javax.swing.JTextField;

 

public class Calculatordemo extends JFrame implements WindowListener,ActionListener {

 

String str;

String valuas;

String s;

double result;

String labe;

JMenuBar menubar;

JMenu menu1;

JMenu menu2;

JMenu menu3;

JMenuItem menuitem1;

JMenuItem menuitem2;

JMenuItem menuitem3;

JMenuItem menuitem4;

JMenuItem menuitem5;

JPanel panel;

JButton button;

JTextField text;

JLabel label;

GridBagConstraints contains;

public Calculatordemo()

{

labe="";

result=0;

str="";

valuas="0";

s="+";

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setSize(300,400);

this.setTitle("计算器");

this.setLayout(new FlowLayout());

menubar=new JMenuBar();

this.setJMenuBar(menubar);

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

menu2=new JMenu("编辑(E)");

menu3=new JMenu("帮助(H)");

menuitem1=new JMenuItem("历史记录");

menuitem2=new JMenuItem("科学计算器");

menuitem3=new JMenuItem("标准计算器");

menuitem4=new JMenuItem("作者信息");

menuitem5=new JMenuItem("说明");

menuitem1.addActionListener(this);

menuitem2.addActionListener(this);

menuitem3.addActionListener(this);

menuitem4.addActionListener(this);

menuitem5.addActionListener(this);

menu1.add(menuitem1);

menu2.add(menuitem2);

menu2.add(menuitem3);

menu3.add(menuitem5);

menu3.add(menuitem4);

menubar.add(menu1);

menubar.add(menu2);

menubar.add(menu3);

panel=new JPanel();

panel.setLayout(new GridBagLayout());

contains=new GridBagConstraints();

text=new JTextField();

//text.setText("0");

text.setHorizontalAlignment(JTextField.RIGHT);

contains.gridx=0;

contains.gridy=0;

contains.gridwidth=5;

contains.gridheight=2;

contains.fill=GridBagConstraints.HORIZONTAL;

panel.add(text,contains);

createButton("x²", 0, 2, 1, 1,GridBagConstraints.HORIZONTAL, 5, 0);

createButton("√", 1, 2, 1, 1,GridBagConstraints.HORIZONTAL, 5, 5);

createButton("%", 2, 2, 1, 1,GridBagConstraints.HORIZONTAL, 5, 5);

createButton("删除", 3, 2, 2, 1,GridBagConstraints.HORIZONTAL, 5, 5);

createButton("7", 0, 3, 1, 1,GridBagConstraints.HORIZONTAL, 5, 0);

createButton("8", 1, 3, 1, 1,GridBagConstraints.HORIZONTAL, 5, 5);

createButton("9", 2, 3, 1, 1,GridBagConstraints.HORIZONTAL, 5, 5);

createButton("清零", 3, 3, 2, 1,GridBagConstraints.HORIZONTAL, 5, 5);

createButton("4", 0, 4, 1, 1,GridBagConstraints.HORIZONTAL, 5, 0);

createButton("5", 1, 4, 1, 1,GridBagConstraints.HORIZONTAL, 5, 5);

createButton("6", 2, 4, 1, 1,GridBagConstraints.HORIZONTAL, 5, 5);

createButton("*", 3, 4, 1, 1,GridBagConstraints.HORIZONTAL, 5, 5);

createButton("/", 4, 4, 1, 1,GridBagConstraints.HORIZONTAL, 5, 5);

createButton("1", 0, 5, 1, 1,GridBagConstraints.HORIZONTAL, 5, 0);

createButton("2", 1, 5, 1, 1,GridBagConstraints.HORIZONTAL, 5, 5);

createButton("3", 2, 5, 1, 1,GridBagConstraints.HORIZONTAL, 5, 5);

createButton("+", 3, 5, 1, 1,GridBagConstraints.HORIZONTAL, 5, 5);

createButton("-", 4, 5, 1, 1,GridBagConstraints.HORIZONTAL, 5, 5);

createButton(".", 0, 6, 1, 1,GridBagConstraints.HORIZONTAL, 5, 0);

createButton("0", 1, 6, 1, 1,GridBagConstraints.HORIZONTAL, 5, 5);

createButton("1/x", 2, 6, 1, 1,GridBagConstraints.HORIZONTAL, 5, 5);

createButton("=", 3, 6, 2, 1,GridBagConstraints.HORIZONTAL, 5, 5);

label=new JLabel("历史记录");

label.setAutoscrolls(true);

contains.gridx=0;

contains.gridy=7;

contains.gridwidth=5;

contains.gridheight=2;

contains.fill=GridBagConstraints.HORIZONTAL;

panel.add(label,contains);

this.add(panel);

this.setVisible(true);

}

protected void createButton(String name,int x,int y,int w,int h,int hv,int iu,int il)

{

button=new JButton(name);

contains.gridx=x;

contains.gridy=y;

contains.gridwidth=w;

contains.gridheight=h;

contains.insets=new Insets(iu,il,0,0);

contains.fill=hv;

button.addActionListener(this);

panel.add(button,contains);

}

public void calculator()

{

if(s=="+")result=result+Double.parseDouble(valuas);

else if(s=="-")result=result-Double.parseDouble(valuas);

else if(s=="*")result=result*Double.parseDouble(valuas);

else if(s=="/")result=result/Double.parseDouble(valuas);

else if(s=="1/x")result=(1/Double.parseDouble(valuas));

else if(s=="%")result=result/100;

else if(s=="√")result=Math.sqrt(Double.parseDouble(valuas));

else if (s=="x²")result=result*result;

valuas="0";

}

public void actionPerformed(ActionEvent e)

{

// TODO Auto-generated method stub

String type;

JMenuItem mnit = null;

JButton btn = null;

type=e.getSource().toString();

if(type.contains("JMenuItem"))

{

mnit=(JMenuItem)e.getSource();

    if(mnit.getText()=="历史记录")

{

System.out.println("历史记录");

JDialog dialog=new JDialog();

dialog.setTitle("历史记录");

dialog.setSize(100,200 );

dialog.add(label);

dialog.setVisible(true);

 

}

    else

    if(mnit.getText()=="科学计算器")

{

System.out.println("你的电脑中毒了");

 

}

    else

    if(mnit.getText()=="标准计算器")

{

System.out.println("建议立即重启");

 

}

    else

    if(mnit.getText()=="作者信息")

{

System.out.println("懒得写了");

 

}

    if(mnit.getText()=="说明")

{

System.out.println("这是一款简单易用的计算器");

 

}

}

if(type.contains("JButton"))

{

btn= (JButton) e.getSource();

if (btn.getText() == "=")

{

calculator();

labe=labe+"<br>"+str+"="+result;

label.setText("<html>"+"历史记录" +labe+"</html>");

str = String.valueOf(result);

text.setText(str);

s="+";

}

else if (btn.getText() == "x²")

{

str=text.getText();

str=str+"²";

text.setText(str);

calculator();

s="x²";

 

}

else if (btn.getText() == "1/x")

{

str=text.getText();

str=str+"1/";

text.setText(str);

calculator();

s="1/x";

}

else if (btn.getText() == "删除")

{

str=text.getText();

if(str.length()!=0)

{

if(valuas.length()>=1&&str.length()>=1&&str.charAt(str.length()-1)<='9'&&str.charAt(str.length()-1)>='0')valuas=valuas.substring(0,valuas.length()-1);

else s="+";

if(str.length()>1&&str.substring(str.length()-2,str.length()).equals("1/"))

{

str=str.substring(0,str.length()-2);

}

else str=str.substring(0,str.length()-1);

 

}

text.setText(str);

}

else if (btn.getText() == "清零")

{

text.setText("");

valuas="0";

result=0;

s="+";

labe="";

label.setText("<html>"+"历史记录" +labe+"</html>");

}

else if (btn.getText() == "+")

{

str=text.getText();

str=str+"+";

text.setText(str);

calculator();

s = "+";

}

else if (btn.getText() == "-")

{

str=text.getText();

str=str+"-";

text.setText(str);

calculator();

s = "-";

}

else if (btn.getText() == "/")

{

str=text.getText();

str=str+"/";

text.setText(str);

calculator();

s = "/";

}

else if (btn.getText() == "*")

{

str=text.getText();

str=str+"*";

text.setText(str);

calculator();

s = "*";

}

else if (btn.getText() == "%")

{

str=text.getText();

str=str+"%";

text.setText(str);

calculator();

s = "%";

}

else if (btn.getText() == "√")

{

str=text.getText();

str=str+"√";

text.setText(str);

calculator();

s = "√";

}

else

{

str=text.getText();

str=str+btn.getText();

valuas=valuas+btn.getText();

text.setText(str);

}

}

 

/*System.out.println(valuas);

System.out.println(result);

System.out.println(s);*/

  }

/**

 * @param args

 */

public void password()

{

JDialog dialog=new JDialog();

dialog.setTitle("请输入密码");

//dialog.setSize(100,200 );

dialog.setLayout(new GridLayout(3,1,10,10));

label.setText("<html>"+"计算器已上锁" +"<br>"+"请输入密码解锁"+"</html>");

dialog.add(label);

dialog.add(text);

dialog.setBounds(600, 400, 200, 150);

dialog.setVisible(true);

}

public static void main(String[] args) {

// TODO Auto-generated method stub

Calculatordemo cal =new Calculatordemo();

cal.addWindowListener(cal);

}

public void windowClosing(WindowEvent e)

{

System.out.println("正关闭窗口");

System.exit(0);

}

public void windowActivated(WindowEvent e)

{

System.out.println("取得主控窗口");

}

public void windowDeactivated(WindowEvent e)

{

password();

}

public void windowDeiconified(WindowEvent e)

{

System.out.println("还原窗口");

}

public void windowIconified(WindowEvent e)

{

System.out.println("最小化窗口");

}

public void windowOpened(WindowEvent e)

{

System.out.println("窗口已打开");

}

public void windowClosed(WindowEvent e)

{

System.out.println("窗口已关闭");

}

 

}

  1. 实验结果

计算器演示:

如1+2+3+4+5+6=

一次完成

 

分次完成

 

如8²+3*6+5/6=

 

如1/3+5+%80*100=

 

有什么疑问可评论区提问.

资源地址https://download.csdn.net/download/qq_38499958/12041675

  • 27
    点赞
  • 160
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
大连民族大学 计算机科学与工程学院 《Java语言》课程实验报告 实验题目: 计算器的设计与实现 课程名称: Java语言 实验类型: 演示性 验证性 操作性 设计性 综合性 专业:网络工程 班级:**** 学生姓名*** 学号:***** 实验日期:2018年 4月23日 地点:计算机学院综合试验中心(I-303) 实验学时:4 实验成绩: 指导教师签字: 2018年 5月21日 1. 问题需求描述:Problem description 利用Java Swing设计计算器图形化界面,并实现事件的监听,以及计算器基本的加、减、乘、除、 清空、输出运算结果的操作,学习使用各种图形化界面的控件,容器,布局等,学习对 按钮事件的处理等。以及对非法输入的处理。 2. 设计说明:Design notes 本计算器,界面方面总体采用BorderLayout布局,显示输入输入的文本框和清除按钮 采用FlowLayout布局,容器放在BorderLayout的North;0- 9和各种运算符号还有小数点采用GridLayout布局,容器放在BorderLayou的Center;事 件监听和处理通过实现addActioListener监视器接口和ItemEvent事件接口,从而对每一 个按钮实现事件的监听和处理;计算方面,调用ScriptEngineManager和ScriptEngine两 个类,直接通过eval函数直接把输入文本当作JS代码执行,输出执行结果,这样报错也 会直接实现,另把文本框设置不允许直接从键盘输入以防止出现安全事件。 最后通过转化成JS代码运算得到启发,使用类似方法,我还实现了调用VB代码实现计算 器实时读出键盘输入,发出声音。 3. 系统实现:system implementation 1.程序界面展示 4. 总结体会: summary and experience 实验达到了预期的目标。通过此次的编程,我学会了用Java语言编写简单的软件,增强 了我对学习Java的兴趣。编程过程中,总体设计主要是窗口与组件的应用,具体执行则 是利用Java语言设计算法,而难点也在算法的设计上。虽然程序大体上符合要求,但由 于第一次编写这么复杂的程序,程序仍然存在一- 些漏洞,譬如由于未进行异常处理,当连续输入运算符是程序会出错,还有若一直按小 数点的话会得到一连串的小数点。由于最近忙着考试没有时间修改,考试结束后一定认 真修改这些问题。我觉得在编程时应该注意排版对齐,这样不论是自己检查程序还是别 人阅读程序都会更加方便。如果能添加备注的话以后阅读程序会更容易些。在以后的编 程中我会吸取经验,养成认真、严谨的编程习惯。 附:程序清单 1. import javax.swing.JFrame; public class Calculator { public static void main(String[] paramArrayOfString) { CalculatorFrame localCalculatorFrame = new CalculatorFrame(); localCalculatorFrame.setSize(800, 800); localCalculatorFrame.setVisible(true); } } 2 import java.awt.Container; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; class CalculatorFrame extends JFrame { public CalculatorFrame() { setTitle("Calculator"); setSize(200, 200); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent paramAnonymousWindowEvent) { System.exit(0); } }); Container localContainer = getContentPane(); localContainer.add(new CalculatorPanel()); } } 3. import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Font; import java.awt.GridLayout; import java.awt.eve

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值