JAVA上机报告

  • 格式:docx
  • 大小:186.68 KB
  • 文档页数:7

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.javaimport 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(BorderFac tory.createLineBorder(Color.black),BorderFactory.createEmptyBo rder(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)外层窗口类:CalculatorFrameClasspackage 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)测试类:TestCalculatorClasspackage 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.未理解清楚题意,误将%理解成了百分比,所以没有实现取余的功能。