赞
踩
一、 设计分析
1.1任务及其目的
设计一个计算器应用程序,完成复杂的科学运算。设计的计算器应用程序可以完成加法、减法、乘法、除法和科学函数运算。且有小数点、正负号、求倒数、退格和清零等功能。用鼠标点击相应的数字键和运算符号键,然后点击=按钮。窗口上方的文本框将会显示计算出来的结果,如果未显示说明输入的表达式有误。要将文本框清零,科单击清零按钮。
1.2设计思路
实现主要分为两部分:
三、 各模块的功能及程序说明
3.1 Calcuator主类模块
3.1.1 初始化特殊函数按钮
由于JButton 按钮上无法显示出x2,x3, , ,所以图片粘贴的办法,将相应的函数图片粘贴到按钮的表面。,
//创建x的平方,x的三次方,x的y次方,x开y次方按钮 ImageIcon squareimg = new ImageIcon("src\\Calcuator\\x的平方.png");// 创建图片对象 ImageIcon cubeimg = new ImageIcon("src\\Calcuator\\x的三次方.png");// 创建图片对象 ImageIcon powerimg = new ImageIcon("src\\Calcuator\\x的y次方.png");// 创建图片对象 ImageIcon readicationimg = new ImageIcon("src\\Calcuator\\x开y次方.png");// 创建图片对象 Image squareimage = squareimg.getImage(); Image cubeimage = cubeimg.getImage(); Image powerimage = powerimg.getImage(); Image readicationimage = readicationimg.getImage(); //为把它缩小点,先要取出这个Icon的image ,然后缩放到合适的大小 Image squaresmallImage = squareimage.getScaledInstance(25,25,Image.SCALE_FAST); Image cubesmallImage = cubeimage.getScaledInstance(25,25,Image.SCALE_FAST); Image powersmallImage = powerimage.getScaledInstance(25,25,Image.SCALE_FAST); Image readictionsmallImage = readicationimage.getScaledInstance(30,30,Image.SCALE_FAST); //再由修改后的Image来生成合适的Icon; //***Image对象创建ImageIcon对象,可查阅ImageIcon的构造方法*** ImageIcon smallIcon = new ImageIcon(squaresmallImage); ImageIcon cmallIcon = new ImageIcon(cubesmallImage); ImageIcon pmallIcon = new ImageIcon(powersmallImage); ImageIcon rmallIcon = new ImageIcon(readictionsmallImage); JButton squarebuttion=new JButton(smallIcon); JButton cubebuttion=new JButton(cmallIcon); JButton powerbuttion=new JButton(pmallIcon); JButton readictionbuttion=new JButton(rmallIcon);
图3.1.1 特殊函数按钮初始化代码图
3.1.2 初始化计算器的界面
使用构造法,进行计算器开始界面的设计。
public Calcuator (){ super("计算器"); this.setBounds(400, 250, 900, 680); //设置窗体图片 // this.setIconImage(walkpaperimage); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体的布局形式 GridBagLayout gr=new GridBagLayout(); GridBagConstraints gc=new GridBagConstraints(); //设置窗体布局 this.setLayout(gr); //创建模板 JPanel jp1 = createPanel1(); JPanel jp2 = createPanel2(); //对整个窗体进行网格包布局 jp1,jp4 gc.weightx=90;gc.weighty=68;gc.fill=GridBagConstraints.BOTH; gc.gridwidth=7;gc.gridheight=10; gc.gridx=0;gc.gridy=0; gr.setConstraints(jp1,gc); this.add(jp1); gc.gridwidth=3;gc.gridheight=10; gc.gridx=7;gc.gridy=0; gr.setConstraints(jp2,gc); this.add(jp2); this.setVisible(true); }
图3.1.2构造计算器开始界面
设计思路:
1、 将计算器开始窗口划分为两个左右大面板。左边的面板放置用于显示的文本域和按钮,右边的面板用于放置历史记录按钮和内存按钮及其对应的文本域.。然后采用网格包布局管理器,进行分配比例和布局。
2、 (方法createPanel1())在左边的大面板中再创建两个面板。将文本域放置在一个面板,按钮也放置在单独的一个面板。然后采用边界布局,将文本域所在的面板放置大面板的North,按钮所在的面板放置在Center。在按钮所在的面板中采用网格布局放置每一个按钮,然后实例化监听类(ButtonAction)的对象(ba),并在每一个按钮上添加监听对象(ba)。
3、 (方法 createPanel2())在右边的大面板中同样创建两个面板。一个放置历史记录按钮和内存按钮,一个放置对应的文本域。也是采用边界布局,将按钮所在的面板置于North,将文本域的面板置于Center。放置文本域的面板再采用卡片布局,放置不同按钮对应的文本域。
3.1.3 监听类(ButtonAction)的设置
用Plantuml绘制监听类的原理如下:
代码与原理图有所出入,不过大致原理是一样的。
3.1.3 监听类原理图
设计思路
1、 将计算器所有按钮(除去Degr、历史记录、内存)的监听编写在一个类中。
2、 把计算器的按钮分为四个类型:常量型、运算符、函数型、功能。并设计对应的四个模块。点击按钮则运行对应模块。
3.2 ScienCalcuator类
把要进行计算的表达式转入到ScienCalcuator类,进行科学运算,并计算出来的结果替代相应的字符。最后得到没有科学运算符的字符串,再将其传入BaseCalcuator中。
3.2.1 对计算式进行预处理
去掉 math 中的空格,替换 π,替换自然指数 e
3.2.1 计算式的预处理
3.2.2 pow运算(”^”)
获取^左右两边的参数进行Math.pow计算,如果参数是表达式,需要调用fScienCalcuator方法,然后用结算结果替换科学运算式部分。
大致原理如下图:
String fPower(String con_str) {
while (con_str.contains("^")) {
//1.中间寻找的点
int midIndex = con_str.lastIndexOf
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。