石家庄职业技术学院
课程设计报告
计算器应用程序
学 生 姓 名:
指 导 教 师:
系 别:
专 业:
年 级:
论文提交时间: 年 月 日
目录
一 概述... 2
二 总体方案设计... 3
三详细设计... 4
四 程序的调试与运行结果说明... 7
五 课程设计总结... 9
六 附录... 10
一 概述
1.程序具备的功能:
(1)使用图形用户界面:一个文本框;0-9数字按钮;加、减、乘、除运算符;“等于”符号;复位按钮;
(2)完成整数、实数的四则运算(加、减、乘、除);
(3)通过按钮点击实现数据的复位(清零);
(4)实数运算中小数位的精度一致。
2.课程设计的主要设计思想
对于此计算器程序,首先要设计其GUI界面,总体界面有一个文本框,18个按钮,总体界面用BorderLayout布局。
文本框放置在最NORTH,然后0到9以及+,-,*,/的按钮放置到一个面板Panel中,添加到整体布局的CENTER,界面设计完成。
布局设计好后再添加按钮事件。对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮的数值设置到文本框中,否则则应把文本框中的内容加上你所点击按钮的数值设置到文本框中。
在进行加、减、乘、除计算时要把点击加、减、乘、除按钮之前的数值保存下来,运算时是这个被保存下来的数值和文本框中的数值加、减、乘、除。
二 总体方案设计
1.界面设计
界面设计要求用GUI,界面设计中有用到swing组件的TextField和Button,用到awt中的BorderLayout和GridLayout布局管理方式,其图形界面如下:
2.功能介绍
这是计算器中的一种:简单计算器,本项目用到了Java中的GUI界面和swing组件以及awt布局,所以简单易用,它能完成如下的几个小功能:
点击按钮中的数字键和运算符键就能进行简单的加、乘、乘、除求模四则运算 ;
还能通过用户自己在文本框中输入数字,进行简单运算 ;
如果输入有误时可以按Clear撤销后重新输入新数据
三详细设计
程序流程图如下:
部分代码展示及说明:
这段代码主要是对程序的主框架进行相应的设置。
Frame f=new Frame("计算器");
f.setBackground(Color.lightGray);
f.setForeground(Color.blue);
f.add(p1,BorderLayout.NORTH);
f.add(p2,BorderLayout.CENTER);
f.add(p3,BorderLayout.SOUTH);
f.setSize(350,300);//设置大小
f.setVisible(true);//设置为可视
这段代码是对程序如何进行运算的设计
if(y==0&&command!="*"&&command!="/"
&&command!="+"&&command!="-"
&&command!="=")//判断输入是否为数字
{
s1=s1.concat(command);
tf.setText(s1);
}
if(command=="*"||command=="/"
||command=="+"||command=="-")//判断是否输入运算符
{
y=1;
s2=command;
}
if(y==1&&command!="*"&&command!="/"
&&command!="+"&&command!="-"
&&command!="=")
{
s3=s3.concat(command);
tf.setText(s3);
}
if(command=="=")
{
Double ob1=Double.valueOf(s1);
Double ob3=Double.valueOf(s3);
d1=ob1.doubleValue();
d3=ob3.doubleValue();
if(s2=="+") d4=d1+d3;
if(s2=="-") d4=d1-d3;
if(s2=="*") d4=d1*d3;
Double ob4=new Double(d4);
tf.setText(ob4.toString());
if(s2=="/")
{ if(d3==0)
tf.setText("除数不能为零");
else{ d4=d1/d3;
ob4=new Double(d4);
tf.setText(ob4.toString());}
}
y=0;
}
这段代码主要为窗口关闭按钮编写程序
class closeWin extends WindowAdapter //为关闭按钮编写程序
{
public void windowClosing(WindowEvent e)
{ System.exit(0);
}
}
四 程序的调试与运行结果说明
事例1 当除数为0时,程序运行结果如下:
事例2:4561+8715 预计结果 13276 实际结果
事例3: 189/2 预计结果94.5 实际结果:
事例4: 29-87 预计结果-58 实际结果:
五 课程设计总结
在做本项目是时候,会遇到很多小问题,比如说:如何保存输入的数字和下一个数进行加、减、乘、除运算。还有如何判断它是第几个输入的数字。后来进行多次研究和查询才知道可以通过设运算符标志位来判断是输入的第几个数值。
此次课程设计让我更了解熟悉了Java中的图形用户界面和它的编程方式。在完成课题的过程中也不断充实了自己,学习到了很多以前没有学习到的知识,收获很大。最大的收获就是对大学学习的总结和培养了解决困难的信心和能力,使我对所学知识能够融会贯通,又不断丰富了新知识。Java计算器设计使得我们对所学的专业课有了更为深刻的认识,使得知识得到了巩固和提高。
六 附录
import java.awt.*;
import java.awt.event.*;
public class Calculator implements ActionListener
{ Panel p1=new Panel();
Panel p2=new Panel();
Panel p3=new Panel();
TextField tf=new TextField(30);
String a[]={"7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"};
Button B[];
Button b1=new Button("CE");
Button b2=new Button("退出");
String s1=new String();
String s2=new String();
String s3=new String();//s1记录第一个数;s2记录运算符;s3记录第二个数;
double d1,d3,d4;
int y=0; // y用于控制运算符
public void init()
{
Frame f=new Frame("计算器");
f.setBackground(Color.lightGray);
f.setForeground(Color.blue);
p1.add(tf);
p3.setLayout(new GridLayout(1,2));
p3.add(b1);
p3.add(b2);
p2.setLayout(new GridLayout(4,4));
B=new Button[a.length];
for(int i=0;i<a.length;i++)
{
B[i]=new Button(a[i]);
p2.add(B[i]);
}
f.add(p1,BorderLayout.NORTH);
f.add(p2,BorderLayout.CENTER);
f.add(p3,BorderLayout.SOUTH);
f.setSize(350,300);//设置大小
f.setVisible(true);//设置为可视
B[0].addActionListener(this);//7
B[1].addActionListener(this); //8
B[2].addActionListener(this); //9
B[3].addActionListener(this); //除
B[4].addActionListener(this); //4
B[5].addActionListener(this); //5
B[6].addActionListener(this); //6
B[7].addActionListener(this); //*
B[8].addActionListener(this); //1
B[9].addActionListener(this); //2
B[10].addActionListener(this); //3
B[11].addActionListener(this); // -
B[12].addActionListener(this); //0
B[13].addActionListener(this); //.
B[14].addActionListener(this); //=
B[15].addActionListener(this); //+
b1.addActionListener(this);
b2.addActionListener(this);
f.addWindowListener(new closeWin());
}
public void actionPerformed(ActionEvent e)
{
String command = e.getActionCommand();
if(command=="CE") //清零键 按下时返回初始状态
{
y=0;
tf.setText("0.");
s1="";s2="";s3="";//记录输入值的变量清空
}
else if(command=="退出") System.exit(0);//退出键 关闭应用程序
else if(y==0&&command!="*"&&command!="/"
&&command!="+"&&command!="-"
&&command!="=")//判断输入是否为数字
{
s1=s1.concat(command);
tf.setText(s1);
}
if(command=="*"||command=="/"
||command=="+"||command=="-")//判断是否输入运算符
{
y=1;
s2=command;
}
if(y==1&&command!="*"&&command!="/"
&&command!="+"&&command!="-"
&&command!="=")
{
s3=s3.concat(command);
tf.setText(s3);
}
if(command=="=")
{
Double ob1=Double.valueOf(s1);
Double ob3=Double.valueOf(s3);
d1=ob1.doubleValue();
d3=ob3.doubleValue();
if(s2=="+") d4=d1+d3;
if(s2=="-") d4=d1-d3;
if(s2=="*") d4=d1*d3;
Double ob4=new Double(d4);
tf.setText(ob4.toString());
if(s2=="/")
{ if(d3==0)
tf.setText("除数不能为零");
else{ d4=d1/d3;
ob4=new Double(d4);
tf.setText(ob4.toString());}
}
y=0;
}
}
public static void main(String [] args)
{
new Calculator().init();
}
}
class closeWin extends WindowAdapter //为关闭按钮编写程序
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
第二篇:课程设计报告(java版的计算器源代码)
程序功能简介:从最基本的加、减、乘、除,到基本数学函数处理,再到数的进制转换处理。 代码如下
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator extends Frame implements ActionListener, WindowListener
{
private Container container;
private GridBagLayout layout;
private GridBagConstraints constraints;
private JTextField displayField; //计算结果显示区
private String lastCommand; //保存+,-,*,/,=命令0
private double result; //保存计算结果
private boolean start; //判断是否为数字的开始
private JMenuBar menubar;
private JMenuItem m_exit,m2_ejz,m2_bjz;
private Dialog dialog;
private Label label_dialog;
private JButton button_sqrt,button_plusminus,button_CE,button_cancel,button_1,button_2, button_3,button_4,button_5,button_6,button_7,button_8,button_9,button_0,
button_plus,button_minus,button_multiply,button_divide,button_point,
button_equal,button_log,button_tan,button_cos,button_sin,button_exp;
public Calculator() //构造方法设置布局、为按钮注册事件监听器
{
super("Calculator");
this.setLocation(240,200);
this.setSize(350,300);
this.setResizable(true);
this.setLayout(new GridLayout(7,1));
this.addmyMenu(); //调用成员方法添加菜单
displayField=new JTextField(30);
this.add(displayField);
displayField.setEditable(true);
start=true;
result=0;
lastCommand = "=";
JPanel panel0=new JPanel();
panel0.setLayout(new GridLayout(1,4,4,4));
JPanel panel1=new JPanel();
panel1.setLayout(new GridLayout(1,5,4,4));
this.add(panel1);
button_sqrt=new JButton("sqrt"); button_plusminus=new JButton("+/-"); button_exp=new JButton("exp");
button_CE=new JButton("退格");
button_cancel=new JButton("C");
JPanel panel2=new JPanel();
panel2.setLayout(new GridLayout(1,5,4,4)); this.add(panel2);
button_7=new JButton("7");
button_8=new JButton("8");
button_9=new JButton("9");
button_log=new JButton("log");
button_divide=new JButton("/");
JPanel panel3=new JPanel();
panel3.setLayout(new GridLayout(1,5,4,4)); this.add(panel3);
button_4=new JButton("4");
button_5=new JButton("5");
button_6=new JButton("6");
button_tan=new JButton("tan");
button_multiply=new JButton("*");
JPanel panel4=new JPanel();
panel4.setLayout(new GridLayout(1,5,4,4)); this.add(panel4);
button_1=new JButton("1");
button_2=new JButton("2");
button_3=new JButton("3");
button_cos=new JButton("cos");
button_minus=new JButton("-");
JPanel panel5=new JPanel();
panel5.setLayout(new GridLayout(1,5,4,4)); this.add(panel5);
button_0=new JButton("0");
button_point=new JButton(".");
button_equal=new JButton("=");
button_sin=new JButton("sin");
button_plus=new JButton("+");
panel1.add(button_sqrt);
panel1.add(button_plusminus);
panel1.add(button_exp);
panel1.add(button_CE);
panel1.add(button_cancel);
panel2.add(button_7);
panel2.add(button_8);
panel2.add(button_9);
panel2.add(button_log);
2
panel2.add(button_divide);
panel3.add(button_4);
panel3.add(button_5);
panel3.add(button_6);
panel3.add(button_tan);
panel3.add(button_multiply);
panel4.add(button_1);
panel4.add(button_2);
panel4.add(button_3);
panel4.add(button_cos);
panel4.add(button_minus);
panel5.add(button_0);
panel5.add(button_point);
panel5.add(button_equal);
panel5.add(button_sin);
panel5.add(button_plus);
button_sqrt.addActionListener(this);
button_plusminus.addActionListener(this); button_exp.addActionListener(this); button_CE.addActionListener(this); button_cancel.addActionListener(this); button_7.addActionListener(this);
button_8.addActionListener(this);
button_9.addActionListener(this);
button_log.addActionListener(this); button_divide.addActionListener(this); button_4.addActionListener(this);
button_5.addActionListener(this);
button_6.addActionListener(this);
button_tan.addActionListener(this);
button_multiply.addActionListener(this); button_1.addActionListener(this);
button_2.addActionListener(this);
button_3.addActionListener(this);
button_cos.addActionListener(this); button_minus.addActionListener(this); button_0.addActionListener(this);
button_point.addActionListener(this); button_equal.addActionListener(this); button_sin.addActionListener(this); button_plus.addActionListener(this);
this.addWindowListener(new WinClose()); this.setVisible(true);
}
private void addmyMenu() //菜单的添加 {
JMenuBar menubar=new JMenuBar();
this.add(menubar);
3 注册窗口监听器 //
JMenu m1=new JMenu("选项");
JMenu m2=new JMenu("进制转换");
JMenuItem m1_exit=new JMenuItem("退出");
m1_exit.addActionListener(this);
JMenuItem m2_ejz=new JMenuItem("二进制");
m2_ejz.addActionListener(this);
JMenuItem m2_bjz=new JMenuItem("八进制");
m2_bjz.addActionListener(this);
JMenu m3 = new JMenu(" 帮助");
JMenuItem m3_Help = new JMenuItem("用法");
m3_Help.addActionListener(this);
dialog = new Dialog(this,"提示",true); //模式窗口
dialog.setSize(240,80);
label_dialog = new Label("",Label.CENTER); //标签的字符串为空,居中对齐 dialog.add(label_dialog);
dialog.addWindowListener(this); //为对话框注册窗口事件监听器
m1.add(m1_exit);
menubar.add(m1);
m2.add(m2_ejz);
m2.add(m2_bjz);
menubar.add(m2);
m3.add(m3_Help);
menubar.add(m3); }
public void actionPerformed(ActionEvent e) //按钮的单击事件处理方法 {
if(e.getSource().equals(button_1)||e.getSource().equals(button_2)||
e.getSource().equals(button_3)||e.getSource().equals(button_4)||
e.getSource().equals(button_5)|| e.getSource().equals(button_6)||
e.getSource().equals(button_7)|| e.getSource().equals(button_8)||
e.getSource().equals(button_9) ||e.getSource().equals(button_0)||
e.getSource().equals(button_point)||e.getSource().equals(button_plusminus)|| e.getSource().equals(button_cancel)||e.getSource().equals(button_CE))
{ //非运算符的处理方法
String input=e.getActionCommand();
if (start)
{
displayField.setText("");
start=false;
if(input.equals("+/-"))
displayField.setText(displayField.getText()+"-");
}
if(!input.equals("+/-"))
{
String str=displayField.getText();
if(input.equals("退格")) //退格键的实现方法
{
if(str.length()>0)
4
displayField.setText(str.substring(0,str.length()-1)); }
else if(input.equals("C")) //清零键的实现方法
{
displayField.setText("0");
start=true;
}
else
displayField.setText(displayField.getText()+input);
}
}
else if (e.getActionCommand()=="二进制") //二进制的转换
{
int n=Integer.parseInt(displayField.getText());
displayField.setText(Integer.toBinaryString(n));
}
else if (e.getActionCommand()=="八进制") //八进制的转换
{
int n=Integer.parseInt(displayField.getText());
displayField.setText(Integer.toOctalString(n));
}
else if (e.getActionCommand()=="退出") //选项中退出的处理方法
{
System.exit(0);
}
else if (e.getActionCommand()=="用法") //按下'帮助'菜单栏中用法的处理方法 {
label_dialog.setText("sqrt,exp等键是先输运算符再输数字\n");
dialog.setLocation(400,250);
dialog.setVisible(true);
}
else //各运算符的识别
{
String command=e.getActionCommand();
if(start)
{
lastCommand=command;
}
else
{
calculate(Double.parseDouble(displayField.getText()));
lastCommand=command;
start=true;
}
}
}
public void calculate(double x) //各运算符的具体运算方法
{
double d=0;
if (lastCommand.equals("+"))
5
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("sqrt"))
{
d=Math.sqrt(x);
result=d;
}
else if (lastCommand.equals("exp"))
{
d=Math.exp(x);
result=d;
}
else if (lastCommand.equals("log"))
{
d=Math.log(x);
result=d;
}
else if (lastCommand.equals("tan"))
{
d=Math.tan(x);
result=d;
}
else if (lastCommand.equals("cos"))
{
d=Math.cos(x);
result=d;
}
else if (lastCommand.equals("sin"))
{
d=Math.sin(x);
result=d;
}
displayField.setText(""+ result);
}
public void windowClosing(WindowEvent e)
{
if(e.getSource()==dialog)
dialog.setVisible(false);
else
System.exit(0);
}
public void windowOpened(WindowEvent e) { } 隐藏对话框 6 //
public void windowActivated(WindowEvent e) { }
public void windowDeactivated(WindowEvent e) { }
public void windowClosed(WindowEvent e) { }
public void windowIconified(WindowEvent e) { }
public void windowDeiconified(WindowEvent e) { }
public static void main(String args[])
{
Calculator calculator=new Calculator();
}
}
class WinClose implements WindowListener
{
public void windowClosing(WindowEvent e) //单击窗口关闭按钮时触发并执行实现窗口监听器接口
中的方法
{
System.exit(0); //结束程序运行
}
public void windowOpened(WindowEvent e){}
public void windowActivated(WindowEvent e){}
public void windowDeactivated(WindowEvent e){}
public void windowClosed(WindowEvent e){}
public void windowIconified(WindowEvent e){}
public void windowDeiconified(WindowEvent e){}
}
运行结果截图:
7
程序功能实现:
1. 运用两个面板的叠加做出界面。
2. 通过在按钮的单击事件处理方法中调用类的成员方法calculate()来进行简易计算器的各种运算,并正确实现运算功能。
3. 调用Math包中的方法实现各函数功能。
4. 添加菜单条,列出‘选项’、‘进制转换’、‘帮助’等菜单选项,并分别实现‘选项’中‘退出’的功能,通过调用Integer包中的方法实现二进制、八进制的转换,‘帮助'菜单栏中‘用法’的提示对话框。
5. 整个程序对话框可实现最小化、最大化、关闭。
设计体会:
在此次的课程设计实践中,我学到了教科书上没有的东西。这次课程设计,我按照课程设计的要求,分块实现程序的功能。在实践中我遇到许多的问题,但我都克服,最终我成功的完成了这次课程设计。从中我充分理解了Java面对对象的特性,并体会到Java与C语言的不同之处
在实践的同时,我又从中成长了许多,特别是在对程序的编译和调试中掌握了许多的技巧和方法,为今后的其他计算机语言的学习奠定了一定的基础。
总结:
(1)通过编写这个相对复杂的程序,让我认识解决实际问题前应现建立模型,再通过建立的模型使问题简单化,从而解决问题。
(2)这次编写的程序大部分是通过调用各包中的方法来实现的,这也让我充分理解了包和类调用的关系。
(3)由于这次编写的程序相对比较复杂,所以不能一次性编写、调试,也由此让我学会把程序分块,逐个编写、调试。
8