《软件集成开发》第一次作业

发布时间 2023-10-14 15:56:30作者: 爱吃番茄的西红柿

《软件集成开发环境》第一次作业实验报告

    一、实验目的

1、设计一个可实现加、减、乘、除功能的计算器软件

2、使用牛顿迭代法完成算术开方的运算

3、将自己编写的算术开方功能集成到计算器程序中,使计算器软件除了具备加、减、乘、除功能外,还具备算术开方功能

二、实验内容

1、先根据需求分析设计流程图,如下:

 

 

 

2、根据流程图编写代码

先完成简易计算器实现加减乘除的算法

代码如下

package cn.lidan.start;

import cn.lidan.util.Const;
import jdk.nashorn.internal.objects.NativeString;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Carculator extends JFrame implements ActionListener {
    //北面控件
    private JPanel jp_north = new JPanel();
    private JTextField input_text = new JTextField();
    private JButton c_Btu = new JButton("C");

    //中间的控件
    private JPanel jp_center = new JPanel();
    private NativeString btn_text;

    public Carculator() throws HeadlessException {
       this.init();
       this.addNorthComponent();
       this.addCenterButton();
    }


    //初始化的方法
    public void init(){
        this.setTitle(Const.TITLE);
        this.setSize(Const.FRAME_W,Const.FRAME_H);
        this.setLayout(new BorderLayout());

        this.setLocation(Const.FRAME_X,Const.FRAME_Y);//窗口固定到中心点位置
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    //添加北面的控件
    public void addNorthComponent(){
        this.input_text.setPreferredSize(new Dimension(230,30));
        jp_north.add(input_text);

        this.c_Btu.setForeground(Color.red);
        jp_north.add(c_Btu);

        c_Btu.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                input_text.setText("");
            }
        });
        this.add(jp_north,BorderLayout.NORTH);
    }

    //添加中间按钮
    public void addCenterButton(){
        String btn_text = "123+456-789*.0=/C√()";//按键内容
        String regex = "[\\+\\-*/.=C√()]";
        this.jp_center.setLayout(new GridLayout(5,4));//中间键的个数
        for(int i=0;i<20;i++){
            String temp = btn_text.substring(i,i+1);
            JButton btn = new JButton();
            btn.setText(temp);
            if(temp.matches(regex)){
              btn.setFont(new Font("粗体",Font.BOLD, 20));
                btn.setForeground(Color.red);
            }
            btn.addActionListener(this);
            jp_center.add(btn);
        }
        this.add(jp_center,BorderLayout.CENTER);
    }

    public static  void main(String[] args) {
        Carculator carculator = new Carculator();
        carculator.setVisible(true);
    }

    private  String firstInput = null;
    private String operator = null;
    @Override
    public void actionPerformed(ActionEvent e) {
        String clickStr = e.getActionCommand();
        if(".0123456789".indexOf(clickStr) != -1) {
            this.input_text.setText(input_text.getText() + clickStr);
            this.input_text.setHorizontalAlignment(JTextField.RIGHT);
           // JOptionPane.showMessageDialog(this, clickStr);
        }else if(clickStr.matches("[\\+\\-*/]{1}")){
            operator = clickStr;
            firstInput =this.input_text.getText();
            this.input_text.setText("");
        }else if(clickStr.equals("=")){
            Double a = Double.valueOf(firstInput);
            Double b = Double.valueOf(this.input_text.getText());
            Double result = null;
            switch (operator){
                case "+":
                    result = a+b;
                    break;
                case "-":
                    result = a-b;
                    break;
                case "*":
                    result = a*b;
                    break;
                case "/":
                    if(b!=0){
                        result =a/b;
                    }
                    break;
              case "C":
                    input_text.setText(" ");
                    break;
            }
            this.input_text.setText(result.toString());
        }

    }
}
package cn.lidan.util;

import java.awt.*;

public class Const {
    public static final int FRAME_W = 300;
    public static final int FRAME_H = 300;
    public static final int SCREEN_W = Toolkit.getDefaultToolkit().getScreenSize().width;
    public static final int SCREEN_H = Toolkit.getDefaultToolkit().getScreenSize().height;

    public static final int FRAME_X = (SCREEN_W - FRAME_W)/2;
    public static final int FRAME_Y = (SCREEN_H - FRAME_H)/2;

    public static final String TITLE = "计算器";
}

此时的运行结果如下

6+6=12.0

 

 6*6=36.0

 8-2=6.0

 

 

 10/5=2.0

 

 

 3、新建包编写牛顿迭代法开方的代码,并导入前面已完成简易计算器代码中,实现计算器的开方功能,重要代码如下

package sxj;

import java.util.Scanner;

public class Niudun {
    public static void main(String args[]){
        Scanner s = new Scanner(System.in);
        System.out.println("请输入一个非负整数");
        int c = s.nextInt();
        if (c<0){
            System.out.println("负数无法开方");
            System.out.println("输入有误!");
        }else{
            double x1,x0 =c;
            double fx=2*x0;
            x1 =x0 -(x0*x0-c)/fx;
            while(Math.abs(x1-x0)>1e-16){
                x0=x1;
                x1=x0-(x0*x0-c)/fx;
            }
            System.out.println(c+"的算术平方根是"+x1+"和"+x0);
        }
    }
}

将代码整合,最后实现计算器加减乘除和牛顿迭代算法的功能,试运行结果如下:

7√=2.6