《Java编程》 计算器
班级:******
姓名:******
学号: ******* 指导老师:******
1
实验名称:JAVA计算器
1实验目的:
Java编程语言在编程方面的具体应用,以及使用面向对象方法,对小应用程序
进行需求分
析、概要设计、详细设计,最后使用Java编程实现的全过程。
2实验意义:
在编程我们使用的java语言,是目前比较流行的编程语言。在当今这个时代,
java语言在编程方面的优势使得编程有了更好的选择。Java语言最大的特点是具有跨平台性,使其不受平台不同的影响,得到了广泛的应用。
3 实训性质
本课程是计算机信息管理专业的一门实践性课程,是《Java编程》课程的实践性教学环节。
4 实训目标
⑴综合应用JAVA程序设计的知识解决实际问题。
⑵学会在应用程序的设计过程中,应用面向对象的程序设计方法。 ⑶学会应用JDBC创建数据库应用程序。
⑷学会开发基于Swing的应用程序及多文档应用程序的设计。
5 实训任务
用Java语言开发工具(例如JDK、Jcreator、NetBeans等)制作一个简单的可运行的完整的应用程序或小型系统,并编制出各阶段必要的文档。 将创建一个计算器,可以进行常用的加减乘除算术运算。本实例的知识点有:窗口布局器Gridlayout的应用,对按钮消息的监听和响应。
6实训条件
<软件:>Windows XP,NetBeans IDE 6.5
2
7开发背景:
Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。Java语言是一个支持网络计算的面向对象程序设计语言。Java语言吸收了Smalltalk语言和C++语言的优点,并增加了其它特性,如支持并发程序设计、网络通信、和多媒体数据控制等。
8系统部分分析:
1) Java语言是简单的。Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。
2) Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++ 语言只对虚函数使用动态绑定 3) Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
4) Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。
5) Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制.
6) Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件), 然后可以在实现这个Java平台的任何系统中运行。
7) Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的.
8) Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统中运行。 9) Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。
10) Java语言是多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。 11) Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。
3
目录
课程设计题目 ……………………………… p1
课程设计简介 ……………………………… p2
课程设计源代码…………………………… p5
课程设计运行结果 ……………………… p15 课程设计心得体会 ……………………… p16
4
package computerpad; import java.awt.*;
import java.awt.event.*; import javax.swing.*;
import javax.swing.border.*; import java.util.LinkedList; import java.text.NumberFormat;
public class ComputerPad extends Frame implements ActionListener {
NumberButton numberButton[]; OperationButton oprationButton[]; Button 小数点按钮,正负号按钮,退格按钮, 求倒数按钮,等号按钮,清零按钮;
Panel panel; JTextField resultShow; String 运算符号[]={\"+\
LinkedList 链表; boolean 是否按下等号=false;
public ComputerPad() {
super(\"计算器\");
链表=new LinkedList();
numberButton=new NumberButton[10]; for(int i=0;i<=9;i++) {
numberButton[i]=new NumberButton(i); numberButton[i].addActionListener(this); }
oprationButton=new OperationButton[4]; for(int i=0;i<4;i++) {
oprationButton[i]=new OperationButton(运算符号[i]); oprationButton[i].addActionListener(this); }
小数点按钮=new Button(\".\");
5
正负号按钮 =new Button(\"+/-\"); 等号按钮=new Button(\"=\"); 求倒数按钮=new Button(\"1/x\"); 退格按钮=new Button(\"退格\"); 清零按钮=new Button(\"C\");
清零按钮.setForeground(Color.red); 退格按钮.setForeground(Color.red); 等号按钮.setForeground(Color.red); 求倒数按钮.setForeground(Color.blue); 正负号按钮.setForeground(Color.blue); 小数点按钮.setForeground(Color.blue); 退格按钮.addActionListener(this); 清零按钮.addActionListener(this); 等号按钮.addActionListener(this); 小数点按钮.addActionListener(this); 正负号按钮.addActionListener(this); 求倒数按钮.addActionListener(this); resultShow=new JTextField(10);
resultShow.setHorizontalAlignment(JTextField.RIGHT); resultShow.setForeground(Color.blue);
resultShow.setFont(new Font(\"TimesRoman\
resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED)); resultShow.setBackground(Color.white); resultShow.setEditable(false);
panel=new Panel(); panel.setLayout(new GridLayout(4,5));
panel.add(numberButton[1]); panel.add(numberButton[2]); panel.add(numberButton[3]); panel.add(oprationButton[0]); panel.add(清零按钮);
panel.add(numberButton[4]); panel.add(numberButton[5]); panel.add(numberButton[6]); panel.add(oprationButton[1]); panel.add(退格按钮);
panel.add(numberButton[7]); panel.add(numberButton[8]); panel.add(numberButton[9]); panel.add(oprationButton[2]); panel.add(求倒数按钮);
6
panel.add(numberButton[0]); panel.add(正负号按钮); panel.add(小数点按钮);
panel.add(oprationButton[3]); panel.add(等号按钮);
add(panel,BorderLayout.CENTER); add(resultShow,BorderLayout.NORTH);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e) {
System.exit(0); } }); setVisible(true);
setBounds(100,50,240,180); setResizable(false); validate(); }
public void actionPerformed(ActionEvent e) {
if(e.getSource() instanceof NumberButton) {
NumberButton b=(NumberButton)e.getSource(); if(链表.size()==0) {
int number=b.getNumber(); 链表.add(\"\"+number); resultShow.setText(\"\"+number); 是否按下等号=false; }
else if(链表.size()==1&&是否按下等号==false) {
int number=b.getNumber();
String num=(String)链表.getFirst(); String s=num.concat(\"\"+number); 链表.set(0,s);
resultShow.setText(s); }
else if(链表.size()==1&&是否按下等号==true) {
7
int number=b.getNumber(); 链表.removeFirst();
链表.add(\"\"+number); 是否按下等号=false;
resultShow.setText(\"\"+number); }
else if(链表.size()==2) {
int number=b.getNumber(); 链表.add(\"\"+number); resultShow.setText(\"\"+number); }
else if(链表.size()==3) {
int number=b.getNumber();
String num=(String)链表.getLast(); String s=num.concat(\"\"+number); 链表.set(2,s);
resultShow.setText(s); } }
else if(e.getSource() instanceof OperationButton) {
OperationButton b=(OperationButton)e.getSource(); if(链表.size()==1) {
String fuhao=b.get运算符号();
链表.add(fuhao); }
else if(链表.size()==2) {
String fuhao=b.get运算符号(); 链表.set(1,fuhao); }
else if(链表.size()==3) {
String fuhao=b.get运算符号();
String number1=(String)链表.getFirst(); String number2=(String)链表.getLast(); String 运算符号=(String)链表.get(1); try {
8
double n1=Double.parseDouble(number1); double n2=Double.parseDouble(number2); double n=0;
if(运算符号.equals(\"+\")) {
n=n1+n2; }
else if(运算符号.equals(\"-\")) {
n=n1-n2; }
else if(运算符号.equals(\"*\")) {
n=n1*n2; }
else if(运算符号.equals(\"/\")) {
n=n1/n2; }
链表.clear();
链表.add(\"\"+n); 链表.add(fuhao); resultShow.setText(\"\"+n); }
catch(Exception ee) { } } }
else if(e.getSource()==等号按钮) {
是否按下等号=true;
if(链表.size()==1||链表.size()==2) {
String num=(String)链表.getFirst(); resultShow.setText(\"\"+num); }
else if(链表.size()==3) {
String number1=(String)链表.getFirst(); String number2=(String)链表.getLast(); String 运算符号=(String)链表.get(1); try {
9
double n1=Double.parseDouble(number1); double n2=Double.parseDouble(number2); double n=0;
if(运算符号.equals(\"+\")) {
n=n1+n2; }
else if(运算符号.equals(\"-\")) {
n=n1-n2; }
else if(运算符号.equals(\"*\")) {
n=n1*n2; }
else if(运算符号.equals(\"/\")) {
n=n1/n2; }
resultShow.setText(\"\"+n); 链表.set(0,\"\"+n); 链表.removeLast(); 链表.removeLast(); }
catch(Exception ee) { } } }
else if(e.getSource()==小数点按钮) {
if(链表.size()==0) {
是否按下等号=false; }
else if(链表.size()==1) {
String dot=小数点按钮.getLabel(); String num=(String)链表.getFirst(); String s=null;
if(num.indexOf(dot)==-1) {
s=num.concat(dot);
10
链表.set(0,s); } else {
s=num; }
链表.set(0,s);
resultShow.setText(s); }
else if(链表.size()==3) {
String dot=小数点按钮.getLabel(); String num=(String)链表.getLast(); String s=null;
if(num.indexOf(dot)==-1) {
s=num.concat(dot); 链表.set(2,s); } else {
s=num; }
resultShow.setText(s); } }
else if(e.getSource()==退格按钮) {
if(链表.size()==1) {
String num=(String)链表.getFirst(); if(num.length()>=1) {
num=num.substring(0,num.length()-1); 链表.set(0,num); resultShow.setText(num); } else {
链表.removeLast(); resultShow.setText(\"0\"); } }
11
else if(链表.size()==3) {
String num=(String)链表.getLast(); if(num.length()>=1)
{ num=num.substring(0,num.length()-1); 链表.set(2,num); resultShow.setText(num); } else {
链表.removeLast(); resultShow.setText(\"0\"); } } }
else if(e.getSource()==正负号按钮) {
if(链表.size()==1) {
String number1=(String)链表.getFirst(); try {
double d=Double.parseDouble(number1); d=-1*d;
String str=String.valueOf(d); 链表.set(0,str);
resultShow.setText(str); }
catch(Exception ee) { } }
else if(链表.size()==3) {
String number2=(String)链表.getLast(); try {
double d=Double.parseDouble(number2); d=-1*d;
String str=String.valueOf(d); 链表.set(2,str);
resultShow.setText(str); }
catch(Exception ee){
12
} } }
else if(e.getSource()==求倒数按钮) {
if(链表.size()==1||链表.size()==2) {
String number1=(String)链表.getFirst(); try {
double d=Double.parseDouble(number1); d=1.0/d;
String str=String.valueOf(d); 链表.set(0,str);
resultShow.setText(str); }
catch(Exception ee){ } }
else if(链表.size()==3) {
String number2=(String)链表.getLast(); try {
double d=Double.parseDouble(number2); d=1.0/d;
String str=String.valueOf(d); 链表.set(0,str);
resultShow.setText(str); }
catch(Exception ee){ } } }
else if(e.getSource()==清零按钮) {
是否按下等号=false; resultShow.setText(\"0\"); 链表.clear(); } }
public static void main(String args[]) {
new ComputerPad();
13
} }
package computerpad; import java.awt.*;
import java.awt.event.*; import javax.swing.*;
public class NumberButton extends Button {
int number;
public NumberButton(int number) {
super(\"\"+number); this.number=number;
setForeground(Color.blue); }
public int getNumber() {
return number; } }
import java.awt.*;
import java.awt.event.*; import javax.swing.*;
public class OperationButton extends Button {
String 运算符号;
public OperationButton(String s) {
super(s); 运算符号=s;
setForeground(Color.red); }
public String get运算符号() {
return 运算符号; } }
14
15
Java实训心得:
未接触Java之前,听人说Java这门语言如何的强大和难以入门,但学习之后,给我的感觉却是语言没有所谓的难于不难,关键是自己有没有真正投入去学,有没有花时间去学。Java是一门很好的语言,经过周围人对Java的宣传,我一开始不敢去学习这门语言,因为一门高级语言总是让人想到一开始的学习会很难,但是后来在自己的努力和老师同学的帮助下,我加入了Java学习者的行列。
老师把我们带进了门,那么,以后漫长的深入学习还是要靠自己。经常性的编写一些程序,或则去看懂、研究透别人编写的程序对于我们打好基础是非常有利的。让我们怀着对Java的一腔热情,用自己的刻苦努力去把Java学好。将来,用自己的成绩去回报有恩于我们的社会、家人和朋友。
16
因篇幅问题不能全部显示,请点此查看更多更全内容