`
Tank03
  • 浏览: 80713 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

一个简单的计算器

阅读更多

这是在大1第2个学期在学校参加比赛的时候做的,呵呵~~现在去看这些代码,觉得青涩,却又饶有回忆,不过如果当初没有这个小例子,我有可能已经去NET的行列了.呵呵~~不罗嗦那么多了.自己看把.时间有些紧张,没有写解释.不懂可以留言,或者百度一下.

 

 

package CalcApp;
import java.awt.*;
import java.awt.event.*;
public class CalcAppDemo extends Frame
{
private TextField t_result;
private Panel p_main;
private Panel p_num;
private Panel p_oper;
private Panel p_show;
private Button b_num[];
private Button b_oper[];

public CalcAppDemo(String title)
{
  setTitle(title);
  setLocation(500,300);
  t_result=new TextField("0.0",21);
  p_main=new Panel();
                p_num=new Panel();
  p_oper=new Panel();
  p_show=new Panel();
  p_main.setLayout(new BorderLayout());
  p_num.setLayout(new GridLayout(4,3,1,1));
  p_oper.setLayout(new GridLayout(4,2,1,1));
  
  b_num=new Button[12];
  for(int i=0;i<9;i++)
  {
                    b_num[i]=new Button(new Integer(i+1).toString());
  }
  b_num[9]=new Button(" 0");
  b_num[10]=new Button(" cls");
  b_num[11]=new Button(" .");
  for(int i=0;i<12;i++)
  {
                    p_num.add(b_num[i]);
  }
  
  b_oper=new Button[8];
  b_oper[0]=new Button(" +");
  b_oper[1]=new Button(" -");
  b_oper[2]=new Button(" *");
  b_oper[3]=new Button(" /");
  b_oper[4]=new Button(" pow");
  b_oper[5]=new Button(" sqrt");
                b_oper[6]=new Button(" +/-");
  b_oper[7]=new Button(" =");
  for(int i=0;i<8;i++)
  {
                    p_oper.add(b_oper[i]);
  }
  
  t_result.setEditable(false);
  p_show.add(t_result,BorderLayout.NORTH);
  p_main.add(p_show,BorderLayout.NORTH);
  p_main.add(p_num,BorderLayout.WEST);
  p_main.add(p_oper,BorderLayout.EAST);
  this.add(p_main,BorderLayout.CENTER);
  setSize(400,400);
  setResizable(false);
  pack();
  
  this.addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)
   {
    System.exit(0);
   }
  });
  ButtonListener bl=new ButtonListener();
  for(int i=0;i<12;i++)
  {
   b_num[i].addActionListener(bl);
  }
  for(int i=0;i<8;i++)
  {
   b_oper[i].addActionListener(bl);
  }
}

class ButtonListener implements ActionListener
{
  private String lastOp;
  private String strVal;
  private double total;
  private double number;
  private boolean firsttime;
  private boolean operatorPressed;
  
  ButtonListener()
  {
   firsttime=true;
   strVal="";
  }
  
  public void actionPerformed(ActionEvent e)
  {
   String s=((Button)e.getSource()).getLabel().trim();
   
   if(Character.isDigit(s.charAt(0)))
   {
    handleNumber(s);
   }
   else
   {
    calculate(s);
   }
  }
  
  void calculate(String op)
  {
   operatorPressed=true;
   
   if(firsttime&&!isUnary(op))
   {
    total=getNumberOnDisplay();
    firsttime=false;
   }
   if(isUnary(op))
   {
    handleUnaryOp(op);
   }
   else if(lastOp!=null)
   {
    handleBinaryOp(lastOp);
   }
   if(!isUnary(op))
   {
    lastOp=op;
   }
  }
  
  boolean isUnary(String s)
  {
   return s.equals("=")||s.equals("cls")||s.equals("sqrt")||s.equals("+/-")||s.equals(".");
  }
  
  void handleUnaryOp(String op)
  {
   if(op.equals("+/-"))
   {
    number=negate(getNumberOnDisplay()+"");
    t_result.setText("");
    t_result.setText(number+"");
    return;
   }
   else if(op.equals("."))
   {
    handleDecPoint();
    return;
   }
   else if(op.equals("sqrt"))
   {
    number=Math.sqrt(getNumberOnDisplay());
    t_result.setText("");
    t_result.setText(number+"");
    return;
   }
   else if(op.equals("="))
   {
    if(lastOp!=null&&!isUnary(lastOp))
    {
     handleBinaryOp(lastOp);
    }
    lastOp=null;
    firsttime=true;
    return;
   }
   else
   {
    clear();
   }
  }
  
  void handleBinaryOp(String op)
  {
   if(op.equals("+"))
   {
    total+=number;
   }
   else if(op.equals("-"))
   {
    total-=number;
   }
   else if(op.equals("*"))
   {
    total*=number;
   }
   else if(op.equals("/"))
   {
    try
    {
     total/=number;
    }
    catch(ArithmeticException ae)
    {
    }
   }
   else if(op.equals("pow"))
   {
    total=Math.pow(total,number);
   }
   t_result.setText("");
   lastOp=null;
   strVal="";
   number=0;
   t_result.setText(total+"");
  }
  
  void handleNumber(String s)
  {
   if(!operatorPressed)
   {
    strVal+=s;
   }
   else
   {
    operatorPressed=false;
    strVal=s;
   }
   number=new Double(strVal).doubleValue();
   t_result.setText("");
   t_result.setText(strVal);
  }
  
  void handleDecPoint()
  {
   operatorPressed=false;
   if(strVal.indexOf(".")<0)
   {
    strVal+=".";
   }
   t_result.setText("");
   t_result.setText(strVal);
  }
  
  double negate(String s)
  {
   operatorPressed=false;
   if(number==(int)number)
   {
    s=s.substring(0,s.indexOf("."));
   }
   if(s.indexOf("-")<0)
   {
    strVal="-"+s;
   }
   else
   {
    strVal=s.substring(1);
   }
   return new Double(strVal).doubleValue();
  }
  
  double getNumberOnDisplay()
  {
   return new Double(t_result.getText()).doubleValue();
  }
  
  void clear()
  {
   firsttime=true;
   lastOp=null;
   strVal="";
   total=0;
   number=0;
   t_result.setText("0");
  }
}

public static void main(String args[])
{
  CalcAppDemo c=new CalcAppDemo("简单计算器");
  c.setVisible(true);
}
}
 
分享到:
评论

相关推荐

    一个简易计算器

    总之,一个简易计算器虽然看似简单,但其背后涉及了计算机科学中的诸多概念,包括用户界面设计、事件处理、数据结构(如栈)、数学运算以及算法(如表达式解析)。通过理解和实现这样的项目,开发者可以深入理解编程...

    一个简单计算器程序-基于对话框.doc

    该资源是一篇关于使用 MFC 开发一个简单科学计算器程序的教程,通过创建一个基于对话框的应用程序,实现了加、减、乘、除四个基本功能,并在此基础上扩展了平方、开方、三角函数等功能。 知识点一:MFC 基础知识 *...

    用VC编写的一个简单计算器程序

    【标题】"用VC编写的一个简单计算器程序"指的是使用Visual C++(简称VC)开发的简易版计算应用程序。Visual C++是微软公司推出的一种集成开发环境,它支持C++语言,同时也提供了MFC(Microsoft Foundation Classes)...

    用工厂方法模式做的一个简易计算器

    在这个例子中,我们讨论的是如何使用工厂方法模式(Factory Method Pattern)实现一个简易计算器。工厂方法模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,一个工厂接口或者抽象类...

    java实现的一个简单计算器

    用java语言实现的一个简单计算器,支持加减乘除,小数,带括号运算,不支持负数,该程序带有界面,附带使用方法,算法实现简单,可能有一些小bug未解决,主要是测试有限。。

    C语言编写的简易计算器

    在本文中,我们将深入探讨如何使用C语言在Microsoft Visual Studio 2015环境下构建一个简易计算器。这个计算器是基于栈和队列的数据结构实现,非常适合C语言初学者进行学习和实践。 首先,C语言是一种强大的、低...

    嵌入式实验报告-简易计算器.pdf

    本实验报告的主要目的是设计和实现一个具有加减乘除功能的简易计算器,使用数码管和4X4矩阵式键盘来实现计算器的功能。下面是本实验报告的知识点总结: 1. 计算器的原理:计算器的原理是基于数码管和4X4矩阵式键盘...

    ASP.NET做的一个简单计算器

    在这个"ASP.NET做的一个简单计算器"项目中,我们可以深入理解ASP.NET的核心概念以及C#编程语言在Web开发中的应用。 首先,ASP.NET 提供了多种开发模型,如Web Forms、MVC和ASP.NET Core(现在主要发展的是Core版本...

    用labview编写的一个简易计算器

    本程序采用labview软件,编写了一个简易的计算器,具有加减乘除和开方求倒数功能

    MFC做的一个简易计算器

    在这个“MFC做的一个简易计算器”项目中,我们可以探讨以下几个MFC相关的知识点: 1. MFC框架:MFC提供了一种面向对象的方式来编写Windows应用程序,它封装了许多Windows API函数,使开发者可以更专注于业务逻辑而...

    一个用JS做的简易计算器

    标题中的“一个用JS做的简易计算器”表明这是一个使用...这个简易计算器项目为初学者提供了学习JavaScript基础、DOM操作、事件处理和简单算法的良好实践平台,同时也为有经验的开发者提供了一个扩展和优化的挑战。

    Dw 和 HtmI 制作一个简易计算器

    &lt;!DOCTYPE html&gt; 计算机 table{border:1px solid gray;} td{width: 10px;height: 10px;border:1px groove gray;text-align: right;padding: 5px;margin: 5px;border-radius: 5px 5px 5px 5px;...

    数电实验二:简易计算器(设计报告).pdf

    这篇设计报告详细介绍了在数电实验二中设计一个简易计算器的过程。这个实验旨在让学生们熟练掌握数字电子技术,包括逻辑电路设计、Verilog HDL 数字系统设计、PLD(可编程逻辑器件)实验箱的使用以及Quartus II软件...

    一个简单计算器,实现基本功能

    在编程领域,创建一个简单的计算器是一项基础练习,它可以帮助初学者理解如何处理用户输入、执行数学运算以及构建交互式应用程序。这个"一个简单计算器,实现基本功能"的项目,正如标题所描述,提供了基础的计算功能...

    C语言简易计算器实现编写一个简易计算器

    **简易计算器实现** 在计算机科学领域,学习编程语言如C语言是基础且至关重要的。...通过以上步骤,我们可以创建一个功能齐全的简易计算器,满足课程设计的要求。在实际编程过程中,不断迭代和完善是成功的关键。

    实现一个简易计算器

    在本主题中,我们将探讨如何实现一个简易计算器。这个任务主要涉及编程,特别是与用户交互、解析输入和执行计算相关的技术。在这个过程中,我们将使用基本的编程概念,如变量、运算符、条件语句和循环。 首先,我们...

    java开发的一个简易计算器

    在Java编程环境中,开发一个简易计算器是一项常见的学习任务,它能帮助初学者更好地理解面向对象编程、GUI设计以及数据结构的运用。这个“java开发的一个简易计算器”项目,显然是使用Java语言来实现的,主要涉及了...

    简易计算器的代码

    在本项目中,我们讨论的是一个简易计算器的实现,它采用了四种不同的编程语言进行编写,分别是C#和VB。计算器通常作为一个基础应用,用于执行基本的数学运算,如加、减、乘、除。让我们深入了解一下这两种编程语言...

    简易计算器(c语言课程设计)

    本简易计算器的设计和实现,展示了 C 语言在图形模式下的编程能力,并提供了一个基本的计算器模型,读者可以根据自己的需求进行修改和扩展。 7. 未来发展 未来可以对计算器的功能进行扩展,例如添加科学计算功能、...

    简易计算器_html_源码

    本案例是一个简单的HTML计算器的实现,旨在帮助初学者理解HTML的基本结构和功能。 在"简易计算器_html_源码"这个项目中,我们可以深入探讨以下几个关键的HTML知识点: 1. **HTML结构**:HTML文档通常由`&lt;!DOCTYPE ...

Global site tag (gtag.js) - Google Analytics