Java面向对象程序设计设计性实验报告.docx
《Java面向对象程序设计设计性实验报告.docx》由会员分享,可在线阅读,更多相关《Java面向对象程序设计设计性实验报告.docx(21页珍藏版)》请在冰点文库上搜索。
Java面向对象程序设计设计性实验报告
《8251086-Java面向对象程序设计》设计性实验报告
实验题目:
小组成员:
专业年级:
日期:
指导教师:
吴春胤
评分表
评分项
分数
1.小组独立完成的情况
2.程序的功能丰富程度(工作量)
3.程序界面的合理性、友好性
4.程序运行正确性和错误处理能力
5.实验报告格式规范性、内容详细程序、文字表达能力
总评:
评分说明:
1.如果发现抄袭现象或不按时提交实验报告,可直接评定为不合格。
2.先按单项评分,再求各项的平均分,再定总评等级。
总评分为:
优、良、中、及格和不及格。
标准计算器
1、系统目标
开发一个界面和谐,简单易用的标准计算器,实现基本的四则运算和求余、取反、求倒数、开根号等功能。
2、基本功能
a.0-9等10个数字键,实现输入数字;
b.“+”、“-”、“*”、“/”四个功能键,实现输入数字的四则运算;
c.“√”、“%”、“1/X”、“+/-”四个功能键,分别实现输入数字的开根号、求余、求倒数、取相反数的功能;
d.“Backspace”、“CE”、“C”三个功能键,分别实现退格、删除、归零的功能。
3、系统设计
在第一部分完成添加按钮以及面板设计与整合,第二部分实现各算法的具体实现过程,第三部分定义接口的具体内容,显示说明窗,第四部分主方法定义主界面的属性。
具体实现方法参考以下代码及说明注解。
第一部分:
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.JOptionPane;
publicclassCalculatorextendsJFrameimplementsActionListener{
//按钮的定义
JButtonn1,n2,n3,n4,n5,n6,n7,n8,n9,n0,
t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,
m1,m2,m3,s1,s2,s3,s4,s5;
JTextFieldjtextfield;
//计算器界面的布局以及添加监听器
publicCalculator(){
//添加第一个面板,存放数字键跟运算键
JPanelp1=newJPanel();
Fontfont=newFont("楷体",Font.BOLD,20);
p1.setLayout(newGridLayout(4,5,10,10));
n1=newJButton("7");n1.setFont(font);
p1.add(n1);n1.addActionListener(this);
n2=newJButton("8");n2.setFont(font);
p1.add(n2);n2.addActionListener(this);
n3=newJButton("9");n3.setFont(font);
p1.add(n3);n3.addActionListener(this);
t1=newJButton("/");t1.setFont(font);
p1.add(t1);t1.addActionListener(this);
t2=newJButton("√");t2.setFont(font);
p1.add(t2);t2.addActionListener(this);
n4=newJButton("4");n4.setFont(font);
p1.add(n4);n4.addActionListener(this);
n5=newJButton("5");n5.setFont(font);
p1.add(n5);n5.addActionListener(this);
n6=newJButton("6");n6.setFont(font);
p1.add(n6);n6.addActionListener(this);
t3=newJButton("*");t3.setFont(font);
p1.add(t3);t3.addActionListener(this);
t4=newJButton("%");t4.setFont(font);
p1.add(t4);t4.addActionListener(this);
n7=newJButton("1");n7.setFont(font);
p1.add(n7);n7.addActionListener(this);
n8=newJButton("2");n8.setFont(font);
p1.add(n8);n8.addActionListener(this);
n9=newJButton("3");n9.setFont(font);
p1.add(n9);n9.addActionListener(this);
t5=newJButton("-");t5.setFont(font);
p1.add(t5);t5.addActionListener(this);
t6=newJButton("1/x");t6.setFont(font);
p1.add(t6);t6.addActionListener(this);
n0=newJButton("0");n0.setFont(font);
p1.add(n0);n0.addActionListener(this);
t7=newJButton("+/-");t7.setFont(font);
p1.add(t7);t7.addActionListener(this);
t8=newJButton(".");t8.setFont(font);
p1.add(t8);t8.addActionListener(this);
t9=newJButton("+");t9.setFont(font);
p1.add(t9);t9.addActionListener(this);
t10=newJButton("=");t10.setFont(font);
p1.add(t10);t10.addActionListener(this);
//添加第二个面板,存放退格,归零等功能键
JPanelp2=newJPanel();
p2.setLayout(newGridLayout(1,3,10,10));
m1=newJButton("Backspace");m1.setFont(font);
p2.add(m1);m1.addActionListener(this);
m2=newJButton("CE");m2.setFont(font);
p2.add(m2);m2.addActionListener(this);
m3=newJButton("C");m3.setFont(font);
p2.add(m3);m3.addActionListener(this);
//添加第三个面板,整合第一跟第二个面板
JPanelp3=newJPanel(newBorderLayout(10,10));
p3.add(p1,BorderLayout.CENTER);
p3.add(p2,BorderLayout.NORTH);
//添加第四个面板,添加四个功能键
JPanelp4=newJPanel();
p4.setLayout(newGridLayout(4,1,10,10));
s1=newJButton("MC");s1.setFont(font);
p4.add(s1);s1.addActionListener(this);
s2=newJButton("MR");s2.setFont(font);
p4.add(s2);s2.addActionListener(this);
s3=newJButton("MS");s3.setFont(font);
p4.add(s3);s3.addActionListener(this);
s4=newJButton("M+");s4.setFont(font);
p4.add(s4);s4.addActionListener(this);
//添加第五个面板,存放说明键
JPanelp5=newJPanel();
p5.setLayout(newGridLayout(1,1,10,10));
s5=newJButton("说明");
ExplainClasslistenerExplain=newExplainClass();
s5.addActionListener(listenerExplain);
p5.add(s5);
//添加第六个面板,整合第四跟第五个面板
JPanelp6=newJPanel(newBorderLayout(10,10));
p6.add(p4,BorderLayout.CENTER);
p6.add(p5,BorderLayout.NORTH);
//添加第七个面板,整合以上六个面板
JPanelp7=newJPanel(newBorderLayout(10,10));
p7.add(p3,BorderLayout.CENTER);
p7.add(p6,BorderLayout.WEST);
setLayout(newBorderLayout(10,10));
add(p7,BorderLayout.CENTER);
jtextfield=newJTextField();
jtextfield.setEnabled(false);
jtextfield.setHorizontalAlignment(JTextField.RIGHT);
jtextfield.setFont(font);
add(jtextfield,BorderLayout.NORTH);
}
第二部分:
//实现功能键的方法
publicvoidactionPerformed(ActionEvente){
Objecttarget=e.getSource();
Stringconstant=e.getActionCommand();
if("0123456789.".indexOf(constant)>0||"0123456789.".indexOf(constant)==0)
Number(constant);//判断输入的第一个数是否为数字
elseif(target==t7)
isAS();//对输入的数字取反
elseif(target==t6){
jtextfield.setText(""+(1.0/(Double.parseDouble(jtextfield.getText()))));//对输入的数字取倒数
}
elseif(target==t2){
jtextfield.setText(""+Math.sqrt(Double.parseDouble(jtextfield.getText())));//对输入的数字开根号
}
elseif(target==m1)
isBackspace();//调用退格方法
elseif(target==m2)
isCE();
elseif(target==m3)
isC();
elseif(target==s1)
isMC();
elseif(target==s2)
isMR();
elseif(target==s3)
isMS();
elseif(target==s4)
isMA();
else
Result(constant);
}
booleanisFirstDigit=true;
//判断第一个输入的字符是否为数字
publicvoidNumber(Stringbutton){
if(isFirstDigit)
jtextfield.setText(button);
elseif((button.equals("."))&&(jtextfield.getText().indexOf(".")<0))
jtextfield.setText(jtextfield.getText()+".");
elseif(!
button.equals("."))
jtextfield.setText(jtextfield.getText()+button);
isFirstDigit=false;
}
//退格方法的具体实现过程
publicvoidisBackspace(){
Stringtemp=jtextfield.getText();
intk=temp.length();
if(k!
=0){
temp=temp.substring(0,k-1);
jtextfield.setText(temp);
}elsejtextfield.setText("0");
}
publicvoidisCE(){
jtextfield.setText("0");
isFirstDigit=true;
}
//归零方法的具体实现过程
publicvoidisC(){
jtextfield.setText("0");
isFirstDigit=true;
Mnumber=0;
if(M)
s5.setText(String.valueOf(Mnumber));
}
doubleMnumber=0;
booleanM=false;
publicvoidisMC(){
Mnumber=0;
s5.setText(String.valueOf(Mnumber));
M=true;
}
publicvoidisMR(){
Stringlen=String.valueOf(Mnumber);
intk=len.length();
if(k>7)
JOptionPane.showMessageDialog(null,"具体数字为:
"
+Mnumber,"缓存区数字过长",JOptionPane.INFORMATION_MESSAGE);
else
s5.setText(String.valueOf(Mnumber));M=true;
}
publicvoidisMS(){
Mnumber-=Double.valueOf(jtextfield.getText());
s5.setText("M-");M=true;
}
publicvoidisMA(){
Mnumber+=Double.valueOf(jtextfield.getText());
s5.setText("M+");M=true;
}
publicvoidisAS(){
doubleOnumber=-Double.valueOf(jtextfield.getText());
jtextfield.setText(String.valueOf(Onumber));
}
doublenumber=0;
Stringoperator="=";
publicvoidResult(Stringbutton){
if(operator.equals("+"))
number+=Double.valueOf(jtextfield.getText());
elseif(operator.equals("-"))
number-=Double.valueOf(jtextfield.getText());
elseif(operator.equals("*"))
number*=Double.valueOf(jtextfield.getText());
elseif(operator.equals("/")){
if(Double.valueOf(jtextfield.getText())==0){
jtextfield.setText("");
JOptionPane.showMessageDialog(null,"分母输入违法",
"标准计算器",JOptionPane.ERROR_MESSAGE);}
else
number/=Double.valueOf(jtextfield.getText());
}
elseif(operator.equals("="))
number=Double.valueOf(jtextfield.getText());
elseif(operator.equals("1/x"))
number=1/Double.valueOf(jtextfield.getText());
elseif(operator.equals("sqrt"))
number=Math.sqrt(Double.valueOf(jtextfield.getText()));
elseif(operator.equals("%"))
number%=Double.valueOf(jtextfield.getText());
jtextfield.setText(String.valueOf(number));
operator=button;
isFirstDigit=true;
}
}
第三部分:
//添加一个接口,显示说明内容的窗口
classExplainClassimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
Stringoutput="说明:
"+"此计算器由陈景伦和王永晶共同开发。
"+"\n"+"①MC,MR,MS,M+功能键正在开发中,敬请期待。
"
+"\n"+"②因为时间紧迫,在测试中还存在一些问题;"
+"\n"+"③按键功能说明:
"
+"\n"+"C:
归零,清除当前的计算;"
+"\n"+"+/-:
对输入数字取相反数;"+"\n"+"√:
开平方;"
+"\n"+"%:
对计算结果求余;"+"\n"+"1/x:
求倒数";
JOptionPane.showMessageDialog(null,output,"说明",JOptionPane.DEFAULT_OPTION);
}
}
第四部分:
//主方法publicstaticvoidmain(String[]args){
Calculatorframe=newCalculator();
frame.setTitle("标准计算器");
frame.setSize(500,300);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
4、系统的程序结构
Calculator
n1:
JButton
n2:
JButton
n3:
JButton
n4:
JButton
n5:
JButton
n6:
JButton
n7:
JButton
n8:
JButton
n9:
JButton
n0:
JButton
t1:
JButton
t2:
JButton
t3:
JButton
t4:
JButton
t5:
JButton
t6:
JButton
t7:
JButton
t8:
JButton
t9:
JButton
t10:
JButton
m1:
JButton
m2:
JButton
m3:
JButton
s1:
JButton
s2:
JButton
s3:
JButton
s4:
JButton
jtextfield:
JTextField
+Calculator()
+main(args:
String[]):
void
ExplainClass()
+actionPerformed(e:
ActionEvent):
void
+Number(button:
String):
void
+isAS():
void
+isBackspace():
void
+isCE():
void
+isC():
void
+isMC():
void
+isMR():
void
+isMS():
void
+isMA():
void
number:
double
operator:
String
+Result(button:
String):
void
ActionListener
ExplainClass
+actionPerformed(e:
ActionEvent):
void
5、系统测试
以下将演示各个功能的实现,虽然在测试过程中仍存在许多没有发现的BUG,但在后续的学习中我们会陆续改进。
1.数字界面显示:
2.(加法测试)依次按下“10”“+”“3”“=”按钮,屏幕结果显示如图:
3.(减法测试)依次按下“10”“-”“6”“=”按钮,屏幕结果显示如图:
4.(乘法测试)依次按下“2”“*”“7”“=”按钮,屏幕结果显示如图:
5.(除法测试)依次按下“10”“/”“2”“=”按钮,屏幕结果显示如图:
6.(根号测试)依次按下“9”“√”“=”按钮,屏幕结果显示如图:
7.(求余测试)依次按下“