当前位置:首页 >> 电脑基础知识 >>

基于Java计算器小软件设计(含源文件)


某某大学
毕业论文
题 目: 基于 Java 计算器小软件设计

学生姓名: 学生学号: 系 专 届 别: 业: 别:

****** ********** **************** ************ 2012 ******

指导教师:





摘 要........................................................................................................................ (1) 前言 ........................................................................................................................ (2) 1 绪论...................................................................................................................... (3) 1.1 计算器的开发背景 ....................................................................................... (3) 1.2 JAVA 简介 ........................................................................................................ (3) 1.3 JAVA 开发工具简介 ....................................................................................... (4) 2 需求分析.............................................................................................................. (4) 2.1 系统说明 ........................................................................................................ (4) 2.2 系统功能简介 ................................................................................................ (5) 2.2.1 基本功能................................................................................................. (5) 2.2.2 声音播放功能......................................................................................... (5) 2.2.3 皮肤更换功能......................................................................................... (5) 2.2.4 直接输入功能......................................................................................... (5) 3 系统设计.............................................................................................................. (5) 3.1 系统设计思想 ............................................................................................... (5) 3.2 系统功能模块设计 ........................................................................................ (6) 4 详细设计.............................................................................................................. (7) 4.1 系统概述 ....................................................................................................... (7) 4.2 单模块 ........................................................................................................... (9) 4.2.1 示例模块................................................................................................. (9) 4.2.2 总的控制模块....................................................................................... (10) 4.2.3 显示模块............................................................................................... (12) 4.2.4 键盘输入模块....................................................................................... (13) 4.2.5 直接输入模块....................................................................................... (17) 4.2.6 其他功能控制模块............................................................................... (18) 4.3 多模块之间的通信与集成 ......................................................................... (19) 4.4 声音播放 ..................................................................................................... (20) 4.5 皮肤的实现与更换 ..................................................................................... (21) 4.6 计算模式 ..................................................................................................... (23) 5 测试.................................................................................................................... (25) 5.1 5.2 5.3 5.4 测试目标 ..................................................................................................... (25) 单模块测试和多模块集成测试 ................................................................. (26) 计算功能测试 ............................................................................................. (27) 皮肤功能测试 ............................................................................................. (27)

6 总结.................................................................................................................... (27) 致谢 ...................................................................................................................... (28)

参考文献................................................................................................................ (28)

***********2012 届本科毕业论文

1

基于 Java 计算器小软件设计
学生:****** 指导教师:****** ************ ****************

摘 要:随着计算机的快速发展,计算器软件已经作为一种重要的计算工具,受到越来越多 的人的青睐。 目前, 出现了很多非常不错的计算器软件, 其中应用比较广泛的有科学计算器、 语音计算器、房贷计算器、财会计算器等等。本次设计的计算器软件所采用的计算模式和 以往的计算器软件是有区别的,以往的计算器软件在输入两个操作数之后,立即进行计算, 而本次设计的计算器软件是在算式输入完后, 无论该算式中有多少操作数和操作符, 都是一 次性计算,省去了很多步骤。为了与现代软件的风格相适应,本计算器软件制作了自己的皮 肤, 并且可以很方便的更换皮肤; 本计算器软件还添加了声音的播放, 用于提示用户的操作, 包括鼠标滑过、点击、错误提示。该计算器软件采用 Eclipse 为基本开发环境和 JAVA 语言 进行编写, 该计算器软件根据自身的各个功能划分成各个模块, 这样方便了各个功能的调试, 并且系统集成也是比较简单的。 关键词:Java;计算器;计算模式;模块化设计

A small calculator design based on Java
Student:******** Instructor:********

********************************************************************* ****************************
Abstract: With the rapid development of the computer, computer software has been as an important computational tools, favored by more and more people.Currently, there are many very good calculator software, which widely used contains scientific calculator, sound calculator, housing loan calculator, accounting calculator and so on.The calculator software's calculation

基于 Java 计算器小软件设计

2

models and the previous calculator software's are different, the privious calculator software had calculated while it has two operands, but the designed of the calculator software had calculated while formula after formula is gaved, regardless of the number of operands and operators, was one-time calculation, save many steps.In order to adapt to the style of modern software, I have designed its skin, and its skin can be conveniently replaced; the calculator software has also sound to play, used to prompt user's operation, including the mouse slip, click, error.The edit of the calculator software using Eclipse as a basic development environment and JAVA language , transform its each function to modules correspondingly, so the debugging of each function is easy, and the system integration is also simple relatively. Key words: Java;Caculator;calculation models;Modular design

前言 早在 19 世纪之前,人们为了从繁琐的、复杂的、易错的计算中解脱出来, 把更多的精力放在全局的设计和研究上, 就已经开始尝试着设计可以代替人工计 算的工具,计算器由此诞生了[1-4]。 在计算器的发展路途中,其功能也得到了无限的扩展,不再是单纯的数学计 算,很多企业、很多公司都推出了自己的计算器,其功能更加多元化、智能化, 满足人们的各种需求[5-13];按其功能不同,计算器大概有算术型计算器、应用型 计算器。算术型计算器纯粹是计算,而应用型计算器涉及面更广,包括生活的各 个方面,有财会计算器、智能计算器、游戏计算器等,比较流行的计算器有股票 收益计算器、个税计算器、银率计算器、语音计算器、外汇计算器、车险计算器、 房贷计算器等[14-18],将来也会有声控计算器等更加智能的计算器,因此计算器的 前景很广。 在计算机风行的今天, 人们又提出了更高的要求, 随着智能手机的不断发展, 手机计算器软件层出不穷,流行的计算器软件有科学计算器(Calc4M)、卡西欧计 算器、图形计算器、Ti 方针图形计算器 Andie Graph、手机理财计算器、华讯财 经手机炒股计算器、汇率计算器、房贷计算器等等[19-22],可见计算器的应用是如 此之广。

***********2012 届本科毕业论文

3

计算器软件可以由很多语言开发,如 Java、android(Java 的分支)、C、 C++、C#、.net、VB,而 Java 是一种可以撰写跨平台应用软件的面向对象的程 序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计 语言和 Java 平台(即 JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越 的通用性、高效性、平台移植性、多线程和安全性,所以使用 Java 开发计算器 软件应该是不错的选择[23-27]。Eclipse 是一个开放源代码的软件开发项目,专 注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。 所以这次的毕业设计使用 Eclipse 这个软件,使用 Java 语言,尝试基于 Java 平台,自己编写一个程序,通过程序开发界面的使用实现计算器的基本功能。 1 绪论 1.1 计算器的开发背景 21 世纪,随着社会经济的迅速发展和科学技术的全面进步,人类社会已进 入信息和网络时代。 计算机正以其前所未有的惊人速度向前发展, 新的研究成果、 新的实用软件不断涌现。计算机应用也普及到各行各业、深入到人类各种社会活 动和生产中。为了便于对大量信息的处理,运用计算机软件实现自动管理成为了 必然的趋势。其实,“计算器”早已有了一个很长的历史,人们从很早就已经开 始进行科学计算了,在人类不断探索不断进步的过程中计算器的用途越来越广, 计算结果越来越精确,只有精确的结果才能使社会更加进步,使人类更能准确的 掌握数据所反应的社会现象,并根据准确的数据反应进一步研究进步,所有计算 已经成为人们生活学习的一个重要工具,对人类来说必不可少。 在当代科技不断发展,社会不断进步的前提下,在软件功能满足人们需求的 的前提下,人们对于软件的界面要求在不断提高,单调的界面、生硬的的布局已 经不能满足人们的要求。随着各种潮流系统和智能手机的发布,特别是 win7 和 iphone,人们更加认识到更加美观的界面和人性化的布局是多么的重要。 1.2 Java 简介 JAVA 是一个由 Sun 公司开发而成的新一代编程语言。使用它可在不同种机 器、不同操作平台的网络环境中开发软件。不论你使用的是哪一种 WWW 浏览器, 哪一种计算机,哪一种操作系统,只要 WWW 浏览器上面注明了“支持 JAVA”, 你就可以看到生动的主页。JAVA 已经逐步成为 Internet 应用的主要开发语言。

基于 Java 计算器小软件设计

4

它彻底改变了应用软件的开发模式,带来了自 PC 机以来又一次技术革命,为迅 速发展的信息世界增添了新的活力。 JAVA 的出现是计算机信息交换的一个重要里程碑。在单机时代,程序进程 之间靠共享存储进行变量交换;在网络时代,运行在不同宿主机上的程序按网络 协议进行无格式的消息 (二进制字符流) 交换, 消息的语义由交换程序双方维护; 在 JAVA 时代,运行在网络上的程序进程交换的是小应用程序(Applet)。它是 一个对象,由一组属性和方法构成,是一个可执行的实体;不仅有数据的状态, 而且有定义在数据上的操作。未来可能进行代表(Agent)交换,代理有一定的 智能性,那便是信息交换的更高级阶段。 JAVA 语言的特点有面向对象、分布性、健壮性、安全性、可移植性、多线 程等。 1.3 Java 开发工具简介 Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本 身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。 幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具( Java Development Kit , JDK )。 Eclipse 由 IBM 公司开发,Eclipse 主要以其开放性、极为高效的 GUI、先 进的代码编辑器等著称,其项目包括许多各种各样的子项目组,包括 Eclipse 插件、功能部件等。任何人都能够轻易的将自己的软件做成 Eclipse 的插件,而 且这些插件只需简单的复制到 Eclipse 的插件文件夹下就可以被集成。 主要采用 SWT 界面库,支持多种本机界面风格。 2 需求分析 2.1 系统说明 本系统是一个小型的计算器系统, 可以处理简单运算操作, 包括加、 减、 乘、 除、取平方、取倒数等;在处理操作的同时,也会播放相应的声音,如点击、鼠 标滑过、错误提示;完成上面的功能后,本系统只是实现了计算器的基本功能, 为了迎合时代的发展,本系统特别注重界面的设计,设计了自己的皮肤,并且可 以随意进行更换皮肤;本系统另外增加了一个功能,就是进行快速输入的功能,

***********2012 届本科毕业论文

5

可以不需要按键,直接进行输入,只要输入的算式是符合我们的运算规则,都可 以进行计算,否则,提示错误。 2.2 系统功能简介 2.2.1 基本功能 本系统实现了计算器的基本功能,包括加、减、乘、除、取平方、取倒数、 存储结果和对结果进行简单的加减操作, 并且可以进行快速的直接输入只需要满 足我们的计算规则。 2.2.2 声音播放功能 本系统添加了声音播放的功能,包括鼠标滑过、单击、错误提示;声音播放 的功能是通过下载 JMF,然后调用其接口进行声音播放,可以播放多种格式的声 音,如 mp3、wav、mp4 等,并且可以随意进行声音的更换,只需要满足 caculator.xml 文件中的配置。 2.2.3 皮肤更换功能 本系统的一大亮点就是可以进行皮肤的更换, 你可以随意添加自己喜爱的皮 肤,进行更换已很方便,只需要简单的配置 caculator.xml 文件就行了。 2.2.4 直接输入功能 本系统与以往的计算器有个不同之处——可以直接输入, 如果你觉得按键输 入比较慢,那么,这是一个比较好的选择。我们提供了一个文本框来接收算式, 在接收的同时,不采取任何校验机制,就像在记事本上编辑文本一样,如果输入 的算式是符合我们的计算规则,则可以计算,否则,提示错误。 3 系统设计 3.1 系统设计思想 本系统是根据计算器的各个功能进行多模块设计的, 这样做可以很方便的进 行单模块的调试,多模块的集成也是比较灵活的,并且多模块之间的通信业也是 很方便的。 单模块的调试是每个模块继承一个示例模块类,该示例模块类提供了实例 化、和调试的方法,使得每个模块只要关注自己的功能部分就行了,并且,各个

基于 Java 计算器小软件设计

6

模块之间的通信也是相对简单的,本系统通过一个公共类 Memory,其属性存储 了算式信息、结果信息、存储信息、图片基本路径、声音基本路径等信息。 系统的键盘输入监控和错误处理也是相对来说比较容易实现的, 这些操作都 是统一在监听器中是实现的,键盘输入监控只进行了相对简单的设计,只要不违 背我们的计算规则就行了。错误处理是根据错误类型,在显示模块中进行显示或 者弹出一个提示框,简单明了。 本系统最大的看点是计算模式,改变了以往的设计风格(输入两个数就要进 行计算一次),变成了计算一个算式,这样做可以不用将括号内的算式先计算, 然后记下,再进行括号级的优先级计算,省去了很多步骤。本系统的计算模式是 先计算特定括号内的算式,然后去括号,再计算特定括号内的算式,反复如此, 最终整个算式就计算完成了。 本系统也比较看重皮肤的设计,旨在制作可方便更换皮肤的计算器,只要按 照要求更改 caculator.xml 文件,更换皮肤是比较简单的。然后,为了改变比较 单调的、乏味的的计算器模式,本系统也添加了声音,有错误提示、鼠标滑过和 点击。 3.2 系统功能模块设计 计算器

总 的 控 制 模 块

显 示 模 块

直 接 输 入 模 块

键 盘 输 入 模 块

其 他 功 能 控 制 模 块

图 1 计算器组成图

本系统将各个功能进行合理的拆分,可以更好的理解各个功能,模块有总的 控制模块、显示模块、直接输入模块、键盘输入模块、附加功能控制模块。这样 做可以针对每个模块进行调试,设置每个模块的大小、样式等。

***********2012 届本科毕业论文

7

总的控制模块:控制计算器的最小话、关闭操作、窗口移动。 显示模块:将算式及其计算结果进行显示。 直接输入模块:在此模块中,未添加任何的校验机制,随意输入,但是在进 行计算是时,会进行算式的合理性检验。 键盘输入模块:提供相应的虚拟键盘,包括操作数和操作符。 其他功能控制模块: 控制输入方式、 声音的播放、 皮肤的更换 (暂时未添加) 。

示例模块

总 的 控 制 模 块

显 示 模 块

直 接 输 入 模 块

键 盘 输 入 模 块

其 他 功 能 控 制 模 块

图 2 各个模块之间的关系图

4 详细设计 4.1 系统概述 本系统主要是通过功能划分设计各个模块,然后添加了声音播放和皮肤更 换。项目结构图如下:

基于 Java 计算器小软件设计

8

图 3 项目结构图

计算器界面如下:

图 4 计算器界面(键盘输入)

图5

计算器界面(直接输入)

本系统的皮肤可以进行更换:

***********2012 届本科毕业论文

9

图 6 皮肤(1)

图 7 皮肤(2)

4.2 单模块 为了提高计算器系统的灵活性,特意根据计算器的各个功能进行拆分成模 块,可以进行单模块的调试,然后将各个模块集成在一起,提高开发效率和降低 后期的维护成本。 4.2.1 示例模块 为了实现单模块的调试,并且使得每个模块只关注于自己所要实现的功能, 所以,本系统特意实现了一个示例模块,其他模块只要实现此示例模块,就可以 轻松的进行调试。示例模块类 PanelDemo 的主要代码如下: public class PanelDemo{ protected JFrame frame = null; protected JPanel panel = null; public PanelDemo(Calculator caculator){ if(caculator == null){ frame = new JFrame("计算器的单个功能测试!!!"); panel = new JPanel(); return; } frame = caculator.frame; panel = new JPanel(); } public void initPanel(int width, int height){ getPanelDemo().setSize(width, height); getPanelDemo().setOpaque(false); } public JPanel getPanelDemo(){ return panel; }

基于 Java 计算器小软件设计

10

public JFrame getFrame(){ return frame; } public void initialize(){ frame.getContentPane().setLayout(null); getPanelDemo().setLocation(30, 10); getPanelDemo().setBorder(BorderFactory.createLineBorder(Color .white, 1)); frame.getContentPane().add(getPanelDemo()); frame.setUndecorated(false); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(620, 630); frame.setVisible(true); } } 4.2.2 总的控制模块 在此模块中, 实现了窗口的基本操作, 即关闭按钮、 最小化按钮、 窗口移动, 由于考虑到界面的美观性,最大化按钮未实现。总的控制类 ControlPanel 的主 要代码如下: private int mouseX, mouseY; public ControlPanel(Calculator caculator){ super(caculator); initPanel(420, 31); getPanelDemo().setLayout(null); ImageIcon exit_image = Utils.createImageIcon(Memory.IMAGE_BASICPATH + "control\\close.png"); ImageIcon deiconify_image = Utils.createImageIcon(Memory.IMAGE_BASICPATH + "control\\deiconify.png");

***********2012 届本科毕业论文

11

ImageIcon iconify_image = Utils.createImageIcon(Memory.IMAGE_BASICPATH + "control\\iconify.png"); JLabel exit = new JLabel(exit_image); JLabel deiconify = new JLabel(deiconify_image); JLabel iconify = new JLabel(iconify_image); exit.setBounds(385, -2, 30, 30); deiconify.setBounds(360, -2, 30, 30); iconify.setBounds(335, 0, 30, 30); exit.addMouseListener(new CloseMouseListener(exit)); iconify.addMouseListener(new IconifyMouseListener(getFrame(), iconify)); getPanelDemo().add(exit); getPanelDemo().add(deiconify); getPanelDemo().add(iconify); getPanelDemo().addMouseListener(new MouseListener(){ public void mouseClicked(MouseEvent e) {} public void mousePressed(MouseEvent e) { mouseX = e.getX(); mouseY = e.getY(); } public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} }); getPanelDemo().addMouseMotionListener(new MouseMotionListener(){ public void mouseDragged(MouseEvent e) { if(e.getModifiers() == MouseEvent.BUTTON1_MASK){

getFrame().setLocation(e.getXOnScreen() - mouseX,

基于 Java 计算器小软件设计

12

e.getYOnScreen() - mouseY); } } public void mouseMoved(MouseEvent e) {} }); } 4.2.3 显示模块 显示模块是与用户交互的模块之一,它的作用很大,用户输入的算式、算式 所计算的结果和错误信息是通过此模块显示的。 显示类 EditorPanel 的主要代码 如下: private JEditorPane editorPane = new JEditorPane(); public EditorPanel(Calculator caculator) { super(caculator); editorPane.setSize(300, 300); getPanelDemo().setLayout(null); editorPane.setOpaque(false); editorPane.setEditable(false); editorPane.setEnabled(false); editorPane.setFont(new Font("楷体_GB2312", Font.BOLD, 14)); editorPane.setForeground(new Color(230, 230, 230)); } public JEditorPane getEditorPanel(){ return editorPane; } public void initialize(){ frame.getContentPane().setLayout(null); getEditorPanel().setLocation(100, 10); getEditorPanel().setBorder(BorderFactory.createLineBorder(Color.w

hite, 1));

***********2012 届本科毕业论文

13

frame.getContentPane().add(getEditorPanel()); frame.setUndecorated(false); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(420, 630); frame.setVisible(true); }

图 8 显示模块的界面截图

4.2.4 键盘输入模块 键盘输入模块提供了一个相对来说功能较为简单的虚拟键盘, 用户通过用鼠 标单击此键盘输入算式,此模块中提供了简单的校验机制,以防止输入错误,违 背我们的计算规则。 键盘类 KeysPanel 的主要代码如下: public KeysPanel(Calculator caculator) { super(caculator); initPanel(320, 116); getPanelDemo().setLayout(null); JPanel numberKeysPanel = new NumberKeysPanel(caculator).getPanelDemo(); JPanel operatorKeysPanel = new OperatorKeysPanel(caculator).getPanelDemo(); numberKeysPanel.setLocation(0, 0); operatorKeysPanel.setLocation(140, 0); getPanelDemo().add(numberKeysPanel);

基于 Java 计算器小软件设计

14

getPanelDemo().add(operatorKeysPanel); } 数字键盘类 NumberKeysPanel 的代码如下 public class NumberKeysPanel extends PanelDemo{ private String path = Memory.IMAGE_BASICPATH + "key\\number\\"; public NumberKeysPanel(Calculator caculator){ super(caculator); GridLayout gridLayout = new GridLayout(4, 3); gridLayout.setHgap(3); gridLayout.setVgap(3); super.initPanel(140, 120); getPanelDemo().setLayout(gridLayout); initNumberPanel(); } public void initNumberPanel(){ String[] numberName = {"7", "8", "9", "4", "5", "6", "1", "2", "3", "0", "dian", "zhengfu"}; JLabel[] labels = new JLabel[12]; for(int i=0; i<12; i++){ labels[i] = new JLabel(Utils.createImageIcon(path + numberName[i] +".png")); labels[i].addMouseListener(new NumberKeysMouseListener(labels[i], numberName[i])); getPanelDemo().add(labels[i]); } } public static void main(String[] args){ NumberKeysPanel numberKeysPanel = new NumberKeysPanel(null); numberKeysPanel.initialize();

***********2012 届本科毕业论文

15

} } 操作符键盘类 OperatorKeysPanel 的代码如下: public class OperatorKeysPanel extends PanelDemo{ private String path = Memory.IMAGE_BASICPATH + "key\\char\\"; public OperatorKeysPanel(Calculator caculator){ super(caculator); super.initPanel(180, 120); BoxLayout boxLayout = new BoxLayout(getPanelDemo(), BoxLayout.X_AXIS); getPanelDemo().setLayout(boxLayout); getPanelDemo().add(initLeftPanel()); getPanelDemo().add(Box.createRigidArea(new Dimension(2, 1))); getPanelDemo().add(initRightPanel()); } public JPanel initLeftPanel(){ JPanel leftPanel = new JPanel(); GridLayout gridLayout = new GridLayout(4, 3); gridLayout.setVgap(3); gridLayout.setHgap(3); leftPanel.setOpaque(false); leftPanel.setLayout(gridLayout); leftPanel.setSize(180, 120); String[] leftNames = {"m+", "m-", "mc", "zuokuohao", "youkuohao", "mr", "jia", "jian", "daoshu", "cheng", "chu", "pingfang"}; JLabel[] labels = new JLabel[12]; for(int i=0; i<12; i++){ labels[i] = new JLabel(Utils.createImageIcon(path + leftNames[i] +".png"));

基于 Java 计算器小软件设计

16

labels[i].addMouseListener(new OperatorKeysMouseListener(labels[i], leftNames[i])); leftPanel.add(labels[i]); } return leftPanel; } public JPanel initRightPanel(){ JPanel rightPanel = new JPanel(); BoxLayout boxLayout = new BoxLayout(rightPanel, BoxLayout.Y_AXIS); rightPanel.setOpaque(false); rightPanel.setLayout(boxLayout); rightPanel.setSize(40, 120); String[] rightNames = {"tuige", "ac", "dengyu"}; JLabel[] labels = new JLabel[3]; Dimension HGAP3 = new Dimension(1, 4); for(int i=0; i<3; i++){ labels[i] = new JLabel(Utils.createImageIcon(path + rightNames[i] +".png")); labels[i].addMouseListener(new OperatorKeysMouseListener(labels[i], rightNames[i])); rightPanel.add(labels[i]); if(i == 0){ rightPanel.add(Box.createRigidArea(HGAP3)); }else if(i == 1){ rightPanel.add(Box.createRigidArea(new Dimension(1, 6))); }else if(i == 2){ rightPanel.add(Box.createRigidArea(new Dimension(1, 4))); } }

***********2012 届本科毕业论文

17

return rightPanel; } public static void main(String[] args){ OperatorKeysPanel controlCharPanel = new OperatorKeysPanel(null); controlCharPanel.initialize(); }

图 9 键盘输入模块的界面截图

4.2.5 直接输入模块 为了更快的输入(粘贴算式、快速输入等),本系统提供了一个文本框,用 以输入算式,在此文本框中输入算式时,不提供任何的校验机制,但是,在计算 时,如果出现错误,则会进行错误提示。直接输入类 InputPanel 的主要代码如 下: private JPanel panel; private JEditorPane editorPanel; public InputPanel(Calculator caculator){ super(caculator); panel = new BackgroundPanel(320, 116, "E:\\Caculator\\Image\\input\\background.png"); panel.setLayout(null); JLabel dengyu = new JLabel(Utils.createImageIcon("E:\\Caculator\\Image\\input\\dengyu.png ")); dengyu.setSize(260, 33); dengyu.setLocation(28, 75);

基于 Java 计算器小软件设计

18

dengyu.addMouseListener(new DengyuMouseListener(dengyu)); getPanelDemo().add(dengyu); editorPanel = new EditorPanel(caculator).getEditorPanel(); editorPanel.setOpaque(false); editorPanel.setEditable(true); editorPanel.setEnabled(true); editorPanel.setSize(296, 61); editorPanel.setLocation(11, 9); editorPanel.addCaretListener(this); getPanelDemo().add(editorPanel); } public JPanel getPanelDemo(){ return panel; } public JEditorPane getEditorPanel(){ return editorPanel; } public void caretUpdate(CaretEvent e) { Memory.FORMULA = ((JEditorPane)e.getSource()).getText(); }

图 10 直接输入模块的界面截图

4.2.6 其他功能控制模块 由上面的键盘输入模块和直接输入模块可知,这两个模块不可能同时出现, 并且下面将要提到的声音播放中开关控制的实现, 还有皮肤更换模块 (未实现) ,

***********2012 届本科毕业论文

19

都需要一个专门的模块进行控制, 所以出现了该模块, 命名为其他功能控制模块。 其他功能控制类 ControlOtherFunctionPanel 的主要代码如下: Public ControlOtherFunctionPanel (Calculator caculator, JLabel automent, JLabel music) { super(caculator); initPanel(390, 65); getPanelDemo().setLayout(null); automent = new JLabel(Utils.createImageIcon(Memory.IMAGE_BASICPATH + "otherfunction\\" + "input_jianpan.png")); automent.setSize(95, 60); automent.setLocation(18, 2); music = new JLabel(Utils.createImageIcon(Memory.IMAGE_BASICPATH + "otherfunction\\" + "music_open.png")); music.setSize(95, 60); music.setLocation(276, 2); automent.addMouseListener(new AutomentMouseAction(automent)); music.addMouseListener(new MusicMouseListener(music)); getPanelDemo().add(automent); getPanelDemo().add(music); } 4.3 多模块之间的通信与集成 上面的每一个模块分开看,都是单一的,所实现的功能也是单一的,如果将 它们集成在一起,则需要一个良好的通信机制。本系统所以实现的通信机制是通 过实现一个公共类 Memory,其属性存储了通信所需的信息。存储信息类 Memory 的主要代码如下: public class Memory { public static String FORMULA = "";//存储用户输入的计算公式 public static String TEXT = "";//存储用户使用痕迹 public static double MM = 0;//存储用户的计算结果

基于 Java 计算器小软件设计

20

public static String XML_PATH = "E:\\Caculator\\caculator.xml"; public static String IMAGE_BASICPATH = "E:\\Caculator\\Image\\"; public static String MUSIC_BASICPATH = "E:\\Caculator\\Music\\"; public static boolean MUSIC = true;//是否播放声音,默认为true } 4.4 声音播放 为了改变沉闷的、乏味的计算器系统,本系统添加了声音播放功能,有错误 提示、鼠标滑过、鼠标点击等声音。声音播放的实现是通过下载 JMF,通过 JMF 可以播放多种音乐格式,有 mp3、wav、mid、mp4 等,本系统采用的是 mp3 格式。 并且,在遵循所支持格式和大小的情况下,只需简单的更改 caculator.xml 中的 music-path 的值, 就可以随意更改声音, 换成你所喜欢的声音。 声音播放类 Music 的主要代码如下: private static File file = null; private static Player audioPlayer = null; public Music(){} public Music(String fileName){

file = new File(Memory.MUSIC_BASICPATH + fileName);
} public static void setFileName(String fileName){

file = new File(Memory.MUSIC_BASICPATH + fileName);
} public static void play(String fileName){ if(!Memory.MUSIC){//如果music为false,则不播放 return ; } //设置file

setFileName(fileName);
try{

audioPlayer = Manager.createRealizedPlayer(file.toURL());

***********2012 届本科毕业论文

21

audioPlayer.start();
}catch(Exception e){ e.printStackTrace(); } } 音频文件的配置代码如下: 皮肤配置文件 caculator.xml 代码如下: <caculator-config> <path> <image-path>E:\\Caculator\\Image\\</image-path> <music-path>E:\\Caculator\\Music\\</music-path> </path> </caculator-config> 4.5 皮肤的实现与更换 为了与以往的计算器相区别,也为了迎合现代软件的发展趋势,本系统摒弃 了以往的计算器外观,采用自己制作的计算器皮肤。并且,为了更好的更换自己 的皮肤,本系统的初步实现是通过外部配置文件来配置本系统所需的皮肤。在 caculator.xml 中,你可以设置 image-path 的值来设置,皮肤存放路径。主要 皮肤设置代码类 BackgroundPanel 的代码如下: private int height;//panel的高度,默认情况下,也是图片的高度 private int width;//panel的宽度,默认情况下,也是图片的宽度 private String fileName;//图片地址 public BackgroundPanel(){} public BackgroundPanel(int width, int height, String fileName){ this.height = height; this.width = width; this.fileName = fileName; super.setSize(width, height); }

基于 Java 计算器小软件设计

22

public void setHeight(int height){ this.height = height; super.setSize(width, height); } public void setWidth(int width){ this.width = width; super.setSize(width, height); } public void setSize(int width, int height){ super.setSize(width, height); } public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2=((Graphics2D)g); ImageIcon image = Utils.createImageIcon(fileName); g2.drawImage(image.getImage(), 0, 0, width, height, this); } public void initialize(){ JFrame frame = new JFrame(); Container cap = frame.getContentPane(); JPanel controlPanel = new BackgroundPanel(420, 31, "E:/Caculator/Image/controlBackground.png"); cap.add(controlPanel); frame.setSize(1000, 300); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } 皮肤配置文件 caculator.xml 代码如下: <caculator-config>

***********2012 届本科毕业论文

23

<path> <image-path>E:\\Caculator\\Image\\</image-path> <music-path>E:\\Caculator\\Music\\</music-path> </path> </caculator-config> 4.6 计算模式 最重要的功能是计算功能, 本系统的计算功能所采用的计算模式与以往的计 算模式不同,该计算模式计算的是整个算式,在计算前先为整个算式添加括号, 先计算特定括号内的算式,然后将括号去掉,再计算特定括号内的算式,反复如 此,直到没有括号为止,结果也就出来了。计算模式类 Caculating 类的主要代 码如下: //将传进来的公式分割成两个list,一个存储计算符,一个存储数字 public void splitIntoList(String str){ int begin = 0; str = transform(str); List<String> sign_temp = new ArrayList<String>(); List<Double> number_temp = new ArrayList<Double>(); System.out.println(str); for(int i=0; i<str.length(); i++){ if(str.charAt(i) == ' '){ if(begin < i){ number_temp.add(transfromSToDouble(str.substring(begi n, i))); } begin = i + 1; continue; } if(checkIsSign(str.charAt(i))){ sign_temp.add(new String(str.charAt(i) + ""));

基于 Java 计算器小软件设计

24

if(begin < i){ number_temp.add(transfromSToDouble(str.substring(begi n, i))); } begin = i + 1; } } sign = sign_temp; number = number_temp; } //获取计算结果 public double getResult(String formula) throws Exception{ splitIntoList(formula); int[] mark; int size = sign.size(); while(size > 1){ mark = getFirstMarkFromEnd(); caculate(mark[0], mark[1]); size = sign.size(); } return number.get(0); } //按单个括号内的优先级进行计算 public double caculate (int sign_begin, int num_begin){ caculateForTopLevel(sign_begin + 1, num_begin); caculateForMediumLevel(sign_begin + 1, num_begin); caculateForLowLevel(sign_begin + 1, num_begin); clear(sign_begin); return number.get(0);

***********2012 届本科毕业论文

25

} //计算与高级别(平方运算符)运算符相关的数 public void caculateForTopLevel(int sign_begin, int num_begin){??} //计算与中等级别(乘除运算符)运算符相关的数 public void caculateForMediumLevel(int sign_begin, int num_begin){??} //计算与低级别(加减运算符)运算符相关的数 public void caculateForLowLevel(int sign_begin, int num_begin){??} //清除括号 public void clear(int sign_begin){??} //获取可以可以用的关于 sign 和 number 的 mark public void getFistFromEnd(){ //mark[0]表示 sign 中的 mark、mark[1]表示 number 中的 mark ?? }

图 11 计算模式

5 测试 5.1 测试目标 在设计本系统初期,将各个功能设计成相应的模块,就是为了更方便的进行 测试和提高开发效率。 在进行单模块测试时, 主要是调试各个模块的大小、 布局、 颜色等,在单模块测试结束后,就要进行单模块集成测试,就是测试各个模块之 间的通信功能。

基于 Java 计算器小软件设计

26

在进行计算功能测试时,要考虑到算式的计算可能出现的各种情况,并且注 意算式中各个子算式的优先级等。 在皮肤测试功能中, 主要是看皮肤是否正确显示, 单模块的背景是否透明等。 5.2 单模块测试和多模块集成测试 在进行单模块测试时,主要是调试各个模块的大小、布局、颜色等,在单模 块测试结束后,就要进行单模块集成测试,就是测试各个模块之间的通信功能。 主界面的背景测试图、单个功能侧视图如下:

图 12 主界面背景测试图

图 13 总的控制模块的界面测试图

***********2012 届本科毕业论文

27

图 14 直接输入模块的界面测试图

图 15 键盘输入模块的界面测试图

5.3 计算功能测试 在进行计算功能测试时,要考虑到算式的计算可能出现的各种情况,并且注 意算式中各个子算式的优先级等。计算模式参考图 11。 5.4 皮肤功能测试 在皮肤测试功能中, 主要是看皮肤是否正确显示, 单模块的背景是否透明等。 6 总结 通过这次毕业设计,我学到很多知识,巩固了以前学到的 Java 知识,同时 又学到很多新的知识,在这次毕业设计中,我将一个项目分拆成很多模块进行设 计,很大程度上简化了本计算器系统的设计,也加快了开发速度。将项目分拆成 很多个模块, 不仅方便单个模块的调试, 而且多个模块间的集成也是比较方便的。 以前没有接触过皮肤制作和音频播放的制作,通过此次毕业设计,我学到了 如何设置皮肤和播放音频文件。 在这次毕业设计中,我使用了一个 xml 格式的配置文件,主要是配置皮肤路 径和音频路径,学到了如何读取 xml 文件中的信息和提取有用信息。

基于 Java 计算器小软件设计

28

我还学到了很多知识,在此就不一一列举,非常感谢学校给我这次机会,也 非常感谢******老师耐心的指导。 致谢 历时将近一个月的时间终于将这篇论文写完, 在论文的写作过程中遇到了无 数的困难和障碍, 都在同学和老师的帮助下度过了。 尤其要强烈感谢我的论文指 导老师——******老师, 她对我进行了无私的指导和帮助, 不厌其烦的帮助进行 论文的修改和改进。在此向帮助和指导过我的各位老师表示最中心的感谢! 感谢这篇论文所涉及到的各位学者。 本文引用了数位学者的研究文献, 如果 没有各位学者的研究成果的帮助和启发,我将很难完成本篇论文的写作。 感谢我的同学和朋友, 在我写论文的过程中给予我了很多需要的素材, 还在 论文的撰写和排版的过程中提供热情的帮助。 由于我的学术水平有限,所写论文难免有不足之处,恳请各位老师和学友批 评和指正!

参考文献 [1] 林树泽.Java 完全自学手册[M].北京:机械工业出版社,2009. [2] (美)埃克尔.Java 编程思想[M].陈昊鹏译.北京:机械工业出版社,2007. [3] (美)韦斯.数据结构与算法分析 Java 语言描述[M].冯舜玺译.北京:机械工业出版社, 2009. [4] 何昀峰,鹏.Java Swing 图形界面开发与案例详解[M].北京:清华大学出版社,2008. [5] 柳西玲,斌.Java 语言应用开发基础[M].北京:清华大学出版社,2006. [6] (美)Rogers Cadenhead. Java 编程入门经典[M].梅兴文译.第 4 版.北京:人民邮电出 版社,2007. [7] 赵毅.跨平台程序设计语言——Java[M].西安:西安电子科技大学出版社,2006. [8] 王路群.Java 高级程序设计[M].北京:中国水利水电出版社,2006. [9] (美)Herbert Schidt.Java 参考大全[M].鄢爱兰,鹿江春译.北京:清华大学出版 社.2006 [10] 宛延闿.实用 Java 程序设计教程[M].北京:机械工业出版社,2006. [11] 陈国君.Java2 程序设计基础[M].北京:清华大学出版社,2006. [12] 郑莉,王行言,马素霞.Java 语言程序设计[M].北京:清华大学出版社,2006. [13] 丁振凡.Java 语言实用教程[M].北京:北京邮电大学出版社,2005. [14] 朱喜福.Java 程序设计[M].北京:人民邮电出版社,2005. [15] 赵文靖.Java 程序设计基础与上机指导[M].北京:清华大学出版社,2006. [16] 李刚.疯狂 Java 讲义[M].北京:电子工业出版社,2008.

***********2012 届本科毕业论文

29

[17] (美)Cay S. Horstmann,ary Cornell.Java 核心技术(卷 1) [M].北京:机械工业出版 社,2008. [18] 曲培新. JAVA 项目开发案例精粹[M].北京:电子工业出版社,2010. [19] 孙一林. Java 程序设计案例教程[M].北京:机械工业出版社,2011. [20] 吴亚峰.天学通 Java 项目案例开发[M].北京:电子工业出版社,2009. [21] 杨昭.二级 Java 语言程序设计教程[M].北京:中国水利水电出版社,2006. [22] 吴其庆.Java 程序设计实例教程[M].北京:冶金工业出版社,2006. [23] 施霞萍.Java 程序设计教程[M].北京:机械工业出版社,2006. [24] 贝利.数据结构 Java 语言描述.北京:清华大学出版社,2004. [25] 印旻.Java 与面向对象程序设计教程.北京:清华大学出版社,1999. [26] 李诚.Java2 简明教程(第 2 版).北京:清华大学出版社,2004. [27] (美)Mark Grand.Java 模式.北京: 电子工业出版社,2004.


赞助商链接
相关文章:
基于Java_Web技术开发的BBS论坛(含源文件)_图文
基于Java_Web技术开发的BBS论坛(含源文件)_计算机软件及应用_IT/计算机_专业...这正是计算 机被广泛应用于信息管理系统的环境.计算机的最大好处在于利用它能够...
基于JAVA的学生学籍管理系统毕业设计论文(含源文件)_图文
基于JAVA的学生学籍管理系统毕业设计论文(含源文件) - 题目:基于 JAVA 的学生学籍管理系统 毕业论文(设计)评语及成绩 论文类型:软件开发型 评语: 指导教师(签字)...
基于Java的人事管理系统设计(含源文件)
基于Java的人事管理系统设计(含源文件)_管理学_高等...信息与计算科学***班 学号 *** 系 (部) 理学院...采用软件工程思想,使用 java 语 言面向对象程序设计...
Java在线考试系统毕业设计说明书(含源文件)
Java在线考试系统毕业设计说明书(含源文件)_计算机软件及应用_IT/计算机_专业...同时,在现阶段,基于互联网应用技术的在线考试系统,由于现在浏览器访问极为 方便...
基于java酒水销售系统(含源文件)
基于java酒水销售系统(含源文件) - 本科毕业论文(设计) 题 目 基于 ssh,jsp 技术 网上订货系统的设计开发 院专姓学系业名号 计算机科学与技术 计算机科学...
基于JAVA的互联网拍卖系统的设计(含源文件)
基于JAVA的互联网拍卖系统的设计(含源文件)_计算机...他在网站上加了一个小的拍卖程序,帮助 人们交换...把评 价中的分数统计起来用于计算拍卖者的信用程度...
基于Java+oracle学生信息管理系统的设计与实现(含源文件)
基于Java+oracle学生信息管理系统的设计与实现(含源文件)_计算机软件及应用_IT/...可行性研究的目的是为了对问题进行研究 ,以最小的代价在最短的时间内确 定...
基于javaweb的服装销售管理系统的设计与实现(含源文件)
管理系统的设计与实现(含源文件)_电脑基础知识_IT/...为企业计算及电子商务应用系统提供了有关技术和丰富...Java 开发语言,利用 tomcat 实现 web 应用程序。采用...
基于java的学生学籍管理系统开发(含源文件)_图文
基于java的学生学籍管理系统开发(含源文件) - PINGDINGSHAN UNIVERSITY 专业实训(四) 项目报告 题 目: 学生学籍管理系统 软件学院 软件工程 院 ( 系...
基于Java的人事管理系统设计(含源文件)毕业论文
基于Java的人事管理系统设计(含源文件)毕业论文 - 毕业论文 题 目 基于 Java 的人事管理系统 的设计与实现 毕业设计(论文)原创性声明和使用授权说明 原创性声明 ...
更多相关标签: