895191508Java课程设计报告

上传人:痛*** 文档编号:72306159 上传时间:2022-04-08 格式:DOC 页数:28 大小:234KB
收藏 版权申诉 举报 下载
895191508Java课程设计报告_第1页
第1页 / 共28页
895191508Java课程设计报告_第2页
第2页 / 共28页
895191508Java课程设计报告_第3页
第3页 / 共28页
资源描述:

《895191508Java课程设计报告》由会员分享,可在线阅读,更多相关《895191508Java课程设计报告(28页珍藏版)》请在装配图网上搜索。

1、 湖 南 农 业 大 学Java课程设计报告计算器软件设计学生姓名: 学 号: 年级专业:指导老师: 学 院:目 录1. 前言22概要设计3 2.1 开发环境3 2.2 计算器功能3 2.3 界面设计3 2.4 类UML图43. 详细设计4 3.1 使用的JAVA类的说明4 3.2 类的主要方法53.2.1 处理按了运算符后的计算53.2.2 处理输入字符63.2.3 进制的转换63.2.4 设计总体认识73.2.5 程序流程图8 4. 运行结果85. 测试分析9 5.1 程序运行情况9 5.2 程序异常处理96. 源程序9参考文献27致 谢27摘要:该程序是一个图形界面的简单的java计算器

2、,具有良好的界面,使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。可以进行简单的四则运算(加、减、乘、除,以及开平方)但仅限于十进制下,还可以进行(八进制,十进制,十六进制)之间的相互转换,八进制最多可以输入19位数,十进制最多可以输入18位数,十六进制最多可以输入14位数,backspace表示退格, clear表示初始化,sqrt表示开平方,界面为灰白对称。关键字:java、计算器类、方法、事件1 前言随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。文本编辑器是个人计算机最司空见惯的应用

3、程序了,在学习了Java语言之后,我决定使用Java语言编写一个简单的计算器,可以实现简单的运算功能,满足日常基本的工作学习和娱乐需要。Java是由Sun公司开发的新一代纯面向对象的网络编程语言。其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。正因为如此,Java已成为当今Internet上最流行、最受欢迎的一种程序开发语言。Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。Java基本版本叫Java 2标准版(Java 2 Standard Edition,J2SE),它包含建立Java应用程序

4、或者是Applet所需的应用程序编程接口(API)。Java 2移动版(The Java 2 Mobile Edition,J2ME)包含创建无线Java应用程序的API。还有Java 2企业版(The Java 2 Enterprise,J2EE)是J2SE的增强版本,包含建立多层架构应用程序API。Java语言是由C+语言发展起而来的,是一种彻底的面向对象的程序设计语言。作为一种纯面向对象的程序设计语言,它非常适合大型软件的开发。Java语言去掉了C+语言的一些容易引起错误的特性。Java语言的特点有:面向对象、跨平台、安全性、多线程和图形功能强。2 概要设计2.1开发环境 开发平台:Mi

5、crosoft Windows XP Professional Service Pack 2 开发工具:JBuilder 2007 + JDK 1.6.0_022.2计算器功能功能 1:按下数字键在液晶平上会显示数字,这时计算器最基本的功能。 功能 2:在任何时候按下“”键,计算器文本框上的数字置反号。 功能 3:第一次按下“运算”键,再按下数字键,将重新输入第二个数字。再次按下“运 算”键,将算出前两个数字运算的结果,然后按下数字,将又重新输入新的数字。 功能 4:输入数字后,按下“等于”键,将仍输出原来的数 输入运算符和第二个数字后再按下“=”键,将得到二者运算的结果,然后又重复功能 3

6、和功能 4 。 功能 5:按下清除“C”键,数据被全部清楚。2.3界面设计图2.3 计算器面板2.4类 UML图ArrayStackChar UML图如图2.3A所示:ArrayStackDouble UML图如图2.3B所示图2.4A 图2.4B3详细设计3.1计算器使用的Java类的说明类名: This_number_too_big作用: 自定义的异常类,用来处理计算结果溢出 继承的父类: Exception类 实现的接口: 没有 class This_number_too_big extends Exception /自定义的一个结果溢出异常类类名: Jsp2003 作用: 主类。继承的

7、父类: 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 ch; /用来临时存

8、放所按按钮的第一个字符 public boolean Refresh=false; /设置lab是否要在输入数据的时候刷新,初始为否 程序的设计参考了Sun Java网站里的大量实例,比如Layout的使用、Event的处理、Components的添加与应用等等。其中:public class NewCalc extends JFrame implements ActionListener语句实现了ActionListener接口,因此可以调用addActionListener(this)方法对按钮进行点击监听,在下面的public void actionPerformed(ActionEve

9、nt e)方法里面对各个点击事件进行处理。3.2类的主要方法3.2.1处理按了运算符后的计算: public void js() throws This_number_too_big if (mark=n) mark=ch; / data=Double.parseDouble(lab.getText();Refresh=true; else switch (mark) case +: data+=Double.parseDouble(lab.getText(); break; case -: data-=Double.parseDouble(lab.getText(); break; case

10、 *: data*=Double.parseDouble(lab.getText(); break; case /: data/=Double.parseDouble(lab.getText(); break; lab.setText(Double.toString(data); mark=ch; Refresh=true; number=lab.getText().length();/ System.out.println(lab.getText();if (dataDouble.MAX_VALUE) throw new This_number_too_big(); 3.2.2处理输入字符:

11、if(Refresh=true) lab.setText(0); number=0; Refresh=false; if(lab.getText().charAt(0)=0& lab.getText().length()=1) lab.setText(Character.toString(ch); number+; else if(numberlength) number+;lab.setText(lab.getText()+ch); 3.2.3八进制或十六进制转换成十进制I:public String goto_10(String s,long l) /参数s: 是要转换的字符串,由于输入的

12、控制,保证了字符串的合法性; /参数l: 使用来设置是将8进制还是16进制转换成10进制,它的有效值为8或16; String str=s; /用来转换的字符串 long j=l; /表示进制 long lg=0,jing=1;/lg用来记录权乘和,jing用来记录位权 char cha;/临时记录要转换的字符 for(int i=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=l

13、g+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;

14、case E: lg=lg+14*jing;break; case F: lg=lg+15*jing;break; jing*=j; /位权升一级,为下次使用做好准备 return Long.toString(lg); /end String goto_10() method 3.2.4设计的总体认识l JAVA设计的摘要l JAVA设计的目录结构l JAVA设计的概要和详细设计l JAVA设计的版权意识l JAVA设计需要编译的环境l JAVA设计的实用性3.2.5程序流程图开始进制转换选择你要计算运行的进制10.8.16刷新八进制默认十进制十六进制计算结果显示接受用户输入是否再次计算退出是

15、否处理异常图3绘制计算器方法PAD图4运行结果图4 计算结果显示5测试分析5.1程序运行情况: 程序正常的响应按钮事件,输入的数值长度受变量length的限定,进行混合四则运算的时候,结果如果不是很大,可以正常显示,但如果结果很大,就可能采用科学记数方式,这样带来了进制转换时的麻烦,需要特殊的处理科学记数里的E ,当结果太大的时候,有可能超出可能表示的最大值,(结果溢出),这个时候就要对结果进行必要的异常处理,我在输出结果的方法内设置if 语句,如果结果大于某一个值就抛出一个This_number_too_big 类型的类,再使用try-catch,捕捉输出结果的方法抛出的异常对象。然后进行,

16、重制归零的处理。 5.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 程序清单:impor

17、t java.awt.*;import java.awt.event.*;class This_number_too_big extends Exception / 自定义的一个结果溢出异常类/ ActionLintsner是所有监听器的父类,其它监听器可以监听的事件都可以被它捕获/ ItemListener用于捕获带有item的组件产生的事件,如ComboBox,CheckBox,RadioButton,ToggleButtonclass hejiang extends Frame implements ItemListener, ActionListener public hejiang(

18、) addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) dispose();System.exit(0); / 给窗口注册一个事件监听器,当你点了窗口右上方的叉号时,此方法被调用);static hejiang mainFrame = new hejiang(); / 创建一个mainFramestatic Label lab1 = new Label(0);static Label lab = new Label(0);static Panel pnl1 = new Panel(new

19、GridLayout(4, 3, 3, 3); / 创建新的面板.布局管理static Panel pnl2 = new Panel(new GridLayout(4, 1, 3, 3);static Panel pnl3 = new Panel(new GridLayout(1, 2, 3, 3);static Panel pnl4 = new Panel(new GridLayout(6, 1, 3, 3);static Button bt9 = new Button(9);static Button bt8 = new Button(8);static Button bt7 = new

20、Button(7);static Button bt6 = new Button(6);static Button bt5 = new Button(5);static Button bt4 = new Button(4);static Button bt3 = new Button(3);static Button bt2 = new Button(2);static Button bt1 = new Button(1);static Button bt0 = new Button(0);static Button btdot = new Button(.);static Button bt

21、equ = new Button(=);static Button btadd = new Button(+);static Button btsub = new Button(-);static Button btmul = new Button(*);static Button btdev = new Button(/);static Button btA = new Button(A);static Button btB = new Button(B);static Button btC = new Button(C);static Button btD = new Button(D);

22、static Button btE = new Button(E);static Button btF = new Button(F);static Checkbox ckb8 = new Checkbox(八进制);static Checkbox ckb10 = new Checkbox(十进制);static Checkbox ckb16 = new Checkbox(十六进制);static Button btc = new Button(clear);static Button btt = new Button(backspace);public int number = 0, len

23、gth = 18;/ number是用来记录输入的数字个数,length是用来设置在不同进制下允许输入的最多数字位数,默认为十进制public char mark = n; / 设置运算符号为没有即为n,它的值是+-*/public double data = 0; / 设置运算数据为零public char ch; / 用来临时存放所按按钮的第一个字符public boolean Refresh = false;/ 设置lab是否要在输入数据的时候刷新,初始为否public static void main(String args) System.out.println(Starting h

24、ejiang.);lab.setAlignment(Label.RIGHT); / 对齐方式lab.setBackground(Color.lightGray); / 背景色lab.setForeground(Color.BLUE); / 前景色lab.setFont(new Font(Serief, Font.BOLD, 18);/ 字体设置lab.setBounds(14, 33, 216, 40);lab1.setAlignment(Label.RIGHT); / 对齐方式lab1.setBackground(Color.lightGray); / 背景色lab1.setForegrou

25、nd(Color.BLUE); / 前景色lab1.setFont(new Font(Serief, Font.BOLD, 18);/ 字体设置lab1.setBounds(14, 75, 216, 40);mainFrame.add(lab);mainFrame.add(lab1);CheckboxGroup grp = new CheckboxGroup();ckb8.setCheckboxGroup(grp);ckb10.setCheckboxGroup(grp);ckb16.setCheckboxGroup(grp);ckb8.setBounds(14, 115, 55, 25); /

26、 setBounds()方法是可以设定控件的大小和位置ckb10.setBounds(69, 115, 55, 25);ckb16.setBounds(124, 115, 65, 25);ckb8.setState(false);ckb10.setState(true);ckb16.setState(false);mainFrame.add(ckb8);mainFrame.add(ckb10);mainFrame.add(ckb16);pnl1.setBounds(18, 180, 120, 150);pnl2.setBounds(144, 180, 40, 150);pnl3.setBoun

27、ds(14, 140, 170, 36);pnl4.setBounds(190, 140, 40, 190);pnl1.add(bt7);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(

28、btt);pnl3.add(btc);pnl4.add(btA);pnl4.add(btB);pnl4.add(btC);pnl4.add(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

29、.setResizable(false); / 窗口可以最小化和关闭,但是不能被任意改变大小mainFrame.setLayout(null);mainFrame.setSize(240, 350);mainFrame.setTitle(小型计算器);mainFrame.setVisible(true); / 组件可见ckb8.addItemListener(mainFrame);ckb10.addItemListener(mainFrame);ckb16.addItemListener(mainFrame);/ 把事件聆听者向各个组键注册bt1.addActionListener(mainF

30、rame);bt2.addActionListener(mainFrame);bt3.addActionListener(mainFrame);bt4.addActionListener(mainFrame);bt5.addActionListener(mainFrame);bt6.addActionListener(mainFrame);bt7.addActionListener(mainFrame);bt8.addActionListener(mainFrame);bt9.addActionListener(mainFrame);bt0.addActionListener(mainFram

31、e);btadd.addActionListener(mainFrame);btsub.addActionListener(mainFrame);btmul.addActionListener(mainFrame);btdev.addActionListener(mainFrame);btt.addActionListener(mainFrame);btc.addActionListener(mainFrame);btdot.addActionListener(mainFrame);btequ.addActionListener(mainFrame);btA.addActionListener

32、(mainFrame);btB.addActionListener(mainFrame);btC.addActionListener(mainFrame);btD.addActionListener(mainFrame);btE.addActionListener(mainFrame);btF.addActionListener(mainFrame);/ end main() mothed/ checkbox 事件的处理public void itemStateChanged(ItemEvent e) mark = n;Refresh = false;/ 规定当进制转换时以前输入的运算符失效i

33、f (ckb8.getState() = 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);/ 在八进制的情况

34、下对有些按件的管理if (length = 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.enab

35、le(false);btB.enable(false);btC.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_

36、10(lab.getText(), 8L);number = lab.getText().length();if (length = 14) lab.setText(goto_10(lab.getText(), 16L);number = lab.getText().length();if (length = 19) lab1.setText(goto_10(lab1.getText(), 8L);number = lab1.getText().length();if (length = 14) lab1.setText(goto_10(lab1.getText(), 16L);number

37、= lab1.getText().length();length = 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);btdot.enable(false);btadd.enable(false);btmul.enable(false);btsub.enable(false);btdev.enable(fals

38、e);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.getText();number = lab.getText().length();/ 将其他进制转换成十六进制length = 14;/ 在十六进制下允许输入数字个数最多为14位/

39、 end itemStateChanged(ItemEvent e) method/ 按钮事件的处理public void actionPerformed(ActionEvent m) / 鼠标点激就触发事件监听Button btn = (Button) m.getSource();ch = btn.getLabel().charAt(0);deposit(ch);switch (ch) case c: lab.setText(0);number = 0;mark = n;Refresh = false;break;/ 初始化case 1:enter();break;case 2:enter(

40、);break;case 3:enter();break;case 4:enter();break;case 5:enter();break;case 6:enter();break;case 7:enter();break;case 8:enter();break;case 9:enter();break;case 0: if (Refresh = true) lab.setText(0);number = 0;Refresh = false;if (lab.getText().charAt(0) = 0 & lab.getText().length() = 1)break;if (numb

41、er length) number+;lab.setText(lab.getText() + ch); elsebreak;break;case A:enter();break;case B:enter();break;case C:enter();break;case D:enter();break;case E:enter();break;case F:enter();break;case .: if (Refresh = true) lab.setText(0);number = 0;Refresh = false;if (lab.getText().indexOf(.) = -1) n

42、umber+;lab.setText(lab.getText() + ch); elsebreak;break;case b: if (number = 0)break;else if (-number = 0) lab.setText(0);number = 0; else if (number != 1)lab.setText(lab.getText().substring(0, number);elselab.setText(Character.toString(lab.getText().charAt(0);break;case +:try js(); catch (This_numb

43、er_too_big e) lab.setText(0);number = 0;mark = n;Refresh = false;System.out.println(The number is too big);break;/ 如果出现异常则初始化效果如同clear键case -: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);break;/ 如果出现异常则初始化效果如同cle

44、ar键case *: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);break;/ 如果出现异常则初始化效果如同clear键case /:try js(); catch (This_number_too_big e) lab.setText(0);number = 0;mark = n;Refresh = false;System.out.println(The number i

45、s too big);break;/ 如果出现异常则初始化效果如同clear键case =: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);break;/ 如果出现异常则初始化效果如同clear键/ end actionPerformed(ActionEvent e) method/ 八进制或十六进制转换成十进制Ipublic String goto_10(String s, l

46、ong l)/ 参数s: 是要转换的字符串,由于输入的控制,保证了字符串的合法性;/ 参数l: 使用来设置是将8进制还是16进制转换成10进制,它的有效值为8或16;String str = s; / 用来转换的字符串long j = l; / 表示进制long lg = 0, jing = 1;/ lg用来记录权乘和,jing用来记录位权char cha;/ 临时记录要转换的字符for (int i = 1; i = 16) ch = lg % 16;k = (int) ch;switch (k) case 10:st = A + st;break;case 11:st = B + st;b

47、reak;case 12:st = C + st;break;case 13:st = D + st;break;case 14:st = E + st;break;case 15:st = F + st;break;default:st = Long.toString(ch) + st;lg = lg / 16;k = (int) lg;switch (k) case 10:st = A + st;break;case 11:st = B + st;break;case 12:st = C + st;break;case 13:st = D + st;break;case 14:st = E

48、 + st;break;case 15:st = F + st;break;default:st = Long.toString(lg) + st;return st;/ end goto10_16() method/ 十进制转换成八进制?public String goto10_8(String s)/ 参数s: 是要转换的字符串,由于输入的控制,保证了字符串的合法性;String str = s;if (str.charAt(0) = -) / 如果有负号则出去负号str = str.substring(1, str.length() - 1);if (str.indexOf(E) != -1)/ 如果是科学计数值则出去小数点和E后面的数str = str.charAt(0) + str.substring(2, str.indexOf(E);if (str.indexOf(.) != -1)/ 如果有小数点则出去小数点及小数点后面的内容str = str.substring(0, str.indexOf(.);lg = Long.parseLong(str);while (lg = j) ch = lg % j;st = Long.toString(ch) + st;lg = lg / j;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!