51Testing软件测试论坛
标题:
一个java计算器程序
[打印本页]
作者:
330254601
时间:
2012-5-23 11:08
标题:
一个java计算器程序
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
//***************************************************************************************
//以上部分为引用java swing的包(对应步骤:1 引用需要的包和类。)
//***************************************************************************************
public class Tuo {
//以下定义好需要的一些变量
//////////////////////////////////////////////////////////////////////
String str1="0"; //运算数1 初值一定为0 为了程序的安全
String str2="0"; //运算数2
String fh="+"; //运算符
String jg="";//结果
//状态开关 重要
int k1=1;//开关1 用于选择输入方向 将要写入str2或 str2
int k2=1;//开关2 符号键 次数 k2>1说明进行的是2+3-9+8 这样的多符号运算
int k3=1;//开关3 str1 是否可以被清0 ==1时可以 !=1时不能被清0
int k4=1;//开关4 str2 同上
int k5=1;//开关5 控制小数点可否被录入 ==1时可以 !=1 输入的小数点被丢掉
JButton jicunqi; //寄存器 记录 是否连续按下符号键
Vector vt=new Vector(20,10);
//***************************************************************************************
JFrame frame=new JFrame("sunshine---计算器"); //步骤2 定义一个顶层的容器
//***************************************************************************************
//定义输入框按钮什么的
JTextField jg_TextField=new JTextField(jg,20);//20列
JButton clear_Button=new JButton("清除"); //清除按钮
JButton button0=new JButton("0"); //按钮0
JButton button1=new JButton("1"); //按钮1
JButton button2=new JButton("2"); //按钮2
JButton button3=new JButton("3");
JButton button4=new JButton("4");
JButton button5=new JButton("5");
JButton button6=new JButton("6");
JButton button7=new JButton("7");
JButton button8=new JButton("8");
JButton button9=new JButton("9");
JButton button_Dian=new JButton("."); //按钮.
JButton button_jia=new JButton("+");
JButton button_jian=new JButton("-");
JButton button_cheng=new JButton("*");
JButton button_chu=new JButton("/");
JButton button_dy=new JButton("=");
////////////////////////////////////////////////////////////////////////////////////////////////
作者:
330254601
时间:
2012-5-23 11:09
本帖最后由 330254601 于 2012-5-23 16:18 编辑
////////////////////////////////////////////////////////////////////////////////////////////////
/**
* 主程序的入口
* @param args
*/
public static void main(String[] args)
{
Tuo tuo=new Tuo(); //初始化本类,创建一个本类的实例,默认调用本类的构造函数
}
/**
* 构造函数,初始化面板(生成面板)
*/
public Tuo(){
button0.setMnemonic(KeyEvent.VK_0);//等效键
//其它 等效键 略,
//***************************************************************************************
//以下部分将上面定义的那些按钮呀什么的进行面板布局
//3)根据需要为容器设置布局管理器或使用默认布局管理器。
//4)将组件添加到容器内,位置自行设计。
//***************************************************************************************
JPanel pan=new JPanel(); // 设置一个用于放置数字按钮的面板
pan.setLayout(new GridLayout(4,4,5,5));//对数字按钮面板设置布局 四行四列 边距为5像素,
pan.add(button7); //将上面定义的按钮加到面板上
pan.add(button8);
pan.add(button9);
pan.add(button_chu);
pan.add(button4);
pan.add(button5);
pan.add(button6);
pan.add(button_cheng);
pan.add(button1);
pan.add(button2);
pan.add(button3);
pan.add(button_jian);
/**
pan.add(button1);
pan.add(button2);
pan.add(button3);
pan.add(button_jian);
pan.add(button4);
pan.add(button5);
pan.add(button6);
pan.add(button_cheng);
pan.add(button7); //将上面定义的按钮加到面板上
pan.add(button8);
pan.add(button9);
pan.add(button_chu);
*/
pan.add(button0);
pan.add(button_Dian);
pan.add(button_dy);
pan.add(button_jia);
pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));//pan对象的边距
//////////////////////////////////////////////////////////////////////////////
jg_TextField.setHorizontalAlignment(JTextField.RIGHT );//文本框 右对齐
JPanel pan2 = new JPanel(); //设置一个放置文本输入框的面板
pan2.add(jg_TextField); //添加输入框到面板
pan2.add(clear_Button); //TODO 这里添加这句
//////////////////////////////////////////////////////////////////////////
JPanel pan3=new JPanel(); //为什么要 多此一句呢? 因为我不会设置 按钮的大小,设置清楚 按钮 的面板
需要删除
pan3.setLayout(new FlowLayout()); //
需要删除
pan3.add(clear_Button); //
需要删除
//clear_Button.setSize(10,10);//设置清零按钮的大小 吗的 不好使 !!
需要删除
///////////////////////////////////////////////////////////////////////////////////////////////////////
作者:
330254601
时间:
2012-5-23 11:13
本帖最后由 330254601 于 2012-5-23 16:16 编辑
///////////////////////////////////////////////////////////
//对顶层容器进行设置
frame.setLocation(300, 200); //主窗口 出现在位置
frame.setResizable(false); //不能调大小
frame.getContentPane().setLayout(new BorderLayout());
//将上面设置好的三个面板添加到顶层容器中
frame.getContentPane().add(pan2,BorderLayout.NORTH);//输入框面板放在最上面 north(北)
frame.getContentPane().add(pan,BorderLayout.CENTER);//数字按钮面板放在中间(center)
frame.getContentPane().add(pan3,BorderLayout.SOUTH);//清楚按钮面板放在最下面(south 南)
这句话要被删除
frame.pack();
frame.setVisible(true);
//以上是 控件 和 布局
//////////////////////////////////////////////////////////////////////////////////////////
//***************************************************************************************
//5)为响应事件的组件编写事件处理代码。-------------采用了类中类的方式
//***************************************************************************************
//下面是事件处理 程 序
//--------------- 数 字 键的事件响应代码 ----------------
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
class JianTing implements ActionListener {
public void actionPerformed(ActionEvent e){
String ss=((JButton)e.getSource()).getText();
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
if (k1==1)
{
if(k3==1)
{
str1="";
k5=1;//还原开关k5状态
}
str1=str1+ss;
//k2=1;
k3=k3+1;
//System.out.println(str1);
jg_TextField.setText(str1);//显示
} else if(k1==2){
if (k4==1)
{
str2="";
k5=1; //还原开关k5状态
}
str2=str2+ss;
//k2=2;
k4=k4+1;
///////////////测试////////////////
jg_TextField.setText(str2);
}
}
}
作者:
330254601
时间:
2012-5-23 11:14
//--------符 号的事件相应代码-----------
class JianTing_fh implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String ss2=((JButton)e.getSource()).getText();
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
if(k2==1)
{
k1=2;//开关 k1 为1时,向数1写 为2时,向数2写
k5=1;
fh=ss2;
k2=k2+1;//按符号键的次数
}
else
{
int a=vt.size();
JButton c=(JButton)vt.get(a-2);
if(!(c.getText().equals("+"))&&!(c.getText().equals("-"))&&!(c.getText().equals("*"))&&!(c.getText().equals("/"))){
yuns(); //计算函数
str1=jg;
k1=2;//开关 k1 为1时,向数1写 为2时,向数2写
k5=1;
k4=1;
fh=ss2;
}
k2=k2+1;
}
}
}
//--------清除-------
class JianTing_clear implements ActionListener{
public void actionPerformed(ActionEvent e){
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
k5=1;
k2=1;
k1=1;
k3=1;
k4=1;
str1="0";
str2="0";
fh="";
jg="";
jg_TextField.setText(jg);
vt.clear();
}
}
//----------------等 于 ---------------------
class JianTing_dy implements ActionListener{
public void actionPerformed(ActionEvent e){
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
yuns();
k1=1; //还原开关k1状态
//str1=jg;
k2=1;
k3=1;//还原开关k3状态
k4=1; //还原开关k4状态
str1=jg; //为7+5=12 +5=17 这种计算做准备
}
}
作者:
330254601
时间:
2012-5-23 11:24
//----------------小数点 ---------------------
class JianTing_xiaos implements ActionListener{
public void actionPerformed(ActionEvent e){
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
if(k5==1){
String ss2=((JButton)e.getSource()).getText();
if (k1==1)
{
if(k3==1)
{
str1="";
k5=1; //还原开关k5状态
}
str1=str1+ss2;
//k2=1;
k3=k3+1;
//System.out.println(str1);
jg_TextField.setText(str1);//显示
}else if(k1==2){
if (k4==1){
str2="";
k5=1; //还原开关k5状态
}
str2=str2+ss2;
//k2=2;
k4=k4+1;
///////////////测试////////////////
jg_TextField.setText(str2);
}
}
k5=k5+1; //
}
}
//****************************************************
//注册 **,将上面写的各种响应事件注册到**上
//当你去点击一个按钮的时候,程序就会监听到对应的动作,调用对应的响应事件
//****************************************************
JianTing_dy jt_dy=new JianTing_dy();
JianTing jt= new JianTing();//临听数字键
JianTing_fh jt_fh= new JianTing_fh();//临 听符 号键
JianTing_clear jt_c=new JianTing_clear(); //清除键
JianTing_xiaos jt_xs=new JianTing_xiaos();// 小数点 键
button7.addActionListener(jt);
button8.addActionListener(jt);
button9.addActionListener(jt);
button_chu.addActionListener(jt_fh);
button4.addActionListener(jt);
button5.addActionListener(jt);
button6.addActionListener(jt);
button_cheng.addActionListener(jt_fh);
button1.addActionListener(jt);
button2.addActionListener(jt);
button3.addActionListener(jt);
button_jian.addActionListener(jt_fh);
button0.addActionListener(jt);
button_Dian.addActionListener(jt_xs);
button_dy.addActionListener(jt_dy);
button_jia.addActionListener(jt_fh);
clear_Button.addActionListener(jt_c);
//关闭事件处理程序
作者:
TesterChen
时间:
2012-5-23 12:56
回复
1#
330254601
分享的精神是好的,但收费的行为是无耻的
作者:
330254601
时间:
2012-5-23 14:50
回复
6#
TesterChen
不好意思哈,这是给别人做的一个期末题。
作者:
330254601
时间:
2012-5-23 14:50
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
//---------------计 算函数------------------
public void yuns(){
double a2;//运算数1
double b2;//运算数2
String c=fh;// 运算符
double jg2=0 ;//结果
if (c.equals("")){
//System.out.println("请输入运算符");
jg_TextField.setText("请输入运算符");
} else {
System.out.println("str1:"+str1);//调试时 使 用
System.out.println("str2:"+str2);//调试时 使 用
System.out.println("运算符:"+fh);//调试时 使 用
if (str1.equals(".")) //字符串 "." 转换成double型数据时 会出错 所以手工转
str1="0.0";
if (str2.equals("."))
str2="0.0";
a2=Double.valueOf(str1).doubleValue();
b2=Double.valueOf(str2).doubleValue();
System.out.println("double型的a2:"+a2); //调试时 使 用
System.out.println("double型的b2:"+b2); //调试时 使 用
if (c.equals("+")){
jg2=a2+b2;
}
if (c.equals("-")){
jg2=a2-b2;
}
if (c.equals("*")){
jg2=a2*b2;
}
if (c.equals("/")){
if(b2==0){
jg2=0;//0000000000000 by 0 cu!
}else{
jg2=a2/b2;
}
}
System.out.println("double型a2"+fh+"b2结果:"+jg2);
System.out.println();
jg=((new Double(jg2)).toString());
jg_TextField.setText(jg);
}
}
}
作者:
216348410
时间:
2014-12-23 20:43
你好,我想问你能不能帮我做你这个计算器的Junit测试代码,QQ:
2116348410@QQ.COM
,无论如何,先谢谢了。
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2