Java语言程序设计实训计算器.docx
《Java语言程序设计实训计算器.docx》由会员分享,可在线阅读,更多相关《Java语言程序设计实训计算器.docx(25页珍藏版)》请在冰豆网上搜索。
Java语言程序设计实训计算器
目录
一、课程设计的目的与要求………………………………………………2
1.1课程设计目的…………………………………………………………2
1.2课程设计要求…………………………………………………………2
二、题目说明…………………………………………………………2
2.1题目说明…………………………………………………………2
2.2开发工具介绍…………………………………………………………2
三、总体设计…………………………………………………………3
3.1系统开发平台…………………………………………………………3
3.2系统结构图…………………………………………………………3
四、详细说明…………………………………………………………3
4.1计算器主界面…………………………………………………………3
4.2系统实施…………………………………………………………4
五、遇到的问题和解决方法………………………………………………9
六、总结……………………………………………………………10
七、参考文献…………………………………………………………10
附录(源程序代码)…………………………………………………………11
八、教师评语………………………………………………………20
一、课程设计的目的与要求
1.1课程设计目的
1)复习,巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握。
2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力,提高学生适应实际,实践编程的能力。
3)培养学生在项目开发中团队合作精神,创新意识及能力。
1.2课程设计要求
◆功能要求:
该程序显示GUI用户界面,至少能实现整数的加,减,乘,除四则运算.
◆界面要示:
用图形界面实现
◆实训条件:
计算机房
◆硬件要求:
装有Winxp等操作系统的机器
◆软件要求:
JDK、JCreator等开发工具
二、题目说明
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]){
qian=Double.parseDouble(text.getText());
fuhao="-";
jsd=false;}
if(e.egetSource()==cs[8]){
qian=Double.parseDouble(text.getText());
fuhao="*";
jsd=false;}
if(e.egetSource()==cs[11]){
qian=Double.parseDouble(text.getText());
fuhao="/";
jsd=false;}
//公共的用于计算的方法
publicvoidjisuan(){
switch(jianshi)
{
case1:
result=result+some;break;
case2:
result=result-some;break;
case3:
result=Math.pow(result,some);break;
case4:
result=result*some;break;
case5:
result=result/some;break;
}
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++;jsd=false;
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(""+result);formart();
jianshi2=false;jianshi3=true;
}else{text.setText("0");}
D:
实现开平方的功能:
通过sqrt(Double.parseDouble(text.getText()))从计算器上获得数值然后用sqrt()方法实现
elseif(ee.getSource()==cs[7]){
jsd=false;jianshiBackspase=true;
jianshi0++;if(jianshi0>1){this.jisuan();}
if(text.getText().equals("-")==false)
{b=text.getText();some=Double.parseDouble(b);
result=Math.sqrt(some);text.setText(""+result);
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)
{mr[2].setForeground(Color.red);
memory=Double.parseDouble(text.getText());
}
memory=memory+Double.parseDouble(text.getText());
}text.requestFocus();
}
五、遇到的问题和解决方法
问题:
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];//数组型按钮
JTextFieldtext;
inti;
Stringn[]={"1","2","3","4","5","6","7","8","9"};//按钮的名字
Panel2p2;StringgetE;
Panel1(JTextFieldtext,Panel1p1,Panel2p2)
{
this.text=text;this.p2=p2;
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();
if(text.getText().equals("0")==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;}
if((text.getText()+getE).length()<=30){
text.setText(text.getText()+getE);}
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];JTextFieldtext;
String
name[]={"+","0","CE","C","-","pow","sin","sqrt","*","log","cos","%","/",".","1/x","="};//按钮名字
doubleresult,some;/*用于存储所输入的两个double型变量*/
intjianshi=0,/*用于监视"+","-","*","/","pow"*/jianshi0=0;//用于监视按钮被按次数的int型变量
booleanjsd=false,/*用于监视"."*/jianshi2=false,jianshi3=false,/*用于判断应该往哪一个变量里赋值*/
secendNumjanshi=false,/*用于监视第二个数是否被输入*/jianshiBackspase=false;//监视“退格”键
Stringb;
Panel2(JTextFieldtext)
{this.text=text;
FlowLayoutflow=newFlowLayout();flow.setHgap(5);flow.setVgap(5);
setLayout(flow);
for(i=0;i<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])//如果按钮"+"被按下
{
if(secendNumjanshi==false){jianshiBackspase=true;}
//如果第二个数没被输入值,设置“退格”键无效
jianshi0++;i