模拟科学计算器课程设计手稿.docx
《模拟科学计算器课程设计手稿.docx》由会员分享,可在线阅读,更多相关《模拟科学计算器课程设计手稿.docx(18页珍藏版)》请在冰豆网上搜索。
模拟科学计算器课程设计手稿
面向对象课程设计
题目
学院
专业
班级
学号
姓名
指导老师
编写日期
目录
面向对象课程设计-1-
目录-2-
一、需求分析-3-
二、系统运行环境-3-
三、简要设计-3-
四、详细设计-4-
五、程序调试-5-
六、总结-6-
七、附录-7-
1、需求分析
1.设计一个模拟科学计算器,界面要求模拟windows中的计算器程序。
2.要求实现基本数学运算、函数等功能,加、减、乘、除、阶乘、正弦、余弦和指数运算。
3.添加相关组件并进行按钮事件处理。
2、系统运行环境
Windows7以及Myeclipse8.6
3、简要设计
模拟科学计算器界面设计如下:
查看(V)
编辑(E)
帮助(H)
文本域【显示数据(输入、输出)】
Caluc
back
CE
C
MC
X^2
X^3
7
8
9
/
MR
N!
sqrt
4
5
6
*
MS
sin
ln
1
2
3
-
M+
cos
log
0
.
-/+
+
M-
tan
%
π
Exp
angle
=
如上图所示,设计流程如下:
1.菜单栏设计.
2.文本域,即为计算器的屏幕显示区域
3.初始化操作
4.统一设置按钮的的使用方式
5.计算器的基础操作(+-*/)
6.运算符号的事件监听
7.清除按钮的事件监听
8.数字输入的事件监听
9.小数点的事件监听
10.main方法
4、详细设计
主要函数模块及功能:
1、主函数:
publicstaticvoidmain(String[]args){
newCalucator01().setVisible(true);}
功能:
调用公共类Calucator01,启动计算器。
2、publicCalucator01(){
设计面板布局;
加入菜单栏(编辑、查看、帮助等);
Init();
}
功能:
对计算器面板进行设计,并对于各按钮添加事件监听。
3、privatevoidinit(){
各按钮加入各容器;
版面布局;
}
功能:
初始化。
4、privatevoidaddButton(JPanelpanel,Stringname,ActionListeneraction,Colorcolor){
}
功能:
按钮加入容器,并进行事件监听和颜色设置。
5、privatevoidgetResult(doublex){
}
功能:
基本运算,+-*/等运算。
6、classSignsimplementsActionListener
功能:
对于运算符号按钮进行事件监听。
7、classClearimplementsActionListener
功能:
对于清除按钮事件进行监听。
8、classNumimplementsActionListener
功能:
对于数字输入按钮进行事件监听。
9、classDotimplementsActionListener
功能:
对于小数点按钮事件进行监听。
5、程序调试
效果图如下:
1、按顺序点击按钮3、*、9、=,显示结果27,点击C清零;
2、按顺序点击按钮3、/、8、=,显示结果0.375,点击C清零;
3、按顺序点击按钮360、-/+、6、=,显示结果-60,点击C清零;
4、按顺序点击按钮30、angle、sin,显示结果0.5,点击C清零;
5、按顺序点击按钮π、cos,显示结果-1,点击C清零;
6、按顺序点击按钮100、log10,显示结果2,点击C清零;
7、按顺序点击按钮Exp、ln,显示结果1,点击C清零;
8、按顺序点击按钮2、X^2,显示结果4,点击C清零。
其中精确度达到小数点后十位。
六、总结
总的来说,这次的面向对象课程设计中学到不少图形界面设计方面的知识。
首先,我在老师上课没有涉及的知识领域中摸索着前进,一周下来的看书、上机操作以及和同学队友之间的交流,让我深深感受到java语言在图形界面设计上的优势和方便,从而获得强烈的求知欲,迫不及待地学完所涉及的章节;其次,这次的模拟科学计算器虽然能够实现单步的基本数学运算、函数、指数等运算,但是由于时间关系,考试在即,很遗憾没能够深入拓展实现复杂的带有括号的四则运算;最后,要感谢老师的指导和同学们的交流。
七、附录
源程序:
importjava.awt.*;
importjava.awt.event.*;
importjava.text.DecimalFormat;
importjavax.swing.*;
publicclassCalucator01extendsJFrame
{
privateJTextFieldtf;
privateJPanelpanelA,panelB,panelC,panelD;
privateJMenuBarmybar;
privateJMenumenuA,menuB,menuC;
privateJMenuItemed1,ed2,help1,help2,help3;
privateJRadioButtonMenuItemseeItem1,seeItem2;
privateJCheckBoxMenuItemseeItem3;
privateButtonGroupbgb;
privatebooleanIfResult=true,flag=false;
privateStringoper="=";
privatedoubleresult=0;
privateNumnumActionListener;
privateDecimalFormatdf;
publicCalucator01()
{
super("模拟科学计算器");//设置标题
df=newDecimalFormat("#.##########");//保留十位小数
this.setLayout(newBorderLayout(10,5));
panelA=newJPanel(newGridLayout(1,3,10,10));//back,CE,C
panelB=newJPanel(newGridLayout(5,6,5,5));
//X^3X^2789/
//N!
sqrt456*
//sinln123-
//coslog0.-/++
//tan%πExpangle=
panelC=newJPanel(newGridLayout(6,1,5,5));
panelD=newJPanel(newBorderLayout(5,5));
/**菜单栏**/
mybar=newJMenuBar();
menuA=newJMenu("查看(V)");
menuB=newJMenu("编辑(E)");
menuC=newJMenu("帮助(H)");
menuA.setFont(newFont("宋体",Font.PLAIN,12));
menuB.setFont(newFont("宋体",Font.PLAIN,12));
menuC.setFont(newFont("宋体",Font.PLAIN,12));
//**编辑栏**//
ed1=newJMenuItem("复制(C)Ctrl+C");
ed2=newJMenuItem("粘贴(P)Ctrl+V");
ed1.setFont(newFont("宋体",Font.PLAIN,12));
ed2.setFont(newFont("宋体",Font.PLAIN,12));
//**查看栏**//
seeItem1=newJRadioButtonMenuItem("标准型(S)Alt+1");
seeItem2=newJRadioButtonMenuItem("科学型(T)Alt+2");
seeItem3=newJCheckBoxMenuItem("数字分组(I)");
seeItem1.setFont(newFont("宋体",Font.PLAIN,12));
seeItem2.setFont(newFont("宋体",Font.PLAIN,12));
seeItem3.setFont(newFont("宋体",Font.PLAIN,12));
//**帮助栏**//
help1=newJMenuItem("查看主题(V)F1");
help2=newJMenuItem("关于计算器(A)");
help1.setFont(newFont("宋体",Font.PLAIN,12));
help2.setFont(newFont("宋体",Font.PLAIN,12));
bgb=newButtonGroup();//选项组
menuA.add(seeItem1);
menuA.add(seeItem2);
menuA.addSeparator();//添加一条分割线
menuA.add(seeItem3);
menuB.add(ed1);
menuB.add(ed2);
menuC.add(help1);
menuC.addSeparator();
menuC.add(help2);
mybar.add(menuA);
mybar.add(menuB);
mybar.add(menuC);
this.setJMenuBar(mybar);
numActionListener=newNum();//实现数字监听
//**TextArea计算器屏幕显示区域**//
tf=newJTextField();
tf.setEditable(false);//文本区域不可编辑
tf.setBackground(Color.white);//文本区域的背景色
tf.setHorizontalAlignment(JTextField.RIGHT);
tf.setText("0");
tf.setBorder(BorderFactory.createLoweredBevelBorder());
init();//对计算器进行初始化
}
privatevoidinit()
{
addButton(panelA,"Backspace",newClear(),Color.red);
addButton(panelA,"CE",newClear(),Color.red);
addButton(panelA,"C",newClear(),Color.red);
addButton(panelB,"X^2",newSigns(),Color.magenta);
addButton(panelB,"X^3",newSigns(),Color.magenta);
addButton(panelB,"7",numActionListener,Color.blue);
addButton(panelB,"8",numActionListener,Color.blue);
addButton(panelB,"9",numActionListener,Color.blue);
addButton(panelB,"/",newSigns(),Color.black);
addButton(panelB,"N!
",newSigns(),Color.magenta);
addButton(panelB,"sqrt",newSigns(),Color.magenta);
addButton(panelB,"4",numActionListener,Color.blue);
addButton(panelB,"5",numActionListener,Color.blue);
addButton(panelB,"6",numActionListener,Color.blue);
addButton(panelB,"*",newSigns(),Color.black);
addButton(panelB,"sin",newSigns(),Color.magenta);
addButton(panelB,"ln",newSigns(),Color.magenta);
addButton(panelB,"1",numActionListener,Color.blue);
addButton(panelB,"2",numActionListener,Color.blue);
addButton(panelB,"3",numActionListener,Color.blue);
addButton(panelB,"-",newSigns(),Color.black);
addButton(panelB,"cos",newSigns(),Color.magenta);
addButton(panelB,"log10",newSigns(),Color.magenta);
addButton(panelB,"0",numActionListener,Color.blue);
addButton(panelB,".",newDot(),Color.blue);
addButton(panelB,"-/+",newClear(),Color.blue);
addButton(panelB,"+",newSigns(),Color.black);
addButton(panelB,"tan",newSigns(),Color.magenta);
addButton(panelB,"%",newSigns(),Color.magenta);
addButton(panelB,"π",numActionListener,Color.green);
addButton(panelB,"Exp",numActionListener,Color.green);
addButton(panelB,"angle",newSigns(),Color.green);
addButton(panelB,"=",newSigns(),Color.black);
JButtonbtns=newJButton();
JLabellb=newJLabel("Caluc");
lb.setFont(newFont("宋体",Font.BOLD,15));
btns.add(lb);
btns.setBorder(BorderFactory.createLoweredBevelBorder());
btns.setEnabled(false);//按钮不可操作
btns.setPreferredSize(newDimension(20,20));
panelC.add(btns);
addButton(panelC,"MC",null,Color.gray);
addButton(panelC,"MR",null,Color.gray);
addButton(panelC,"MS",null,Color.gray);
addButton(panelC,"M+",null,Color.gray);
addButton(panelC,"M-",null,Color.gray);
panelD.add(panelA,BorderLayout.NORTH);
panelD.add(panelB,BorderLayout.CENTER);
this.add(tf,BorderLayout.NORTH);
this.add(panelC,BorderLayout.WEST);
this.add(panelD);
pack();
this.setResizable(false);//窗口大小不可改变
this.setLocation(400,400);
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();
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("log10"))
{
doublei=Double.parseDouble(tf.getText());
if(i>0)
{
tf.setText(String.valueOf(df.format(Math.log10(i))));
}
else
{
tf.setText("负数不能求对数");
}
}
elseif(str.equals("%"))
{
tf.setText(df.format(Double.parseDouble(tf.getText())/100));
}
elseif(str.equals("ln"))
{
doublei=Double.parseDouble(tf.getText());
if(i>0)
{
tf.setText(String.valueOf(df.format(Math.log(i))));
}
else
{
tf.setText("负数不能求对数");
}
}
elseif(str.equals("sin"))
{
doublei=Double.parseDouble(tf.getText());
tf.setText(String.valueOf(df.format(Math.sin(i))));
}
elseif(str.equals("cos"))
{
doublei=Double.parseDouble(tf.getText());
tf.setText(String.valueOf(df.format(Math.cos(i))));
}
elseif(str.equals("tan"))
{
doublei=Double.parseDouble(tf.getText());
tf.setText(String.valueOf(df.format(Math.tan(i))));
}
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("无法进行阶乘");
}
}
elseif(str.equals("X^2"))
{
doublei=Double.parseDouble(tf.getText());
tf.setText(String.valueOf(df.format(i*i)));
}
elseif(str.equals("X^3"))
{
doublei=Double.parseDouble(tf.getText());
tf.setText(String.valueOf(df.format(i*i*i)));
}
elseif(str.equals("angle"))
{
doublei=Double.parseDouble(tf.getText());