资源描述
JAVA语言程序设计报告
学 号: 201203529
姓 名: 周晓文
班 级: 教技11202
指导老师: 陈老师
长江大学计算机科学学院
设计要求:
在例6-16的基础上,扩展计算机的部分功能,使其达到如图所示的计算机界面要求,并实现全部要求。
设计思路:
1、 分析题意,理解题目所要求的内容;
2、 弄清计算器各个功能的具体作用;
3、 整理思路,编写代码。
4、 运行程序,检查错误;
5、 调试程序。
(MS:存储显示栏中的数字 (显示左端出现M )。
MC:清除存储的数字 (存数变0,M消失)。
MR:在显示栏中显示存储的数字。
M+:将显示栏中的数字加到存储的数字。
M-/ M-:存储的数字减去显示栏中的数字。
C:在数字输入期间,第一次按下此键将清除除存储器内容外的所有数值.
CE:在数字输入期间按下此键将清除输入寄存器中的值并显示"0".)
程序代码:
该程序分成3个类:
(1)控制界面布局及功能实现的面板容器类:CalculatorPaneClass.java
package calculator;
/**
*
* @author 周晓文
*/
//file name:CalculatorPaneClass.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CalculatorPanelClass extends JPanel {//计算器界面类
private JLabel display;//显示结果标签
private JPanel panel;
private double result,s;
private String lastCommand;
private boolean start;
public CalculatorPanelClass(){//构造函数,定义赋初值
setLayout(new BorderLayout());//创建新的实力
result = 0;
s=0;
lastCommand = "=";
start = true;
display = new JLabel("0",SwingConstants.RIGHT);
display.setForeground(Color.black);//设置前景色
display.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.black),BorderFactory.createEmptyBorder(50,50,20,20)));
add(display,BorderLayout.NORTH);
ActionListener insert = new InsertAction();
ActionListener command = new CommandAction();
panel= new JPanel();
panel.setLayout(new GridLayout(5,6,16,20));//设置计算器面板上按钮的行数和列数,以及行列间距
addButton("",insert);//计算器按钮
addButton("",insert);
addButton("",insert);
addButton1("Backspace",insert);
addButton1("CE",insert);
addButton1("C",insert);
addButton("MC",insert);
addButton("7",insert);
addButton("8",insert);
addButton("9",insert);
addButton("/",command);
addButton("sqrt",command);
addButton("MR",insert);
addButton("4",insert);
addButton("5",insert);
addButton("6",insert);
addButton("*",command);
addButton("%",command);
addButton("MS",insert);
addButton("1",insert);
addButton("2",insert);
addButton("3",insert);
addButton("-",command);
addButton("1/x",command);
addButton("M+",insert);
addButton("0",insert);
addButton("+/-",command);
addButton(".",insert);
addButton("+",command);
addButton("=",command);
add(panel,BorderLayout.SOUTH);
}//在面板容器中添加按钮组件
private void addButton(String label,ActionListener listener){
JButton button=new JButton(label);
button.addActionListener(listener);
panel.add(button);
}//处理单击数字按钮事件的监听器类
private void addButton1(String label, ActionListener listener){
JButton button = new JButton(label);
button.addActionListener(listener);
panel.add(button);
}
private class InsertAction implements ActionListener{
public void actionPerformed(ActionEvent event){
String input = event.getActionCommand();
if(start){
display.setText("");
start=false;
}
if(!input.equals("Backspace") && !input.equals("CE") && !input.equals("C")
&& !input.equals("MS") && !input.equals("MC") && !input.equals("MR")
&& !input.equals("M+"))
display.setText(display.getText() + input);//处理单击命令按钮事件的监听器类
if(input.equals("C"))
{
display.setText("0");
result = 0;
lastCommand = "=";
start = true;
}//C的功能实现
if(input.equals("CE"))
display.setText("0");
if(input.equals("Backspace")){
int i = display.getText().length();
display.setText(display.getText().substring(0, i-1));}
if(input.equals("MS")){
//calculate(Double.parseDouble(display.getText()));
s = result;
result = 0;
}
if(input.equals("MR")){
display.setText(""+s);
}
if(input.equals("MC")){
s = 0;
}
if(input.equals("M+")){
s += result;
}
}
}//CE、Backspace、MS、MR、MC、M+的功能实现
private class CommandAction implements ActionListener{
public void actionPerformed(ActionEvent evt){
String command = evt.getActionCommand();
if(start){
lastCommand = command;
}
else{
calculate(Double.parseDouble(display.getText()));
lastCommand = command;
start = true;
}
}
}
public void calculate(double x){//计算
if(lastCommand.equals("+")){
result +=x;
} else if (lastCommand.equals("-")) {
result -=x;
} else if (lastCommand.equals("*")) {
result *=x;
} else if (lastCommand.equals("/")) {
result /=x;
} else if (lastCommand.equals("=")) {
result =x;
}else if (lastCommand.equals("1/x")){
result =1/x;
} else if(lastCommand.equals("sqrt")){
result = Math.sqrt(x);
} else if (lastCommand.equals("+/-")){
result =-x;
} else if(lastCommand.equals("MC")){
result = x*0;
} else if (lastCommand.equals("%")) {
result= x / 100;
}
display.setText(""+result);
}
}
(2)外层窗口类:CalculatorFrameClass
package calculator;
/**
*
* @author 周晓文
*/
import java.awt.*;
import javax.swing.*;
public class CalculatorFrameClass extends JFrame{//外层窗口类
public CalculatorFrameClass(){
setTitle("calculator");
Container contentPane=getContentPane();
CalculatorPanelClass panel=new CalculatorPanelClass();
contentPane.add(panel);
setSize(500,350);//设置计算器大小
setVisible(true);
setResizable(true);
}
}
(3)测试类:TestCalculatorClass
package calculator;
/**
*
* @author 周晓文
*/
import javax.swing.*;
public class TestCalculatorClass {
public static void main(String[] args){
CalculatorFrameClass frame=new CalculatorFrameClass();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
计算器截图
分析不足
1. 计算器的版式设计过于简单,应该用两个panel控制,设置不同的按钮大小,使版式更加漂亮;
2. M+的功能实现存在一些问题,代码出现了一些问题,所以有时M+的功能无法正常使用;
3. 未理解清楚题意,误将%理解成了百分比,所以没有实现取余的功能。
展开阅读全文