资源描述
课程设计汇报
课程名称
《Java项目实训》课程设计
设计名称
基于java计算器设计和实现
学生学号
学生姓名
学生学号
学生姓名
学生学号
学生姓名
学生学号
学生姓名
学生学号
学生姓名
指导老师
吕淑芳
考评成绩
信息工程系
二〇一七年六月
目录
1、前 言 2
1.1设计目标及思绪 2
1.2功效模块设计 2
1.3系统功效图 3
2、计算器设计和实现 3
3、计算器演示 4
4、总结和体会及讨论分析 7
5、参考文件 9
附件: 10
程序源代码 10
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系统功效图
计算器
减法运算
加法运算
乘法运算
除法运算
倒数运算
开平方运算
求余运算
二进制和十进制转换
2、计算器设计和实现
2.1总体方案设计
日常生活中常常需要用到计算器,比如科学计算,数值计算,会计业务等等,在Applet中实现一个精巧计算器,能够让用户操作也更方便和快捷。本项目需要实现一个含有四则运算计算器,能够实现基础加、减、乘、除运算,和其它辅助功效;界面简练适用;要提供关键设计思绪、类设计,此次设计添加转进制等功效。
本应用程序继承自框架(frame),此程序使用frame布局管理器bordelayout,将单行文本加入对应区域,包含多种按纽面板buttonpanel加入对应区域还能够将进制转换面板和单行文本框放一块包含多种按纽面板buttonpanel采取N行N列网格布局,然后将数字按钮和运算符按钮和控制按钮添加到面板中,同时注册按钮事件监听器。
布局设计好后再添加按钮事件。对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,假如是第一次点击数字按钮或是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮数值设置到文本框中,不然则应把文本框中内容加上你所点击按钮数值设置到文本框中。
2.2程序调试和运行结果说明
程序功效实现:
使用swing组件和awt图形用户界面和BroadLayout布局管理器。经过在按钮单击事件处理方法中调用类组员方法calculator()来进行简易计算器多种运算,并正确实现运算功效。
程序能够实现加、减、乘、除、取余等运算,而且可进行负数运算,设置CE清零按钮可进行清零运算。
添加菜单条,列出‘标准计算’、‘日期计算’菜单选项,并别实现‘标准计算’且整个程序对话框可实现最小化、最大化、关闭。
3、计算器演示
加法
减法
乘法
除法
倒数
平方
二进制转换为十进制
十进制转换为二进制
4、总结和体会及讨论分析
将代码写好以后检验代码正确性,检验代码无误后将代码进行调试和运行将会出现一个JavaApplet计算器界面。在调试过程中可能会出现有界面不过不能运行小程序,那是因为没有初始化小程序,那时我们应该在主函数中将小程序进行初始化,这么小程序才能运行!
在调试和运行完全正确后,我们就能够根据自己医院将小程序进行简单测试,比如输入部分简单数据分别运行各个按钮结果正确后能够初步确定程序师正确。有时候我们还要输入不一样范围值进行测试,可能会发觉更多错误,因为有时候我们定义数据范围可能会过小或输入数据会越界,到时我们就能够更正以适应更多更大运算。
有时候我们会不自觉选择一个最优函数方法尽可能将自己代码简单规范而又不缺乏题目所要求功效,那就要求我们翻阅很多参考书和查阅很多资料。其实javaApplet图形界面布局也是我们要讨论范围,怎样使得界面愈加美观是我们要探讨!
有时候我们可能会到书上或网上找到部分满足我们要求程序代码,在此我们应该取其优异简单易了解代码作为我们设计程序代码,作为初学者参考和借用部分外部程序是不可避免,不过我认为前提我们应该看懂那些程序代码,要知其所以然,那样才达成我们学程序目标,但不主张完全照搬,不然就会没意义了!
总结:
(1)经过编写这个相对复杂程序,让我认识处理实际问题前应现建立模型,再经过建立模型使问题简单化,从而处理问题。
(2)这次编写程序大部分是经过调用各包中方法来实现,这也让我充足了解了包和类调用关系。
(3)而且经过实训我了解到String类是字符串常量类,初始化后不能更改;StringBuffer类是字符串缓冲区,能够被修改。布尔型不能转化成其它任何类型等等。
在做本项目是时候,会碰到很多小问题,比如说:怎样保留输入数字和下一个数进行加、减、乘、除运算。还有怎样判定它是第多个输入数字。以后进行数次研究和查询才知道能够经过设运算符标志位来判定是输入第多个数值。
还有在安装日期计算按钮时会碰到日期对象和标准计算类不再同一个包中,这时需要重新定义一个类来实现日期计算,这一功效我在编程时碰到了部分问题,所以最终运行时只有按钮事件但在按钮上没有添加实现功效方法。而且编写程序时需要申明多个对象,给不一样对象分配不一样空间。程序中对布局管理器和事件、按钮监听器应用十分广泛。而且利用了java.awt.*;和java.swing中很多组件。经过编程我对这些内容有了更深层次了解,为以后编程打下了良好基础。
设计体会:
在此次课程设计实践中,我学到了教科书上没有东西。这次课程设计,我根据课程设计要求,分块实现程序功效。在实践中我碰到很多问题,但我全部克服,最终我成功完成了这次课程设计。从中我充足了解了Java面对对象特征,并体会到Java和C语言不一样之处于实践同时,我又从中成长了很多,尤其是在对程序编译和调试中掌握了很多技巧和方法,为以后其它计算机语言学习奠定了一定基础。
此次课程设计让我更了解熟悉了Java中图形用户界面和它编程方法。在完成课题过程中也不停充实了自己,学习到了很多以前没有学习到知识,收获很大。在做项目时肯定会碰到困难,会有不会东西,关键不是现在会不会,而是碰到问题知道怎样找四处理路径。还使我对所学知识能够融会贯通,又不停丰富了新知识。Java计算器设计使得我们对所学专业课有了更为深刻认识,使得悉识得到了巩固和提升
此次课程设计使我复习、巩固Java语言基础知识,深入加深Java语言了解和掌握;课程设计为我们提供了一个既动手又动脑,独立实践机会,将书本上理论知识和实际有机结合起来,锻炼了我们分析处理实际问题能力。提升我们适应实际,实践编程能力;而且培养了我们在项目开发中团体合作精神、创新意识及能力。
在实践同时,我又从中成长了很多,尤其是在对程序编译和调试中掌握了很多技巧和方法,为以后其它计算机语言学习奠定了一定基础。
5、参考文件
[1]朱福喜.《Java语言程序设计》(第二版).科学出版社
[2]陈国君等.《Java程序设计基础》(第二版).清华大学出版社
[3] Deitel.《Java大学基础教程》(第六版).电子工业出版社
[4] MaryCampione.《Java语言导学》(第四版).机械工业出版社
[5] Y.Daniel Liang.《Java语言程序设计基础篇》(第六版). 机械工业出版社
程序源代码
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(); //对小程序进行初始化
}
}
展开阅读全文