文档库 最新最全的文档下载
当前位置:文档库 › java 课程设计 计算器经典代码

java 课程设计 计算器经典代码

每一段都是一个类
是目前最完善的计算器代码 bug少

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.LinkedList;
import java.io.*;
public class CalculatorWindow extends JFrame implements ActionListener{
NumberButton numberButton[];
OperationButton operationButton[];
JButton 小数点操作,正负号操作,退格操作,等号操作,清零操作,sin;
JTextField resultShow; //显示计算结果
JTextField showComputerProcess; //显示当前计算过程
JTextArea saveComputerProcess; //显示计算步骤
JButton saveButton,copyButton,clearButton;
LinkedList list; //链表用来存放第一个运算数、运算符号和第二个运算数
HandleDigit handleDigit; //负责处理ActionEvent事件
HandleOperation handleOperation ;
HandleBack handleBack;
HandleClear handleClear;
HandleEquality handleEquality;
HandleDot handleDot;
HandlePOrN handlePOrN;
HandleSin handleSin;
public CalculatorWindow(){
setTitle("计算器");
JPanel panelLeft,panelRight;
list=new LinkedList();
resultShow=new JTextField(10);
resultShow.setHorizontalAlignment(JTextField.RIGHT);
resultShow.setForeground(Color.blue);
resultShow.setFont(new Font("TimesRoman",Font.BOLD,16));
resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
resultShow.setEditable(false);
resultShow.setBackground(Color.white);
showComputerProcess=new JTextField();
showComputerProcess.setHorizontalAlignment(JTextField.CENTER);
showComputerProcess.setFont(new Font("Arial",Font.BOLD,16));
showComputerProcess.setBackground(Color.cyan);
showComputerProcess.setEditable(false);
saveComputerProcess=new JTextArea();
saveComputerProcess.setEditable(false);
saveComputerProcess.setFont(new Font("宋体",Font.PLAIN,16));
numberButton=new NumberButton[10];
handleDigit=new HandleDigit(list,resultShow,showComputerProcess);
for(int i=0;i<=9;i++){
numberButton[i]=new NumberButton(i);
numberButton[i].setFont(new Font("Arial",Font.BOLD,20));
numberButton[i].addActionListener(handleDigit);
}
operationButton=new OperationButton[4];
handleOperation=new HandleOperation(list,resultShow,
showComputerProcess,saveComputerProcess);
String 运算符号[]={"+","-","*","/"};
for(int i=0;i<4;i++){
operationButton[i]=new OperationButton(运算符号[i]);
operationButton[i].setFont(new Font("Arial",Font.BOLD,20));
operationButton[i].addActionListener(handleOperation);
}
小数点操作=new JButton(".");
handleDot=new HandleDot(list,resultShow,sho

wComputerProcess);
小数点操作.addActionListener(handleDot);
正负号操作=new JButton("+/-");
handlePOrN=new HandlePOrN(list,resultShow,showComputerProcess);
正负号操作.addActionListener(handlePOrN);
等号操作=new JButton("=");
handleEquality=new HandleEquality(list,resultShow,
showComputerProcess,saveComputerProcess);
等号操作.addActionListener(handleEquality);
sin=new JButton("sin");
handleSin=new HandleSin(list,resultShow,
showComputerProcess,saveComputerProcess);
sin.addActionListener(handleSin);
退格操作=new JButton("退格");
handleBack=new HandleBack(list,resultShow,showComputerProcess);
退格操作.addActionListener(handleBack);
清零操作=new JButton("C");
handleClear=new HandleClear(list,resultShow,showComputerProcess);
清零操作.addActionListener(handleClear);
清零操作.setForeground(Color.red);
退格操作.setForeground(Color.red);
等号操作.setForeground(Color.red);
sin.setForeground(Color.blue);
正负号操作.setForeground(Color.blue);
小数点操作.setForeground(Color.blue);
panelLeft=new JPanel();
panelRight=new JPanel();
panelLeft.setLayout(new BorderLayout());
JPanel centerInLeft=new JPanel();
panelLeft.add(resultShow,BorderLayout.NORTH);
panelLeft.add(centerInLeft,BorderLayout.CENTER);
centerInLeft.setLayout(new GridLayout(4,5));
centerInLeft.add(numberButton[1]);
centerInLeft.add(numberButton[2]);
centerInLeft.add(numberButton[3]);
centerInLeft.add(operationButton[0]);
centerInLeft.add(清零操作);
centerInLeft.add(numberButton[4]);
centerInLeft.add(numberButton[5]);
centerInLeft.add(numberButton[6]);
centerInLeft.add(operationButton[1]);
centerInLeft.add(退格操作);
centerInLeft.add(numberButton[7]);
centerInLeft.add(numberButton[8]);
centerInLeft.add(numberButton[9]);
centerInLeft.add(operationButton[2]);
centerInLeft.add(sin);
centerInLeft.add(numberButton[0]);
centerInLeft.add(正负号操作);
centerInLeft.add(小数点操作);
centerInLeft.add(operationButton[3]);
centerInLeft.add(等号操作);
panelRight.setLayout(new BorderLayout());
panelRight.add(showComputerProcess,BorderLayout.NORTH);
saveButton=new JButton("保存");
copyButton=new JButton("复制");
clearButton=new JButton("清除");
saveButton.setToolTipText("保存计算过程到文件");
copyButton.setToolTipText("复制选中的计算过程");
clearButton.setToolTipText("清除计算过程");
saveButton.addActionListener(this);
copyButton.addActionListener(this);
c

learButton.addActionListener(this);
panelRight.add(new JScrollPane(saveComputerProcess),BorderLayout.CENTER);
JPanel southInPanelRight=new JPanel();
southInPanelRight.add(saveButton);
southInPanelRight.add(copyButton);
southInPanelRight.add(clearButton);
panelRight.add(southInPanelRight,BorderLayout.SOUTH);
JSplitPane split=new JSplitPane
(JSplitPane.HORIZONTAL_SPLIT,panelLeft,panelRight);
add(split,BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setBounds(100,50,528,258);
validate();
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==copyButton)
saveComputerProcess.copy();
if(e.getSource()==clearButton)
saveComputerProcess.setText(null);
if(e.getSource()==saveButton){
JFileChooser chooser=new JFileChooser();
int state=chooser.showSaveDialog(null);
File file=chooser.getSelectedFile();
if(file!=null&&state==JFileChooser.APPROVE_OPTION){
try{ String content=saveComputerProcess.getText();
StringReader read=new StringReader(content);
BufferedReader in= new BufferedReader(read);
FileWriter outOne=new FileWriter(file);
BufferedWriter out= new BufferedWriter(outOne);
String str=null;
while((str=in.readLine())!=null){
out.write(str);
out.newLine();
}
in.close();
out.close();
}
catch(IOException e1){}
}
}
}
public static void main(String args[]){
new CalculatorWindow();
}
}










import java.util.LinkedList;
import javax.swing.*;
import java.awt.event.*;
public class HandleBack implements ActionListener{
LinkedList list;
JTextField resultShow,showComputerProcess;
HandleBack(LinkedList list,JTextField t1,JTextField t2){
this.list=list;
resultShow=t1;
showComputerProcess=t2;
}
public void actionPerformed(ActionEvent e){
if(list.size()==1){
String num=(String)list.getFirst();
if(num.length()>=1){
num=num.substring(0,num.length()-1);
list.set(0,num);
resultShow.setText(num);
showComputerProcess.setText(""+num);
}
else{
list.removeLast();
resultShow.setText("0");
showComputerProcess.setText("0");
}
}
else if(list.size()==3){
String num=(String)list.getLast();
if(num.length()>=1){

num=num.substring(0,num.length()-1);
list.set(2,num);
resultShow.setText(num);
showComputerProcess.setText(num);
}
else{
list.removeLast();
resultShow.setText("0");
showComputerProcess.setText("0");
}
}
}
}















import java.util.LinkedList;
import javax.swing.*;
import java.awt.event.*;
public class HandleClear implements ActionListener{
LinkedList list;
JTextField resultShow,showComputerProcess;
HandleClear(LinkedList list,JTextField t1,JTextField t2){
this.list=list;
resultShow=t1;
showComputerProcess=t2;
}
public void actionPerformed(ActionEvent e){
resultShow.setText("0");
list.clear();
showComputerProcess.setText(null);
}
}



import java.util.LinkedList;
import javax.swing.*;
import java.awt.event.*;
public class HandleDigit implements ActionListener{
LinkedList list;
JTextField resultShow;
JTextField showComputerProcess;
HandleDigit(LinkedList list,JTextField t1,JTextField t2) {
this.list=list;
resultShow=t1;
showComputerProcess=t2;
}
public void actionPerformed(ActionEvent e){
NumberButton b=(NumberButton)e.getSource();
if(list.size()==0) {
int number=b.getNumber();
list.add(""+number);
resultShow.setText(""+number);
showComputerProcess.setText(""+list.get(0));
}
else if(list.size()==1){
int number=b.getNumber();
String num=list.getFirst();
String s=num.concat(""+number);
list.set(0,s);
resultShow.setText(s);
showComputerProcess.setText(""+list.get(0));
}
else if(list.size()==2){
int number=b.getNumber();
list.add(""+number);
resultShow.setText(""+number);
showComputerProcess.setText(""+list.get(0)+""+list.get(1)+
""+list.get(2));
}
else if(list.size()==3) {
int number=b.getNumber();
String num=list.getLast();
String s=num.concat(""+number);
list.set(2,s);
resultShow.setText(s);
showComputerProcess.setText(""+list.get(0)+""+list.get(1)+
""+list.get(2));
}
}
}





import java.util.LinkedList;
import javax.swing.*;
import java.awt.event.*;
public class HandleDot implements ActionListener{
LinkedList list;
JTextField resultShow,showComputerProcess;
HandleDot(LinkedList list,JTextField t1,JTextField t2){
this.

list=list;
resultShow=t1;
showComputerProcess=t2;
}
public void actionPerformed(ActionEvent e){
String dot=e.getActionCommand();
if(list.size()==1){
String num=list.getFirst();
String s=null;
if(num.indexOf(dot)==-1){
s=num.concat(dot);
list.set(0,s);
}
else
s=num;
list.set(0,s);
resultShow.setText(s);
showComputerProcess.setText(""+list.get(0));
}
else if(list.size()==3){
String num=list.getLast();
String s=null;
if(num.indexOf(dot)==-1){
s=num.concat(dot);
list.set(2,s);
}
else
s=num;
resultShow.setText(s);
showComputerProcess.setText(""+list.get(0)+""+list.get(1)+
""+list.get(2));
}
}
}




import java.util.LinkedList;
import javax.swing.*;
import java.awt.event.*;
public class HandleDownNumber implements ActionListener{
LinkedList list;
JTextField resultShow,showComputerProcess;
JTextArea saveComputerProcess;
HandleDownNumber(LinkedList list,JTextField t1,JTextField t2,
JTextArea t3){
this.list=list;
resultShow=t1;
showComputerProcess=t2;
saveComputerProcess=t3;
}
public void actionPerformed(ActionEvent e){
if(list.size()==1||list.size()==2){
String numOne=list.getFirst();
try{ double d=Double.parseDouble(numOne);
double result=1.0/d;
String str=String.valueOf(result);
list.set(0,str);
resultShow.setText(str);
String proccess="1/"+numOne+"="+result;
showComputerProcess.setText(proccess);
saveComputerProcess.append("\n"+proccess);
if(list.size()==2)
list.removeLast(); //移掉运算符号
}
catch(Exception ee){}
}
else if(list.size()==3){
String numTwo=list.getLast();
try{ double d=Double.parseDouble(numTwo);
double result=1.0/d;
String str=String.valueOf(result);
list.set(0,str);
resultShow.setText(str);
String proccess="1/"+numTwo+"="+result;
showComputerProcess.setText(proccess);
saveComputerProcess.append("\n"+proccess);
list.removeLast(); //移掉第2个运算数
list.removeLast(); //移掉运算符号
}
catch(Exception ee){}
}
}
}

import java.util.LinkedList;
import javax.swing.*;
import java.awt.even

t.*;
public class HandleEquality implements ActionListener{
LinkedList list;
JTextField resultShow,showComputerProcess;
JTextArea saveComputerProcess;
HandleEquality(LinkedList list,JTextField t1,JTextField t2,
JTextArea t3){
this.list=list;
resultShow=t1;
showComputerProcess=t2;
saveComputerProcess=t3;
}
public void actionPerformed(ActionEvent e){
if(list.size()==1){
String num=list.getFirst();
resultShow.setText(""+num);
showComputerProcess.setText(list.get(0));
}
if(list.size()==2){
String num=list.getFirst();
String 运算符号=list.get(1);
try{ double n1=Double.parseDouble(num);
double n2=Double.parseDouble(num);
double result=0;
if(运算符号.equals("+"))
result=n1+n2;
else if(运算符号.equals("-"))
result=n1-n2;
else if(运算符号.equals("*"))
result=n1*n2;
else if(运算符号.equals("/"))
result=n1/n2;
resultShow.setText(""+result);
String proccess=num+""+运算符号+""+num+"="+result;
showComputerProcess.setText(proccess);
saveComputerProcess.append(" "+proccess+"\n");
list.set(0,""+result);
}
catch(Exception ee){}
}
else if(list.size()==3){
String numOne=list.getFirst();
String 运算符号=list.get(1);
String numTwo=list.getLast();
try{ double n1=Double.parseDouble(numOne);
double n2=Double.parseDouble(numTwo);
double result=0;
if(运算符号.equals("+"))
result=n1+n2;
else if(运算符号.equals("-"))
result=n1-n2;
else if(运算符号.equals("*"))
result=n1*n2;
else if(运算符号.equals("/"))
result=n1/n2;
resultShow.setText(""+result);
String proccess=numOne+""+运算符号+""+numTwo+"="+result;
showComputerProcess.setText(proccess);
saveComputerProcess.append(" "+proccess+"\n");
list.set(0,""+result);
list.removeLast(); //移掉第2个运算数
list.removeLast(); //移掉运算符号
}
catch(Exception ee){}
}
}
}



import java.util.LinkedList;
import javax.swing.*;
import java.awt.event.*;
public class HandleOperation implements ActionListener{
LinkedList list;
JTextField resultShow,showComputerProcess;
JTextArea saveComputerPr

ocess;
HandleOperation(LinkedList list,JTextField t1,JTextField t2,
JTextArea t3){
this.list=list;
resultShow=t1;
showComputerProcess=t2;
saveComputerProcess=t3;
}
public void actionPerformed(ActionEvent e){
OperationButton b=(OperationButton)e.getSource();
if(list.size()==1){
String fuhao=b.getOperateSign();
list.add(fuhao);
showComputerProcess.setText(""+list.get(0)+""+list.get(1));
}
else if(list.size()==2){
String fuhao=b.getOperateSign();
list.set(1,fuhao);
showComputerProcess.setText(""+list.get(0)+""+list.get(1));
}
else if(list.size()==3){
String numOne=list.getFirst();
String numTwo=list.getLast();
String 运算符号=list.get(1);
String middleProcess=numOne+""+运算符号+numTwo;
try{
double n1=Double.parseDouble(numOne);
double n2=Double.parseDouble(numTwo);
double result=0;
if(运算符号.equals("+"))
result=n1+n2;
else if(运算符号.equals("-"))
result=n1-n2;
else if(运算符号.equals("*"))
result=n1*n2;
else if(运算符号.equals("/"))
result=n1/n2;
String fuhao=b.getOperateSign();
list.clear();
list.add(""+result);
list.add(fuhao);
String pro=middleProcess+"="+result+""+list.get(1);
showComputerProcess.setText(pro);
saveComputerProcess.append(" "+middleProcess+"="+result+"\n");
resultShow.setText(""+result);
}
catch(Exception ee){}
}
}
}



import java.util.LinkedList;
import javax.swing.*;
import java.awt.event.*;
public class HandlePOrN implements ActionListener{
LinkedList list;
JTextField resultShow,showComputerProcess;
HandlePOrN(LinkedList list,JTextField t1,JTextField t2){
this.list=list;
resultShow=t1;
showComputerProcess=t2;
}
public void actionPerformed(ActionEvent e){
if(list.size()==1){
String number1=list.getFirst();
try { double d=Double.parseDouble(number1);
d=-1*d;
String str=String.valueOf(d);
list.set(0,str);
resultShow.setText(str);
showComputerProcess.setText(""+list.get(0));
}
catch(Exception ee){}
}
else if(list.size()==3){
String number2=list.getLast();
try { double d=Double.parseDouble(number2);
d=-1*d;
String str=String.valueOf(d);
li

st.set(2,str);
resultShow.setText(str);
showComputerProcess.setText(""+list.get(0)+""
+list.get(1)+""+list.get(2));
}
catch(Exception ee){}
}
}
}


import java.util.LinkedList;
import javax.swing.*;
import java.awt.event.*;
public class HandlePositiveOrNegative implements ActionListener{
LinkedList list;
JTextField resultShow,showComputerProcess;
HandlePositiveOrNegative(LinkedList list,JTextField t1,JTextField t2){
this.list=list;
resultShow=t1;
showComputerProcess=t2;
}
public void actionPerformed(ActionEvent e){
if(list.size()==1){
String number1=list.getFirst();
try { double d=Double.parseDouble(number1);
d=-1*d;
String str=String.valueOf(d);
list.set(0,str);
resultShow.setText(str);
showComputerProcess.setText(""+list.get(0));
}
catch(Exception ee){}
}
else if(list.size()==3){
String number2=list.getLast();
try { double d=Double.parseDouble(number2);
d=-1*d;
String str=String.valueOf(d);
list.set(2,str);
resultShow.setText(str);
showComputerProcess.setText(""+list.get(0)+""
+list.get(1)+""+list.get(2));
}
catch(Exception ee){}
}
}
}



import java.util.LinkedList;
import javax.swing.*;
import java.awt.event.*;
public class HandleSin implements ActionListener{
LinkedList list;
JTextField resultShow,showComputerProcess;
JTextArea saveComputerProcess;
HandleSin(LinkedList list,JTextField t1,JTextField t2,
JTextArea t3){
this.list=list;
resultShow=t1;
showComputerProcess=t2;
saveComputerProcess=t3;
}
public void actionPerformed(ActionEvent e){
if(list.size()==1||list.size()==2){
String numOne=list.getFirst();
try{ double x=Double.parseDouble(numOne);
double result=Math.sin(x);
String str=String.valueOf(result);
list.set(0,str);
resultShow.setText(str);
String proccess="sin("+numOne+")="+result;
showComputerProcess.setText(proccess);
saveComputerProcess.append(" "+proccess+"\n");
if(list.size()==2)
list.removeLast(); //移掉运算符号
}
catch(Exception ee){}
}
else if(list.size()==3){
String numTwo=list.getLast();
try{ double x=Double.parseDouble(numTwo);
double resu

lt=Math.sin(x);
String str=String.valueOf(result);
list.set(0,str);
resultShow.setText(str);
String proccess="sin("+numTwo+")="+result;
showComputerProcess.setText(proccess);
saveComputerProcess.append(" "+proccess+"\n");
list.removeLast(); //移掉第2个运算数
list.removeLast(); //移掉运算符号
}
catch(Exception ee){}
}
}
}



import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class NumberButton extends JButton{
int number;
public NumberButton(int number){
super(""+number);
this.number=number;
setForeground(Color.red);
}
public int getNumber(){
return number;
}
}



import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class OperationButton extends JButton{
String operateSign;
public OperationButton(String s){
super(s);
operateSign=s;
setForeground(Color.red);
}
public String getOperateSign(){
return operateSign;
}
}



相关文档
相关文档 最新文档