




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java课程设计报告 题 目: 计算器 院(系):xxx学院 年级专业: xxx班 学生姓名: xxx 指导老师: xx老师 开始时间: 200x-xx-xx 完成时间: 200x-xx-xx 目 录 1 摘 要 2 概要设计 3 详细设计 4 测试分析 5 参考文献 一、摘 要 本计算器可以进行简单的四则运算(加、减、乘、除)但仅限于十进制下,还可以进行(八进制,十进制,十六进制)之间的相互转换,八进制最多可以输入19位数,十进制最多可以输入18位数,十六进制最多可以输入14位数,backspace表示退格, clear表示初始化,在window下直接运行(Jsp2003.bat)即可,界面为灰白对称。 二、概要设计 (1) 自定义类说明 * * 类名: This_number_too_big * * 作用: 自定义的异常类,用来处理计算结果溢出 * * 继承的父类: Exception类 * * 实现的接口: 没有 * * class This_number_too_big extends Exception /自定义的一个结果溢出异常类 * * 类名: Jsp2003 * * 作用: 主类。 * * 继承的父类: 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; /用来临时存放所按按钮的第一个字符 public boolean Refresh=false; /设置lab是否要在输入数据的时候刷新,初始为否 主要方法说明: - /用来处理按了运算符后的计算- public void js() throws This_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; lab.setText(Double.toString(data); /显示运算结果 mark=ch;/设置运算符为刚刚按下的运算符 Refresh=true;/则设置下一次输入的时候要刷新lab number=lab.getText().length();/设置输入的字符个数 / System.out.println(lab.getText();/用来调试用的 if (dataDouble.MAX_VALUE) /如果data超过double类型的最大值则抛出自定义的一个异常类 throw new This_number_too_big(); /end js() method - 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的内容将被所输入的字符代替, /否则直接在lab的内容后面加上所输入的字符 lab.setText(Character.toString(ch); number+; else if(numberlength) number+;lab.setText(lab.getText()+ch); /end enter() method - /八进制或十六进制转换成十进制I public String goto_10(String s,long 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=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; /位权升一级,为下次使用做好准备 return Long.toString(lg); /end String goto_10() method (2)程序流程图 三、详细设计 import java.awt.*; import java.awt.event.*; class This_number_too_big extends Exception /自定义的一个结果溢出异常类 class Jsp2003 extends Frame implements ItemListener,ActionListener public Jsp2003() addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) dispose(); System.exit(0); ); static Jsp2003 mainFrame = new Jsp2003(); static Label lab=new Label(0); static Panel pnl1=new Panel(new 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 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 btequ=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); 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,length=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 Jsp2003.); 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); 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,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); 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.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.setResizable(false); mainFrame.setLayout(null); mainFrame.setSize(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(mainFrame); 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(mainFrame); 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(mainFrame); btE.addActionListener(mainFrame); btF.addActionListener(mainFrame); / end main() mothed /- /checkbox 事件的处理 public void itemStateChanged(ItemEvent e) mark=n; Refresh=false; /规定当进制转换时以前输入的运算符失效 if (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); /在八进制的情况下对有些按件的管理 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.enable(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_10(lab.getText(),8L);number=lab.getText().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); 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.getText(); number=lab.getText().length(); /将其他进制转换成十六进制 length=14; /在十六进制下允许输入数字个数最多为14位 /end itemStateChanged(ItemEvent e) method /- /按钮事件的处理 public void actionPerformed(ActionEvent m) Button btn=(Button) m.getSource(); ch=btn.getLabel().charAt(0); switch (ch) case c: lab.setText(0); number=0; mark=n; Refresh=false;break;/初始化 case 1: enter(); break; case 2: enter(); 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(numberlength) number+;lab.setText(lab.getText()+ch); else break; 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) number+;lab.setText(lab.getText()+ch); else break; 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); else lab.setText(Character.toString(lab.getText().charAt(0); break; 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 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; /如果出现异常则初始化效果如同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键 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 /八进制或十六进制转换成十进制I /-Infinity public String goto_10(String s,long 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;break; 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+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; String st=new String(); long j=8,ch; long lg; 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; st=Long.toString(lg)+st; return st; /end goto10_8() method /- /输入字符 public void enter() if(Refresh=true) /如果已经设置了 运算符则在下一次输入数据的时候要把以前lab的内容清除掉 lab.setText(0); number=0; Refresh=false; if(lab.getText
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 力学计量员质量追溯知识考核试卷及答案
- 镜框喷漆颜色匹配工艺考核试卷及答案
- 锅炉水处理设备清洗工艺考核试卷及答案
- 电子陶瓷挤制成型工特殊工艺考核试卷及答案
- 医学工程技术试题及答案
- 历史专业试题及答案
- 河南省濮阳市华龙区濮阳第一高级中学2025-2026学年高二上学期开学摸底检测化学试卷(含答案)
- 湖南省永州市冷水滩区普利桥镇小学2025-2026学年四年级数学上册一二单元月考试卷(人教版A4)
- 广西钦州市第十三中学2026届上学期高三年级第六周考试历史试卷(含答案)
- 聊城地铁围挡施工方案
- 吐鲁番地区鄯善县区域环境概况自然及社会环境概况
- 国家中长期科技发展规划纲要2021-2035
- 高级食品微生物学- 课件全套 第1-9章 益生菌的分类、分离与鉴定-微生物的系统生物学研究技术
- 提升员工质量意识员工培训
- 产品报价单货物报价表(通用版)
- 诊断学·发绀-心悸-胸痛-腹痛
- 计算机专业英语第4版PPT完整全套教学课件
- 高等量子力学-课件
- 2023学年完整公开课版金瓯永固杯
- 弹性变形体静力分析基础优质获奖课件
- 《雕塑》第七章 综合材料雕塑
评论
0/150
提交评论