简单计算器课程设计DOCWord格式.docx
- 文档编号:7145459
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:26
- 大小:23.34KB
简单计算器课程设计DOCWord格式.docx
《简单计算器课程设计DOCWord格式.docx》由会员分享,可在线阅读,更多相关《简单计算器课程设计DOCWord格式.docx(26页珍藏版)》请在冰点文库上搜索。
classJsp2003extendsFrameimplementsItemListener,ActionListener
publicintnumber=0,length=18;
//number是用来记录输入的数字个数,
//length是用来设置在不一样进制下同意输入的最多半字位数,默以为十进制
课程设计说明书NO.3
charmark='
n'
;
//设置运算符号为没有即为‘n’,它的值是‘+’‘-’‘*’‘/’
publicdoubledata=0;
//设置运算数据为零
publiccharch;
//用到暂时寄存所按按钮的第一个字符
publicbooleanRefresh=false;
//设置lab能否要在输入数据的时候刷新,初始为否
4.主要方法说明:
//用来办理按了运算符后的计算-
publicvoidjs()throwsThis_number_too_big//指定由method抛出异
常
{if(mark=='
)//没有运算符
{mark=ch;
//,则设置运算符为刚才输入的字符,
data=Double.parseDouble(lab.getText());
//则设置运算数据为lab的值
Refresh=true;
//则设置下一次输入的时候要刷新lab
}
else//假如采纳的是连续运算(即没有使用‘=’号)则运转下边的语句
{switch(mark)//依据运算符计算结果,并把结果保留到data
{case'
+'
:
data+=Double.parseDouble(lab.getText());
break;
case'
-'
data-=Double.parseDouble(lab.getText());
*'
data*=Double.parseDouble(lab.getText());
/'
data/=Double.parseDouble(lab.getText());
课程设计说明书NO.4
lab.setText(Double.toString(data));
//显示运算结果
mark=ch;
//设置运算符为刚才按下的运算符Refresh=true;
number=lab.getText().length();
//设置输入的字符个数
//System.out.println(lab.getText());
//用来调试用的
if(data>
Double.MAX_VALUE)
//假如data超出double种类的最大值则抛出自定义的一个异样类
{thrownewThis_number_too_big();
}
}//endjs()method
publicvoidenter()//办理输入字符
{if(Refresh==true)
//假如已经设置了运算符则在下一次输入数据的时候要把从前lab的内容消除去
{lab.setText("
0"
);
number=0;
Refresh=false;
if(lab.getText().charAt(0)=='
0'
&
lab.getText().length()==1)
//假如lab的内容为0则,lab的内容将被所输入的字符取代,
//不然直接在lab的内容后边加上所输入的字符
{lab.setText(Character.toString(ch));
number++;
else
if(number<
length)
{number++;
lab.setText(lab.getText()+ch);
}//endenter()method
课程设计说明书NO.5
//八进制或十六进制变换成十进制
IpublicStringgoto_10(Strings,longl)
//参数s:
是要变换的字符串,因为输入的控制,保证了字符串的合法性;
//参数l:
使用来设置是将8进制仍是16进制变换成10进制,它的有效值为8或16;
{Stringstr=s;
//用来变换的字符串
longj=l;
//表示进制
longlg=0,jing=1;
//lg用来记录权乘和,jing用来记录位权
charcha;
//暂时记录要变换的字符
for(inti=1;
i<
=str.length();
i++)
{cha=str.charAt(str.length()-i);
switch(cha)
1'
lg=lg+1*jing;
break;
2'
lg=lg+2*jing;
3'
lg=lg+3*jing;
4'
lg=lg+4*jing;
5'
lg=lg+5*jing;
6'
lg=lg+6*jing;
7'
lg=lg+7*jing;
8'
lg=lg+8*jing;
9'
lg=lg+9*jing;
A'
lg=lg+10*jing;
B'
lg=lg+11*jing;
C'
lg=lg+12*jing;
D'
lg=lg+13*jing;
E'
lg=lg+14*jing;
F'
lg=lg+15*jing;
jing*=j;
//位权升一级,为下次使用做好准备
课程设计说明书NO.6
returnLong.toString(lg);
}//endStringgoto_10()method
3.系统流程图
开始
初始化数据
Doubleresult=0;
//储存结果
Booleannewnum=true;
//能否新数
Stringlastop=”=”;
/储存操作符
按下数字按钮按下操作符(+-*、=)按钮
判断
把目前文本框的内容转为double后传给
calc方法
calc(double.parsedouble(txt.gettext()))
newnum
Truefalse
文本框显示新数;
文本框接着显示
Lastop=”操作
txt.settext(“数
txt.settext(txtgettext()+”
符”newnum=true
字”)newnum=false
数字”)
课程设计说明书NO.7
4.详尽设计
第一剖析这个说要达成的任务,它的主要任务是达成十六进制、十进制、八进制和二进制之间的互相转变,需要包括负数,但不用考虑小数。
其次,确立接口参数。
依据功能可知,它传达给外面的就是一个转后的数据,而外面除了需要传达给转变前的数据之外,能否还需要其余参数呢?
我们都知道,十进制的负数相同能够利用其余进制进行表示,比如二进制,
转变方法是:
求十进制数的绝对值对应的二进制数,最高位为1;
而后对二
进制逐位求反,最高位除外;
接着最低一位加1,需要进位的话挨次进位,最高位除外。
此刻的问题就摆在了我们眼前,我们怎样知道这个数的最高位是第几位呢,或许有人会说,那就用转变后的前面再加上一位,好,即便这
样能够建立,那么-1转变后就是11,3转变后也为11,此刻假如需要此刻的把这个数二进制数再转变为十进制,那么我们怎样知道本来的是正数仍是负数呢,假如要转变为十六进制,八进制又当怎样呢?
经过以上的剖析发现,
还应当有此外一个参数——二进制时的宽度,只有这样才能知道谁是最高位,所以就称这个参数为位宽。
最后,设计类。
依据第二步的剖析,因为位宽对每一个方法都是相同,所以可能把它作为类的成员变量,而此外两个参数转变前的值和转变后的值就分别作为输入参数和返回值。
而类对外的接口只有各个转变的方法,所以
这几个方法设计为public权限,而其余全部的协助方法都为private权限。
位宽经过结构函数传达,外面不可以直接接见和改正,设置也设置为private权限。
为了减少计算量,全部的转变都以二进制为中介。
比如十六进制到十进制,是十六进制→二进制→十进制。
课程设计说明书NO.8
5.运转结果
程序运转成效截图
图2计算器运转成效图
图3除法运算成效图
课程设计说明书NO.9
6.程序测试剖析
6.1程序运转状况:
程序正常的响应按钮事件,输入的数值长度受变量length的限制,进行
混淆四则运算的时候,结果假如不是很大,能够正常显示,但假如结果很大,
便可能采纳科学记数方式,这样带来了进制变换时的麻烦,需要特别的办理
科学记数里的E,当结果太大的时候,有可能高出可能表示的最大值,(结果溢出),这个时候就要对结果进行必需的异样办理,我在输出结果的方法内设置if语句,假如结果大于某一个值就抛出一个This_number_too_big类
型的类,再使用try-catch,捕获输出结果的方法抛出的异样对象。
而后进
行,重制归零的办理。
6.2程序异样办理:
当结果高出Double.MAX_VALUE时,将抛出一个This_number_too_big类
的异样对象,这个是我自定义的一个异样类它继承自Exception类,而后使
用try-catch去捕获这个异样,异样的办理以下:
try
{js();
catch(This_number_too_bige)
lab.setText("
number=0;
mark='
Refresh=false;
System.out.println("
Thenumberistoobig"
}//假如出现异样则初始化成效好像clear键
课程设计说明书NO.10
7.总结
经过此次课程设计,将我本学期所学的JAVA知识获得稳固和应用,在设计的过程中我碰到了很到问题,可是在老师和同学们的帮助和自己的思虑下仍是很好的达成了。
这此课程设计还让我懂得了写程序不可以凭空捏造,要努力拓宽知识面,宽阔视线,拓展思想。
它还让我学会了在网上查阅那些无穷
的资料。
经过对此课题的开发,使我对用JBuilder9.0开发系统有了一个比较清楚的认识,领会到理论和实践的重要性。
因为自己的剖析设计和程序经
验不足,该系统设计和实现过程中,还有很多没有完美的地方,比方用户界面设计不够雅观,异样犯错办理比较差等多方面问题,这些都有待进一步完美和提升。
关于文中出现的不足和系统中出现的问题敬请老师指导。
8.参照文件
1.朱战立,沈伟.Java程序设计适用教程[M].北京:
电子工业第一版社,
2005.01:
59-98
2.李诚等.Java2简洁教程[M],第2版.北京:
清华大学第一版社,2004.08:
165-201
3.耿祥义.Java课程设计[M].北京:
清华大学第一版社,2004.02:
53-78
9.附录:
源代码
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.util.Vector;
publicclassTuo
课程设计说明书NO.11
Stringstr1="
//运算数1初值必定为0为了程序的安全
Stringstr2="
//运算数2
Stringfh="
+"
//运算符
Stringjg="
"
//结果
//状态开关重要
intk1=1;
//开关1
用于选择输入方向
将要写入str2或str2
intk2=1;
//开关2
符号键次数k2>
1
说明进行的是2+3-9+8这样的多符号运算
intk3=1;
//开关3str1
能否能够被清
0==1时能够!
=1时不可以被清0
intk4=1;
//开关4str2
同上
intk5=1;
//开关5
控制小数点能否被录入
==1时能够!
=1输入的小数点被扔掉
JButtonjicunqi;
//
寄存器记录能否连续按下符号键
Vectorvt=newVector(20,10);
JFrameframe=newJFrame("
计算器"
JTextFieldjg_TextField=newJTextField(jg,20);
//20列
JButtonclear_Button=newJButton("
消除"
JButtonbutton0=newJButton("
JButtonbutton1=newJButton("
1"
JButtonbutton2=newJButton("
2"
JButtonbutton3=newJButton("
3"
JButtonbutton4=newJButton("
4"
JButtonbutton5=newJButton("
5"
JButtonbutton6=newJButton("
6"
JButtonbutton7=newJButton("
7"
JButtonbutton8=newJButton("
8"
JButtonbutton9=newJButton("
9"
JButtonbutton_Dian=newJButton("
."
JButtonbutton_jia=newJButton("
JButtonbutton_jian=newJButton("
-"
JButtonbutton_cheng=newJButton("
*"
JButtonbutton_chu=newJButton("
/"
JButtonbutton_dy=newJButton("
="
////////////////////////////////////////////////////////////////////////
课程设计说明书NO.12
publicstaticvoidmain(String[]args)
Tuotuo=newTuo();
/////////////////////////////////////////////////////////////////////////
Tuo()
button0.setMnemonic(KeyEvent.VK_0);
//等效键
//其余等效键略,
jg_TextField.setHorizontalAlignment(JTextField.RIGHT);
//文本框右对齐
JPanelpan=newJPanel();
pan.setLayout(newGridLayout(4,4,5,5));
//四行四列边距为5像素
pan.add(button7);
pan.add(button8);
pan.add(button9);
pan.add(button_chu);
pan.add(button4);
pan.add(button5);
pan.add(button6);
pan.add(button_cheng);
pan.add(button1);
pan.add(button2);
pan.add(button3);
pan.add(button_jian);
pan.add(button0);
pan.add(button_Dian);
pan.add(button_dy);
pan.add(button_jia);
pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
//pan对象的边距
JPanelpan2=newJPanel();
pan2.add(jg_TextField);
JPanelpan3=newJPanel();
//为何要多此一句呢?
因为我不会设置按钮的大小
课程设计说明书NO.13
pan3.setLayout(newFlowLayout());
pan3.add(clear_Button);
//clear_Button.setSize(10,10);
//设置清零按钮的大小吗的不好使!
!
frame.setLocation(300,200);
//主窗口出此刻地点frame.setResizable(false);
//不可以调大小frame.getContentPane().setLayout(newBorderLayout());
frame.getContentPane().add(pan2,BorderLayout.NORTH);
frame.getContentPane().add(pan,BorderLayout.CENTER);
frame.getContentPane().add(pan3,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
//以上是控件和布局
//下边是事件办理程序
//---------------数字键----------------
classJianTingimplementsActionListener
publicvoidactionPerformed(ActionEvente)
Stringss=((JButton)e.getSource()).getText();
jicunqi=(JButton)e.getSource();
vt.add(jicunqi);
if(k1==1)
if(k3==1)
str1="
k5=1;
//复原开关k5状态}
str1=str1+ss;
//k2=1;
k3=k3+1;
//System.out.println(str1);
jg_TextField.setText(str1);
//显示
if(k4==1)
课程设计说明书NO.14
elseif(k1==2)
str2="
//复原开关k5状态
str2=str2+ss;
//k2=2;
k4=k4+1;
///////////////测试////////////////
jg_TextField.setText(str2);
//--------符号-----------
classJianTing_fhimplementsActionListener
Stringss2=((JButton)e.getSource()).getText();
if(k2==1)
k1=2;
//开关
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 计算器 课程设计 DOC