简单计算器课程设计DOC.docx
- 文档编号:11228414
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:26
- 大小:23.34KB
简单计算器课程设计DOC.docx
《简单计算器课程设计DOC.docx》由会员分享,可在线阅读,更多相关《简单计算器课程设计DOC.docx(26页珍藏版)》请在冰豆网上搜索。
简单计算器课程设计DOC
课程设计说明书NO.1
简单计算器课程设计
一.课程设计的目的
Java语言是此刻流行的网络编程语言,它拥有面向对象、跨平台、散布
应用等特色。
面向对象的开发方法是此刻世界最流行的开发方法,它不单具
有更切近自然的语义,并且有益于软件的保护和继承。
为了进一步稳固讲堂上所学到的知识,深刻掌握Java语言的重要观点及
其面向对象的特征,锻炼学生娴熟的应用面向对象的思想和设计方法解决实
际问题的能力,开设了Java程序设计课程设计。
经过此次课程设计,稳固所学Java语言基本知识,增进Java语言编写
基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽
常用类库的应用。
使学生经过该教课环节与手段,把所学课程及有关知识加
以举一反三,全面掌握Java语言的编程思想及面向对象程序设计的方法,为
此后从事实质工作打下坚固的基础。
二.设计方案论证
1.开发环境:
JAVA编程工具JDK1.5.0,操作系统WindowsXP.
2.功能描绘:
本计算器能够进行简单的四则运算(加、减、乘、除)但仅限于十进
制下,还能够进行(八进制,十进制,十六进制)之间的互相变换,八进制最多能够输入19位数,十进制最多能够输入18位数,十六进制最多能够输入14位数,backspace表示退格,clear表示初始化,在window下直接运转(Jsp2003.bat)即可,界面为灰白对称。
沈阳大学
课程设计说明书NO.2
3.纲要设计:
**********************************************************
类名:
This_number_too_big
作用:
自定义的异样类,用来办理计算结果溢出
继承的父类:
Exception类
实现的接口:
没有
**********************************************************
classThis_number_too_bigextendsException
{
}//自定义的一个结果溢出异样类
**********************************************************
类名:
Jsp2003
作用:
主类
继承的父类:
Frame类
实现的接口:
ItemListener类,ActionListener类
**********************************************************
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=='n')//没有运算符
{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());break;
case'*':
data*=Double.parseDouble(lab.getText());break;
case'/':
data/=Double.parseDouble(lab.getText());break;}
沈阳大学
课程设计说明书NO.4
lab.setText(Double.toString(data));//显示运算结果
mark=ch;//设置运算符为刚才按下的运算符Refresh=true;//则设置下一次输入的时候要刷新lab
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 {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) {case'1': lg=lg+1*jing;break; case'2': lg=lg+2*jing;break; case'3': lg=lg+3*jing;break; case'4': lg=lg+4*jing;break; case'5': lg=lg+5*jing;break; case'6': lg=lg+6*jing;break; case'7': lg=lg+7*jing;break; case'8': lg=lg+8*jing;break; case'9': lg=lg+9*jing;break; case'A': lg=lg+10*jing;break; case'B': lg=lg+11*jing;break; case'C': lg=lg+12*jing;break; case'D': lg=lg+13*jing;break; case'E': lg=lg+14*jing;break; case'F': lg=lg+15*jing;break;} 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("0"); number=0; mark='n'; 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="0";//运算数1初值必定为0为了程序的安全 Stringstr2="0";//运算数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("0"); 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) { if(k4==1) { str2=""; k5=1;//复原开关k5状态 } str2=str2+ss; //k2=2; k4=k4+1; ///////////////测试//////////////// jg_TextField.setText(str2); } } } //--------符号----------- classJianTing_fhimplementsActionListener { publicvoidactionPerformed(ActionEvente) { Stringss2=((JButton)e.getSource()).getText(); jicunqi=(JButton)e.getSource(); vt.add(jicunqi); if(k2==1) { k1=2;//开关
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 计算器 课程设计 DOC