1、齐鲁理工学院课程设计说明书(论文)题 目 基于 JAVA 的计算器程序设计 课 程 名 称 JAVA 程序设计-课程设计 二 级 学 院 计算科学与信息工程学院 专 业 计算机科学与技 班 级 2016 级专升本班 学 生 姓 名 陈超 学 号 161053020130 设 计 地 点 宿舍 指 导 教 师 设计起止时间:2016 年 11 月 28 日至 2016 年 12 月 8 日目录一、设计任务及要求 1二、总体设计方案 1三、开发平台与开发技术 13.1 开发平台 13.2 开发技术 11.JAVA 语言: .12.JAVA 语言特点与优势: .2四、系统设计分析 34.1 用户需求
2、分析 .34.2 可行性分析 .3五、设计算法分析 35.1 模块调用层次图 .35.2 核心算法描述 55.3 系统特点: .6六、源代码展示 7六、运行与测试 14六、结论与心得 16参考文献 161基于 JAVA 的计算器程序设计一、设计任务及要求任务:设计一款基于 JAVA 的简易计算器。要求:(1)使用图形用户界面:一个文本框;0-9 数字按钮;加、减、乘、除运算符;“等于”符号;复位按钮;(2)完成整数、实数的四则运算(加、减、乘、除) ;(3)通过按钮点击实现数据的复位(清零) ;(4)实数运算中小数位的精度一致。二、总体设计方案对于此计算器程序,首先要设计其 GUI 界面,总体
3、界面有一个文本框,18个按钮,总体界面用 BorderLayout 布局。文本框放置在最 NORTH,然后 0 到 9 以及+,-,*,/的按钮放置到一个面板 Panel 中,添加到整体布局的 CENTER,界面设计完成。布局设计好后再添加按钮事件。对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮的数值设置到文本框中,否则则应把文本框中的内容加上你所点击按钮的数值设置到文本框中。这是计算器中的一种:简单计算器,本项目用到了 Java 中的 GUI 界面和swing 组件以及 awt 布局,所以简单
4、易用,它能完成如下的几个小功能:点击按钮中的数字键和运算符键就能进行简单的加、减、乘、除求模四则运算 ;还能通过用户自己在文本框中输入数字,进行简单运算;如果输入有误时可以按 Clear 撤销后重新输入新数据。三、开发平台与开发技术3.1 开发平台Eclipse:Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Kit,JDK) 。23.2 开发技术1.JAVA 语言:Java 是一门面向对象编程
5、语言,不仅吸收了 C+语言的各种优点,还摒弃了 C+里难以理解的多继承、指针等概念,因此 Java 语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。Java 具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java 可以编写桌面应用程序、 Web 应用程序、分布式系统和嵌入式系统应用程序等。2.JAVA 语言特点与优势:(1)简单性Java 看起来设计得很像 C+,但是为了使语言小和容易熟悉,设计者们把 C+语言中许多可用的特征去掉了,这些特征是一般程序
6、员很少使用的。Java 还剔除了 C+的操作符过载和多继承特征,并且不使用主文件,免去了预处理程序。因为 Java 没有结构,数组和串都是对象,所以不需要指针。Java 能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。(2)面向对象Java 是一个面向对象的语言。对程序员来说,这意味着要注意应中的数据和操纵数据的方法,而不是严格地用过程来思考。(3)分布性Java 设计成支持在网络上应用,它是分布式语言。Java 既支持各种层次的网络连接,又以 Socket 类支持可靠的流 ( stream) 网络连接,所以用户可以产生分布
7、式的客户机和服务器。(4)编译和解释性Java 编译程序生成字节码 ( byte-code) ,而不是通常的机器码。Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地传送程序到多个平台。Java 程序可以在任何实现了 Java 解释程序和运行系统( run-time system) 的系统上运行。(5)稳健性Java 原来是用作编写消费类家用电子产品软件的语言,所以它是被设计成写高可靠和稳健软件的。Java 消除了某些编程错误,使得用它写可靠软件相当容易。(6)安全性Java 的存储分配模型是它防御恶意代码的主要方法之一。Java 没有指针,所以程序员不能得到隐蔽起来的内幕和伪
8、造指针去指向存储器。更重要的是,Java 编译程序不处理存储安排决策,所以程序员不能通过查看声明去猜测类的实际存储安排。编译的 Java 代码中的存储引用在运行时由 Java 解释程序决定实际存储地址。3(7)可移植性Java 使得语言声明不依赖于实现的方面。例如,Java 显式说明每个基本数据类型的大小和它的运算行为 (这些数据类型由 Java 语法描述) 。Java 环境本身对新的硬件平台和操作系统是可移植的。Java 编译程序也用 Java 编写,而 Java 运行系统用 ANSIC 语言编写。(8)高性能Java 是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是
9、很要紧的,为了支持这些情况,Java 设计者制作了“及时”编译程序,它能在运行时把 Java 字节码翻译成特定 CPU(中央处理器)的机器代码,也就是实现全编译了。(9)多线索性Java 是多线索语言,它提供支持多线索的执行 (也称为轻便过程) ,能处理不同任务,使具有线索的程序设计很容易。Java 的 lang 包提供一个 Thread 类,它支持开始线索、运行线索、停止线索和检查线索状态的方法。(10)动态性Java 语言设计成适应于变化的环境,它是一个动态的语言。例如,Java 中的类是根据需要载入的,甚至有些是通过网络获取的。四、系统设计分析4.1 用户需求分析点击按钮中的数字键和运算
10、符键就能进行简单的加、减、乘、除、求模、求倒数、开根号等运算,如果输入有误时可以按 Clear 撤销后重新输入新数据4.2 可行性分析也成为可行性研究,实在调查的基础上,针对新软件的开发是否具备必要性和可能性,对新软件的开发从技术、经济、社会等方面进行分析和研究,以避免投资失误,保证新软件的开发成功。(1)技术可行性主要分析技术条件能否顺利完成开发工作,硬、软件能否满足开发者的需要等。该软件采用的开发工具是 Eclipse,它有十分强的功能扩展能力,而且它完全满足计算器的开发实现的要求。因此,软件的软件开发平台已经成熟可行。硬件的容量、可靠性也能完全满足。(2)经济可行性本软件开发成本低,在经
11、济上是可以接受的,并且本软件实施后可显4著提高工作效率。五、设计算法分析5.1 模块调用层次图【1】变量描述数组:1 JButton b = new JButton10; 创建按钮类型的数组,为数字键 0-9 这 10 个按钮。全局变量:(1)JFrame frame;创建一个 jFrame 类型的框架,为 frame,用来存放需要显示的一些东西。(2)JTextField show;创建一个 JtextField 类型的展示框,为 show。上面用来显示输出或计算的结果。(3)double sum = 0, getValue;创建一个类型为双精度的变量,其初始值为 0.返回计算后得到的值。(
12、4)JDialog about;创建一个类型为 Jdialog 的对话框 abhout,其显示的该计算器的一些关于内容。(5)final int slength = 30;创建一个为类型为整形的 slength,其值为 30,意味该计算器显示的有效长度最大值为 30,超过 30 的话,计算器将不能够全部显示。6 JButton bc, c, ce, ab, jia, jian, cheng, chu, equ, point, sqrt, ds, bfh,zf;创建类型为 Jbuttond 的按钮退格,清空,复位,关于,加,减,乘,除,等号,小数点,2 次方根,倒数,百分号,正负号,当按下这些按
13、钮的话,便会触发相应的监听器,根据这些监听器的设置,执行对应的程序。57 int i = 0, j = 0, p = 0, l, action;创建类型为整形的初始化书 i、j、p。这几个按钮在算法初始化时实现。8 Panel dispMain = new Panel()创建类型为 panel 的面板 dispMain,用来存放另一些控件。函数:1 public void disp() 创建无值函数 disp() ,用来存放界面所需要展示的元素,包括有面板,按钮,弹出对话框,显示框等。2 public void actionPerformed(ActionEvent e)创建无值函数 acti
14、onPerformed(ActionEvent e),其允许的输入值类型为 ActionEvent e,在里面编写的是加减陈除等一些算法。3 public void setSum()创建无值函数 setSum() ,显示出经过算法计算出的结果,4 public void windowClosing(WindowEvent e)创建无值函数 windowClosing(WindowEvent e) ,当显示程序界面右上角的 x 时,将关闭程序。5 public static void main(String args)创建静态无值函数 main 主函数,用来调用以上所示的函数。【2】程序流程1
15、系统模块调用层次图Main()disp()65.2 核心算法描述通过该步骤可实现累加功能:setSum();j+;p = 0;i = 0;action = ?判断最后一个操作数的类型:else if (e.getSource() = equ) / 等号 ,运算最后一个操作数switch (action) case 1:show.setText(String.valueOf(sum += getValue);break;case 2:show.setText(String.valueOf(sum -= getValue);break;case 3:show.setText(String.valu
16、eOf(sum *= getValue);break;case 4:show.setText(String.valueOf(sum /= getValue);break;设定数字按钮的触发算法:for (l = 0; l = 0; l-) bl = new JButton(String.valueOf(l);dispLeft.add(bl);bl.addActionListener(this);10/新建其余按钮,并分别将其添加到各自的面板中jia = new JButton(“+“);jia.setForeground(Color.RED);jian = new JButton(“-“);j
17、ian.setForeground(Color.RED);cheng = new JButton(“*“);cheng.setForeground(Color.RED);chu = new JButton(“/“);chu.setForeground(Color.RED);equ = new JButton(“=“);equ.setForeground(Color.RED);point = new JButton(“.“);zf = new JButton(“ +/- “);sqrt = new JButton(“ “);bfh = new JButton(“%“);ds = new JBut
18、ton(“1/x“);dispRight.add(chu);dispRight.add(sqrt);dispRight.add(cheng);dispRight.add(bfh);dispRight.add(jian);dispRight.add(ds);dispRight.add(jia);dispRight.add(equ);dispLeft.add(zf);dispLeft.add(point);/为各个按钮绑定 监听器bc.addActionListener(this);ce.addActionListener(this);c.addActionListener(this);ab.ad
19、dActionListener(this);jia.addActionListener(this);jian.addActionListener(this);cheng.addActionListener(this);chu.addActionListener(this);equ.addActionListener(this);point.addActionListener(this);11zf.addActionListener(this);sqrt.addActionListener(this);bfh.addActionListener(this);ds.addActionListene
20、r(this);frame.setVisible(true);public void actionPerformed(ActionEvent e) getValue = Double.valueOf(show.getText().doubleValue();if (e.getSource() = jia) / 加运算,可连加if (j = 0) sum = getValue; else if (action = 1) sum += getValue;setSum();j+;p = 0;i = 0;action = 1; else if (e.getSource() = jian) / 减运算,
21、可连减if (j = 0) sum = getValue; else if (action = 2) sum -= getValue;setSum();j+;p = 0;i = 0;action = 2; else if (e.getSource() = cheng) / 乘运算,可连乘if (j = 0) sum = getValue; else if (action = 3) sum *= getValue;setSum();j+;12p = 0;i = 0;action = 3; else if (e.getSource() = chu) / 除运算,可连除if (j = 0)sum =
22、 getValue;else if (action = 4) sum /= getValue;setSum();j+;p = 0;i = 0;action = 4; else if (e.getSource() = equ) / 等号,运算最后一个操作数switch (action) case 1:show.setText(String.valueOf(sum += getValue);break;case 2:show.setText(String.valueOf(sum -= getValue);break;case 3:show.setText(String.valueOf(sum *=
23、 getValue);break;case 4:show.setText(String.valueOf(sum /= getValue);break;setSum();i = 0;j = 0;action = 0; else if (e.getSource() = point) / 小数点,只能按一个小数点if (p = 0)show.setText(show.getText() + e.getActionCommand();p = 1; else if (e.getSource() = c | e.getSource() = ce) / 清13空与复位i = 0;j = 0;p = 0;su
24、m = 0;action = 0;show.setText(“0“); else if (e.getSource() = bc) / 退格String s = show.getText();if (s.length() 1) show.setText(“);for (l = 0; l s.length() - 1; l+) / 按一下,删除尾部一位char a = s.charAt(l);show.setText(show.getText() + a); elseshow.setText(“0“); else if (e.getSource() = ab) / 关于about.setVisib
25、le(true); else if (e.getSource() = sqrt) / 开 2 次方根sum = Math.sqrt(getValue);setSum();i = 0; else if (e.getSource() = ds) / 求倒数sum = 1 / getValue;setSum();i = 0; else if (e.getSource() = bfh) / 百分号sum = getValue / 100;setSum();i = 0; else if (e.getSource() = zf) / 正负号切换,正号不显示String s = show.getText()
26、;char a = s.charAt(0);if (a = -) show.setText(“);for (l = 1; l s.length(); l+) / 去掉负号show.setText(show.getText() + s.charAt(l);14 else if (getValue != 0) / 加上负号show.setText(“-“ + s);for (l = 0; l 10; l+) / 09 数字键触发if (e.getSource() = bl) if (i = 0)show.setText(“);String s = show.getText();if (s.leng
27、th() slength)show.setText(show.getText() + e.getActionCommand();if (e.getSource() = b0 if (e.getSource() != b0 i+;/ i 用来标记数字键触发的状态public void setSum() / 把计算结果显示出来show.setText(String.valueOf(sum);String s = show.getText();char a = s.charAt(s.length() - 1);char b = s.charAt(s.length() - 2);if (a = 0 p
28、ublic class Calculatorpublic static void main(String args) new CalcBody().disp();15六、运行与测试运行结果如下:Abuot 键:计算结果展示:8+7=对 19 开平方根:16运行状态良好,无故障。六、结论与心得本次课程设计到此算是告一段落了,经过这次的学习,我学到了很多东西,在此基础上更加巩固了自己对 java 的认识与了解。在做本项目是时候,会遇到很多小问题,比如说,在整个运算过程中要如何确保输入的计算数据哪个是第一个计算数据的,哪个是第二个计算数据的,同时也要区分运算符,因为该计算器程序应用的都是利用字符串来
29、完成计算的,而且不能重复输出运算符,更不能将运算符错误的存储在了第一个计算数据的数值中,也得考虑到万一不小心重复点击了运算符按钮会不会造成第一个计算数据的重新赋值等等问题,最后想到利用布尔类型来很好的控制运算符的应用!由于时间仓促,该程序还有些不足之处,1)该程序未添加异常处理事件,在异常发生的时候,不能够对程序进行处理,但是当该程序发生异常如溢出是,会爱文本显示框内显示 infinity 字符,提示不可操作或操作错误。2)人机交互界面还是稍有欠缺的,相信日后或有所改进的。此次课程设计让我更了解熟悉了 Java 中的图形用户界面和它的编程方式。在完成课题的过程中也不断充实了自己,学习到了很多以
30、前没有学习到的知识,收获很大。最大的收获就是对大学学习的总结和培养了解决困难的信心和能力,使我对所学知识能够融会贯通,又不断丰富了新知识。Java 计算器设计使得我们对所学的专业课有了更为深刻的认识,使得知识得到了巩固和提高。在接下来的时间里,我觉得我要更加努力的往深一层次的方面看齐,了解更多有关 java 的知识,对 java 有更深一步的了解,我会一步一步的走下去!17参考文献1 丁振凡. Java 语言实用教程(第 2 版)M. 北京邮电大学出版社. 2008.1 2 张思民等. Java 语言程序设计(第三版). 清华大学出版社. 2016.63 杨树林等. Java 语言最新实用案例教程(第 2 版)M. 清华大学出版社. 2010.74 张帆等. Java 范例开发大全. 清华大学出版社. 2009.8