Java语言程序设计实训计算器文档格式.docx
《Java语言程序设计实训计算器文档格式.docx》由会员分享,可在线阅读,更多相关《Java语言程序设计实训计算器文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
2.1题目说明
随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。
文本编辑器是个人计算机最司空见惯的应用程序了,在学习了Java语言之后,我决定使用Java语言编写一个简单的计算器,可以实现简单的运算功能,满足日常基本的工作学习和娱乐需要。
该程序是一个图形界面的简单的java计算器,使用人员能快捷简单地进行操作。
即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间。
可以进行简单的四则运算(加、减、乘、除,以及求倒数,求相反数),以及常用的数学函数(sin,cos,log,1/x,pow,sqrt,%,)和记忆处理功能,有退格,清零,归零等应用。
界面颜色为白色,数字字体颜色为蓝色,函数及其他功能键为红色。
该程序支持键盘操作。
2.2开发工具介绍
此次实训采用JCreator这一Java程序设计的集成开发环境。
它具有编辑、调试、运行Java程序的功能。
当前最新版本是Jcreator5.00。
这个软件比较小巧,对硬件要求不是很高,完全用C++写的,速度快、效率高。
具有语法着色、代码自动完成、代码参数提示、工程向导、类向导等功能。
特点:
1.可无限撤销、代码缩进、自动类库方法提示、按所选智能定位查阅JavaAPI文档等功能。
2.新版采用仿VS2005界面设计,体验感觉更快更好更易用。
3.支持JSP、Ant、CVS。
4.小巧、易用、美观,是Java初级程序员的理想IDE。
三、总体设计
3.1系统开发平台
本系统使用Java语言设计,开发平台为JDK1.5。
3.2系统结构图
四、详细说明
4.1计算器的主界面
图2计算器的主界面
4.2系统实施
1、实现简单的加法、减法、乘法、除法
功能解释:
当进行数值运算时,先单击计算器面板数字键,按纽响应由方法e.getSource()完成,再单击符号按钮,然后再单击面板上数值,最后单击等于号,计算器输出运算结果。
例如当计算一个简单的加法时35+55;
如下图:
图4-1-2图4-1-3图4-1-4
图4-1-2(先输入35)
图4-1-3(输入“+”后再输入55)
图4-1-4(显示结果)
当进行减、乘、除的简单运行,其方法和数值的加法运算过程相似,但是当进行除法的时候,在计算器界面上弹出一个消息框。
实现简单的加、减、乘、除功能的关键代码如下:
if(ee.getSource()==cs[0]){
qian=Double.parseDouble(text.getText());
fuhao="
+"
;
jsd=false;
}
if(e.egetSource()==cs[4]){
-"
}
if(e.egetSource()==cs[8]){
*"
if(e.egetSource()==cs[11]){
/"
//公共的用于计算的方法
publicvoidjisuan(){
switch(jianshi)
{
case1:
result=result+some;
break;
case2:
result=result-some;
case3:
result=Math.pow(result,some);
case4:
result=result*some;
case5:
result=result/some;
}
secendNumjanshi=false;
text.setText("
"
+result);
formart();
}
当单击等于时,进行数值之间的符号选择并输出计算的值
elseif(ee.getSource()==cs[15])//如果按钮"
="
被按下
{
this.jisuan();
jsd=false;
jianshi0=0;
jianshiBackspase=true;
jianshi2=false;
jianshi3=true;
}text.requestFocus();
2.常用的数学函数(sin,cos,log,1/x,pow,sqrt,%,)功能。
这几个方法都是从Maths类中调用,sqrt()的方法功能是将数值开平方;
pow()的方法是输出x的y次幂的值;
sin,cos是正,余弦函数。
当计算数值的进行这几个方法应用时,先单击计算器面板上的数值,按钮响应即用e.getSource()方法实现,再单击想要计算数值的方法,按钮响应,最后单击等于,计算器上输出结果。
例如:
sqart(a)当a=16;
如图图4-1-5图4-1-6
图4-1-5(先输入16)
图4-1-6(键入sqrt,最后结果显示)
A:
如果按钮"
pow"
elseif(ee.getSource()==cs[5]){jianshi0++;
if(secendNumjanshi==false){jianshiBackspase=true;
}
B:
如果第二个数没被输入值,设置“退格”键无效
if(secendNumjanshi==true){this.jisuan();
jianshi=3;
jianshi2=true;
jianshi3=false;
C:
sin"
被按下,其他例如cos,log,函数原理相同,此处不作详细解释。
elseif(ee.getSource()==cs[6]){
jsd=false;
jianshiBackspase=true;
jianshi0++;
if(jianshi0>
1){this.jisuan();
if(text.getText().equals("
)==false)
{b=text.getText();
some=Double.parseDouble(b);
result=Math.sin(some);
text.setText("
}else{text.setText("
0"
);
D:
实现开平方的功能:
通过sqrt(Double.parseDouble(text.getText()))从计算器上获得数值然后用sqrt()方法实现
elseif(ee.getSource()==cs[7]){
jianshi0++;
if(jianshi0>
{b=text.getText();
some=Double.parseDouble(b);
result=Math.sqrt(some);
formart();
jianshi2=false;
jianshi3=true;
3、实现正负数的使用,以及计算器的记忆功能
当数据出现正负号时,也能提供有力支持。
摒弃普通计算器只能计算正数的弊端。
而且所添加的记忆功能能在我们处理多数据时,应付自如。
不用害怕,忘记结果;
也不用害怕重新计算结果。
减少了工作生活中的许多麻烦。
(-3)+(-12);
如图图4-1-7图4-1-8图4-1-9
图4-1-7(先输入-3)
图4-1-8(键入“+”,输入-12)
图4-1-9(显示结果)
A:
正负号的使用
classPanel3extendsJPanelimplementsActionListener
{
JTextFieldtext;
JButtonzhuanhuan,BackSpase;
//按钮"
+/-"
和"
退格"
StringbackSpase;
Panel1p1;
Panel2p2;
Panel3(JTextFieldtext,Panel1p1,Panel2p2)
{setLayout(null);
this.p1=p1;
this.text=text;
this.p2=p2;
zhuanhuan=newJButton("
zhuanhuan.setForeground(Color.red);
zhuanhuan.setMargin(newInsets(0,0,0,0));
zhuanhuan.addActionListener(this);
add(zhuanhuan);
zhuanhuan.setBounds(0,0,30,30);
BackSpase=newJButton("
BackSpase"
BackSpase.setForeground(Color.red);
BackSpase.setMargin(newInsets(0,0,0,0));
BackSpase.addActionListener(this);
backSpase=newString();
add(BackSpase);
BackSpase.setBounds(35,0,65,30);
B:
记忆功能按钮
if(e4.getSource()==mr[0])//“清除记忆”按钮被按下
{memory=0;
mr[2].setForeground(Color.blue);
elseif(e4.getSource()==mr[1])//“显示记忆”按钮被按下
text.setText(Double.toString(memory));
p2.formart();
p2.tokenizerPoint();
elseif(e4.getSource()==mr[2])//“记忆”按钮被按下
{mr[2].setForeground(Color.red);
memory=Double.parseDouble(text.getText());
elseif(e4.getSource()==mr[3])//"
记忆加"
按钮被按下
{if(mr[2].getForeground()==Color.blue)
memory=memory+Double.parseDouble(text.getText());
五、遇到的问题和解决方法
问题:
1、给各个控件用网格布局的时候,出了点错,计算器的界面没有调整好.
2、在异常操作处理时,代码不够完整.
解决方法:
1、从新把课本布局的那一段复习了一遍,又向同学和老师请教,最后经过老师指导,弄懂了布局的方法,调整好布局.
2、请老师指导,并请了同学帮助,并且在网上和课本上参考相关的知识,最后在老师指导下,进行了异常处理.
3、请同学和老师帮忙,编程时时刻不能心浮气躁,要细心,
六、总结
回顾该应用程序从选题收集材料到需求分析、设计、编码实现、测试等,文档的撰写,这系列连贯的过程,感想颇多,收获也很多。
大致的总结几点,如下:
1.设计开发一个软件,首先要了解所涉及到使用人群,一定要想办法进行规划,从不同途径获取材料。
合理安排系统设计开发时间,进行实际开发会发现需求分析与系统设计占主要的时间,如果前面的工作做好了,编码实现占用的时间很短。
所以我们要借助软件工程的思想对软件开发过程进行控制。
2.在开发一个系统时,前期的分析准备工作非常的重要。
对于系统的需求要明确,这样才能做到有的放矢。
特别是对于系统中数据的存储和重要算法的设计,设计的不好会出现大量的冗余,不仅浪费存储空间,还影响代码可读性。
3.在设计的初期,对一个功能模块的设计,要想出两种或两种以上方案,这样可以进行比较,从而获得更佳的设计方案,设计开发过程中一定要吸取经验教训,避免返工。
尤其是一些重要算法或功能。
在对具体实现功能模块进行编程时,要养成良好的加注释的习惯,这样的话不仅能理清思路,而且可以为以后的调试程序带来很大的方便。
4.独立思考的同时,要虚心向别人请教,可以达到事半功倍的效果。
在具体编程实现系统功能的过程中,我遇到了不少的问题,我曾通过不同渠道向老师、同学、上相关网站寻求答案,收到了很好的效果。
5.懂得充分利用网络资源,因为实验的内容有些不太理解,只好在浩瀚的网络中寻找我所需要的资料,这无形当中培养了我通过网络获取资料信息的能力。
通过独立完成学生信息管理系统的分析设计开发后,发现自己在进行软件开发方面提高不少,同时积极利用所学到的新技术用于自己的设计开发过程。
由于本人是初次开发系统,在知识、经验方面都存在着不足。
另外,在整个开发的过程中,时间也比较仓促。
因此,该系统必然会存在一些缺陷和不足。
通过对此课题的开发,使我对用JCreator开发平台有了一个比较清楚的认识,体会到理论和实践的重要性。
由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如用户界面设计不够美观,异常出错处理比较差等多方面问题,这些都有待进一步完善和提高。
当程序运行结束看到弹出的计算器的界面时,感到很欣慰,虽然只是一个小小的东西,但却是自己起步的成就,从中学到了很多书本知识不能体现的东西,对JAVA的学习有了一定的兴趣。
七、参考文献
1.赵景辉,迟勇.《Java语言程序设计》.大连理工大学出版社.2008。
2.於东军[等]著.《Java程序设计与应用开发》.清华大学出版社.2005。
附录(源程序代码)
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.util.StringTokenizer;
classPanel1extendsJPanelimplementsActionListener{
JButtonbase[]=newJButton[9];
//数组型按钮
inti;
Stringn[]={"
1"
"
2"
3"
4"
5"
6"
7"
8"
9"
};
//按钮的名字
Panel2p2;
StringgetE;
Panel1(JTextFieldtext,Panel1p1,Panel2p2)
this.text=text;
FlowLayoutflow=newFlowLayout();
setLayout(flow);
for(i=0;
i<
9;
i++){
base[i]=newJButton(n[i]);
add(base[i]);
base[i].setForeground(Color.blue);
//设置按钮前景色
base[i].setMargin(newInsets(0,0,0,0));
//设置按钮标签与边框间的空白
base[i].addActionListener(this);
base[i].setPreferredSize(newDimension(30,30));
publicvoidactionPerformed(ActionEvente)//监视数字按钮
{getE=e.getActionCommand();
)==false){this.shuru();
else{text.setText(null);
this.shuru();
publicvoidshuru()//公共的用于数字输入的方法
p2.jianshiBackspase=false;
try{if(p2.jianshi2==false)
{if(p2.jianshi3==true){text.setText(null);
p2.jianshi3=false;
if((text.getText()+getE).length()<
=30){
text.setText(text.getText()+getE);
else{text.setText(text.getText());
p2.b=text.getText();
p2.result=Double.parseDouble(p2.b)
p2.some=Double.parseDouble(p2.b);
else
{if(p2.jianshi3==false){text.setText(null);
p2.jianshi3=true;
else{text.setText(text.getText());
p2.b=text.getText();
p2.some=Double.parseDouble(p2.b);
p2.secendNumjanshi=true;
catch(NumberFormatExceptione){}
text.requestFocus();
classPanel2extendsJPanelimplementsActionListener
{inti;
JButtoncs[]=newJButton[16];
String
name[]={"
CE"
C"
sqrt"
log"
cos"
%"
."
1/x"
//按钮名字
doubleresult,some;
/*用于存储所输入的两个double型变量*/
intjianshi=0,/*用于监视"
*/jianshi0=0;
//用于监视按钮被按次数的int型变量
booleanjsd=false,/*用于监视"
*/jianshi2=false,jianshi3=false,/*用于判断应该往哪一个变量里赋值*/
secendNumjanshi=false,/*用于监视第二个数是否被输入*/jianshiBackspase=false;
//监视“退格”键
Stringb;
Panel2(JTextFieldtext)
{this.text=text;
flow.setHgap(5);
flow.setVgap(5);
setLayout(flow);
for(i=0;
16;
i++)
{cs[i]=newJButton(name[i]);
add(cs[i]);
cs[i].setForeground(Color.red);
cs[i].setMargin(newInsets(0,0,0,0));
cs[i].addActionListener(this);
cs[i].setPreferredSize(newDimension(30,30));
cs[1].setForeground(Color.blue);
cs[2].setForeground(Color.blue);
cs[13].setForeground(Color.blue);
cs[3].setForeground(Color.blue);
cs[15].setForeground(Color.blue);
publicvoidactionPerformed(ActionEventee)//监视Panel2的所有按钮
{jianshiBackspase=false;
if(ee.getSource()==cs[0])//如果按钮"
//如果第二个数没被输入值,设置“退格”键无效
jianshi0++;
i