2022年java课程设计报告—计算器.pdf
java 课程设计报告计算器目录一、课程设计目的 . 2 二、课程设计任务、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、2 2、1、设计任务 . 2 2、2、课程设计要求: . 2 2、3、需求分析 . 2 三、开发工具与平台、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 3 3、1、开发工具 . 3 3、2、开发平台 . 3 四、设计思路、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 4 4、1、界面设计、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、4 4、2、1、逻辑设计 . 3 4、2、2、程序流程图、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、5 4、2、3、主要代码展示及说明、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、5 4、3、 程序测试 . 7 五、实验小结. 9 六、附录(程序代码 ) . 9 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 14 页 - - - - - - - - - - java 课程设计报告计算器一、课程设计目的1、熟练掌握 java面向对象编程。2、选择合适的数据结构实现需求。3、熟练使用各种控制结构。4、GUI 组件、事件处理技术。二、课程设计任务2、1、设计任务设计一个简易的计算器 ,可以进行四则运算 :加、减、乘、除等 (限于十进制下) 程序要求 : (1)应具有相应的界面 ,可参考 Windows 操作系统自带的计算器界面。(2)操作符号定为 : “+”, “-”, “*”, “/ ”, “+/-” 等。(按国际惯例设计 ) (3)用户通过点击程序界面上按钮,实现数字、运算符的输入操作。(4)以上部分为必须完成的内容。选作部分 : (1)具有操作符号 “1/x ”, “sqrt ”(开方), “、”(小数功能 )等。2、2、课程设计要求 : ( 1)应用自己所学课程知识完成对计算器的基本任务。(2)查阅相关资料 ,学习与掌握项目中涉及的新知识,提高自学能力。(3)通过应用java 程序编写计算器来提升自己对简单的图形界面有一定的掌握与了解。2、3、需求分析1. 设计的计算器可以完成加法、减法、乘法、除法的简单运算。2. 实现一些简单的扩展运算 , 如: 正负号、倒数、退格、清零等功能。3. 添加小数点功能 , 用以实现浮点型数据的计算。4. 使用布局管理器设计一个计算器的界面, 使用事件监听器处理数据的输入, 并完成相关的计算。三、开发工具与平台精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 14 页 - - - - - - - - - - java 课程设计报告计算器3、1、开发工具Microsoft Windows 7 旗舰版3、2、开发平台JDK1 、6、0-02 与 UE 编译器四、设计思路4、1、界面设计 :( 如图 3-1) 图 3-1 4、2、1、逻辑设计 : (1) 根据所设计出来的界面 , 首先要设计其 GUI界面, 总体界面有一个文本框,20 个按钮 , 总体界面用 BorderLayout 布局, 文本框放置在最NORTH, 然后 0 到 9 以及+,-,*,/等按钮放置到一个面板Panel 中, 完成界面设计。(2) 设计计算流程 , 首先点击数字按钮时 , 将按钮数值添加到文本框当中,并将该数值保存到一个字符串中, 再次点击数字按钮时 , 将之前保存的字符串与新的数值拼接起来, 再添加到文本框当中 , 直到点击运算符按钮时 , 将文本框当中的字符串保存在一个字符串变量中, 然后重置文本框内容 , 将运算符号显示到文本框中, 随后输入第二个计算数据时, 用同样的办法保存数据 , 最后通过控制“ =”运算符先将字符串数据转化成双精度类型 , 然后计算出结果并显示到文本框当中。(3) 基本运算设计完成以后则开始考虑其她个别功能的实现, 例如倒数、清零、退格等功能的实现, 清零直接重置文本框内容, 退格功能则采精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 14 页 - - - - - - - - - - java 课程设计报告计算器用 substring函数截取字符串长度。4、2、2、程序流程图 : 4、2、3、主要代码展示及说明 : 总体代码的设计 :程序采用继承 windowadapter 类, 新建 Jframe 窗体, 利用数组来定义JBotton 按钮, 同时利用数组注册监听 , 采用 4 行 5 列网格布局 , 完成计算器界面的基本设置 , 在窗体的正常关闭方面 , 采用匿名类实现窗体的正常关闭。最后对按钮进行计算分析, 分别设定输入数据的A类、运算符控制的Opertion 类, 退格功能的 BackSpace类、 计算结果的 Result 类等等 , 一步步实现计算器的基本功能!(1) 类 A的设计 ( 数据的输入 ) class A implements ActionListener public void actionPerformed(ActionEvent e) String a = Jtext、getText(); String s = e、getActionCommand(); if(a、 equals(0、 )|a、 equals(+)|a、 equals(-)|a、 equals(*)|a 、 equals(/) Jtext、setText(s); else if(flag2) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 14 页 - - - - - - - - - - java 课程设计报告计算器 Jtext、setText(s); flag2=false; else Jtext、setText(a+s); 功能解释 : 程序开始时 , 程序初始化文本框的内容为“0、 ”, 点击数字按钮 ,则调用类 A,首先用 a 来获取当前文本框内容 ,s 来获取按钮数值 , 然后进行判断, 若 a 的值为上述代码的值则输出s 的值, 再次点击数字按钮时 , 再次调用 A类, 此时 a 的值为上次输入的s 值, 第一个 if 语句不满足 , 执行下个 if语句 if(flag2),flag2初始值为 false,该语句的功能就是在执行了 “=”号按钮时 , 防止新的数字按钮的值合并到到已经得出的结果上, 例如:12+12=24, 此时再点击数字按钮3 时, 则文本框内容被重置 , 输出数值 3,而不就是 243,如果 if(flag2)不满足 , 则将字符串 a 与 s 合并并输出 , 得出第一个要计算的数据。(2) 类 Opertion 的设计:( 运算符的控制 ) class Opertion implements ActionListener public void actionPerformed(ActionEvent e) cal=e、getActionCommand(); if(flag1=true) x=Jtext 、getText(); Jtext、setText(cal); flag1=false; 功能解释 : 当点击运算符控制按钮时, 首先将运算符的数值赋值给cal( 初值为空), 紧接着进行判断 ,flag1初值为 ture, 该类的作用为在点击运算符按钮时, 将计算的第一个数据保存在x 字符串变量当中 , 然后将文本框内容重置为点击的运算符的数值, 类的结尾将 flag1 赋值为 false,防止再次点击运算符按钮时改变了x 的值。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 14 页 - - - - - - - - - - java 课程设计报告计算器( 附: 此时文本框内容为运算符的值, 输入第二个计算数据时, 点击数字按钮 ,则再次调用 A类, 此时满足 A类中第一个 if语句, 文本框内容被重置为数字按钮的值 , 接下来与获取第一个计算数据步骤一样, 直到点击“ =”号运算符为止! ) (3) 类 Result 的设计 :( 计算并输出结果 ) class Result implements ActionListener /计算并显示结果 public void actionPerformed(ActionEvent e) double num1; num1=Double 、parseDouble(x); y=Jtext、getText(); double num2; num2=Double 、parseDouble(y); double result=0; if(num2!=0) if(cal 、equals(+) result=num1+num2; if(cal 、equals(-) result=num1-num2; if(cal 、equals(*) result=num1*num2; String s1=Double 、toString(result); Jtext、setText(s1); if(cal 、equals(/) if(num2=0) Jtext、setText(除数不能为0); else result=num1/num2; String s1=Double 、toString(result); Jtext、setText(s1); flag1=true; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 14 页 - - - - - - - - - - java 课程设计报告计算器flag2=true; 功能解释 : 首先定义两个 Double 型 num1,num2,将之前保存的第一个计算数据 x 强制转换为 Double 型后赋值给 num1,接着用字符串变量y 来获取当前文本框的内容 , 即第二个计算数据的值 , 同样再将其强制转换Double 型后赋值给 num2,然后进行运算符判断 , 对cal 的值进行比较 , 然后进行相应的计算 ,将计算的结果转换成字符串后将其输出到文本框中, 在类的最后将flag1 、flag2 赋值为 true, 作用就是将计算的结果当作第二次计算的数据进行再运算, 即将结果重新赋值给x 作为第一个计算数据!( 附: 在此类中还考虑了当除数为零的情况。) (4) 类 BackSpace的设计 :( 功能类退格 ) class BackSpace implements ActionListener public void actionPerformed(ActionEvent e) String s = e、 getActionCommand(); String s1 = Jtext、getText(); if(s 、equals(退格 ) s1=new String (s1 、substring(0,s1、 length()-1); Jtext、setText(s1); 功能解释 : 这就是计算器附加功能的实现, 这里只介绍退格功能 , 像正负号、求倒数、清零等功能相似 , 所以就不再一一介绍。首先获取退格按钮的命令值赋给 s, 然后获取当前文本框的内容, 即输入的数据 , 将其赋给 s1, 接着进行判断 , 利用 substring函数将 s1 字符串截取为从第一个字符至倒数第二个字符为止的字符串并重新赋值给s1, 再将其输出到文本框 , 实现退格的功能。4、3、 程序测试1、简单的运算 :( 以加法为例 :123+456) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 14 页 - - - - - - - - - - java 课程设计报告计算器分析: 计算的结果为 579、 0, 为双精度型 , 计算的结果被设置在文本框的最右端, 该计算器的一个特点就是可直接在文本框中输入数据以及进行更改。2、倒数的运算 :( 以 123 为例) 分析 :输出的结果如图所示,倒数功能实现 ,计算时 ,不仅就是结果 ,输入的数据同样可以先实现倒数功能后再进行相应的计算 ,没有影响!3、退格的运算 :( 以 123 为例)分析 :输出的结果如图所示,本计算器退格键有一个特点就是,就算就是就是计算后得出的结果也能实现退格,缺点就是不能很好的处理小数点的问题 ,因为小数点也就是字符串的一部分。4、正负号的运算 :(以 123为例) 分析 :输出的结果如图所示,正负号添加能够很好的实现,但可以进行一些改进 ,比如在计算过程当中直接点击负号运算符输入负数进行计算!5、总体分析 : 该计算器基本运算没有问题, 清零、正负号、求倒数、退格功能都能很好的实现 , 总体能完成一个计算器的基本功能 , 但仍有许多地方需要改进 , 比如小数点的实现所存在的一些问题 , 虽然在基本的运算精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 14 页 - - - - - - - - - - java 课程设计报告计算器过程当中不会造成太大影响, 但这依然不能认为就是一个很好的计算器, 同时, 在另一方面 , 该计算器还没能很好的实现连续计算的功能, 必须每次按下等号按钮计算出结果后才能用产生的结果接着进行下一次的计算, 改进的方法就是在运算符上同时注册Result类, 让运算符同时拥有计算结果的功能。五、实验小结本次课程设计到此算就是告一段落了, 经过这次的学习 , 我学到了很多东西, 在此基础上更加巩固了自己对java 的认识与了解。在做本项目就是时候, 会遇到很多小问题, 比如说 , 在整个运算过程中要如何确保输入的计算数据哪个就是第一个计算数据的, 哪个就是第二个计算数据的 , 同时也要区分运算符 , 因为该计算器程序应用的都就是利用字符串来完成计算的 , 而且不能重复输出运算符, 更不能将运算符错误的存储在了第一个计算数据的数值中, 也得考虑到万一不小心重复点击了运算符按钮会不会造成第一个计算数据的重新赋值等等问题, 最后想到利用布尔类型来很好的控制运算符的应用!此次课程设计让我更了解熟悉了Java中的图形用户界面与它的编程方式。在完成课题的过程中也不断充实了自己, 学习到了很多以前没有学习到的知识 , 收获很大。最大的收获就就是对大学学习的总结与培养了解决困难的信心与能力 , 使我对所学知识能够融会贯通, 又不断丰富了新知识。Java计算器设计使得我们对所学的专业课有了更为深刻的认识, 使得知识得到了巩固与提高。在接下来的时间里 , 我觉得我要更加努力的往深一层次的方面瞧齐, 了解更多有关 java 的知识 , 对 java 有更深一步的了解 , 我会一步一步的走下去!六、附录(程序代码 ) import java 、awt、 *; import javax 、swing、*; import java 、awt、event、*; public class TheCalculator extends WindowAdapter 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 14 页 - - - - - - - - - - java 课程设计报告计算器/程序框架继承自WindowAdapter 类 private JTextField Jtext=new JTextField(0 、 ); private JFrame f=new JFrame( 计算器 -赵磊 ); private String x=; private String y=; private String cal=; private boolean flag1=true; private boolean flag2=false; public void init() /初始化 String buttonValue = new String1,2,3,+,C,4,5,6,-,退格,7,8,9,*,1/x,0,+/-,、,/,=; Container contain = f 、getContentPane(); JPanel Jpan = new JPanel(); JButton Jb=new JButton20; contain、setLayout(new BorderLayout(); /采用 4 行 5 列的网格布局Jpan、setLayout(new GridLayout(4,5); Jtext、setHorizontalAlignment(JTextField 、 RIGHT); contain、add(Jtext,North); contain、add(Jpan); A num=new A(); /数据Result re=new Result(); /结果Opertion op=new Opertion(); /运算符Clear cl=new Clear(); /清零BackSpace back=new BackSpace(); /退格CountDown count_d=new CountDown(); /倒数Strains stra=new Strains(); /相反数for(int i = 0 ; i 12)&(i=19)&i!=15) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 14 页 - - - - - - - - - - java 课程设计报告计算器Jbi 、setForeground(new Color(255, 0, 0); else Jbi 、setForeground(new Color(0, 0, 255); / 控制按钮字体颜色 Jb4、addActionListener(cl); Jb9、addActionListener(back); Jb14、addActionListener(count_d); Jb16、addActionListener(stra); Jb19、addActionListener(re); f、setSize(320,240); f、setVisible(true); f、addWindowListener( /采用匿名类实现窗口的正常关闭new WindowAdapter() public void windowClosing(WindowEvent e) System、exit(0); ); class A implements ActionListener /输入数据 public void actionPerformed(ActionEvent e) String a = Jtext、getText(); String s = e、 getActionCommand(); if(a、 equals(0、 )|a、 equals(+)|a、 equals(-)|a、 equals(*)|a 、 equals(/) Jtext、setText(s); else if(flag2) Jtext、setText(s); flag2=false; else Jtext、setText(a+s); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 14 页 - - - - - - - - - - java 课程设计报告计算器 class Opertion implements ActionListener public void actionPerformed(ActionEvent e) cal=e、getActionCommand(); if(flag1=true) x=Jtext 、getText(); Jtext、setText(cal); flag1=false; class Clear implements ActionListener /清零功能 public void actionPerformed(ActionEvent e) Jtext、setText(0、); class CountDown implements ActionListener /求倒数类 public void actionPerformed(ActionEvent e) String s = e、 getActionCommand(); String s1 = Jtext、getText(); if(s 、equals(1/x) s1 = new String (+1/Double 、parseDouble(s1); Jtext、setText(s1); class Strains implements ActionListener /求相反数类 public void actionPerformed(ActionEvent e) String s = e、 getActionCommand(); String s1 = Jtext、getText(); if(s 、equals(+/-) s1=new String (+(0-Double 、parseDouble(s1); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 14 页 - - - - - - - - - - java 课程设计报告计算器Jtext、setText(s1); class BackSpace implements ActionListener /退格功能 public void actionPerformed(ActionEvent e) String s = e、 getActionCommand(); String s1 = Jtext、getText(); if(s 、equals(退格 ) s1=new String (s1 、substring(0,s1、 length()-1); Jtext、setText(s1); class Result implements ActionListener /计算并显示结果 public void actionPerformed(ActionEvent e) double num1; num1=Double 、parseDouble(x); y=Jtext、getText(); double num2; num2=Double 、parseDouble(y); double result=0; if(num2!=0) if(cal 、equals(+) result=num1+num2; if(cal 、equals(-) result=num1-num2; if(cal 、equals(*) result=num1*num2; String s1=Double 、toString(result); Jtext、setText(s1); if(cal 、equals(/) if(num2=0) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 13 页,共 14 页 - - - - - - - - - - java 课程设计报告计算器Jtext、setText(除数不能为0); else result=num1/num2; String s1=Double 、toString(result); Jtext、setText(s1); flag1=true; flag2=true; public static void main(String args) /main 方法 TheCalculator count=new TheCalculator(); count、 init(); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 14 页,共 14 页 - - - - - - - - - -