模拟科学计算器课程设计手稿Word文件下载.docx
《模拟科学计算器课程设计手稿Word文件下载.docx》由会员分享,可在线阅读,更多相关《模拟科学计算器课程设计手稿Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
C
MC
X^2
X^3
7
8
9
/
MR
N!
sqrt
4
5
6
*
MS
sin
ln
1
2
3
-
M+
cos
log
.
-/+
+
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("
menuC.setFont(newFont("
//**编辑栏**//
ed1=newJMenuItem("
复制(C)Ctrl+C"
ed2=newJMenuItem("
粘贴(P)Ctrl+V"
ed1.setFont(newFont("
ed2.setFont(newFont("
//**查看栏**//
seeItem1=newJRadioButtonMenuItem("
标准型(S)Alt+1"
seeItem2=newJRadioButtonMenuItem("
科学型(T)Alt+2"
seeItem3=newJCheckBoxMenuItem("
数字分组(I)"
seeItem1.setFont(newFont("
seeItem2.setFont(newFont("
seeItem3.setFont(newFont("
//**帮助栏**//
help1=newJMenuItem("
查看主题(V)F1"
help2=newJMenuItem("
关于计算器(A)"
help1.setFont(newFont("
help2.setFont(newFont("
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);
CE"
C"
addButton(panelB,"
X^2"
newSigns(),Color.magenta);
X^3"
7"
numActionListener,Color.blue);
8"
9"
/"
newSigns(),Color.black);
"
sqrt"
4"
5"
6"
*"
sin"
ln"
1"
2"
3"
-"
addButton(panelB,"
cos"
log10"
."
newDot(),Color.blue);
-/+"
newClear(),Color.blue);
+"
tan"
%"
π"
numActionListener,Color.green);
Exp"
angle"
newSigns(),Color.green);
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);
MR"
MS"
M+"
M-"
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;
){result*=x;
){result/=x;
){result=x;
tf.setText(df.format(result));
/**运算符号事件监听**/
classSignsimplementsActionListener
publicvoidactionPerformed(ActionEvente)
{
Stringstr=e.getActionCommand();
if(str.equals("
))
{
doublei=Double.parseDouble(tf.getText());
if(i>
=0){tf.setText(String.valueOf(df.format(Math.sqrt(i))));
else{tf.setText("
负数不能开平方"
}
elseif(str.equals("
0)
{
tf.setText(String.valueOf(df.format(Math.log10(i))));
}
else
tf.setText("
负数不能求对数"
tf.setText(df.format(Double.parseDouble(tf.getText())/100));
tf.setText(String.valueOf(df.format(Math.log(i))));
tf.setText(String.valueOf(df.format(Math.sin(i))));
tf.setText(String.valueOf(df.format(Math.cos(i))));
tf.setText(String.valueOf(df.format(Math.tan(i))));
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("
无法进行阶乘"
tf.setText(String.valueOf(df.format(i*i)));
tf.setText(String.valueOf(df.format(i*i*i)));