1、JAVA课程设计报告 吉林工程技术师范学院面向对象程序设计-JAVA课程设计报告书设计题目: 简易计算器 专业: 计算机科学与技术 班级: 计算机0841 学生姓名: 闫哲 学号: 8 指导教师: 孟宇桥 2009年12月 信息工程学院摘 要简易计算器在Java中的应用 摘要:本计算器可以进行简单的四则运算(加、减、乘、除)但仅限于十进制下,还可以进行(八进制,十进制,十六进制)之间的相互转换,八进制最多可以输入19位数,十进制最多可以输入18位数,十六进制最多可以输入14位数,backspace表示退格, clear表示初始化,在window下直接运行(Jsp2003.bat)即可,界面为灰
2、白对称。 关键词:四则运算;计算器 第一章 绪论Java语言现在逐渐成熟起来,它的类已经有近千个,类的功能无所不包,而且还可以通过第三方购买类,为Java语言的发展提供了良好的发展前景.同时它也是跨平台的语言,因此许多软件开发商,硬件开发上也争先恐后地想乘上Java语言的快车,都声称支持Java语言,它对微软发起了有力的挑战,而且Sun公司正努力开发Java芯片。面对如此语言的发展趋势,我认为本人有必要学好这一门课,所以我小试牛刀的设计了一个简易计算器,而且计算器可以进行简单的四则运算加、减、乘、除,但仅限于十进制下,还可以进行八进制,十进制,十六进制,之间的相互转换。第二章 问题定义(或系统
3、分析) 2.1、 需求分析:2.1.1开发的技术及功能本课程设计是要做一个屏幕输入运算数的图形界面的计算器。程序实现的基本功能有:简单的四则运算加、减、乘、除,但仅限于十进制下,还可以进行八进制,十进制,十六进制,之间的相互转换。2.1.2设计思路设计这个计算器主要是参考Windows操作系统中自带的计算器,由于编者水平和时间的限制,不能将计算器设计到科学型及其他更复杂的类型,在设计过程中还参考了一些其他的优秀设计。NetBeans提供了强大的集成环境,计算器大多数的界面设计都是代码直接生成的,这体现出NetBeans开发工具的特点,所以只要在控件的响应事件中添加相应的方法即可。加、减、乘、除
4、等基本功能由自己编写的代码实现; 。3.1.3设计效果图设计时先在设计界面中添加按钮等控件,后在按钮的actionPerformed事件中添加代码完成其功能其中调用了Java类中的Math函数库以及各种字符串操作。第三章 总体设计与详细设计3.1、总体设计(1) 自定义类说明* 类名: This_number_too_big * 作用: 自定义的异常类,用来处理计算结果溢出 * 继承的父类: Exception类 * 实现的接口: 没有 *class This_number_too_big extends Exception/自定义的一个结果溢出异常类* 类名: Jsp2003 * 作用: 主
5、类。 * 继承的父类: Frame类 * 实现的接口: ItemListener类,ActionListener类 * *class Jsp2003 extends Frame implements ItemListener,ActionListener public int number=0,length=18;/number是用来记录输入的数字个数,/length是用来设置在不同进制下允许输入的最多数字位数,默认为十进制 public char mark=n; /设置运算符号为没有即为n,它的值是+-*/public double data=0; /设置运算数据为零 public char
6、 ch; /用来临时存放所按按钮的第一个字符public boolean Refresh=false;/设置lab是否要在输入数据的时候刷新,初始为否3.2、概要设计:3.2.1、/用来处理按了运算符后的计算-lab.setText(goto_10(lab.getText(),16L);lab.setText(goto_10(lab.getText(),8L);length=18;length=14length=19btA.enable(false);3.2.2、/checkbox 事件的处理 MultiMultiMultibtA.enable(false);ckb16.getState()=
7、trueckb10.getState()=trueckb8.getState()=truemark=n;3.2.3、/输入字符number+;lab.setText(lab.getText()+ch);lab.setText(Character.toString(ch);number+;lab.setText(0);number=0;Refresh=false;numberDouble.MAX_VALUEmark=n3.2.5、/主函数 MultiMultibtA.enable(false);MultiIF ckb10.getState()=trueckb8.getState()=truepu
8、blicJsp2003()第四章 编码实现4.1.1、/用来处理按了运算符后的计算-public void js() throws This_number_too_big /指定由method抛出异常if (mark=n) /没有运算符mark=ch; /,则设置运算符为刚刚输入的字符,data=Double.parseDouble(lab.getText();/则设置运算数据为lab的值Refresh=true;/则设置下一次输入的时候要刷新labelse /如果采用的是连续运算(即没有使用=号)则运行下面的语句switch (mark) /根据运算符计算结果,并把结果保存到data cas
9、e +: 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; lab.setText(Double.toString(data); /显示运算结果mark=ch;/设置运算符为刚刚按下的运算符Refresh=true;/则设置下一次输
10、入的时候要刷新labnumber=lab.getText().length();/设置输入的字符个数/ System.out.println(lab.getText();/用来调试用的if (dataDouble.MAX_VALUE) /如果data超过double类型的最大值则抛出自定义的一个异常类throw new This_number_too_big(); 4.1.2、/checkbox 事件的处理 public void itemStateChanged(ItemEvent e) mark=n;Refresh=false;/规定当进制转换时以前输入的运算符失效if (ckb8.get
11、State()=true) btA.enable(false);btB.enable(false);btC.enable(false);btD.enable(false);btE.enable(false);btF.enable(false);bt9.enable(false);bt8.enable(false);btdot.enable(false);btadd.enable(false);btmul.enable(false);btsub.enable(false);btdev.enable(false);btequ.enable(false);/在八进制的情况下对有些按件的管理if(le
12、ngth=18) lab.setText(goto10_8(lab.getText();number=lab.getText().length(); if(length=14) lab.setText(goto_10(lab.getText(),16L);lab.setText(goto10_8(lab.getText(); number=lab.getText().length(); /将其他进制转换成八进制length=19;/在八进制下允许输入数字个数最多为19位if(ckb10.getState()=true) btA.enable(false);btB.enable(false);b
13、tC.enable(false);btD.enable(false);btE.enable(false);btF.enable(false);bt9.enable(true);bt8.enable(true);btdot.enable(true);btadd.enable(true);btmul.enable(true);btsub.enable(true);btdev.enable(true);btequ.enable(true);/在十进制的情况下对有些按件的管理if(length=19) lab.setText(goto_10(lab.getText(),8L);number=lab.g
14、etText().length();if(length=14) lab.setText(goto_10(lab.getText(),16L);number=lab.getText().length();/进制转换成十进制length=18;/在十进制下允许输入数字个数最多为18位if(ckb16.getState()=true) btA.enable(true);btB.enable(true);btC.enable(true);btD.enable(true);btE.enable(true);btF.enable(true);bt9.enable(true);bt8.enable(true
15、);btdot.enable(false);btadd.enable(false);btmul.enable(false);btsub.enable(false);btdev.enable(false);btequ.enable(false);/在十六进制的情况下对有些按件的管理if(length=18) lab.setText(goto10_16(lab.getText();number=lab.getText().length();if(length=19) lab.setText(goto_10(lab.getText(),8L);lab.setText(goto10_16(lab.ge
16、tText(); number=lab.getText().length(); /将其他进制转换成十六进制length=14;/在十六进制下允许输入数字个数最多为14位 4.1.3、/输入字符public void enter()if(Refresh=true) /如果已经设置了 运算符则在下一次输入数据的时候要把以前lab的内容清除掉lab.setText(0); number=0; Refresh=false; if(lab.getText().charAt(0)=0& lab.getText().length()=1) /如果lab的内容为0则,lab的内容将被所输入的字符代替,否则直接
17、在lab的内容后面加上所输入的字符 lab.setText(Character.toString(ch); number+;else if(numberDouble.MAX_VALUE) /如果data超过double类型的最大值则抛出自定义的一个异常类throw new This_number_too_big(); 4.1.5、/主函数 public static void main(String args) System.out.println(Starting Jsp2003.);lab.setAlignment(Label.RIGHT);lab.setBackground(Color.
18、lightGray);lab.setForeground(Color.BLUE);lab.setFont(new Font(Serief,Font.BOLD,18);lab.setBounds(14,33,216,40);mainFrame.add(lab);CheckboxGroup grp=new CheckboxGroup();ckb8.setCheckboxGroup(grp);ckb10.setCheckboxGroup(grp);ckb16.setCheckboxGroup(grp);ckb8.setBounds(14,75,55,25);ckb10.setBounds(69,75
19、,55,25);ckb16.setBounds(124,75,65,25);ckb8.setState(false);ckb10.setState(true);ckb16.setState(false);mainFrame.add(ckb8);mainFrame.add(ckb10);mainFrame.add(ckb16);pnl1.setBounds(14,140,120,150);pnl2.setBounds(144,140,40,150);pnl3.setBounds(14,100,170,36);pnl4.setBounds(190,100,40,190);pnl1.add(bt7)
20、; pnl1.add(bt8);pnl1.add(bt9);pnl1.add(bt4);pnl1.add(bt5);pnl1.add(bt6);pnl1.add(bt1);pnl1.add(bt2);pnl1.add(bt3);pnl1.add(bt0);pnl1.add(btdot);pnl1.add(btequ);pnl2.add(btadd);pnl2.add(btsub);pnl2.add(btmul);pnl2.add(btdev);pnl3.add(btt);pnl3.add(btc);pnl4.add(btA);pnl4.add(btB);pnl4.add(btC);pnl4.a
21、dd(btD);pnl4.add(btE); pnl4.add(btF);btA.enable(false);btB.enable(false);btC.enable(false);btD.enable(false);btE.enable(false);btF.enable(false);mainFrame.add(pnl1);mainFrame.add(pnl2);mainFrame.add(pnl3);mainFrame.add(pnl4); mainFrame.setResizable(false);mainFrame.setLayout(null);mainFrame.setSize(
22、240,300 );mainFrame.setTitle(计算器);mainFrame.setVisible(true);ckb8.addItemListener(mainFrame);ckb10.addItemListener(mainFrame);ckb16.addItemListener(mainFrame);/把事件聆听者向各个组键注册bt1.addActionListener(mainFrame);bt2.addActionListener(mainFrame);bt3.addActionListener(mainFrame);bt4.addActionListener(mainFr
23、ame);bt5.addActionListener(mainFrame);bt6.addActionListener(mainFrame);bt7.addActionListener(mainFrame);bt8.addActionListener(mainFrame);bt9.addActionListener(mainFrame);bt0.addActionListener(mainFrame);btadd.addActionListener(mainFrame);btsub.addActionListener(mainFrame);btmul.addActionListener(mai
24、nFrame);btdev.addActionListener(mainFrame);btt.addActionListener(mainFrame);btc.addActionListener(mainFrame);btdot.addActionListener(mainFrame);btequ.addActionListener(mainFrame);btA.addActionListener(mainFrame);btB.addActionListener(mainFrame);btC.addActionListener(mainFrame);btD.addActionListener(
25、mainFrame);btE.addActionListener(mainFrame);btF.addActionListener(mainFrame);第五章 调试与测试5.1、(1)程序运行情况:程序正常的响应按钮事件,输入的数值长度受变量length的限定,进行混合四则运算的时候,结果如果不是很大,可以正常显示,但如果结果很大,就可能采用科学记数方式,这样带来了进制转换时的麻烦,需要特殊的处理科学记数里的E ,当结果太大的时候,有可能超出可能表示的最大值,(结果溢出),这个时候就要对结果进行必要的异常处理,我在输出结果的方法内设置if 语句,如果结果大于某一个值就抛出一个This_num
26、ber_too_big 类型的类,再使用try-catch,捕捉输出结果的方法抛出的异常对象。然后进行,重制归零的处理。5.2、(2)程序异常处理: 当结果超出Double.MAX_VALUE时,将抛出一个This_number_too_big 类的异常对象,这个是我自定义的一个异常类它继承自Exception 类,然后使用try-catch去捕捉这个异常,异常的处理如下:try js();catch(This_number_too_big e)lab.setText(0);number=0; mark=n; Refresh=false; System.out.println(The number is too big); /如果出现异常则初始化效果如同clear键第六章 总结与心得6.1、课程设计总结这次java的课程设计可以说获益非浅,首先最深的感受是:机器是比任何教师都严厉的检查者。我们
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1