java程序设计实验报告1计算器.docx
《java程序设计实验报告1计算器.docx》由会员分享,可在线阅读,更多相关《java程序设计实验报告1计算器.docx(24页珍藏版)》请在冰豆网上搜索。
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;ibuttonNorth[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;jbuttonNorth[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;ibuttonWest[i]=newJButton(strWest[i]);
buttonWest[i].setBorder(newBevelBorder(BevelBorder.RAISED));
buttonWest[i].setForeground(Color.RED);
buttonWest[i].addActionListener(this);
}
for(inti=0;ibuttonCenter[i]=newJButton(strCenter[i]);
buttonCenter[i].setBorder(newBevelBorder(BevelBorder.RAISED));
buttonCenter[i].setForeground(Color.BLUE);
buttonCenter[i].addActionListener(this);
}
for(inti=0;ibuttonEast[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){