标准型计算器版开发过程.docx
- 文档编号:8823274
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:14
- 大小:32.59KB
标准型计算器版开发过程.docx
《标准型计算器版开发过程.docx》由会员分享,可在线阅读,更多相关《标准型计算器版开发过程.docx(14页珍藏版)》请在冰豆网上搜索。
标准型计算器版开发过程
第一讲
一、课堂教学
1、设计界面
2、为控件命名
控件名
说明
控件名
说明
1
jButtonDigit0~9
0~9
11
jButtonEvaluate
=
2
jButtonDecimal
.
12
jButtonBack
Back
3
jButtonSign
+/-
13
jButtonClearEntry
CE
4
jButtonDivide
/
14
jButtonClear
C
5
jButtonMultiply
*
15
jTextFieldDisplayer
显示窗
6
jButtonSubtract
-
16
jTextFieldMemory
存储器标志
7
jButtonAdd
+
17
jButtonMemoryClear
MC
8
jButtonSqrt
Sqrt
18
jButtonMemoryRecall
MR
9
jButtonPercent
%
19
jButtonMemorySave
MS
10
jButtonReciprocal
1/x
20
jButtonMemoryAdd
M+
3、为数字键1添加ActionPerfored事件处理过程。
privatevoidjButtonDigit1ActionPerformed(java.awt.event.ActionEventevt){
Strings1=jTextFieldDisplayer.getText(),s2;
intlen=s1.length();
if(!
s1.equals("0.")){
s2=s1.substring(0,len-1);
jTextFieldDisplayer.setText(s2+"1.");
}else{
jTextFieldDisplayer.setText("1.");
}
}
4、为数字键2添加ActionPerformed事件处理过程。
privatevoidjButtonDigit2ActionPerformed(java.awt.event.ActionEventevt){
Strings1=jTextFieldDisplayer.getText(),s2;
intlen=s1.length();
if(!
s1.equals("0.")){
s2=s1.substring(0,len-1);
jTextFieldDisplayer.setText(s2+"2.");
}else{
jTextFieldDisplayer.setText("2.");
}
}
5、考虑到数字键1和数字键2的ActionPerformed事件处理过程中大量代码是重复的,因此创建一个自定义的方法inputDigit,用于处理用户输入的数字键。
privatevoidinputDigit(Stringdigit){
Strings1=jTextFieldDisplayer.getText(),s2;
intlen=s1.length();
if(!
s1.equals("0.")){
s2=s1.substring(0,len-1);
jTextFieldDisplayer.setText(s2+digit+".");
}else{
jTextFieldDisplayer.setText(digit+".");
}
}
6、使用inputDigit,为数字键3添加ActionPerformed事件处理过程。
privatevoidjButtonDigit3ActionPerformed(java.awt.event.ActionEventevt){
inputDigit(“3”);
}
7、为Back键添加添加ActionPerformed事件处理过程。
privatevoidjButtonBackspaceActionPerformed(java.awt.event.ActionEventevt){
Strings1=jTextFieldDisplayer.getText(),s2;
intlen=s1.length();
if(len>2){
s2=s1.substring(0,len-2);
jTextFieldDisplayer.setText(s2+".");
}else{
jTextFieldDisplayer.setText("0.");
}
}
二、实验内容
1、验证标准型计算器(第一版)中数字键、Back键的功能;
2、为“+/-”键、“.”键添加功能。
第二讲
一、课堂教学
1、所有数字键的ActionPerformed事件处理过程的代码均可改为
inputDigit(evt.getActionCommand());
2、”+/-”键的ActionPerformed事件处理过程。
privatevoidjButtonSignActionPerformed(java.awt.event.ActionEventevt){
Strings1=jTextFieldDisplayer.getText(),s2;
if(s1.equals("0.")){
return;
}
if(s1.substring(0,1).equals("-")){
s2=s1.substring(1,s1.length());
}else{
s2="-"+s1;
}
jTextFieldDisplayer.setText(s2);
}
3、”.”键。
考虑到一个数值中不允许出现1个以上的小数点。
(1)先为Calculator类添加inputDecimal字段。
privatebooleaninputDecimal=false;
(2)然后为”.”键添加ActionPerformed事件处理过程。
privatevoidjButtonDecimalActionPerformed(java.awt.event.ActionEventevt){
inputDecimal=true;
}
(3)最后修改inputDigit方法。
privatevoidinputDigit(Stringdigit){
Strings1=jTextFieldDisplayer.getText(),s2;
intlen=s1.length();
if(inputDecimal){
jTextFieldDisplayer.setText(s1+digit);
}else{
if(!
s1.equals("0.")){
s2=s1.substring(0,len-1);
jTextFieldDisplayer.setText(s2+digit+".");
}else{
jTextFieldDisplayer.setText(digit+".");
}
}
}
4、为”CE”键添加ActionPerformed事件处理过程。
privatevoidjButtonClearEntryActionPerformed(java.awt.event.ActionEventevt){
jTextFieldDisplayer.setText("0.");
inputDecimal=false;
}
5、”Sqrt”键。
(1)为”Sqrt”键添加ActionPerformed事件处理过程。
privatevoidjButtonSqrtActionPerformed(java.awt.event.ActionEventevt){
doublen=Double.parseDouble(jTextFieldDisplayer.getText());
n=Math.sqrt(n);
jTextFieldDisplayer.setText(Double.toString(n));
}
(2)此时运行项目,看到点击”Sqrt”键后可以计算出显示窗内原有数字的算数平方根,但是再继续输入数字时就会出现问题。
要解决这个问题可以为Calculator类添加字段clearDisplayer。
privatebooleanclearDisplayer=false;
(3)修改”Sqrt”键的ActionPerformed事件处理过程。
privatevoidjButtonSqrtActionPerformed(java.awt.event.ActionEventevt){
doublen=Double.parseDouble(jTextFieldDisplayer.getText());
n=Math.sqrt(n);
jTextFieldDisplayer.setText(Double.toString(n));
clearDisplayer=true;
}
(4)修改inputDigit方法
privatevoidinputDigit(Stringdigit){
Strings1=jTextFieldDisplayer.getText(),s2;
if(clearDisplayer){
s1=("0.");
inputDecimal=false;
clearDisplayer=false;
}
intlen=s1.length();
if(inputDecimal){
jTextFieldDisplayer.setText(s1+digit);
}else{
if(!
s1.equals("0.")){
s2=s1.substring(0,len-1);
jTextFieldDisplayer.setText(s2+digit+".");
}else{
jTextFieldDisplayer.setText(digit+".");
}
}
}
二、课堂测验
1、”Back”键在删除负数时删到最后会出问题,如何改正它?
2、对负数开放时显示窗会显示”NAN”,如何让它显示为”E”?
三、实验内容
1、为”1/x”键添加功能。
2、为”+”、”-”、”*”、”/”、”=”、”%”键添加功能。
第三讲
一、课堂教学
1、修改”Back”键的ActionPerformed事件处理程序。
privatevoidjButtonBackspaceActionPerformed(java.awt.event.ActionEventevt){
Strings1=jTextFieldDisplayer.getText(),s2;
intlen=s1.length();
if(s1.substring(0,1).equals("-")){//如果显示窗里的数为负数
if(len>3){//如果显示窗里的数总长度大于3
if(s1.substring(len-1,len).equals(".")){//如果显示窗里的数为整数
s2=s1.substring(0,len-2);
jTextFieldDisplayer.setText(s2+".");
inputDecimal=false;
}else{//如果显示窗里的数为实数
s2=s1.substring(0,len-1);
jTextFieldDisplayer.setText(s2);
}
}else{//如果显示窗里的数总长度小于等于3
jTextFieldDisplayer.setText("0.");
}
}else{//如果显示窗里的数为正数
if(len>2){//如果显示窗里的数总长度大于2
if(s1.substring(len-1,len).equals(".")){//如果显示窗里的数为整数
s2=s1.substring(0,len-2);
jTextFieldDisplayer.setText(s2+".");
inputDecimal=false;
}else{//如果显示窗里的数为实数
s2=s1.substring(0,len-1);
jTextFieldDisplayer.setText(s2);
}
}else{//如果显示窗里的数总长度小于等于2
jTextFieldDisplayer.setText("0.");
}
}
}
2、修改”Sqrt”键的ActionPerformed事件处理过程。
privatevoidjButtonSqrtActionPerformed(java.awt.event.ActionEventevt){
doublen=Double.parseDouble(jTextFieldDisplayer.getText());
if(n<0){
jTextFieldDisplayer.setText("不可对负数开方!
");
}else{
n=Math.sqrt(n);
jTextFieldDisplayer.setText(Double.toString(n));
}
clearDisplayer=true;
}
3、”1/x”键的ActionPerformed事件处理程序过程。
privatevoidjButtonReciprocalActionPerformed(java.awt.event.ActionEventevt){
doublen=Double.parseDouble(jTextFieldDisplayer.getText());
if(Math.abs(n)<10E-16){
jTextFieldDisplayer.setText("不可对零求倒数!
");
}else{
n=1/n;
jTextFieldDisplayer.setText(Double.toString(n));
}
clearDisplayer=true;
}
4、”+”、”-”、”*”、”/”键
(1)先为Calculator类添加两个字段
privatedoublelastOperand=0;//上一次输入的操作数
privateStringlastOperator="";//上一次输入的运算符
(2)然后为Calculator类新建一个方法inputOperator。
privatevoidinputOperator(Stringoperator){
if(lastOperator.isEmpty()||inputEvaluate){//如果是第一次输入运算符或上一次运算符是等号
lastOperand=Double.parseDouble(jTextFieldDisplayer.getText());
lastOperator=operator;
clearDisplayer=true;
inputEvaluate=false;
return;
}
if(clearDisplayer){//如果是连续输入运算符
lastOperator=operator;
return;
}
doubleresult=0,operand=Double.parseDouble(jTextFieldDisplayer.getText());
switch(lastOperator.charAt(0)){
case'+':
result=lastOperand+operand;
break;
case'-':
result=lastOperand-operand;
break;
case'*':
result=lastOperand*operand;
break;
case'/':
result=lastOperand/operand;
break;
}
jTextFieldDisplayer.setText(Double.toString(result));
lastOperand=result;
lastOperator=operator;
clearDisplayer=true;
}
(3)为”+”、”-”、”*”、”/”键添加相同的ActionPerformed时间处理过程。
inputOperator(evt.getActionCommand());
5、”=”键
(1)先为Calculator类添加字段。
privatebooleaninputEvaluate=false;//用于判断用户是否连续输入等号
(2)”=”键的ActionPerformed事件处理过程。
privatevoidjButtonEvaluateActionPerformed(java.awt.event.ActionEventevt){
if(lastOperator.isEmpty()){
return;
}
doublet=0,result=0,operand=Double.parseDouble(jTextFieldDisplayer.getText());
if(inputEvaluate){//如果上一次输入的运算符是等号
t=operand;
operand=lastOperand;
lastOperand=t;
}
switch(lastOperator.charAt(0)){
case'+':
result=lastOperand+operand;
break;
case'-':
result=lastOperand-operand;
break;
case'*':
result=lastOperand*operand;
break;
case'/':
result=lastOperand/operand;
break;
}
jTextFieldDisplayer.setText(Double.toString(result));
lastOperand=operand;
clearDisplayer=true;
inputEvaluate=true;
}
6、为”%”键添加ActionPerformed事件处理过程。
privatevoidjButtonPercentActionPerformed(java.awt.event.ActionEventevt){
doublen=Double.parseDouble(jTextFieldDisplayer.getText());
n=lastOperand*n/100;
jTextFieldDisplayer.setText(Double.toString(n));
}
7、为”C”键添加ActionPerformed事件处理过程。
privatevoidjButtonClearActionPerformed(java.awt.event.ActionEventevt){
inputDecimal=false;
clearDisplayer=false;
lastOperand=0;
lastOperator="";
inputEvaluate=false;
jTextFieldDisplayer.setText("0.");
}
8、”M+”键的ActionPerformed事件处理过程。
privatevoidjButtonMemoryAddActionPerformed(java.awt.event.ActionEventevt){
memory+=Double.parseDouble(jTextFieldDisplayer.getText());
if(Math.abs(memory)<1E-16){
jTextFieldMemory.setText("");
}else{
jTextFieldMemory.setText("M");
}
clearDisplayer=true;
}
9、”MS”键的ActionPerformed事件处理过程。
privatevoidjButtonMemorySaveActionPerformed(java.awt.event.ActionEventevt){
memory=Double.parseDouble(jTextFieldDisplayer.getText());
if(Math.abs(memory)<1E-16){
jTextFieldMemory.setText("");
}else{
jTextFieldMemory.setText("M");
}
clearDisplayer=true;
}
10、”MR”键的Actionperformed事件处理过程。
privatevoidjButtonMemoryRecallActionPerformed(java.awt.event.ActionEventevt){
jTextFieldDisplayer.setText(Double.toString(memory));
clearDisplayer=true;
}
11、”MC”键的ActionPerformed事件处理过程。
privatevoidjButtonMemoryClearActionPerformed(java.awt.event.ActionEventevt){
memory=0;
jTextFieldMemory.setText("");
clearDisplayer=true;
}
二、实验内容
1、验证为”1/x”、”+”、”-”、”*”、”/”、”=”、”%”键添加的功能;
2、验证记忆功能。
3、为计
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 标准型 计算器 开发 过程