基于Java实现的科学计算器

Prettygirl

发布日期: 2020-10-07 10:56:28 浏览量: 119
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

一、开发环境

  • 集成开发环境:eclipse

  • 编码方式:UTF - 8

  • JDK版本:jdk-8u131-docs-all

二、题目需求

本程序可通过菜单(JMenu)选择功能查看(V)、编辑(E)、帮助(H)等。计算器囊括科学计算器、IT计算器和关系计算器。通过Swing和awt实现JAVA程序可视化页面。用户可以通过鼠标点击输入相应的运算。科学计算器程序可进行四则运算。而且通过两个链表(LinkedList),能对输入的算式判断运算符优先级。

科学计算器实现的功能有幂运算、对数运算、三角函数、平方根、立方根、求余、阶乘等等。其中三角函数可分别进行角度、弧度、梯度运算。IT计算器可实现二、八、十、十六进制数相互转换,求倒数等功能。关系计算器解决了关系称呼上的问题,基本覆盖了关系血脉上的称呼。

软件功能架构图如下:

三、界面设计

界面MyFrame为主界面,统筹各个界面。先在MyFrame中设置BorderLayout,把JMenuBar的实例菜单栏mb加载北边,把JPanel的实例cardPanel加载在中间。

mb上添加JMenu菜单查看(V),编辑(E),帮助(H)。查看中添加JMenuItem菜单项系统时间,科学型,关系型,IT型,退出。编辑中添加JMenu菜单背景和字体。设置中添加JMenuItem菜单项绿色、白色、黄色、青色、粉色和蓝色。字体添加菜单项增大、减小。帮助菜单中添加菜单项使用(U)、关于(A)。帮助菜单项通过注册MenuListen,通过JOptionpane显示帮助信息图。

主页面的创意之处为cardPanel。其设置为CardLayout布局,依次添加SciencePanel,ITPanel,RelationshipPanel面板。菜单项的计算器类型按钮可切换至相应的计算器类型,从而实现一个软件多个计算器的功能。

SciencePanel为科学计算器面板。其面板为GridLayout布局,二行一列。第一行的contextPanel设置为BorderLayout布局,带有滚动条的文本域加载在center,角度和时间加载在south。第二行的buttonPanel设置为GridLayout,依次添加各个按钮。该Panel的创意之处为添加了单选按钮弧度、角度、梯度。

ITPanel添加带滚动条的文本域,单选按钮,数字按钮。该Panel的特点是单选按钮可对数字进行多进制转换,因此命名为程序员(IT)计算器。

relationshipPanel添加文本域和带中国关系称呼的按钮。该Panel的优势在于通过鼠标点击按钮,通过后台的判断,想文本域显示称呼关系,帮助用户解决称呼问题。

四、程序实现

MyFrame主界面的菜单项注册MenuListen动作监听器。菜单项系统时间按下后,会通过JOptionPane的showMessageDialog方法new一个TimePanel实例。TimePanel面板通过线程的run方法,在界面未关闭的前提下,每睡1秒钟得到一次系统时间,从而实现输出动态时间。菜单项“科学型”、“关系型”、“IT型”按下后,通过CardLayout的show方法,显示相应的卡布布局SciencePanel、RelationshipPanel、ITPanel。背景的菜单项多次调用自定义的setColor方法,减少代码量,提高程序效率。setColor方法调用各布局的setBackground方法设置背景颜色。菜单项增大、减小调用自定义的setFont方法,每次按下增大、减小文本域的5个字体大小。“使用(U)”和“关于(A)”菜单项通过JOptionPane显示相应信息图片。图片则通过调用new GetImage实例的create方法得到默认路径下的图片。此处定义的该类多次被引用,减少了程序的代码量。

MyFrame界面结构图如下:

SciencePanel的文本域内容字体大小可通过菜单项增大或减小,菜单项注册MenuListen动作监听器。与文本域同在contextPanel的at面板,其上面有单选按钮弧度、角度、梯度。在使用三角函数时,调用自定义方法judge方法进行相应的判断转换。此外还new TimePanel实例显示动态时间。Button键有三角函数、幂运算、根号运算、四则运算、阶乘、数字键、清除键等。Button键注册ScienceListener监听器,监听器依据按钮值进行操作。若操作符为+、-、×、%、÷、xⁿ运算,调用DAO包下的Calculator类的Calculate方法,初始化相应枚举类的method,new BigDecimal实例避免精度损失。

SciencePanel的界面结构图如下:

RelationshipPanel有文本域、动态时间和关系按钮。关系按钮注册Relationshiper,通过截取前三个关键字选择相应的judge方法,然后比较判断向文本域输出关系称呼。清空键“C”会重新设置文本内容为“我的”。删除键每一次删除两个关键字,并调用judge方法重置关系内容。

ITPanel可选择单选按钮二、八、十、十六进制对文本域中的数字转换。当用户按下“=”号后, ITPanel自身监听类对结果通过getDigit方法把结果转换成相应的进制数。此外,ITPanel的CE清除键会清除最近一次输入的数字。

五、关键代码

如果ScienceListener监听器事件值为数字,则加载在StringBuffer的实例stb里面。如果事件值为运算符+-×÷ModXⁿ时,把stb的值赋给numList链表,把运算符赋给optList链表。直到用户输入了等号,则进行计算并将计算结果显示出来。计算过程如下:

如算式 5 + 2×3 - 8 ÷2 ,会被分解为两个链表:numList存储 52382;optList存储 + × - ÷。然后循环以下过程:在optList中找到第一个优先级最高的运算符(× ÷ Mod Xⁿ)位置下表indext。然后在numList中找到下标为 indext 和 indext+1 的项,进行相应运算后,删除这两项,并把结果插入到numList的indext位置。在optList链表中删除indext运算符。

如上例中,执行一次运算后,numList链表为: 5 6 8 2 ,optList链表为+ - ÷。

六、测试分析

6.1 功能测试

菜单栏 - > 查看(V)- > 系统时间、科学型、关系型、IT型

菜单栏 - > 编辑(E)- > 背景(B)- > 绿色,黄色 ,字体(F)- > 增大,减小

菜单栏 - > 帮助(H)- > 使用(U),帮助(H)- > 关于(A)

综上可知,测试结果与预计结果相符。鼠标按下菜单项后,可实现与预计结果相应的功能。

6.2 数据测试

科学型计算器初始页面如下图,测试背景色依次设置为黄色、绿色、粉色。

测试3.6-2+2×5+15÷3,进行四则运算结果为16.6,与预计结果一致,多式预算,体现符号优先性。

测试sin30 º+lg10,结果为1.5,与预计结果一致,三角函数以角度计算,对数以10为底,运算结果正确。

测试3!+2×π,结果约等于12.28,因为数学上π值为约为3.141592653589793,故此处精确到小数点后15位,键值π数值精确,阶乘运算正确。

6.3 关系型计算器测试

按钮向文本域输入称呼信息,测试关系称呼“我的妻的父”,文本域回显“岳父”,关系称呼判断正确。

测试关系称呼“我的父的母”,点击删除键删除最近一层关系,变成“我的父”,文本域回显由“奶奶”转变为“爸爸”,关系称呼转变正确,删除键调用成功。而且鼠标所到之处,按钮变成透明且字体为红色,方便提示用户所选的按钮。

6.4 IT型计算器测试

测试十进制数算式94 + 99,选择十六进制单选按钮输出结果,得到测试结果为C1,与预计结果相符。

测试根式运算和加法运算式√(118+3)+2,选择二进制单选按钮输出结果,得到测试结果为1101,与预计结果相符。

综上可得,各类计算器均可实现相应运算,并得到的结果与预计结果一致。

总结

Java是一门面向对象语言,定义多种方法,方便编程人员开发程序。Java还可以实现多线程,一个程序同步运行多个任务。原来不会做程序可视化页面、不习惯使用线程、不会使用菜单、不会使用CardLayout布局……通过自学和老师上课指点,逐渐掌握和运用。

感觉收获最大的是在本程序的科学型计算器使用了数据结构链表,使得符号运算具有优先性,真正把所学到的知识用到实际开发中来。此外,程序改进和创意如下:

  • 举一反三,使用卡片布局,通过菜单栏选择多种计算器

  • 使用线程,显示动态时间

  • 科学计算器通过数值链表和操作符链表,能对输入的算式判断运算符优先级

  • 可自主设置文本域字体大小和背景色,鼠标移到按钮会变透明且字体为红色

  • 单选按钮实现弧、角、梯度相互转换以及二、八、十、十六机制相互转换

  • 建立关系计算器,基本覆盖关系血脉称呼

本程序尚未有落脚之处。计算器未实现括号运算,计算器功能可实现更多(如数学和物理上的单位转换),IT型计算器可实现更多的程序员功能(例如显示字节)……日后有待完善。

上传的附件 cloud_download 基于Java实现的科学计算器.7z ( 4.42mb, 3次下载 )
error_outline 下载需要10点积分

发送私信

一个月总有那么三十几天不想上班

11
文章数
7
评论数
最近文章
eject