实验一:计算器应用程序实验报告
目录
一概述......................................... 错误!未定义书签。二总体方案设计 . (3)
三详细设计 (11)
五课程设计体会和总结 (12)
六附录.................................................... (13)
一概述
1.程序具备的功能:
(1)使用图形用户界面:一个文本框;0-9数字按钮;加、减、乘、
除运算符;“小数点”和“等于”符号;复位按钮;清空按钮;开方和平方以及求倒按钮;
(2)完成整数、实数的四则运算(加、减、乘、除);
(3)通过按钮点击实现数据的复位(清空);
(4)通过按钮点击实现数据的删除;
(5)通过按钮点击实现对数据的开方或平方。
2.课程设计的主要设计思想
对于此计算器程序,首先要设计其GUI界面,总体界面有一个文本框,22个按钮,总体界面用BorderLayout布局。
文本框放置在最上端,然后0到9以及+,-,*,/,sqrt,平方,求倒的按钮放置到一个面板Panel中,添加到整体布局的中,界面设计完成。
布局设计好后再添加按钮事件。对于此程序要考虑到点击加、
减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮
或者是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮
的数值设置到文本框中,否则则应把文本框中的内容加上你所点击按
钮的数值设置到文本框中。
在进行加、减、乘、除计算时要把点击加、减、乘、除按钮之
前的数值保存下来,运算时是这个被保存下来的数值和文本框中的数
值加、减、乘、除。
二总体方案设计
1.界面设计
界面设计要求用GUI,界面设计中有用到swing组件的TextField 和Button,用到awt中的BorderLayout和GridLayout布局管理方式,其图形界面如下:
2.功能介绍
这是一种简单的计算器中,本项目用到了Java中的GUI界面和swing组件以及awt布局,简单易用,它能完成如下的几个小功能:点击按钮中的数字键和运算符键就能进行简单的加、乘、乘、除求模四则运算;
还能通过按钮键进行开方和平方及求倒运算;
如果输入有误时可以清空按钮撤销后重新输入新数据;
还可以后退按钮来向后退一位数字而不必全部删除。
三详细设计
程序流程图如下:
部分代码展示及说明:
(1)这段代码主要是对程序的主框架进行相应的设置。
class JSQFrame extends JFrame
{
public JSQFrame()
{
setTitle("计算器");
setSize(WIDTH,HEIGHT);
JSQPanel panel=new JSQPanel();
panel.setBackground(Color.blue);//设置背景颜色为蓝色
Border border=BorderFactory.createLoweredBevelBorder();
Border bj=BorderFactory.createTitledBorder(border,"计算器");
panel.setBorder(bj);
Container contentPane=getContentPane();
contentPane.add(panel);
l = new JLabel(TP);
l.setBounds(3, 0,333, 375);
contentPane.add(l);//在面板上增加图片
contentPane.add(panel);
}
public static final int WIDTH=333;
public static final int HEIGHT=375;//设置大小
protected JLabel l;
protected ImageIcon TP;
}
(2)这段代码是在框架上加按钮及背景外观的设置:public JSQPanel()
{
i = new ImageIcon("1.jpg");
lab = new JLabel(i);
add(lab);//显示图片
display=new JTextField("",30);
display.setBounds(0, 15,15, 25);
add(display)
JPanel Buttons=new JPanel();
Buttons.setLayout(new GridLayout(4,6,6,6));
addButton(this," ←");
addButton(this," 清空");
String buttons="123=a456+-789*/.0";
for(int i=0;i addButton(Buttons,buttons.substring(i,i+1)); addButton(Buttons,"sqrt"); addButton(Buttons,"求倒"); addButton(Buttons,"平方"); add(Buttons); //在框架上加按钮 } (3)这段代码是对不同按钮颜色的设置:private void addButton(Container c,String s) { JButton b=new JButton(s); if(s.charAt(0)>='0'&&s.charAt(0)<='9') b.setBackground(Color.green); else b.setBackground(Color.orange); c.add(b); b.addActionListener(this); } (4)这段代码是对程序如何进行运算的设计 public void actionPerformed(ActionEvent event) { String s=event.getActionCommand(); if(s.charAt(0)>='0'&&s.charAt(0)<='9'||s.equals(".")) { if(start) display.setText(s); else display.setText(display.getText()+s); start=false;//判断是不是数字或小数点 } else { if(start) { if(s.equals("-")) { display.setText(s); start=false; } else op=s; } if(s.equals(" 清空")) { arg=0; op="="; display.setText("");}//清空按钮作用设置 else if(s.equals(" ←")) { String a=display.getText(); String s1=a.substring(0,a.length()-1); arg=Double.parseDouble(s1); display.setText(s1+"");//退后按钮作用设置} else if(s.equals("sqrt")) { double x=Double.parseDouble(display.getText()); arg=jc(x);//调用函数 display.setText(""+arg); tart=true; } else if(s.equals("平方")) { double x=Double.parseDouble(display.getText()); arg=x*x;//平方算法 display.setText(""+arg); start=true; } else if(s.equals("求倒")) { double x=Double.parseDouble(display.getText()); arg=1/x;//求倒算法 display.setText(""+arg); start=true; } else { double x=Double.parseDouble(display.getText()); calculate(x); op=s; start=true; } } } public void calculate(double n) { if(op.equals("+")) arg+=n ; //加法算法 else if(op.equals("-")) arg-=n;//减法算法 else if(op.equals("/")) arg/=n;//除法算法 else if(op.equals("*")) arg*=n;//乘法算法 else if(op.equals("=")) arg=n; display.setText(""+arg); start=true; } public double jc(double x) { double t; t=Math.sqrt(x); return(t);//开方的算法 } private JTextField display; private double arg=0; private String op="="; private boolean start=true; private ImageIcon i; private JLabel lab; } 四程序的调试与运行结果说明事例1:45+87 预计结果132 实际结果 事例2:29-87 预计结果-58 实际结果: 事例2:45/5 预计结果9 实际结果 事例3 9的平方及开方预计结果81和3 实际结果 五课程设计体会和总结 六附录 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.color.*; import javax.swing.border.*; import java.util.*; import http://www.wendangku.net/doc/df495ed576eeaeaad1f330bf.htmlng.*; public class JSQ { public static void main(String[] args) { JSQFrame frame=new JSQFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.show(); } } class JSQFrame extends JFrame { public JSQFrame() { setTitle("计算器"); setSize(WIDTH,HEIGHT); JSQPanel panel=new JSQPanel(); panel.setBackground(Color.blue); Border border=BorderFactory.createLoweredBevelBorder(); Border bj=BorderFactory.createTitledBorder(border,"计算器"); panel.setBorder(bj); Container contentPane=getContentPane() contentPane.add(panel); l = new JLabel(TP); l.setBounds(3, 0,333, 375); contentPane.add(l); contentPane.add(panel); } public static final int WIDTH=333; public static final int HEIGHT=375; protected JLabel l; protected ImageIcon TP; } class JSQPanel extends JPanel implements ActionListener { public JSQPanel() { i = new ImageIcon("1.jpg"); lab = new JLabel(i); add(lab); display=new JTextField("",30); display.setBounds(0, 15,15, 25); add(display); JPanel Buttons=new JPanel(); Buttons.setLayout(new GridLayout(4,6,6,6)); addButton(this," ←"); addButton(this," 清空"); String buttons="123=a456+-789*/.0"; for(int i=0;i addButton(Buttons,buttons.substring(i,i+1)); addButton(Buttons,"sqrt"); addButton(Buttons,"求倒"); addButton(Buttons,"平方"); add(Buttons); } private void addButton(Container c,String s) { if(s.charAt(0)>='0'&&s.charAt(0)<='9') b.setBackground(Color.green); else b.setBackground(Color.orange); c.add(b); b.addActionListener(this); } public void actionPerformed(ActionEvent event) { String s=event.getActionCommand(); if(s.charAt(0)>='0'&&s.charAt(0)<='9'||s.equals(".")) { if(start) display.setText(s); else display.setText(display.getText()+s); start=false; } else { if(start) { if( s.equals("-")) { display.setText(s); start=false; } else op=s; } if(s.equals(" 清空")) { arg=0; op="="; display.setText(""); } else if(s.equals(" ←")) { String a=display.getText(); String s1=a.substring(0,a.length()-1); arg=Double.parseDouble(s1); display.setText(s1+""); } else if(s.equals("sqrt")) { double x=Double.parseDouble(display.getText()); arg=jc(x); display.setText(""+arg); start=true; } else if(s.equals("平方")) { double x=Double.parseDouble(display.getText()); arg=x*x; display.setText(""+arg); start=true; } else if(s.equals("求倒")) { double x=Double.parseDouble(display.getText()); arg=1/x; display.setText(""+arg); start=true; } else { double x=Double.parseDouble(display.getText()); calculate(x); op=s; start=true; } } } public void calculate(double n) { if(op.equals("+")) arg+=n ; else if(op.equals("-")) arg-=n; else if(op.equals("/")) arg/=n; else if(op.equals("*")) arg*=n; else if(op.equals("=")) arg=n; display.setText(""+arg); start=true; } public double jc(double x) { double t; t=Math.sqrt(x); return(t); } private JTextField display; private double arg=0; private String op="="; private boolean start=true; private ImageIcon i; private JLabel lab; }