Java课程设计计算器.docx
《Java课程设计计算器.docx》由会员分享,可在线阅读,更多相关《Java课程设计计算器.docx(18页珍藏版)》请在冰豆网上搜索。
Java课程设计计算器
软件学院
课程设计报告书
课程名称面向对象程序设计
设计题目模拟科学计算器
专业班级
学号
姓名
指导教师
2014年06月
目录
1设计时间.....................................................1
2设计目的.....................................................1
3设计题目.....................................................1
4设计内容.....................................................1
4.1设计任务....................................................1
4.2总体设计....................................................1
4.2.1包的描述..................................................1
4.2.2类的描述..................................................1
4.3详细设计....................................................1
4.3.1页面设计..................................................2
4.4程序代码....................................................2
5功能模块实现..................................................9
6运行与测试....................................................9
7总结与展望...................................................11
参考文献......................................................12
成绩评定......................................................12
1设计时间
2014年6月16日—2014年6月20日
2设计目的
《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。
其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。
3设计题目
模拟科学计算器
4设计内容
4.1设计任务
界面模拟Windows中的计算器程序。
实现基本数学运算、函数等功能:
加、减、乘、除、阶乘、正弦、余弦和指数运算。
实现要点:
添加相关组件并进行按钮事件处理。
4.2总体设计
4.2.1包的描述
importjava.awt.*;
importjava.awt.event.*;
importjava.text.DecimalFormat;
importjavax.swing.*;
4.2.2类的描述
publicCalculator()
privatevoidinit()
privatevoidaddButton()
privatevoidgetResult()
4.3详细设计
4.3.1页面设计
图1计算器界面
4.4程序代码
importjava.awt.*;
importjava.awt.event.*;
importjava.text.DecimalFormat;
importjavax.swing.*;
publicclassCalculatorextendsJFrame
{
privateJTextFieldtf;
privateJPanelpanel1,panel2,panel3;
privateStringback;
privatebooleanIfResult=true,flag=false;
privateStringoper="=";
privatedoubleresult=0;
privateNumnumActionListener;
privateDecimalFormatdf;
publicCalculator()
{
super("科学计算器");//设置标题栏
df=newDecimalFormat("#.####");//保留四位小数
this.setLayout(newBorderLayout(10,5));
panel1=newJPanel(newGridLayout(1,4,10,10));
panel2=newJPanel(newGridLayout(4,6,5,5));//4行6列
panel3=newJPanel(newBorderLayout(5,5));
numActionListener=newNum();//实现数字监听
tf=newJTextField();
tf.setEditable(false);//文本区域不可编辑
tf.setBackground(Color.white);//文本区域的背景色
tf.setHorizontalAlignment(JTextField.RIGHT);//文字右对齐
tf.setText("0");
tf.setBorder(BorderFactory.createLoweredBevelBorder());
init();//对计算器进行初始化
}
privatevoidinit()
{
JButtonbtns=newJButton("计算器");
btns.setBorder(BorderFactory.createLoweredBevelBorder());
btns.setEnabled(false);//按钮不可操作
btns.setPreferredSize(newDimension(20,20));
panel1.add(btns);//加入按钮
addButton(panel1,"Backspace",newClear(),Color.black);
addButton(panel1,"CE",newClear(),Color.black);
addButton(panel1,"C",newClear(),Color.black);
addButton(panel2,"sin",newSigns(),Color.magenta);
addButton(panel2,"7",numActionListener,Color.blue);
addButton(panel2,"8",numActionListener,Color.blue);
addButton(panel2,"9",numActionListener,Color.blue);
addButton(panel2,"÷",newSigns(),Color.red);
addButton(panel2,"sqrt",newSigns(),Color.magenta);
addButton(panel2,"cos",newSigns(),Color.magenta);
addButton(panel2,"4",numActionListener,Color.blue);
addButton(panel2,"5",numActionListener,Color.blue);
addButton(panel2,"6",numActionListener,Color.blue);
addButton(panel2,"×",newSigns(),Color.red);
addButton(panel2,"1/x",newSigns(),Color.magenta);
addButton(panel2,"x^2",newSigns(),Color.magenta);
addButton(panel2,"1",numActionListener,Color.blue);
addButton(panel2,"2",numActionListener,Color.blue);
addButton(panel2,"3",numActionListener,Color.blue);
addButton(panel2,"-",newSigns(),Color.red);
addButton(panel2,"%",newSigns(),Color.magenta);
addButton(panel2,"n!
",newSigns(),Color.magenta);
addButton(panel2,"+/-",newClear(),Color.blue);
addButton(panel2,"0",numActionListener,Color.blue);
addButton(panel2,".",newDot(),Color.blue);
addButton(panel2,"+",newSigns(),Color.red);
addButton(panel2,"=",newSigns(),Color.magenta);
panel3.add(panel1,BorderLayout.NORTH);
panel3.add(panel2,BorderLayout.CENTER);
this.add(tf,BorderLayout.NORTH);
this.add(panel3);
pack();
this.setResizable(false);//窗口不可改变大小
this.setLocation(300,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
privatevoidaddButton(JPanelpanel,Stringname,ActionListeneraction,Colorcolor){
JButtonbt=newJButton(name);
panel.add(bt);//在面板上增加按钮
bt.setForeground(color);//设置前景(字体)颜色
bt.addActionListener(action);//增加监听事件
}
privatevoidgetResult(doublex)
{
if(oper=="+"){result+=x;}
elseif(oper=="-"){result-=x;}
elseif(oper=="×"){result*=x;}
elseif(oper=="÷"){result/=x;}
elseif(oper=="="){result=x;}
tf.setText(df.format(result));
}
classSignsimplementsActionListener
{
publicvoidactionPerformed(ActionEvente)
{
Stringstr=e.getActionCommand();
/*sqrt求平方根*/
if(str.equals("sqrt"))
{
doublei=Double.parseDouble(tf.getText());
if(i>=0)
{
tf.setText(String.valueOf(df.format(Math.sqrt(i))));
}
else
{
tf.setText("负数不能开平方根");
}
}
/*%求百分比*/
elseif(str.equals("%"))
{
tf.setText(df.format(Double.parseDouble(tf.getText())/100));
}
/*1/x求倒数*/
elseif(str.equals("1/x"))
{
if(Double.parseDouble(tf.getText())==0)
{
tf.setText("除数不能为零");
}
else
{
tf.setText(df.format(1/Double.parseDouble(tf.getText())));
}
}
/*sin求正弦函数*/
elseif(str.equals("sin"))
{
doublei=Double.parseDouble(tf.getText());
tf.setText(String.valueOf(df.format(Math.sin(i))));
}
/*cos求余弦函数*/
elseif(str.equals("cos"))
{
doublei=Double.parseDouble(tf.getText());
tf.setText(String.valueOf(df.format(Math.cos(i))));
}
/*n!
求阶乘*/
elseif(str.equals("n!
"))
{
doublei=Double.parseDouble(tf.getText());
if((i%2==0)||(i%2==1))//判断为整数放进行阶乘操作
{
intj=(int)i;//强制类型转换
intresult=1;
for(intk=1;k<=j;k++)
result*=k;
tf.setText(String.valueOf(result));
}
else
{
tf.setText("无法进行阶乘");
}
}
/*x^2求平方*/
elseif(str.equals("x^2"))
{
doublei=Double.parseDouble(tf.getText());
tf.setText(String.valueOf(df.format(i*i)));
}
else
{
if(flag)
{
IfResult=false;
}
if(IfResult)
{
oper=str;
}
else
{
getResult(Double.parseDouble(tf.getText()));
oper=str;
IfResult=true;
}
}
}
}
classClearimplementsActionListener
{
publicvoidactionPerformed(ActionEvente)
{
Stringstr=e.getActionCommand();
if(str=="C")
{
tf.setText("0");
IfResult=true;
result=0;
}
elseif(str=="+/-")
{
doublei=0-Double.parseDouble(tf.getText().trim());
tf.setText(df.format(i));
}
elseif(str=="Backspace")
{
if(Double.parseDouble(tf.getText())>0)
{
if(tf.getText().length()>1)
{
tf.setText(tf.getText().substring(0,tf.getText().length()-1));
//使用退格删除最后一位字符
}
else
{
tf.setText("0");
IfResult=true;
}
}
else
{
if(tf.getText().length()>2)
{
tf.setText(tf.getText().substring(0,tf.getText().length()-1));
}else{
tf.setText("0");
IfResult=true;
}
}
}
elseif(str=="CE")
{
tf.setText("0");
IfResult=true;
}
}
}
classNumimplementsActionListener
{
publicvoidactionPerformed(ActionEvente)
{
Stringstr=e.getActionCommand();
if(IfResult){
tf.setText("");
IfResult=false;
}
if(str=="π")
{
tf.setText(String.valueOf(Math.PI));
}
elseif(str=="e")
{
tf.setText(String.valueOf(Math.E));
}
else
{
tf.setText(tf.getText().trim()+str);
if(tf.getText().equals("0"))
{
tf.setText("0");
IfResult=true;
flag=true;
}
}
}
}
classDotimplementsActionListener
{
publicvoidactionPerformed(ActionEvente)
{
IfResult=false;
if(tf.getText().trim().indexOf(".")==-1)
{
tf.setText(tf.getText()+".");
}
}
}
publicstaticvoidmain(String[]args)
{
newCalculator().setVisible(true);
}
}
5类图
(3)Clear类图
(2)Signs类图
(1)Calculator类图
Calculator类
tf
panel1
Panel2
Panel3
IfResult
oper
result
df
calculator()
init()
addButton()
getResult()
main()
Signs类
actionPerformed()
Clear类
actionPerformed()
(5)Dot类
(4)Num类
Num类
actionPerformed()
Dot类
actionPerformed()
图4Clear类
图3Signs类
图6Dot类
图5Num类
图2Calculator类
6运行与测试
1、输入“3”
图7测试图——输入
2、输出结果:
求x^2
图8测试图——结果
3、输出结果:
求cosx
图9测试图——结果
4.输出结果:
Backspace
图10测试图——结果
7总结与展望
一周的课程设计紧张而忙碌的度过了,通过本次课程设计我学到了好多,也发现了自己的好多不足!
也真正体会了java的特点,非常的形象,真正的懂得了面向对象的含义。
在此次课设中通过查阅很多资料和同学的互相帮助,程序设计时在阶乘函数的处理中遇到不少麻烦,以后有时间也要继续思考,不过还是完成了此次任务。
另外按钮功能的实现也是本次课设的一大难点,怎样实现那些功能是关键。
通过这次课设我又学会了好多函数。
课程设计的部分程序是通过外部资料得到的,这使得我认识到查阅资料和开外多看书籍的重要性。
但不主张照搬,因为那不是我们自己成果,要自己通过得到的知识点去消化理解,真正的弄懂这个内容,当我真正的投入到课程设计的制作当中后,发觉课程设计并不枯燥乏味,相反充满了乐趣。
参考文献
[1]屈辉立,陈可明,石武信.JSP网站编程教程[M].第1版,北京:
北京希望电子出版社,2005
[2]白勇.用B/S模式构建在线考试系统[J],重庆电力高等专科学校学报,2003,10(4):
100~130.
[3]VB数据库管理范例:
[4]刘万军,郑少京,王松波,梁清华Java6程序设计,清华大学出版社
成绩评定
成绩教师签字