java课程设计 计算器含全部代码.docx
《java课程设计 计算器含全部代码.docx》由会员分享,可在线阅读,更多相关《java课程设计 计算器含全部代码.docx(92页珍藏版)》请在冰豆网上搜索。
java课程设计计算器含全部代码
课程设计报告
设计名称:
面向对象课程设计
选题名称:
计算器的设计与实现
姓名:
学号:
专业班级:
软件工程软件121
系(院):
计算机工程学院
设计时间:
设计地点:
软件实验室、教室
成绩:
指导教师评语:
签名:
年月日
1.课程设计目的
《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。
其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力。
2.课程设计任务与要求:
课程设计可选用NetBeans、Eclipse、JBuilder等作为开发平台以提高开发效率,尽可能熟练掌握其中一种集成开发环境。
建议采用UML建模技术进行系统的分析设计,在Visio中画出系统用例图和类图,并将UML图复制到设计报告中。
设计一个能实现计算器功能的Java程序,可以进行加、减、乘、除(另外可适当加上阶乘、正弦、余弦和指数)运算。
3.课程设计说明书
3.1用户需求
本次设计的是计算器,可以实现计算器的基本功能,在使用计算器时很多人容易忘掉之前是用8*2呢还是6*2,于是这个计算器多出历史检验的功能,可以将以前的式子显示在下方,一边检验正确与否,而且在运算完成后可以轻松点击历史显示调用结果。
图1.用例图
3.2详细设计
3.2.1类图
MultipleOperation类,用来实现连续运算的类
MultipleOperation
trans:
String
+operation(expr:
String)
用户类图
(1)
Listl类,用来记录历史的类
list
Str:
Estr:
flag:
+toString()
(2)
4.设计成果
4.1主要代码
(1)按键响应以及转换进制代码:
(2)运算
主要代码如下:
(3)将历史写入列表
代码如下:
4调试分析
开始时,在一次运算结束后,再次点击数字后,会在上次的结果后面直接接续,所以我定义intClearNumber;用来判定是否进行了运算,这样在运算后如果点击数字就是新的运算,如果点击运算符号则直接继续上次的结果继续运算
写了一个判定,
遇到的问题还有就是转换进制时,在运算后是有小数点的,所以利用ClearNumber再次做判定,如果式运算后则把“.”和它之后的去掉,转换前面的数,转换进制只有转换整数的功能,未写转换小数的方法,所以就算用户转换一个小数比如3.9则自动去掉小数部分转换3。
还有就是开始用Vectordata=newVector()泛型数据存入数组加入列表,发现存写入的数据不是更新的而是将同一个数据多次的写入列表,后来将泛型数据改为String型就正确了,但是让我沮丧的是我还是不知道为什么。
完整代码:
Calculator类:
/*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packageCalculator;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.event.*;
/**
*
*@authorhp
classCalculatorextendsJFrame
{
privatefinalFontBIGGER_FONT=newFont("monspaced",Font.PLAIN,20);
privateJTextFieldtextfield;
privatebooleannumber=true;
privateStringequalOp="=";
privateCalculatorOpop=newCalculatorOp();
publicCalculator()
textfield=newJTextField("0",12);
textfield.setHorizontalAlignment(JTextField.RIGHT);
textfield.setFont(BIGGER_FONT);
ActionListenernumberListener=newNumberListener();
StringbuttonOrder="1234567890";
JPanelbuttonPanel=newJPanel();
buttonPanel.setLayout(newGridLayout(4,4,4,4));
for(inti=0;i{Stringkey=buttonOrder.substring(i,i+1);if(key.equals("")){buttonPanel.add(newJLabel(""));}else{JButtonbutton=newJButton(key);button.addActionListener(numberListener);button.setFont(BIGGER_FONT);buttonPanel.add(button);}} ActionListeneroperatorListener=newOperatorListener();JPanelpanel=newJPanel();panel.setLayout(newGridLayout(4,4,4,4));String[]opOrder={"+","-","*","/","=","C"};for(inti=0;i{JButtonbutton=newJButton(opOrder[i]);button.addActionListener(operatorListener);button.setFont(BIGGER_FONT);panel.add(button);}JPanelpan=newJPanel();pan.setLayout(newBorderLayout(4,4));pan.add(textfield,BorderLayout.NORTH);pan.add(buttonPanel,BorderLayout.CENTER);pan.add(panel,BorderLayout.EAST);this.setContentPane(pan);this.pack();this.setTitle("Calculator");this.setResizable(false);this.setAlwaysOnTop(true);}privatevoidaction(){number=true;textfield.setText("0");equalOp="=";op.setTotal("0");}classOperatorListenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){if(number){action();textfield.setText("0");}else{number=true;StringdisplayText=textfield.getText();if(equalOp.equals("=")){op.setTotal(displayText);}elseif(equalOp.equals("+")){op.add(displayText);}elseif(equalOp.equals("-")){op.subtract(displayText);}elseif(equalOp.equals("*")){op.multiply(displayText);}elseif(equalOp.equals("/")){op.divide(displayText);}textfield.setText(""+op.getTotalString());equalOp=e.getActionCommand();}}}classNumberListenerimplementsActionListener{publicvoidactionPerformed(ActionEventevent){Stringdigit=event.getActionCommand();if(number){textfield.setText(digit);number=false;}else{textfield.setText(textfield.getText()+digit);}}}publicclassCalculatorOp{privatedoubletotal;publicCalculatorOp(){total=0;}publicStringgetTotalString(){return""+total;}publicvoidsetTotal(Stringn){total=convertToNumber(n);}publicvoidadd(Stringn){total+=convertToNumber(n);}publicvoidsubtract(Stringn){total-=convertToNumber(n);}publicvoidmultiply(Stringn){total*=convertToNumber(n);}publicvoiddivide(Stringn){total/=convertToNumber(n);}privatedoubleconvertToNumber(Stringn){returnDouble.parseDouble(n);}}}2CalcuOp类/**Tochangethistemplate,chooseTools|Templates*andopenthetemplateintheeditor.*/packageCalculator;/****@authorstudent*/publicclassCalcuOp{Stringdisp; privatedoubletotal;publicCalcuOp(){disp="";total=0;}publicStringgetTotalString(){return""+total;}publicvoidsetTotal(Stringn){total=convertToNumber(n);}publicvoidadd(Stringn){total+=convertToNumber(n);}publicvoidsubtract(Stringn){total-=convertToNumber(n);}publicvoidmultiply(Stringn){total*=convertToNumber(n);}publicvoiddivide(Stringn){total/=convertToNumber(n);}privatedoubleconvertToNumber(Stringn){returnDouble.parseDouble(n);}}3fram类/**Tochangethistemplate,chooseTools|Templates*andopenthetemplateintheeditor.*//**fram.java**Createdon2014-4-11,15:15:10*/packageCalculator;importjava.awt.event.*; /****@authorstudent*/publicclassframextendsjavax.swing.JFrame{privatebooleannumber=true;privateStringequalOp="=";//privateCalculatorOpop=newCalculatorOp();CalcuOpop;ActionListeneroperatorListener=newOperatorListener();StringdisplayText="";StringdisplayText2="";/**Createsnewformfram*/publicfram(){initComponents();this.setVisible(true);}/*classNumberListenerimplementsActionListener{publicvoidactionPerformed(ActionEventevent){Stringdigit=event.getActionCommand();if(number){textfield.setText(digit);number=false;}else{textfield.setText(textfield.getText()+digit);}}}*/privatevoidaction(){number=true;textfield.setText("0");equalOp="=";op.setTotal("0");}//运算的响应classOperatorListenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){if(number){action();textfield.setText("0");}else{number=true;StringdisplayText=textfield.getText();if(equalOp.equals("=")){op.setTotal(displayText);/*history.C=displayText;hislist.add(history);data.addElement(history);jlist.setListData(data);*/}elseif(equalOp.equals("+")){op.add(displayText);}elseif(equalOp.equals("-")){op.subtract(displayText);}elseif(equalOp.equals("*")){op.multiply(displayText);}elseif(equalOp.equals("/")){op.divide(displayText);}textfield.setText(""+op.getTotalString());equalOp=e.getActionCommand();}}}/*publicclassCalculatorOp{privatedoubletotal;publicCalculatorOp(){total=0;}publicStringgetTotalString(){return""+total;}publicvoidsetTotal(Stringn){total=convertToNumber(n);}publicvoidadd(Stringn){total+=convertToNumber(n);}publicvoidsubtract(Stringn){total-=convertToNumber(n);}publicvoidmultiply(Stringn){total*=convertToNumber(n);}publicvoiddivide(Stringn){total/=convertToNumber(n);}privateintconvertToNumber(Stringn){returnInteger.parseInt(n);}}*//**Thismethodiscalledfromwithintheconstructorto*initializetheform.*WARNING:DoNOTmodifythiscode.Thecontentofthismethodis*alwaysregeneratedbytheFormEditor.*/@SuppressWarnings("unchecked")////GEN-BEGIN:initComponentsprivatevoidinitComponents(){textfield=newjavax.swing.JTextField();btnNum1=newjavax.swing.JButton();btnNum2=newjavax.swing.JButton();btnNum3=newjavax.swing.JButton();btnNum4=newjavax.swing.JButton();btnNum5=newjavax.swing.JButton();btnNum6=newjavax.swing.JButton();btnNum7=newjavax.swing.JButton();btnNum8=newjavax.swing.JButton();btnNum9=newjavax.swing.JButton();jScrollPane1=newjavax.swing.JScrollPane();jTextArea1=newjavax.swing.JTextArea();btnNum0=newjavax.swing.JButton();btnSubtract=newjavax.swing.JButton();btnMultiply=newjavax.swing.JButton();btnDivide=newjavax.swing.JButton();btnClear=newjavax.swing.JButton();btnAdd=newjavax.swing.JButton();btnEqual=newjavax.swing.JButton();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);setAlwaysOnTop(true);setBackground(newjava.awt.Color(153,255,255));setCursor(newjava.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));btnNum1.setText("1");btnNum1.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){btnNum1ActionPerformed(evt);}});btnNum2.setText("2");btnNum2.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){btnNum2ActionPerformed(evt);}});btnN
Stringkey=buttonOrder.substring(i,i+1);
if(key.equals(""))
buttonPanel.add(newJLabel(""));
}
else
JButtonbutton=newJButton(key);
button.addActionListener(numberListener);
button.setFont(BIGGER_FONT);
buttonPanel.add(button);
ActionListeneroperatorListener=newOperatorListener();
JPanelpanel=newJPanel();
panel.setLayout(newGridLayout(4,4,4,4));
String[]opOrder={"+","-","*","/","=","C"};
for(inti=0;i{JButtonbutton=newJButton(opOrder[i]);button.addActionListener(operatorListener);button.setFont(BIGGER_FONT);panel.add(button);}JPanelpan=newJPanel();pan.setLayout(newBorderLayout(4,4));pan.add(textfield,BorderLayout.NORTH);pan.add(buttonPanel,BorderLayout.CENTER);pan.add(panel,BorderLayout.EAST);this.setContentPane(pan);this.pack();this.setTitle("Calculator");this.setResizable(false);this.setAlwaysOnTop(true);}privatevoidaction(){number=true;textfield.setText("0");equalOp="=";op.setTotal("0");}classOperatorListenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){if(number){action();textfield.setText("0");}else{number=true;StringdisplayText=textfield.getText();if(equalOp.equals("=")){op.setTotal(displayText);}elseif(equalOp.equals("+")){op.add(displayText);}elseif(equalOp.equals("-")){op.subtract(displayText);}elseif(equalOp.equals("*")){op.multiply(displayText);}elseif(equalOp.equals("/")){op.divide(displayText);}textfield.setText(""+op.getTotalString());equalOp=e.getActionCommand();}}}classNumberListenerimplementsActionListener{publicvoidactionPerformed(ActionEventevent){Stringdigit=event.getActionCommand();if(number){textfield.setText(digit);number=false;}else{textfield.setText(textfield.getText()+digit);}}}publicclassCalculatorOp{privatedoubletotal;publicCalculatorOp(){total=0;}publicStringgetTotalString(){return""+total;}publicvoidsetTotal(Stringn){total=convertToNumber(n);}publicvoidadd(Stringn){total+=convertToNumber(n);}publicvoidsubtract(Stringn){total-=convertToNumber(n);}publicvoidmultiply(Stringn){total*=convertToNumber(n);}publicvoiddivide(Stringn){total/=convertToNumber(n);}privatedoubleconvertToNumber(Stringn){returnDouble.parseDouble(n);}}}2CalcuOp类/**Tochangethistemplate,chooseTools|Templates*andopenthetemplateintheeditor.*/packageCalculator;/****@authorstudent*/publicclassCalcuOp{Stringdisp; privatedoubletotal;publicCalcuOp(){disp="";total=0;}publicStringgetTotalString(){return""+total;}publicvoidsetTotal(Stringn){total=convertToNumber(n);}publicvoidadd(Stringn){total+=convertToNumber(n);}publicvoidsubtract(Stringn){total-=convertToNumber(n);}publicvoidmultiply(Stringn){total*=convertToNumber(n);}publicvoiddivide(Stringn){total/=convertToNumber(n);}privatedoubleconvertToNumber(Stringn){returnDouble.parseDouble(n);}}3fram类/**Tochangethistemplate,chooseTools|Templates*andopenthetemplateintheeditor.*//**fram.java**Createdon2014-4-11,15:15:10*/packageCalculator;importjava.awt.event.*; /****@authorstudent*/publicclassframextendsjavax.swing.JFrame{privatebooleannumber=true;privateStringequalOp="=";//privateCalculatorOpop=newCalculatorOp();CalcuOpop;ActionListeneroperatorListener=newOperatorListener();StringdisplayText="";StringdisplayText2="";/**Createsnewformfram*/publicfram(){initComponents();this.setVisible(true);}/*classNumberListenerimplementsActionListener{publicvoidactionPerformed(ActionEventevent){Stringdigit=event.getActionCommand();if(number){textfield.setText(digit);number=false;}else{textfield.setText(textfield.getText()+digit);}}}*/privatevoidaction(){number=true;textfield.setText("0");equalOp="=";op.setTotal("0");}//运算的响应classOperatorListenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){if(number){action();textfield.setText("0");}else{number=true;StringdisplayText=textfield.getText();if(equalOp.equals("=")){op.setTotal(displayText);/*history.C=displayText;hislist.add(history);data.addElement(history);jlist.setListData(data);*/}elseif(equalOp.equals("+")){op.add(displayText);}elseif(equalOp.equals("-")){op.subtract(displayText);}elseif(equalOp.equals("*")){op.multiply(displayText);}elseif(equalOp.equals("/")){op.divide(displayText);}textfield.setText(""+op.getTotalString());equalOp=e.getActionCommand();}}}/*publicclassCalculatorOp{privatedoubletotal;publicCalculatorOp(){total=0;}publicStringgetTotalString(){return""+total;}publicvoidsetTotal(Stringn){total=convertToNumber(n);}publicvoidadd(Stringn){total+=convertToNumber(n);}publicvoidsubtract(Stringn){total-=convertToNumber(n);}publicvoidmultiply(Stringn){total*=convertToNumber(n);}publicvoiddivide(Stringn){total/=convertToNumber(n);}privateintconvertToNumber(Stringn){returnInteger.parseInt(n);}}*//**Thismethodiscalledfromwithintheconstructorto*initializetheform.*WARNING:DoNOTmodifythiscode.Thecontentofthismethodis*alwaysregeneratedbytheFormEditor.*/@SuppressWarnings("unchecked")////GEN-BEGIN:initComponentsprivatevoidinitComponents(){textfield=newjavax.swing.JTextField();btnNum1=newjavax.swing.JButton();btnNum2=newjavax.swing.JButton();btnNum3=newjavax.swing.JButton();btnNum4=newjavax.swing.JButton();btnNum5=newjavax.swing.JButton();btnNum6=newjavax.swing.JButton();btnNum7=newjavax.swing.JButton();btnNum8=newjavax.swing.JButton();btnNum9=newjavax.swing.JButton();jScrollPane1=newjavax.swing.JScrollPane();jTextArea1=newjavax.swing.JTextArea();btnNum0=newjavax.swing.JButton();btnSubtract=newjavax.swing.JButton();btnMultiply=newjavax.swing.JButton();btnDivide=newjavax.swing.JButton();btnClear=newjavax.swing.JButton();btnAdd=newjavax.swing.JButton();btnEqual=newjavax.swing.JButton();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);setAlwaysOnTop(true);setBackground(newjava.awt.Color(153,255,255));setCursor(newjava.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));btnNum1.setText("1");btnNum1.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){btnNum1ActionPerformed(evt);}});btnNum2.setText("2");btnNum2.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){btnNum2ActionPerformed(evt);}});btnN
JButtonbutton=newJButton(opOrder[i]);
button.addActionListener(operatorListener);
panel.add(button);
JPanelpan=newJPanel();
pan.setLayout(newBorderLayout(4,4));
pan.add(textfield,BorderLayout.NORTH);
pan.add(buttonPanel,BorderLayout.CENTER);
pan.add(panel,BorderLayout.EAST);
this.setContentPane(pan);
this.pack();
this.setTitle("Calculator");
this.setResizable(false);
this.setAlwaysOnTop(true);
privatevoidaction()
number=true;
textfield.setText("0");
equalOp="=";
op.setTotal("0");
classOperatorListenerimplementsActionListener{
publicvoidactionPerformed(ActionEvente){
if(number){
action();
}else{
StringdisplayText=textfield.getText();
if(equalOp.equals("=")){
op.setTotal(displayText);
}elseif(equalOp.equals("+")){
op.add(displayText);
}elseif(equalOp.equals("-")){
op.subtract(displayText);
}elseif(equalOp.equals("*")){
op.multiply(displayText);
}elseif(equalOp.equals("/")){
op.divide(displayText);
textfield.setText(""+op.getTotalString());
equalOp=e.getActionCommand();
classNumberListenerimplementsActionListener{
publicvoidactionPerformed(ActionEventevent){
Stringdigit=event.getActionCommand();
textfield.setText(digit);
number=false;
textfield.setText(textfield.getText()+digit);
publicclassCalculatorOp{
privatedoubletotal;
publicCalculatorOp(){
total=0;
publicStringgetTotalString(){
return""+total;
publicvoidsetTotal(Stringn){
total=convertToNumber(n);
publicvoidadd(Stringn){
total+=convertToNumber(n);
publicvoidsubtract(Stringn){
total-=convertToNumber(n);
publicvoidmultiply(Stringn){
total*=convertToNumber(n);
publicvoiddivide(Stringn){
total/=convertToNumber(n);
privatedoubleconvertToNumber(Stringn){
returnDouble.parseDouble(n);
2CalcuOp类
*@authorstudent
publicclassCalcuOp{
Stringdisp;
publicCalcuOp(){
disp="";
3fram类
*fram.java
*Createdon2014-4-11,15:
15:
10
publicclassframextendsjavax.swing.JFrame{
//privateCalculatorOpop=newCalculatorOp();
CalcuOpop;
StringdisplayText="";
StringdisplayText2="";
/**Createsnewformfram*/
publicfram(){
initComponents();
this.setVisible(true);
/*classNumberListenerimplementsActionListener{
}*/
privatevoidaction(){
//运算的响应
if(equalOp.equals("="))
/*history.C=displayText;
hislist.add(history);
data.addElement(history);
jlist.setListData(data);*/
/*publicclassCalculatorOp{
privateintconvertToNumber(Stringn){
returnInteger.parseInt(n);
/**Thismethodiscalledfromwithintheconstructorto
*initializetheform.
*WARNING:
DoNOTmodifythiscode.Thecontentofthismethodis
*alwaysregeneratedbytheFormEditor.
@SuppressWarnings("unchecked")
////GEN-BEGIN:
initComponents
privatevoidinitComponents(){
textfield=newjavax.swing.JTextField();
btnNum1=newjavax.swing.JButton();
btnNum2=newjavax.swing.JButton();
btnNum3=newjavax.swing.JButton();
btnNum4=newjavax.swing.JButton();
btnNum5=newjavax.swing.JButton();
btnNum6=newjavax.swing.JButton();
btnNum7=newjavax.swing.JButton();
btnNum8=newjavax.swing.JButton();
btnNum9=newjavax.swing.JButton();
jScrollPane1=newjavax.swing.JScrollPane();
jTextArea1=newjavax.swing.JTextArea();
btnNum0=newjavax.swing.JButton();
btnSubtract=newjavax.swing.JButton();
btnMultiply=newjavax.swing.JButton();
btnDivide=newjavax.swing.JButton();
btnClear=newjavax.swing.JButton();
btnAdd=newjavax.swing.JButton();
btnEqual=newjavax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setAlwaysOnTop(true);
setBackground(newjava.awt.Color(153,255,255));
setCursor(newjava.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
btnNum1.setText("1");
btnNum1.addActionListener(newjava.awt.event.ActionListener(){
publicvoidactionPerformed(java.awt.event.ActionEventevt){
btnNum1ActionPerformed(evt);
});
btnNum2.setText("2");
btnNum2.addActionListener(newjava.awt.event.ActionListener(){
btnNum2ActionPerformed(evt);
btnN
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1