JAVA课程设计
小型计算器
学 生 姓 名:
指 导 教 师:李明江 系别:计算机科学系 专业:计算机科学与技术 年级:2008 应用2班
提交时间:20xx年 12 月 22日 学号:
目录
一 概述 ....................... 3
二 总体方案设计 ............... 4
三详细设计 .................... 6
四 程序的调试与运行结果说明 .. 10
五 课程设计总结 .............. 19
六 附录 ...... 错误!未定义书签。
2
一 设计任务书
1.程序具备的功能:
(1)使用图形用户界面:一个文本框;0-9数字按钮;加、减、乘、除运算符;“等于”符号;复位按钮;
(2)完成整数、实数的四则运算(加、减、乘、除);
(3)通过按钮点击实现数据的复位(清零);
(4)实数运算中小数位的精度一致。
2.课程设计的主要设计思想
对于此计算器程序,首先要设计其GUI界面,总体界面有一个文本框,18个按钮,总体界面用BorderLayout布局。
文本框放置在最NORTH,然后0到9以及+,-,*,/的按钮放置到一个面板Panel中,添加到整体布局的CENTER,界面设计 3
完成。
布局设计好后再添加按钮事件。对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮的数值设置到文本框中,否则则应把文本框中的内容加上你所点击按钮的数值设置到文本框中。
在进行加、减、乘、除计算时要把点击加、减、乘、除按钮之前的数值保存下来,运算时是这个被保存下来的数值和文本框中的数值加、减、乘、除。
二 总体方案设计
1.界面设计
界面设计要求用GUI,界面设计中有用到swing组件的TextField和Button,用到awt中的BorderLayout和GridLayout布局管理方 4
式,其图形界面如下:
2.功能介绍
这是计算器中的一种:简单计算器,本项目用到了Java中的GUI界面和swing组件以及awt布局,所以简单易用,它能完成如下的几个小功能:
点击按钮中的数字键和运算符键就能进行简单的加、乘、乘、除求模四则运算 ;
还能通过用户自己在文本框中输入数字,进行简单运算 ;
5
如果输入有误时可以按Clear撤销后重新输入新数据
三详细设计主题任务
程序流程图如下:
部分代码展示及说明:
这段代码主要是对程序的主框架进行相应的设置。
Frame f=new Frame("计算器");
f.setBackground(Color.lightGray); f.setForeground(Color.blue); f.add(p1,BorderLayout.NORTH); 6
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=="-")//判断是否 7
输入运算符
{
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;
8
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);
9
}
}
四 程序的调试与运行结果说明
事例1 当除数为0时,程序运行结果如下:
事例2:4561+8715 预计结果 13276 实际结果
10
事例3: 189/2 预计结果94.5 实际结果:
事例4: 29-87 预计结果-58 实际结果:
11
五 设计源代码
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[];
12
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++)
13
{
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
14
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="";//记录输入值的变量清空
15
}
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;
16
}
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=="/")
17
{ 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);
18
}
}
六 课程设计总结
在做本项目是时候,会遇到很多小问题,比如说:如何保存输入的数字和下一个数进行加、减、乘、除运算。还有如何判断它是第几个输入的数字。后来进行多次研究和查询才知道可以通过设运算符标志位来判断是输入的第几个数值。
此次课程设计让我更了解熟悉了Java中的图形用户界面和它的编程方式。在完成课题的过程中也不断充实了自己,学习到了很多以前没有学习到的知识,收获很大。最大的收获就是对大学学习的总结和培养了解决困难的信心和能力,使我对所学知识能够融会贯通,又不断丰富了新知识。Java计算器设计使得我们对所学的专业课有了更为深刻的认识,使得知识得到了巩固和提高。
19
20
第二篇:Java_计算器课程设计
实验目的
熟悉JAVA GUI程序开发的一般步骤,掌握事件驱动,并能掌握一定的Java编程能力,在实践中能感受Java的奥秘!同时检验学生的学生的学习成果。
实验目标
具有加减乘除的计算器,可以延伸到开方等其他的一些计算。 开发工具与平台
jdk1.5+Eclipse 3.2
设计思路:
1.界面设计
2.逻辑设计
首先明确该实验设计的要求实现的基本功能,其次设计布局,按照GridLayout的布局,将空间划分为由行和列组成的网格单元,每个单元放一个组件,网格单元大小可以不同,尽量将相同属性的按钮放在一个区域,方便操作。
1
3.软件调试与测试
经过调试之后,能实现基本的四则运算,并能实现开方和消除错误的数。
4.软件设计优化
该软件的界面应该更加流畅,同时我相信随着自己只是的日益丰富,开发软件的速度更快,效率更高,功能更加全面!
5.总结不足
没有实现Mc,MR,MS,M+四个功能, 有待进一步完善。这样才能够完成自己的第一个应用软件设计!
源程序如下:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calculator extends JFrame implements ActionListener { boolean init = true;
boolean isMath = false;
boolean clear = true;
boolean clickable = true;
double qian;
String fuhao;
int all = 0;
JTextField text = new JTextField(25);
2
JButton bM = new JButton(); JButton bMC = new JButton("MC"); JButton bMR = new JButton("MR"); JButton bMS = new JButton("MS"); JButton bMADD = new JButton("M+"); JButton b0 = new JButton("0"); JButton b1 = new JButton("1"); JButton b2 = new JButton("2"); JButton b3 = new JButton("3"); JButton b4 = new JButton("4"); JButton b5 = new JButton("5"); JButton b6 = new JButton("6"); JButton b7 = new JButton("7"); JButton b8 = new JButton("8"); JButton b9 = new JButton("9"); JButton bNOP = new JButton("+/-"); JButton bDot = new JButton("."); JButton bDiv = new JButton("/"); JButton bMul = new JButton("*"); JButton bSub = new JButton("-"); JButton bAdd = new JButton("+"); JButton bSprt = new JButton("sprt"); JButton bMod = new JButton("%"); JButton bDao = new JButton("1/x"); JButton bEqual = new JButton("="); JButton bBackspace = new JButton("Backspace"); JButton bCE = new JButton("CE"); JButton bC = new JButton("C"); public Calculator() { this.setTitle("计算器"); JMenuBar mainMenu = new JMenuBar(); setJMenuBar(mainMenu); JMenu editMenu = new JMenu("编辑"); JMenu viewMenu = new JMenu("查看"); JMenu helpMenu = new JMenu("帮助"); mainMenu.add(editMenu); mainMenu.add(viewMenu); mainMenu.add(helpMenu); JPanel jpDisplay = new JPanel(); JPanel jpInput = new JPanel(); JPanel jpLeft = new JPanel(); JPanel jpRight = new JPanel(); text.setText("0."); text.setHorizontalAlignment(JTextField.RIGHT); jpDisplay.add(text); 3
bM.addActionListener(this); bMC.addActionListener(this); bMS.addActionListener(this); bMR.addActionListener(this); bMADD.addActionListener(this); jpLeft.setLayout(new GridLayout(5, 1));
jpLeft.add(bM);
jpLeft.add(bMC);
jpLeft.add(bMR);
jpLeft.add(bMS);
jpLeft.add(bMADD);
JPanel jpInnerN = new JPanel();
JPanel jpInnerS = new JPanel();
bBackspace.addActionListener(this);
bCE.addActionListener(this);
bC.addActionListener(this);
jpInnerN.setLayout(new GridLayout(1, 3)); jpInnerN.add(bBackspace);
jpInnerN.add(bCE);
jpInnerN.add(bC);
b0.addActionListener(this);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
bNOP.addActionListener(this);
bDot.addActionListener(this);
bDiv.addActionListener(this);
bMul.addActionListener(this);
bSub.addActionListener(this);
bAdd.addActionListener(this);
bSprt.addActionListener(this);
bMod.addActionListener(this);
bDao.addActionListener(this);
bEqual.addActionListener(this);
jpInnerS.setLayout(new GridLayout(4, 5)); jpInnerS.add(b7);
jpInnerS.add(b8);
4
jpInnerS.add(b9); jpInnerS.add(bDiv); jpInnerS.add(bSprt); jpInnerS.add(b4); jpInnerS.add(b5); jpInnerS.add(b6); jpInnerS.add(bMul); jpInnerS.add(bMod); jpInnerS.add(b1); jpInnerS.add(b2); jpInnerS.add(b3); jpInnerS.add(bSub); jpInnerS.add(bDao); jpInnerS.add(b0); jpInnerS.add(bNOP); jpInnerS.add(bDot); jpInnerS.add(bAdd); jpInnerS.add(bEqual); jpRight.setLayout(new BorderLayout()); jpRight.add(jpInnerN, BorderLayout.NORTH); jpRight.add(jpInnerS, BorderLayout.CENTER); jpInput.setLayout(new BorderLayout()); jpInput.add(jpLeft, BorderLayout.WEST); jpInput.add(jpRight, BorderLayout.CENTER); Container pane = this.getContentPane(); pane.setSize(333, 208); this.setLocation(300, 200); this.setLayout(new BorderLayout()); pane.add(jpDisplay, BorderLayout.CENTER); pane.add(jpInput, BorderLayout.SOUTH); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.pack(); this.setVisible(true); } public void actionPerformed(ActionEvent e) { if (init) this.text.setText("0."); init = false; Object source = e.getSource(); if (source == bBackspace) { String s = text.getText(); 5
text.setText(""); for (int i = 0; i < s.length() - 1; i++) { char a = s.charAt(i); text.setText(text.getText() + a); } System.out.println("backspace"); } if (source == bCE) { text.setText("0."); clear = true; init = true; System.out.println("CE"); } if (source == bC) { text.setText("0."); clear = true; init = true; System.out.println("C"); } if (source == bM) { System.out.println("M"); } if (source == bMC) { System.out.println("MC,功能末实现"); } if (source == bMR) { System.out.println("MR,功能末实现"); } if (source == bMS) { System.out.println("MS,功能末实现"); } if (source == bMADD) { System.out.println("M+,功能末实现"); } if (source == b0) { System.out.println("0"); if (clear == false)// 判断是否点击了符号位 text.setText(""); text.setText(text.getText() + "0"); } if (source == b1) { if (clear == false) text.setText(""); text.setText(text.getText() + "1"); clear = true;// 第二次不在清空(前二句) } if (source == b2) { 6
System.out.println("2"); if (clear == false) text.setText(""); text.setText(text.getText() + "2"); clear = true; } if (source == b3) { System.out.println("3"); if (clear == false) text.setText(""); text.setText(text.getText() + "3"); clear = true; } if (source == b4) { System.out.println("4"); if (clear == false) text.setText(""); text.setText(text.getText() + "4"); clear = true; } if (source == b5) { System.out.println("5"); if (clear == false) text.setText(""); text.setText(text.getText() + "5"); clear = true; } if (source == b6) { System.out.println("6"); if (clear == false) text.setText(""); text.setText(text.getText() + "6"); clear = true; } if (source == b7) { System.out.println("7"); if (clear == false) text.setText(""); text.setText(text.getText() + "7"); clear = true; } if (source == b8) { System.out.println("8"); if (clear == false) text.setText(""); text.setText(text.getText() + "8"); clear = true; } if (source == b9) { 7
System.out.println("9");
if (clear == false)
text.setText("");
text.setText(text.getText() + "9");
clear = true;
}
try{
if (source == bNOP) {
System.out.println("+/-");
boolean isNumber = true;
String s = text.getText();
for (int i = 0; i < s.length(); i++)
if (!(s.charAt(i) >= '0' && s.charAt(i) <= '9'|| s.charAt(i) == '.' || s.charAt(i) == '-')) {
isNumber = false;
break;
}
if (isNumber == true) {
// 如果当前字符串首字母有'-'号,代表现在是个负数,再按下时,则将首符号去掉
if (s.charAt(0) == '-') {
text.setText("");
for (int i = 1; i < s.length(); i++) { char a = s.charAt(i);
text.setText(text.getText() + a); }
}
// 如果当前字符串第一个字符不是符号,则添加一个符号在首字母处
else
text.setText('-' + s);
}
}
if (source == bDot) {
System.out.println(".");
clickable = true;
for (int i = 0; i < text.getText().length(); i++) if ('.' == text.getText().charAt(i)) {
clickable = false;
break;
} // 第一层判断是否里面含有小数点;
if (clickable == true)// 第二层判断
text.setText(text.getText() + ".");
}
if (source == bDiv) {
System.out.println("/");
qian = Double.parseDouble(text.getText());
8
fuhao = "/"; clear = false; } if (source == bMul) { System.out.println("*"); qian = Double.parseDouble(text.getText()); fuhao = "*"; clear = false; } if (source == bSub) { System.out.println("-"); qian = Double.parseDouble(text.getText()); fuhao = "-"; clear = false; } if (source == bAdd) { System.out.println("+"); qian = Double.parseDouble(text.getText()); fuhao = "+"; clear = false; } if (source == bSprt) { System.out.println("sprt"); String s = text.getText(); if (s.charAt(0) == '-') { text.setText("负数不能开根号"); } else text.setText(Double.toString(java.lang.Math.sqrt(Double
.parseDouble(text.getText())))); clear = false;
}
if (source == bMod) {
System.out.println("%,功能末实现");
}
if (source == bDao) {
System.out.println("1/x");
if (text.getText().charAt(0) == '0'
&& text.getText().length() == 1) {
text.setText("除数不能为零");
} else {
boolean isDec = true;
int i, j, k;
String s= Double.toString(1 / Double.parseDouble(text.getText())); for (i = 0; i < s.length(); i++)
if (s.charAt(i) == '.')
break;
9
} for (j = i + 1; j < s.length(); j++) if (s.charAt(j) != '0') { isDec = false; break; } if (isDec == true) { String stemp = ""; for (k = 0; k < i; k++) stemp += s.charAt(k); text.setText(stemp); } else text.setText(s); } clear = false; } if (source == bEqual) { System.out.println("="); Double ss=Double.parseDouble(text.getText()); text.setText(""); if (fuhao == "+") text.setText(qian + ss + ""); if (fuhao == "-") text.setText(qian - ss + ""); if (fuhao == "*") text.setText(qian * ss + ""); if (fuhao == "/") text.setText(qian / ss + ""); clear = false;// 要清空前一次的数据 ; } }catch (Exception ee) { System.out.println("请正确输入"); text.setText("运算出错,给您带来不便,sorry"); clear = false; } } public static void main(String[] args) { new Calculator(); }
10