JAVA程序设计课程设计基于JAVA的计算器程序设计.docx
《JAVA程序设计课程设计基于JAVA的计算器程序设计.docx》由会员分享,可在线阅读,更多相关《JAVA程序设计课程设计基于JAVA的计算器程序设计.docx(19页珍藏版)》请在冰豆网上搜索。
JAVA程序设计课程设计基于JAVA的计算器程序设计
齐鲁理工学院
课程设计说明书(论文)
题目基于JAVA的计算器程序设计
课程名称JAVA程序设计-课程设计
二级学院计算科学与信息工程学院
专业计算机科学与技
班级2016级专升本班
学生姓名
学号
设计地点宿舍
指导教师
设计起止时间:
2016年11月28日至2016年12月8日
基于JAVA的计算器程序设计
一、设计任务及要求
任务:
设计一款基于JAVA的简易计算器。
要求:
(1)使用图形用户界面:
一个文本框;0-9数字按钮;加、减、乘、除运算符;“等于”符号;复位按钮;
(2)完成整数、实数的四则运算(加、减、乘、除);
(3)通过按钮点击实现数据的复位(清零);
(4)实数运算中小数位的精度一致。
二、总体设计方案
对于此计算器程序,首先要设计其GUI界面,总体界面有一个文本框,18个按钮,总体界面用BorderLayout布局。
文本框放置在最NORTH,然后0到9以及+,-,*,/的按钮放置到一个面板Panel中,添加到整体布局的CENTER,界面设计完成。
布局设计好后再添加按钮事件。
对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮的数值设置到文本框中,否则则应把文本框中的内容加上你所点击按钮的数值设置到文本框中。
这是计算器中的一种:
简单计算器,本项目用到了Java中的GUI界面和swing组件以及awt布局,所以简单易用,它能完成如下的几个小功能:
点击按钮中的数字键和运算符键就能进行简单的加、减、乘、除求模四则运算;
还能通过用户自己在文本框中输入数字,进行简单运算;如果输入有误时可以按Clear撤销后重新输入新数据。
三、开发平台与开发技术
3.1开发平台
Eclipse:
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。
3.2开发技术
1.JAVA语言:
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。
Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
2.JAVA语言特点与优势:
(1)简单性
Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。
Java还剔除了C++的操作符过载和多继承特征,并且不使用主文件,免去了预处理程序。
因为Java没有结构,数组和串都是对象,所以不需要指针。
Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。
(2)面向对象
Java是一个面向对象的语言。
对程序员来说,这意味着要注意应中的数据和操纵数据的方法,而不是严格地用过程来思考。
(3)分布性
Java设计成支持在网络上应用,它是分布式语言。
Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。
(4)编译和解释性
Java编译程序生成字节码(byte-code),而不是通常的机器码。
Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地传送程序到多个平台。
Java程序可以在任何实现了Java解释程序和运行系统(run-timesystem)的系统上运行。
(5)稳健性
Java原来是用作编写消费类家用电子产品软件的语言,所以它是被设计成写高可靠和稳健软件的。
Java消除了某些编程错误,使得用它写可靠软件相当容易。
(6)安全性
Java的存储分配模型是它防御恶意代码的主要方法之一。
Java没有指针,所以程序员不能得到隐蔽起来的内幕和伪造指针去指向存储器。
更重要的是,Java编译程序不处理存储安排决策,所以程序员不能通过查看声明去猜测类的实际存储安排。
编译的Java代码中的存储引用在运行时由Java解释程序决定实际存储地址。
(7)可移植性
Java使得语言声明不依赖于实现的方面。
例如,Java显式说明每个基本数据类型的大小和它的运算行为(这些数据类型由Java语法描述)。
Java环境本身对新的硬件平台和操作系统是可移植的。
Java编译程序也用Java编写,而Java运行系统用ANSIC语言编写。
(8)高性能
Java是一种先编译后解释的语言,所以它不如全编译性语言快。
但是有些情况下性能是很要紧的,为了支持这些情况,Java设计者制作了“及时”编译程序,它能在运行时把Java字节码翻译成特定CPU(中央处理器)的机器代码,也就是实现全编译了。
(9)多线索性
Java是多线索语言,它提供支持多线索的执行(也称为轻便过程),能处理不同任务,使具有线索的程序设计很容易。
Java的lang包提供一个Thread类,它支持开始线索、运行线索、停止线索和检查线索状态的方法。
(10)动态性
Java语言设计成适应于变化的环境,它是一个动态的语言。
例如,Java中的类是根据需要载入的,甚至有些是通过网络获取的。
四、系统设计分析
4.1用户需求分析
点击按钮中的数字键和运算符键就能进行简单的加、减、乘、除、求模、求倒数、开根号等运算,如果输入有误时可以按Clear撤销后重新输入新数据
4.2可行性分析
也成为可行性研究,实在调查的基础上,针对新软件的开发是否具备必要性和可能性,对新软件的开发从技术、经济、社会等方面进行分析和研究,以避免投资失误,保证新软件的开发成功。
(1)技术可行性
主要分析技术条件能否顺利完成开发工作,硬、软件能否满足开发者的需要等。
该软件采用的开发工具是Eclipse,它有十分强的功能扩展能力,而且它完全满足计算器的开发实现的要求。
因此,软件的软件开发平台已经成熟可行。
硬件的容量、可靠性也能完全满足。
(2)经济可行性
本软件开发成本低,在经济上是可以接受的,并且本软件实施后可显著提高工作效率。
五、设计算法分析
5.1模块调用层次图
【1】变量描述
数组:
1JButtonb[]=newJButton[10];
创建按钮类型的数组,为数字键0-9这10个按钮。
全局变量:
(1)JFrameframe;
创建一个jFrame类型的框架,为frame,用来存放需要显示的一些东西。
(2)JTextFieldshow;
创建一个JtextField类型的展示框,为show。
上面用来显示输出或计算的结果。
(3)doublesum=0,getValue;
创建一个类型为双精度的变量,其初始值为0.返回计算后得到的值。
(4)JDialogabout;
创建一个类型为Jdialog的对话框abhout,其显示的该计算器的一些关于内容。
(5)finalintslength=30;
创建一个为类型为整形的slength,其值为30,意味该计算器显示的有效长度最大值为30,超过30的话,计算器将不能够全部显示。
6JButtonbc,c,ce,ab,jia,jian,cheng,chu,equ,point,sqrt,ds,bfh,zf;
创建类型为Jbuttond的按钮退格,清空,复位,关于,加,减,乘,除,等号,小数点,2次方根,倒数,百分号,正负号,当按下这些按钮的话,便会触发相应的监听器,根据这些监听器的设置,执行对应的程序。
7inti=0,j=0,p=0,l,action;
创建类型为整形的初始化书i、j、p。
这几个按钮在算法初始化时实现。
8PaneldispMain=newPanel()
创建类型为panel的面板dispMain,用来存放另一些控件。
函数:
1publicvoiddisp()
创建无值函数disp(),用来存放界面所需要展示的元素,包括有面板,按钮,弹出对话框,显示框等。
2publicvoidactionPerformed(ActionEvente)
创建无值函数actionPerformed(ActionEvente),其允许的输入值类型为ActionEvente,在里面编写的是加减陈除等一些算法。
3publicvoidsetSum()
创建无值函数setSum(),显示出经过算法计算出的结果,
4publicvoidwindowClosing(WindowEvente)
创建无值函数windowClosing(WindowEvente),当显示程序界面右上角的x时,将关闭程序。
5publicstaticvoidmain(Stringargs[])
创建静态无值函数main主函数,用来调用以上所示的函数。
【2】程序流程
1系统模块调用层次图
5.2核心算法描述
通过该步骤可实现累加功能:
setSum();
j++;
p=0;
i=0;
action=?
判断最后一个操作数的类型:
elseif(e.getSource()==equ){//等号,运算最后一个操作数
switch(action){
case1:
show.setText(String.valueOf(sum+=getValue));
break;
case2:
show.setText(String.valueOf(sum-=getValue));
break;
case3:
show.setText(String.valueOf(sum*=getValue));
break;
case4:
show.setText(String.valueOf(sum/=getValue));
break;
}
设定数字按钮的触发算法:
for(l=0;l<10;l++){//0~9数字键触发
if(e.getSource()==b[l]){
if(i==0)
show.setText("");
Strings=show.getText();
if(s.length()show.setText(show.getText()+e.getActionCommand());
if(e.getSource()==b[0]&&getValue==0&&p==0)
show.setText("0");
if(e.getSource()!
=b[0]&&getValue==0&&p==0)
show.setText(e.getActionCommand());
i++;//i用来标记数字键触发的状态
设定计算器关闭的方法:
publicvoidwindowClosing(WindowEvente){
if(e.getSource()==about)
about.setVisible(false);
elseif(e.getSource()==frame)
System.exit(0);
为按钮绑定监听器:
about.addWindowListener(this);
5.3系统特点:
该计算器基本运算没有问题,清零、正负号、求倒数、退格功能都能很好的实现,总体能完成一个计算器的基本功能,但仍有许多地方需要改进,比如小数点的实现所存在的一些问题,虽然在基本的运算过程当中不会造成太大影响,但这依然不能认为是一个很好的计算器,同时,在另一方面,该计算器还没能很好的实现连续计算的功能,必须每次按下等号按钮计算出结果后才能用产生的结果接着进行下一次的计算,改进的方法是在运算符上同时注册Result类,让运算符同时拥有计算结果的功能.
六、源代码展示
import;
import;
import;
import;
import;
import;
import;
import;
import;
import;
import;
import;
classCalcBodyimplementsActionListener{
JFrameframe;
JTextFieldshow;
JButtonbc,c,ce,ab,jia,jian,cheng,chu,equ,point,sqrt,ds,bfh,
zf;
//按钮退格,清空,复位,关于,加,减,乘,除,等号,小数点,2次方根,倒数,百分号,正负号
JButtonb[]=newJButton[10];//按钮数组,数字键0~9
doublesum=0,getValue;
inti=0,j=0,p=0,l,action;
JDialogabout;
finalintslength=30;//设置结果显示有效长度
publicvoiddisp(){
frame=newJFrame();
frame.setTitle("陈超设计");
frame.setSize(360,230);
frame.setLocation(500,260);
frame.setBackground(Color.LIGHT_GRAY);
frame.setLayout(newFlowLayout(FlowLayout.CENTER));
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//计算器disTop模块,包括数字显示文本框、back,ce,c,about按钮
show=newJTextField(31);
show.setText("0");
show.setHorizontalAlignment(SwingConstants.RIGHT);
show.setEditable(false);
frame.add(show);
PaneldispTop=newPanel();
frame.add(dispTop);
dispTop.setLayout(newGridLayout(1,4,3,3));
bc=newJButton("Back");
bc.setForeground(Color.BLUE);
dispTop.add(bc);
ce=newJButton("CE");
ce.setForeground(Color.BLUE);
dispTop.add(ce);
c=newJButton("C");
c.setForeground(Color.BLUE);
dispTop.add(c);
//广告按钮,显示计算器制作者
ab=newJButton("About");
ab.setForeground(Color.BLUE);
dispTop.add(ab);
about=newJDialog(frame,"关于计算器",true);
Labelct=newLabel("陈超制作!
",1);
ct.setForeground(Color.GREEN);
about.add(ct,"Center");
about.setSize(200,100);
about.setLocation(500,300);
//主要按钮显示面板包括disLeft和disRight
PaneldispMain=newPanel();
frame.add(dispMain);
dispMain.setLayout(newGridLayout(1,2,10,10));
//disLeft面板,包括0-9、+/-、。
这十二个按钮
PaneldispLeft=newPanel();
dispMain.add(dispLeft);
dispLeft.setLayout(newGridLayout(4,3,3,3));
PaneldispRight=newPanel();
//disRight面板,包括+、-、*、/、√、%、1/x、=这个人几个按钮
dispMain.add(dispRight);
dispRight.setLayout(newGridLayout(4,2,3,3));
//新建0-9这是个按钮,并将其添加到disLeft中
for(l=9;l>=0;l--){
b[l]=newJButton(String.valueOf(l));
dispLeft.add(b[l]);
b[l].addActionListener(this);
}
//新建其余按钮,并分别将其添加到各自的面板中
jia=newJButton("+");
jia.setForeground(Color.RED);
jian=newJButton("-");
jian.setForeground(Color.RED);
cheng=newJButton("*");
cheng.setForeground(Color.RED);
chu=newJButton("/");
chu.setForeground(Color.RED);
equ=newJButton("=");
equ.setForeground(Color.RED);
point=newJButton(".");
zf=newJButton("+/-");
sqrt=newJButton("√");
bfh=newJButton("%");
ds=newJButton("1/x");
dispRight.add(chu);
dispRight.add(sqrt);
dispRight.add(cheng);
dispRight.add(bfh);
dispRight.add(jian);
dispRight.add(ds);
dispRight.add(jia);
dispRight.add(equ);
dispLeft.add(zf);
dispLeft.add(point);
//为各个按钮绑定监听器
bc.addActionListener(this);
ce.addActionListener(this);
c.addActionListener(this);
ab.addActionListener(this);
jia.addActionListener(this);
jian.addActionListener(this);
cheng.addActionListener(this);
chu.addActionListener(this);
equ.addActionListener(this);
point.addActionListener(this);
zf.addActionListener(this);
sqrt.addActionListener(this);
bfh.addActionListener(this);
ds.addActionListener(this);
frame.setVisible(true);
}
publicvoidactionPerformed(ActionEvente){
getValue=Double.valueOf(show.getText()).doubleValue();
if(e.getSource()==jia){//加运算,可连加
if(j==0){
sum=getValue;
}elseif(action==1){
sum+=getValue;
}
setSum();
j++;
p=0;
i=0;
action=1;
}elseif(e.getSource()==jian){//减运算,可连减
if(j==0){
sum=getValue;
}elseif(action==2){
sum-=getValue;
}
setSum();
j++;
p=0;
i=0;
action=2;
}elseif(e.getSource()==cheng){//乘运算,可连乘
if(j==0){
sum=getValue;
}elseif(action==3){
sum*=getValue;
}
setSum();
j++;
p=0;
i=0;
action=3;
}elseif(e.getSource()==chu){//除运算,可连除
if(j==0)
sum=getValue;
elseif(action==4){
sum/=getValue;
}
setSum();
j++;
p=0;
i=0;
action=4;
}elsei