java计算器设计报告

时间:2024.4.20

摘要

本计算器是由java语言所编程设计的标准计算器,可以进行十进制下的四则运算(加、减、乘、除)、开平方、求余、求倒数,还可以实现二进制与十进制之间的转换。通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。

关键词: java语言,计算器,算法

1概述

1.1设计目的及思路

通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。利用Java Applet图形界面首先开始设计一个计算器的界面,定义计算器所需要的按钮并赋给其按钮名称,使得使用计算器时简单明了,清晰可见,操作轻松。

给各个按钮进行算法,利用鼠标点击事件,当鼠标点击某个按钮时就开始执行那个按钮所定义的算法,生成数据并显示。

除数字的输入为直接进行输入外,其他运算例如+、-、*、/、开平方等算法要求计算时通过内部较为复杂的运算将结果显示在显示屏上。

至于其中的进制转换功能的实现则是直接调用Java中进制转换的函数,例如要将十进制转换成二进制则可直接调用函数Integer.toBinaryString(int i)来实现,充分显示了Java语言的简洁性和Java语言功能的强大性。

当然了在输入数据时还要进行异常捕捉,防止越界的现象的发生,这也是Java语言健壮性的体现!

1.2功能模块设计

以下为标准计算器的基本功能:

(1)加法

两个数据进行加操作,可以为小数。

(2)减法

两个数据进行减操作,可以为负数相减。

(3)乘法

两个数相乘操作。

(4)除法

两个数相除操作。

(5)开平方

对任意一个数进行开方运算,可以是小数。

(6)求余

对任意一个数进行求余运算。

(7)倒数

对任意一个数进行倒数运算。

(8)转换

将十进制数转换为二进制以及将二进制转换为十进制。

1.3系统功能图

https://upload.fanwen118.com/wk-img/img100/3971846_1.jpg

2计算器的设计与实现

2.1程序界面

https://upload.fanwen118.com/wk-img/img100/3971846_2.jpg

2.2程序源代码

import javax.swing.*;

import javax.swing.text.JTextComponent;

import java.util.StringTokenizer;

import java.awt.*;

import java.awt.event.*;

import java.math.*;

public class Calculator implements ActionListener {

JFrame jf=new JFrame("计算器");

JTextField tf=new JTextField();

JPanel pnl;

JButton jButtonDENG;

JButton jButtonJIAN;

JButton jButtonCHENG;

JButton jButton1;

JButton jButton2;

JButton jButton3;

JButton jButton4;

JButton jButton5;

JButton jButton6;

JButton jButton7;

JButton jButton8;

JButton jButton9;

JButton jButton0;

JButton jButtonCHU;

JButton jButtonQINGKONG;

JButton jButtonJIA;

JButton jButtonQUYU;

JButton jButtonPINGFANG;

JButton jButtonXIAOSHUDIAN;

JButton jButtonBACKSPACE;

JButton jButtonDAOSHU;

JButton jButtonKAIPINGFANG;

JButton jButtonERJINZHI;

JButton jButtonSHIJINZHI;

public Calculator (){ //初始化界面的方法

Container c=jf.getContentPane();

tf.setHorizontalAlignment(JTextField.RIGHT);

c.add(tf,"North");

JPanel pnl=new JPanel();

c.add(pnl,"Center");

pnl.setLayout(new GridLayout(6,5));

jButton1=new JButton("1");

jButton1.addActionListener(this);

pnl.add(jButton1);

jButton2=new JButton("2");

jButton2.addActionListener(this);

pnl.add(jButton2);

jButton3=new JButton("3");

jButton3.addActionListener(this);

pnl.add(jButton3);

jButtonBACKSPACE=new JButton("backspace");

jButtonBACKSPACE.addActionListener(this);

pnl.add(jButtonBACKSPACE);

jButton4=new JButton("4");

jButton4.addActionListener(this);

pnl.add(jButton4);

jButton5=new JButton("5");

jButton5.addActionListener(this);

pnl.add(jButton5);

jButton6=new JButton("6");

jButton6.addActionListener(this);

pnl.add(jButton6);

jButtonJIA=new JButton("+");

jButtonJIA.addActionListener(this);

pnl.add(jButtonJIA);

jButton7=new JButton("7");

jButton7.addActionListener(this);

pnl.add(jButton7);

jButton8=new JButton("8");

jButton8.addActionListener(this);

pnl.add(jButton8);

jButton9=new JButton("9");

jButton9.addActionListener(this);

pnl.add(jButton9);

jButtonJIAN=new JButton("-");

jButtonJIAN.addActionListener(this);

pnl.add(jButtonJIAN);

jButton0=new JButton("0");

jButton0.addActionListener(this);

pnl.add(jButton0);

jButtonQINGKONG=new JButton("清空");

jButtonQINGKONG.addActionListener(this);

pnl.add(jButtonQINGKONG);

jButtonCHENG=new JButton("*");

jButtonCHENG.addActionListener(this);

pnl.add(jButtonCHENG);

jButtonCHU=new JButton("/");

jButtonCHU.addActionListener(this);

pnl.add(jButtonCHU);

jButtonQUYU=new JButton("%");

jButtonQUYU.addActionListener(this);

pnl.add(jButtonQUYU);

jButtonPINGFANG=new JButton("平方");

jButtonPINGFANG.addActionListener(this);

pnl.add(jButtonPINGFANG);

jButtonXIAOSHUDIAN=new JButton(".");

jButtonXIAOSHUDIAN.addActionListener(this);

pnl.add(jButtonXIAOSHUDIAN);

jButtonDENG=new JButton("=");

jButtonDENG.addActionListener(this);

pnl.add(jButtonDENG);

jButtonDAOSHU=new JButton("倒数");

jButtonDAOSHU.addActionListener(this);

pnl.add(jButtonDAOSHU);

jButtonKAIPINGFANG=new JButton("开平方");

jButtonKAIPINGFANG.addActionListener(this);

pnl.add(jButtonKAIPINGFANG);

jButtonERJINZHI=new JButton("二进制");

jButtonERJINZHI.addActionListener(this);

pnl.add(jButtonERJINZHI);

jButtonSHIJINZHI=new JButton("十进制");

jButtonSHIJINZHI.addActionListener(this);

pnl.add(jButtonSHIJINZHI);

jf.setSize(600,400);

jf.setVisible(true);

}

public void actionPerformed(ActionEvent event){ //检测运算符的方法

try {

double wen=0;

String toknizer="+";

String ben;

String wenben=tf.getText()+event.getActionCommand();

tf.setText(wenben); //各运算符的判断运行代码

if(wenben.indexOf("*")!=-1) {

toknizer="*";

}

if(wenben.indexOf("+")!=-1) {

toknizer="+";

}

if(wenben.indexOf("-")!=-1) {

toknizer="-";

}

if(wenben.indexOf("/")!=-1) {

toknizer="/";

}

if(wenben.indexOf("%")!=-1) {

toknizer="%";

}

if(wenben.indexOf("平方")!=-1) {

toknizer="平方";

}

if(wenben.indexOf("倒数")!=-1) {

toknizer="倒数";

}

if(wenben.indexOf("开平方")!=-1) {

toknizer="开平方";

}

if(wenben.indexOf("二进制")!=-1) {

toknizer="二进制";

}

if(wenben.indexOf("十进制")!=-1) {

toknizer="十进制";

}

//各个运算符的运算方法代码

if(event.getSource()==jButtonQINGKONG){ //清空算法

wenben="";

tf.setText(wenben);

}

if(event.getSource()==jButtonBACKSPACE){ //清除算法

wenben=wenben.substring(0,wenben.length()-10);

tf.setText(wenben);

}

if(event.getSource()==jButtonDENG){ //"="算法

wenben=wenben.substring(0,wenben.length()-1);

double b[]=new double[10];

String a[]=new String[15];

StringTokenizer sun=new StringTokenizer(wenben,toknizer);

int i=0;

while(sun.hasMoreTokens()){

a[i++]=sun.nextToken();

}

for(int j=0;j<10;j++){

String s=a[j];

String k=a[j+1];

if(s==null){

break;

}else{

if(toknizer=="*"){ //"*"算法

if(j==0){wen=1;}

b[j]=Double.parseDouble(s);

wen=wen*b[j];

ben=Double.toString(wen);

tf.setText(wenben+"="+ben);

}if(toknizer=="+"){ //"+" 算法

if(j==0){wen=0;}

b[j]=Double.parseDouble(s);

wen=wen+b[j];

ben=Double.toString(wen);

tf.setText(wenben+"="+ben);

}if(toknizer=="-"){ //"-"算法

b[j]=Double.parseDouble(s);

if(j==0){wen=2*b[j];}

wen=wen-b[j];

ben=Double.toString(wen);

tf.setText(wenben+"="+ben);

}

if(toknizer=="/"){ // "/"算法

b[j]=Double.parseDouble(s);

if(j==0){wen=b[j]*b[j];}

wen=wen/b[j];

ben=Double.toString(wen);

tf.setText(wenben+"="+ben);

}

if(toknizer=="平方"){ //平方算法

if(j==0){wen=1;}

b[j]=Double.parseDouble(s);

wen=wen*b[j]*b[j];

ben=Double.toString(wen);

tf.setText(wenben+"="+ben);

}

if(toknizer=="倒数"){ //倒数算法

b[j]=Double.parseDouble(s);

wen=1/b[j];

ben=Double.toString(wen);

tf.setText(wenben+"="+ben);

}

if(toknizer=="开平方"){ //开平方算法

if(j==0){wen=0;}

b[j]=Double.parseDouble(s);

double wen1=sqrt(b[j]);

ben=Double.toString(wen1);

tf.setText(wenben+"="+ben);

}

JTextComponent textAnswer = null;

if (toknizer=="十进制") { //二进制转为十进制代码

//b[j]=Integer.parseInt(s);

wen =Integer.parseInt(s,2);

ben=Double.toString(wen);

tf.setText(wenben+"="+ben);

}

if (toknizer=="二进制") { //十进制转换为二进制代码

int den =Integer.parseInt(s);

String daen = Integer.toBinaryString(den);

tf.setText(wenben+"="+daen);

}

if(toknizer=="%"){ //"%"算法

if(j==0){

b[j]=Double.parseDouble(s);

b[j+1]=Double.parseDouble(k);

if(b[j]<b[j+1]){

wen=b[j];

} if(b[j]==b[j+1]) {

wen=0;

}

if(b[j]>b[j+1]) {

wen=b[j]%b[j+1];

}

} if(j>1) {

b[j]=Double.parseDouble(a[j]);

wen=wen%b[j];

}

ben=Double.toString(wen);

tf.setText(wenben+"="+ben);

}

}

}

}

}

catch(Exception e){

e.getMessage();

}

}

private int sqrt(double d) {

// TODO Auto-generated method stub

return 0;

}

//主函数

public static void main(String[]args) {

new Calculator(); //对小程序进行初始化

}

}

3计算器演示

加法

https://upload.fanwen118.com/wk-img/img100/3971846_3.jpg

减法

https://upload.fanwen118.com/wk-img/img100/3971846_4.jpg

乘法

https://upload.fanwen118.com/wk-img/img100/3971846_5.jpg

除法

https://upload.fanwen118.com/wk-img/img100/3971846_6.jpg

倒数

https://upload.fanwen118.com/wk-img/img100/3971846_7.jpg

平方

https://upload.fanwen118.com/wk-img/img100/3971846_8.jpg

二进制转换为十进制

https://upload.fanwen118.com/wk-img/img100/3971846_9.jpg

十进制转换为二进制

https://upload.fanwen118.com/wk-img/img100/3971846_10.jpg

4运行调试及讨论分析

将代码写好之后检查代码的正确性,检查代码无误后将代码进行调试和运行将会出现一个JavaApplet计算器界面。在调试过程中可能会出现有界面但是不能运行小程序,那是因为没有初始化小程序,那时我们应该在主函数中将小程序进行初始化,这样小程序才能运行!

在调试和运行完全正确后,我们就可以按照自己的医院将小程序进行简单测试,例如输入一些简单数据分别运行各个按钮结果正确后可以初步确定程序师正确的。有时候我们还要输入不同范围的值进行测试,可能会发现更多的错误,因为有时候我们定义数据的范围可能会过小或输入数据会越界,到时我们就可以改正以适应更多更大的运算。

有时候我们会不自觉的选择一种最优函数方法尽量将自己的代码简单规范而又不缺少题目所要求的功能,那就要求我们翻阅很多参考书和查阅很多资料。其实javaApplet图形界面的布局也是我们要讨论的范围,如何使得界面更加美观是我们要探讨的!

有时候我们可能会到书上或网上找到一些满足我们要求的程序代码,在此我们应该取其优秀的简单易理解代码作为我们设计程序的代码,作为初学者参考和借用部分外部程序是不可避免,但是我认为前提我们应该看懂那些程序代码,要知其所以然,那样才达到我们学程序的目的,但不主张完全照搬,否则就会没意义了!

5小结

到此本次课程报告快接近尾声了,通过本次课程设计我学到了好多、也发现了自己的好多不足!

很显然最明显的收获是理解和较熟练的掌握了JavaApplet图形界面的基本方法,尤其在JavaApplet图形界面的布局方面学到颇多,以前布局很乱并且很多布局都是无效的。在此次课设中通过查阅很多资料和同学的互相帮助,充分发挥了JavaApplet界面布局的优越性。另外按钮功能的实现也是本次课设的一大难点,怎样实现那些功能是关键。通过这次课设我又学会了好多Java中的简单便捷的函数,例如Integer.toBinaryString(int i)函数(实现的是将一个十进制数转换成一个二进制的数)。

另外我这次课设部分程序是通过外部资料得到的,这使得我认识到查阅资料和开外多看书籍的重要性。但不主张照搬,因为那不是我们自己成果,那是不光彩的 。

总之通过此次课设我学到了好多,也掌握了好多关于JavaApplet的事件管理和按钮功能实现方法,这次课设给我的感受就是:只要你有心,不怕你完成不了课设。

参考文献:

[1]朱福喜.《Java语言程序设计》(第二版).科学出版社

[2]陈国君等.《Java程序设计基础》(第二版).清华大学出版社

[3] Deitel.《Java大学基础教程》(第六版).电子工业出版社

[4] MaryCampione.《Java语言导学》(第四版).机械工业出版社

[5] Y.Daniel Liang.《Java语言程序设计基础篇》(第六版). 机械工业出版社

[6] Kathy Sierra.《Head First Java》(第二版).东南大学出版社

更多相关推荐:
计算器设计的java课程设计报告

华东交通大学课程设计华东交通大学课程设计课程设计题目计算器设计课程题目年级专业学号姓名组员指导教师Java程序设计信息一班1华东交通大学课程设计课程设计论文任务书基础学院信息与计算科学专业20xx1班一课程设计...

java计算器设计报告

设计报告课题名称计算器设计学院专业班级学号学生指导教师教务处年月日

java计算器设计报告

枣庄学院信息科学与工程学院课程设计任务书题目学号031503070311姓名王宇刘志伟王传翔专业课程java程序设计与实践教程指导教师王琳琳职称讲师完成时间20xx年12月20xx年1月枣庄学院信息科学与工程学...

Java计算器课程设计报告

Java计算器Java计算器Java课程设计报告姓名学号专业0Java计算器一程序要实现的功能基础功能类似windows计算器普通计算器所具有的数的输入加减乘除开根号求倒数退格清空以及数字储存器中的MR显示MC...

Java课程设计报告-计算器

Java课程设计报告计算器第一部分设计的内容要求11Windows自带计算器版面设计12计算器计算功能算法实现第二部分设计思想21根据图形用户界面设计方法设计计算器版面容器类窗口Window类面板Panel类框...

计算器java课程设计(完整版)

目录一课设任务及要求1二需求分析2三设计思路3四详细设计4五运行调试与分析讨论14六设计体会与小结18七参考文献19一课设任务及要求1课设任务设计的计算器应用程序可以完成加法减法乘法除法以及取余运算可以进行浮点...

java课程设计报告_计算器设计报告

Java课程设计报告题目计算器院系xxx学院年级专业xxx班学生姓名xxx指导老师xx老师开始时间200xxxxx完成时间200xxxxx目录1摘要2概要设计3详细设计4测试分析5参考文献一摘要本计算器可以进行...

Java简单计算器(程序设计报告)

JAVA课程设计报告哈尔滨哈商业大学JAVA课程设计课程名称课题名称简单计算器姓名学号班级宋双龙20xx5094028108级软件工程教育20xx年10月20日1一实验目的使用Eclipse软件制作简单计算器实...

java课程设计报告—计算器

1计算器Java实习报告目录一课程设计目的2二课程设计任务221设计任务222课程设计要求223需求分析2三开发工具与平台331开发工具332开发平台3四设计思路441界面设计4421逻辑设计4422程序流程图...

用JAVA编写的计算器程序设计报告

课程设计报告设计题目学院班级学号姓名计算器信息工程学院应用一班房名扬070306120Java课程设计报告目录目录I1需求分析111计算器的基本功能1111加法运算用数字按钮和按钮进行运算1112减法运算用数字...

Java带计算过程的计算器课程设计报告

20xx20xx年度第1学期Java程序设计课程设计报告保存计算过程的计算器专业网络工程陆春燕B计算机0920970704211徐森20xx年1月13日学生姓名班学级号指导教师完成日期保存计算过程的计算器保存计...

java课程设计报告 简单绘画板

Java课程设计报告第1页题目班级学号姓名指导老师完成起止日期20xx年12月7日20xx年12月26日目录1题目与要求311题目312参考文献32功能描述43设计思想与系统结构531类设计532结构图64用户...

java计算器设计报告(42篇)