java程序设计实验报告1计算器.docx

上传人:b****4 文档编号:3990565 上传时间:2022-11-27 格式:DOCX 页数:24 大小:129.83KB
下载 相关 举报
java程序设计实验报告1计算器.docx_第1页
第1页 / 共24页
java程序设计实验报告1计算器.docx_第2页
第2页 / 共24页
java程序设计实验报告1计算器.docx_第3页
第3页 / 共24页
java程序设计实验报告1计算器.docx_第4页
第4页 / 共24页
java程序设计实验报告1计算器.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

java程序设计实验报告1计算器.docx

《java程序设计实验报告1计算器.docx》由会员分享,可在线阅读,更多相关《java程序设计实验报告1计算器.docx(24页珍藏版)》请在冰豆网上搜索。

java程序设计实验报告1计算器.docx

java程序设计实验报告1计算器

 

Java程序设计实验报告

题目计算器

姓名魏艺荣

学号220900428

学院软件学院

专业软件工程

年级2021级

指导教师张舒

 

2021年4月9日

 

一、实验目的

1、纯熟掌握java面向对象编程。

2、选择适宜的数据构造实现需求。

3、纯熟使用各种控制构造。

4、掌握GUI组件、事件处理技术。

 

二、实验任务

1、设计一个简易的计算器,可以进展四那么运算:

加、减、乘、除等〔限于十进制下〕

程序要求:

〔1〕应具有相应的界面,可参考以下图进展设计:

图示1图示2

〔2〕操作符号定为:

“+〞,“-〞,“*〞,“/〞,“(〞,“)〞等。

〔按国际惯例设计〕

〔3〕用户通过点击面板中的各种组件输入的表达式,应在上方文本框中显示。

〔4〕当用户点击“=〞时,文本框中之前的内容应清空,直接显示表达式运算结果。

例如:

输入表达式“3+2*〔8-5〕〞之后按“=〞,显示结果“9〞。

〔5〕具有菜单栏,内有相应的编辑“复制〞、“粘贴〞等菜单,提供相应的功能。

〔6〕以上部分为必须完成的内容。

2、选作功能,可参考windows系统附带计算器:

〔1〕具有相应的科学计算功能。

例如“图示2〞中的各种科学计算功能。

 

三、开发工具与平台

Eclipse默认是一个和Jbuilder类似的Java开发工具,但它不仅仅只是Java开发工具,只要装上相应的插件,eclipse也可作为其它语言的开发工具。

如C/C++插件(CDT)。

 

四、设计思路

1.界面设计

 

〔1〕制作一个简单的面板JFrame,在其上面添加构造界面所需的各种组件

其构造方法为:

calculate(){

super();

this.setBounds(10,10,300,250);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setResizable(false);

this.setTitle("计算器");

init();//创立菜单及各种组件〔如按钮,文本框等〕

getContentPane().setLayout(newBorderLayout(3,3));

getContentPane().add(panelCenter,BorderLayout.CENTER);

getContentPane().add(panelNorth,BorderLayout.NORTH);

 

〔2〕实现构造菜单及文本框等组件的函数init(),如下实现:

PublicvoidInit(){

//菜单项的构造形成;

editor.add(copy);editor.addSeparator();editor.add(paste);

editor.setMnemonic('E');look.setMnemonic('V');help.setMnemonic('H');

copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));

paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));

help.add(about);

bar.add(editor);bar.add(look);bar.add(help);

setJMenuBar(bar);//将菜单添加到JFrame;

/*接下来是文本或结果显示区及Backspace、功能键〔CE、C〕和的添加,采用GridBagLayout布局方式,将它们放在北部panelNorth面板。

其次,是数字键及其他功能键的的使用,我这里采用的是网格布局,setLayout(newGridLayout(4,6,5,5));将它们放在主面板中心区域。

这里给出网格包布布局的两个重要方法,由于代码段较长,故将其他的代码放在后面附录;

privatevoidmakeShow(GridBagLayoutgridBag,

GridBagConstraintsconstraints,Componentcomponent){

gridBag.setConstraints(component,constraints);//网格包布布局;

panelNorth2.add(component);

}

privatevoidaddButton(GridBagLayoutgridBag,//网格包布布局重要方法;

GridBagConstraintsconstraints,Componentcomponent){

gridBag.setConstraints(component,constraints);panelNorth1.add(component);

}

}

 

总体界面如下:

 

为了可以得到我们想要的操作,比方让那些数字参与运算,做什么运算等等,我们就需要为每个按钮添加响应事件,通过响应事件来完成我们预期的结果。

以下我们来分析下重要的事件是如何响应的:

.Stringstr=e.getActionCommand();//TODOAuto-generatedmethodstub

if(str.equals("Backspace")){//点击Backspace

handerBackspace();

}

elseif(str.equals("CE")){//点击了[CE]的功能是去除当前显示的数值

bool=false;

show.setText("0");

}

elseif(str.equals("C")){//点击了C的功能是清零

copyText="";

Div=0.0;

CalculateResult="";

bool=false;

show.setText("0");

}

elseif(str.equals("MC")){//MC清楚存储器内容

handerMC();

}

elseif(str.equals("MR")){//MR将存于存储器的值显示在文本框中

handerMR();

}

elseif(str.equals("MS")){//MS将显示框得文字存于存储器

handerMS();

}

elseif(str.equals("M+")){//M+将显示框的数与存储器中的数相加并进展存储

handerM();

}

elseif("0123456789.".indexOf(str)>=0){//按下的是数字键或者小数点正负号

handerCenter(str);

}

elseif(str.equals("%")){//将当前显示框里的数字用百分比表示〔x/100〕

Stringcurrent=show.getText();

doublea=0;

if(!

current.isEmpty())

a=Double.parseDouble(current);

Doubleresult=(Double)a/100;

Strings4=result.toString();

if(!

isInt(s4))

show.setText(s4);

else{

show.setText(s4.substring(0,s4.indexOf(".")));

}

bool=true;

}

else{

handerOperation(str);//响应的是运算符;处理运算符操作

}

}

}

3.程序测试

程序测试过程中无较大BUG,根本上轻松搞定。

五、实验总结

这是我第一次正式的java程序设计实验,感觉可以把学到的东西用到实际中是件非常有趣的事,更重要的是让我们真正明白了学贵致用的道理。

由于时间有限,本程序未能做到科学计算器,同时在这里也感谢教师的指导和同学的帮助。

 

六、附录

publicclasscalculateextendsJFrameimplementsActionListener{

/**

*@paramargs

*/

privateJMenuBarbar=newJMenuBar();

privateJMenueditor=newJMenu("编辑(E)");

privateJMenuItemcopy=newJMenuItem("复制");

privateJMenuItempaste=newJMenuItem("粘贴");

privateJMenulook=newJMenu("查看(V)");

privateJMenuhelp=newJMenu("帮助(H)");

privateJMenuItemabout=newJMenuItem("关于");

privateStringcopyText;

privateJPanelpanelWest=newJPanel();

privateJPanelpanelCenter=newJPanel();//放Number键

privateJPanelpanelNorth=newJPanel();//放功能键1与文本框

privateJPanelpanelNorth1=newJPanel();

privateJPanelpanelNorth2=newJPanel();//放显示框

privateJPanelpanelEast=newJPanel();//放运算键;

privateString[]strNorth=newString[]{"Backspace","CE","C"};//功能键1

privateString[]strCenter=newString[]{"7","8","9","4","5","6","1","2","3","0","+/-","."};

privateString[]strEast=newString[]{"/","sqrt","*","%","-","1/x","+","="};

privateString[]strWest=newString[]{"MC","MR","MS","M+"};

privateJButton[]buttonCenter=newJButton[strCenter.length];

privateJButton[]buttonEast=newJButton[strEast.length];

privateJButton[]buttonNorth=newJButton[strNorth.length];

privateJButton[]buttonWest=newJButton[strWest.length];

privateStringch=newString();//保存当前运算符

privateDoubleDiv;//保存中间运算数

privateStringsave=newString();//保存存储器中的数值

privateStringCalculateResult=newString();//保存运算结果

privatebooleanbool=false;//当前结果是否为运算结果

privateJTextFieldshow=newJTextField("0",24);//输出显示

privateJTextFieldlabel;

privateGridBagLayoutgridBag=newGridBagLayout();//网格包布布局;

privateGridBagConstraintsconstraints=newGridBagConstraints();

calculate(){

super();

this.setBounds(10,10,300,250);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setResizable(false);

this.setTitle("计算器");

init();

getContentPane().setLayout(newBorderLayout(3,3));

getContentPane().add(panelCenter,BorderLayout.CENTER);

getContentPane().add(panelNorth,BorderLayout.NORTH);

}

publicvoidinit(){

editor.add(copy);editor.addSeparator();editor.add(paste);

editor.setMnemonic('E');look.setMnemonic('V');help.setMnemonic('H');

copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));

paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));

help.add(about);

bar.add(editor);bar.add(look);bar.add(help);

setJMenuBar(bar);

copy.addActionListener(this);

paste.addActionListener(this);

about.addActionListener(this);

panelNorth1.setLayout(gridBag);//

panelNorth2.setLayout(gridBag);

show.setHorizontalAlignment(JTextField.RIGHT);//右对齐;

show.setEditable(false);

panelNorth.setLayout(newBorderLayout());

panelNorth.add(show,BorderLayout.NORTH);

show.setBorder(newBevelBorder(BevelBorder.LOWERED));//让显示框凹陷下去

show.setBackground(Color.WHITE);

//网格包布布局;

constraints.gridx=0;

constraints.gridy=0;

constraints.fill=GridBagConstraints.NONE;

constraints.anchor=GridBagConstraints.CENTER;

makeShow(gridBag,constraints,show);

/*//设置箱式布局间隔(另一种布局方式)

*//box.add(label);

for(inti=0;i

buttonNorth[i]=newJButton(strNorth[i]);

box.add(Box.createHorizontalStrut(10));

box.add(buttonNorth[i]);

buttonNorth[i].addActionListener(this);

buttonNorth[i].setForeground(Color.RED);

}*/

label=newJTextField

(2);

label.setEditable(false);

label.setBorder(newBevelBorder(BevelBorder.LOWERED));//让文本框凹陷下去;

constraints.gridx=0;

constraints.gridy=0;

constraints.fill=GridBagConstraints.NONE;

constraints.insets=newInsets(10,5,10,10);

addButton(gridBag,constraints,label);

for(intj=0;j

buttonNorth[j]=newJButton(strNorth[j]);

buttonNorth[j].addActionListener(this);

buttonNorth[j].setForeground(Color.RED);

constraints.gridx=j+1;

constraints.gridy=0;

addButton(gridBag,constraints,buttonNorth[j]);

}

panelNorth.add(panelNorth1,BorderLayout.CENTER);

panelNorth.add(panelNorth2,BorderLayout.NORTH);

panelCenter.setLayout(newGridLayout(4,6,5,5));

for(inti=0;i

buttonWest[i]=newJButton(strWest[i]);

buttonWest[i].setBorder(newBevelBorder(BevelBorder.RAISED));

buttonWest[i].setForeground(Color.RED);

buttonWest[i].addActionListener(this);

}

for(inti=0;i

buttonCenter[i]=newJButton(strCenter[i]);

buttonCenter[i].setBorder(newBevelBorder(BevelBorder.RAISED));

buttonCenter[i].setForeground(Color.BLUE);

buttonCenter[i].addActionListener(this);

}

for(inti=0;i

buttonEast[i]=newJButton(strEast[i]);

buttonEast[i].setBorder(newBevelBorder(BevelBorder.RAISED));

buttonEast[i].addActionListener(this);

if(i%2==0||(i==7))

buttonEast[i].setForeground(Color.RED);

elsebuttonEast[i].setForeground(Color.BLUE);

}

intw=0,e=0,c=0;

for(inti=0;i<24;){

if(i%6==0){

buttonWest[w].setBorder(newLineBorder(Color.GRAY));

panelCenter.add(buttonWest[w]);

++i;

++w;

}

else{

for(intj=0;j<3;++j){

buttonCenter[c].setBorder(newLineBorder(Color.GRAY));

panelCenter.add(buttonCenter[c]);

++i;

++c;

}

for(intj=0;j<2;++j){

buttonEast[e].setBorder(newLineBorder(Color.GRAY));

panelCenter.add(buttonEast[e]);

++i;

++e;

}

}

}

}

privatevoidmakeShow(GridBagLayoutgridBag,

GridBagConstraintsconstraints,Componentcomponent){

gridBag.setConstraints(component,constraints);//网格包布布局;

panelNorth2.add(component);

}

privatevoidaddButton(GridBagLayoutgridBag,//网格包布布局重要方法;

GridBagConstraintsconstraints,Componentcomponent){

gridBag.setConstraints(component,constraints);//TODOAuto-generatedmethodstubt

panelNorth1.add(component);

}

publicstaticvoidmain(String[]args){

calculatemyCalculte=newcalculate();//TODOAuto-generatedmethodstub

myCalculte.setVisible(true);

}

publicvoidactionPerformed(ActionEvente){

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 自考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1