版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 课程设计说明书 NO.1简单计算器课程设计一.课程设计的目的 Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。 为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。 通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用
2、。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。二.设计方案论证1.开发环境:JAVA编程工具JDK ,操作系统WindowsXP.2. 功能描述:本计算器可以进行简单的四则运算(加、减、乘、除)但仅限于十进制下,还可以进行(八进制,十进制,十六进制)之间的相互转换,八进制最多可以输入19位数,十进制最多可以输入18位数,十六进制最多可以输入14位数,backspace表示退格,clear表示初始化,在window下直接运行(Jsp2003.bat)即可,界面为灰白对称。 沈 阳 大 学
3、课程设计说明书 NO.23. 概要设计:* 类名: This_number_too_big 作用: 自定义的异常类,用来处理计算结果溢出 继承的父类: Exception类 实现的接口: 没有 * class This_number_too_big extends Exception /自定义的一个结果溢出异常类 * 类名: Jsp2003 作用: 主类继承的父类: Frame类 实现的接口: ItemListener类,ActionListener类 * class Jsp2003 extends Frame implements ItemListener,ActionListener pu
4、blic int number=0,length=18;/number是用来记录输入的数字个数, /length是用来设置在不同进制下允许输入的最多数字位数,默认为十进制 沈 阳 大 学 课程设计说明书 NO.3char mark='n' /设置运算符号为没有即为n,它的值是+-*/ public double data=0; /设置运算数据为零 public char ch; /用来临时存放所按按钮的第一个字符 public boolean Refresh=false; /设置lab是否要在输入数据的时候刷新,初始为否 4.主要方法说明:/用来处理按了运算符后的计算- pub
5、lic 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.p
6、arseDouble(lab.getText(); break; case '-': data-=Double.parseDouble(lab.getText(); break; case '*': data*=Double.parseDouble(lab.getText(); break; case '/': data/=Double.parseDouble(lab.getText(); break;三.设计结果与分析首先安装好JDK ,在我的电脑-属性-高级-环境变量里设置环境变量,这样可以方便常用的JAVA程序的调用,设置好.Java和.J
7、avac的路径。如图1所示:图2设置环境变量 沈 阳 大 学 课程设计说明书 NO.4lab.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类型的最大值则抛出自定义的一个异常类 throw new T
8、his_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的内容后面加上所输入的
9、字符 lab.setText(Character.toString(ch); number+; else if(number<length) number+;lab.setText(lab.getText()+ch); /end enter() method 沈 阳 大 学 课程设计说明书 NO.5/八进制或十六进制转换成十进制I public String goto_10(String s,long l) /参数s: 是要转换的字符串,由于输入的控制,保证了字符串的合法性; /参数l: 使用来设置是将8进制还是16进制转换成10进制,它的有效值为8或16; String str=s;
10、/用来转换的字符串 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=
11、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'
12、;: 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.6return Long.toString(lg); /end String goto_10() method 3. 系统流程图 True false开始初始化数据Double result=0; /存储结果Boolean ne
13、wnum=true; /是否新数String lastop=”=”; /存储操作符按下数字按钮按下操作符(+-*、=)按钮判断newnum把当前文本框的内容转为double后传给calc方法calc(double.parsedouble(txt.gettext()文本框显示新数;txt.settext(“数字”)newnum=falseLastop=”操作符”newnum=true文本框接着显示txt.settext(txtgettext()+”数字”) 沈 阳 大 学 课程设计说明书 NO.74.详细设计 首先分析这个说要完成的任务,它的主要任务是完成十六进制、十进制、八进制和二进制之间的相
14、互转化,需要包含负数,但不用考虑小数。 其次,确定接口参数。根据功能可知,它传递给外部的就是一个转后的数据,而外部除了需要传递给转化前的数据以外,是否还需要其他参数呢?我们都知道,十进制的负数同样可以利用其他进制进行表示,例如二进制,转化方法是:求十进制数的绝对值对应的二进制数,最高位为1;然后对二进制逐位求反,最高位除外;接着最低一位加1,需要进位的话依次进位,最高位除外。如今的问题就摆在了我们面前,我们如何知道这个数的最高位是第几位呢,也许有人会说,那就用转化后的前面再加上一位,好,即使这样可以成立,那么-1转化后就是11,3转化后也为11,现在如果需要现在的把这个数二进制数再转化为十进制
15、,那么我们如何知道原来的是正数还是负数呢,如果要转化为十六进制,八进制又当如何呢?经过以上的分析发现,还应该有另外一个参数二进制时的宽度,只有这样才能知道谁是最高位,因此就称这个参数为位宽。 最后,设计类。根据第二步的分析,因为位宽对每一个方法都是一样,所以可能把它作为类的成员变量,而另外两个参数转化前的值和转化后的值就分别作为输入参数和返回值。而类对外的接口只有各个转化的方法,因此这几个方法设计为public权限,而其它所有的辅助方法都为private权限。位宽通过构造函数传递,外部不能直接访问和修改,设置也设置为private权限。为了减少计算量,所有的转化都以二进制为中介。例
16、如十六进制到十进制,是十六进制二进制十进制。 沈 阳 大 学 课程设计说明书 NO.85.运行结果程序运行效果截图图2 计算器运行效果图图3 除法运算效果图 沈 阳 大 学 课程设计说明书 NO.96.程序测试分析6.1程序运行情况:程序正常的响应按钮事件,输入的数值长度受变量length的限定,进行混合四则运算的时候,结果如果不是很大,可以正常显示,但如果结果很大,就可能采用科学记数方式,这样带来了进制转换时的麻烦,需要特殊的处理科学记数里的E ,当结果太大的时候,有可能超出可能表示的最大值,(结果溢出),这个时候就要对结果进行必要的异常处理,我在输出结果的方法内设置if 语句,如果结果大于
17、某一个值就抛出一个This_number_too_big 类型的类,再使用try-catch,捕捉输出结果的方法抛出的异常对象。然后进行,重制归零的处理。6.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' Refre
18、sh=false; System.out.println("The number is too big"); /如果出现异常则初始化效果如同clear键 沈 阳 大 学 课程设计说明书 NO.107.总结通过此次课程设计,将我本学期所学的JAVA知识得到巩固和应用,在设计的过程中我遇到了很到问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。它还让我学会了在网上查阅那些无限的资料。通过对此课题的开发,使我对用JBuilder9.0开发系统有了一个比较清楚的认识,体会到理论和实践的重要
19、性。由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如用户界面设计不够美观,异常出错处理比较差等多方面问题,这些都有待进一步完善和提高。对于文中出现的不足和系统中出现的问题敬请老师指导。8.参考文献1.朱战立, 沈伟. Java程序设计实用教程M. 北京:电子工业出版社,2005.01:59-982.李诚等. Java2简明教程M,第2版. 北京:清华大学出版社,2004.08:165-2013.耿祥义.Java课程设计M. 北京:清华大学出版社,2004.02:53-789.附录:源代码import java.awt.*;import java.awt.e
20、vent.*;import javax.swing.*;import java.util.Vector;public class Tuo 沈 阳 大 学 课程设计说明书 NO.11String str1="0" /运算数1 初值一定为0 为了程序的安全String str2="0" /运算数2String fh="+" /运算符String jg=""/结果/状态开关 重要int k1=1;/开关1 用于选择输入方向 将要写入str2或 str2int k2=1;/开关2 符号键 次数 k2>1说明进行的是2
21、+3-9+8 这样的多符号运算int k3=1;/开关3 str1 是否可以被清0 =1时可以 !=1时不能被清0int k4=1;/开关4 str2 同上int k5=1;/开关5 控制小数点可否被录入 =1时可以 !=1 输入的小数点被丢掉JButton jicunqi; /寄存器 记录 是否连续按下符号键Vector vt=new Vector(20,10);JFrame frame=new JFrame("计算器");JTextField jg_TextField=new JTextField(jg,20);/20列JButton clear_Button=new
22、JButton("清除");JButton button0=new JButton("0");JButton button1=new JButton("1");JButton button2=new JButton("2");JButton button3=new JButton("3");JButton button4=new JButton("4");JButton button5=new JButton("5");JButton button6=ne
23、w JButton("6");JButton button7=new JButton("7");JButton button8=new JButton("8");JButton button9=new JButton("9");JButton button_Dian=new JButton(".");JButton button_jia=new JButton("+");JButton button_jian=new JButton("-");JButto
24、n button_cheng=new JButton("*");JButton button_chu=new JButton("/");JButton button_dy=new JButton("=");/ 沈 阳 大 学 课程设计说明书 NO.12public static void main(String args)Tuo tuo=new Tuo();/Tuo()button0.setMnemonic(KeyEvent.VK_0);/等效键/其它 等效键 略,jg_TextField.setHorizontalAlignment
25、(JTextField.RIGHT );/文本框 右对齐JPanel pan=new JPanel();pan.setLayout(new GridLayout(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
26、.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对象的边距JPanel pan2=new JPanel();pan2.add(jg_TextField);JPanel pan3=new JPanel(); /为什么要 多此一句呢? 因为我不会设置 按钮的大小 沈 阳 大 学 课程设计说明书 NO.13pan3.setLayout(new
27、FlowLayout();pan3.add(clear_Button);/clear_Button.setSize(10,10);/设置清零按钮的大小 吗的 不好使 !frame.setLocation(300, 200); /主窗口 出现在位置frame.setResizable(false); /不能调大小 frame.getContentPane().setLayout(new BorderLayout();frame.getContentPane().add(pan2,BorderLayout.NORTH);frame.getContentPane().add(pan,BorderLa
28、yout.CENTER);frame.getContentPane().add(pan3,BorderLayout.SOUTH);frame.pack();frame.setVisible(true);/以上是 控件 和 布局/下面是事件处理 程 序/- 数 字 键 -class JianTing implements ActionListenerpublic void actionPerformed(ActionEvent e) String ss=(JButton)e.getSource().getText(); jicunqi=(JButton)e.getSour
29、ce(); 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
30、=1) 沈 阳 大 学 课程设计说明书 NO.14else if(k1=2) if (k4=1) str2="" k5=1; /还原开关k5状态 str2=str2+ss; /k2=2; k4=k4+1; /测试/ jg_TextField.setText(str2); /符 号class JianTing_fh implements ActionList
31、enerpublic void actionPerformed(ActionEvent e) String ss2=(JButton)e.getSource().getText(); jicunqi=(JButton)e.getSource(); vt.add(jicunqi); if(k2=1) k1=2;/开关 k1 为1时,向数1写 为2时,向数2写 k5=1; fh=ss2;k2=k2+1;/按符号键的次数elseint a=vt.size(); JButton
32、 c=(JButton)vt.get(a-2); 沈 阳 大 学 课程设计说明书 NO.15if(!(c.getText().equals("+")&&!(c.getText().equals("-")&&!(c.getText().equals("*")&&!(c.getText().equals("/") /if(!(vt.get(a-2).getText().equals("-")|!(vt.get(a-2).getText().
33、equals("+")|!(vt.get(a-2).getText().equals("*")|!(vt.get(a-2).getText().equals("/") yuns(); str1=jg; k1=2;/开关 k1 为1时,向数1写 为2时,向数2写 k5=1; k4=1;fh=ss2; k2=k2+1; /清除class JianTing_clear implements Act
34、ionListenerpublic void actionPerformed(ActionEvent e) jicunqi=(JButton)e.getSource(); vt.add(jicunqi); k5=1;k2=1; k1=1; k3=1;k4=1; str1="0" str2="0" fh="" jg="" jg_TextField.setText(jg); vt.clea
35、r(); 沈 阳 大 学 课程设计说明书 NO.16/-等 于 -class JianTing_dy implements ActionListenerpublic void actionPerformed(ActionEvent e) jicunqi=(JButton)e.getSource(); vt.add(jicunqi); yuns(); k1=1; /还原开关k1状态 /str1=jg; k2=1; k3=1;/还原开关k3状态k4=1; /还原开关k4状态 str1=jg; /为7+5
36、=12 +5=17 这种计算做准备/-小数点 -class JianTing_xiaos implements ActionListenerpublic void actionPerformed(ActionEvent e) jicunqi=(JButton)e.getSource(); vt.add(jicunqi); if(k5=1) String ss2=(JButton)e.getSource().getText(); if (k1=1) if(k3=1)
37、160; str1="" k5=1; /还原开关k5状态 沈 阳 大 学 课程设计说明书 NO.17 str1=str1+ss2; /k2=1; k3=k3+1; /System.out.println(str1); jg_TextField.setText(str1);/显示 else if(k1=2) if (k4=1)
38、160; str2="" k5=1; /还原开关k5状态 str2=str2+ss2; /k2=2; k4=k4+1; /测试/ jg_TextField.setText(str2); k5=k5+1; / /注册 监听器JianTing_dy jt_dy=new JianTing_dy();JianTing j
39、t= new JianTing();/临听数字键JianTing_fh jt_fh= new JianTing_fh();/临 听符 号键JianTing_clear jt_c=new JianTing_clear(); /清除键JianTing_xiaos jt_xs=new JianTing_xiaos();/ 小数点 键 沈 阳 大 学 课程设计说明书 NO.18button7.addActionListener(jt);button8.addActionListener(jt);button9.addActionListener(jt);button_chu.addActionList
40、ener(jt_fh);button4.addActionListener(jt);button5.addActionListener(jt);button6.addActionListener(jt);button_cheng.addActionListener(jt_fh);button1.addActionListener(jt);button2.addActionListener(jt);button3.addActionListener(jt);button_jian.addActionListener(jt_fh);button0.addActionListener(jt);button_Dian.addActionListener(jt_xs);button_dy.addActionListener(jt_dy)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年朝阳市街道办人员招聘考试备考试题及答案详解
- 2026年柏乡县人民医院医护人员招聘笔试模拟试题及答案解析
- 2026年崇左市新闻系统事业单位人员招聘考试备考试题及答案详解
- 2026北京市海淀区四王府小学招聘考试备考试题及答案解析
- 2026年台州天台县教育局公开招聘事业编制教师14人考试备考试题及答案解析
- 2026福建宁德市福安市市场监督管理局招聘事业单位紧缺急需人才2人考试备考题库及答案解析
- 2026年充电器行业分析报告及未来发展趋势报告
- 2026贵州瓮安县县级公立医院招聘编制外专业技术人员88人考试参考题库及答案解析
- 2026年PVC地漏行业分析报告及未来发展趋势报告
- 2026年气相二氧化硅行业分析报告及未来发展趋势报告
- 垃圾清运服务投标方案技术方案
- 海运公司船员合同
- JT-GQB-008-1996公路桥涵标准图整体式钢筋混凝土连续板桥上部构造
- 跳远 教案(大学体育专业)
- 23悬挑花架梁悬挑支模架专项施工方案
- (高清版)DZT 0279.32-2016 区域地球化学样品分析方法 第32部分:镧、铈等15个稀土元素量测定 封闭酸溶-电感耦合等离子体质谱法
- 工程管理的前沿研究方向
- 脑机接口在医疗中的应用
- ISO27001-2022信息安全管理体系内审全套记录表格
- NY/T 388-1999畜禽场环境质量标准
- LY/T 1000-2013容器育苗技术
评论
0/150
提交评论