仿windows系统计算器的设计
一、设计要求
参考Windows 2000/XP系统提供的计算器,设计实现一个计算器软件,具体实现以下几个功能:
(1)提供以下运算:+、-、*、/、sqrt、1/x、xn、n!、log、ln、PI、sin、cos、exp及 ( )等运算。
(2)设置标准运算界面和科学运算界面,合理组织每个界面中的运算符。
(3)要求界面美观大方、功能实现完整。
二、设计指标
(1) 实现+、-、*、/等基本运算和sin、cos、exp等函数运算。
(2) 实现标准运算界面和科学运算界面,其中包括运算按钮、计算结果显示区域以及标准运算界面和科学运算界面的界面转换菜单。
三、UML图
四、代码
//Calculator.java
package Ex;
import java.awt.*;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calculator extends JFrame{
private double result=0;
public Calculator() {
this.setSize(550,700);
this.setTitle("计算器");
init();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void init() {
this.setLayout(new BorderLayout());
//总体布局为 BorderLayout
JTextArea textArea=new JTextArea(8,6);
this.add(textArea,BorderLayout.NORTH);
//总体布局north放置文本框
JPanel panel=new JPanel();
//面板panel
panel.setLayout(new BorderLayout());
this.add(panel, BorderLayout.CENTER);
//面板panel放在总体布局BorderLayout的CENTER位置
//JPanel panelN=new JPanel();
CardLayout cardLayout=new CardLayout();
//CardLayout布局用于切换科学与标准界面
JPanel panelC=new JPanel() ;
panelC.setLayout(cardLayout);
//面板panelC为CardLayout布局
JPanel panel0=new JPanel();
//面板panel0设置为网格布局,里面放置标准计算用的按钮
panel0.setLayout(new GridLayout(6,4));
JButton[] standredButton=new JButton[24];
String str[]={
"%","CE","C","del",
"1/x","x^2","sqrt","/",
"7","8","9","*",
"4","5","6","-",
"1","2","3","+",
"+/-","0",".","="
};
for(int i=0;i<standredButton.length;i++) {
standredButton[i]=new JButton(str[i]);
String text=standredButton[i].getText();
standredButton[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(text.equals("CE")||text.equals("C")) {
textArea.setText("");
}
else if(text.equals("=")) {
String s=textArea.getText();
Calculate cal=new Calculate(