四则运算“软件”之升级版

作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213

一、基本要求

从个人项目出发,将程序改造成一个单机带用户界面(不是控制台)的程序,这个程序最基本要达到:

  • 自动生成题目,单个题目最多不能超过4个运算符,操作数小于100。
  • 用户可以输入答案
  • 若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少

二、我们做的扩展方向

  实现逻辑上依旧是:出题(makeQuestions) 做题(calQuestion)印题(filePrint)三个方法。

  而因为在第一次的个人项目中,就已经在makeQuestion方法中设置了参数,并且将随机数产生器单独列为一个方法(makeRandom),所以在这次的作业中可以很好的控制题目个数、数据范围、操作符个数。

三、开发环境下调试:Intelij IDEA

       

四、估计实现所需时间,记录结对编程时间。

PSP2.1 Personal Software Process Stages Time Senior Student Time
Development 开发 250 260
· Analysis 需求分析 (包括学习新技术) 20 30
· Design Spec 生成设计文档 0 0
· Design Review 设计复审 0 0
· Coding Standard 代码规范 15 18
· Design 具体设计 30 35
· Coding 具体编码 100 200
· Code Review 代码复审 5 8
· Test 测试(自我测试,修改代码,提交修改) 15 12
Reporting 报告 10 10

五、部分代码实现

  计算模块部分异常处理说明

复制代码
import java.io.IOException;

public class Command {
    public static void main(String args[]) {
        
        String[] questionList = new String[105];
        String path = "result.txt";
        int sum = 0, ops = 1, minn = 1, maxx = 100;
        boolean have_lv2_ops = false, have_bracket = false;
        
        try {
            for(int i=0; i<args.length; i++) {

                if(args[i].equals("-n") ) {
                    sum = Integer.parseInt(args[++i]);
                    if(sum<0) {
                        System.out.println("错误:设置的题目个数应为正整数");
                        return;
                    }
                }
                else if(args[i].equals("-m")) {
                    minn = Integer.parseInt(args[++i]);
                    maxx = Integer.parseInt(args[++i]);
                    
                    if(minn>maxx) {
                        System.out.println("错误:设置的最小值 :" + minn + "大于设置的最大值" + maxx);
                        return;
                    }
                    
                    else if(maxx>1000 || minn<1) {
                        System.out.println("错误:设置的取值范围应在[1, 1000]之间");
                        return;
                    }
                }
                else if(args[i].equals("-o")) {
                    ops = Integer.parseInt(args[++i]);
                    if(ops<0) {
                        System.out.println("错误:设置的操作符个数应为正整数");
                        return;
                    }
                }
                else if(args[i].equals("-c")) {
                    have_lv2_ops = true;
                }
                else if(args[i].equals("-b")) {
                    have_bracket = true;
                }
                
                else {
                    System.out.println("错误: " + args[i] + "不是一个有效的命令,请输入有效的命令(-n, -m, -o, -c, -b)");
                    return;
                }
            }
            
        } catch (Exception e) {
            System.out.println("请输入有效的命令及其对应的参数");
            System.out.println("设置题目个数为sum: -n sum  sum为正整数");
            System.out.println("设置题目上下界为[min, max]: -m min max  min maxx应在[1, 1000]之间 ");
            System.out.println("设置题目操作符个数为ops: -n ops");
            System.out.println("设置题目中含有乘除法: -c");
            System.out.println("设置题目中含有括号: -b");
      }
        
        Lib.makeQuestions(questionList, sum, ops, minn, maxx, have_lv2_ops, have_bracket);
        
        try {
            Lib.filePrint(questionList, sum, path);
        } catch(IOException ioe) {
            ioe.printStackTrace();
        }
        
    }
}
复制代码

  

 界面模块与计算模块的对接

复制代码
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;

import javax.swing.*;

public class GUI extends JFrame{
        private JTextField sum = new JTextField(5);
        private JTextField min = new JTextField(2); 
        private JTextField max = new JTextField(2);
        private JTextField ops = new JTextField(4);
        private JRadioButton b2 = new JRadioButton();
        private JRadioButton b1 = new JRadioButton();
        private JButton Cre = new JButton("开始生成!");
        
        public GUI() {
            Font font = new Font("SansSerif",Font.BOLD,18);//设定字体
            Font font2 = new Font("SansSerif",Font.CENTER_BASELINE,26);
            Color color = new Color(50,150,50);
            
            JPanel p1 = new JPanel();
            JLabel title = new JLabel("欢迎使用四则运算题目生成系统!");
            title.setFont(font2);
            p1.add(title,BorderLayout.CENTER); //p1为标题
            
            JPanel p2 = new JPanel();
            p2.setLayout(new FlowLayout(FlowLayout.CENTER,10,20));
            JLabel NOQ= new JLabel("需要的题目数量(1~10000):");
            NOQ.setFont(font);
            p2.add(NOQ);
            
            p2.add(sum);//p2设定为题目数
            
            JPanel p3 = new JPanel();
            JLabel RON = new JLabel("题目的数值范围(下界1~100,上界50~1000):");
            RON.setFont(font);
            p3.add(RON);
            p3.add(min);
            p3.add(max);//p3设定上下界
            
            //System.out.println(min1);
            
            JPanel p4 = new JPanel();
            JLabel NOO = new JLabel("题目中最多存在运算符数量:");
            NOO.setFont(font);
            p4.add(NOO);
            
            p4.add(ops);//p4设定运算符数量
            
            
            JPanel p5 = new JPanel();
            JLabel isMul = new JLabel("题目中是否有乘除法(默认为无):");
            isMul.setFont(font);
            p5.add(isMul);
            
            
            p5.add(b2);//设定乘除
            
            JPanel p6 =new JPanel();
            JLabel isBracket = new JLabel("题目中是否有括号(默认为无):");
            isBracket.setFont(font);
        
            
            
            p6.add(isBracket);
            p6.add(b1);
            p6.setFont(font);//设定括号
            
            
            JPanel p7 =new JPanel(); 
            Cre.setFont(font);
            Cre.setBackground(color);
            p7.add(Cre,BorderLayout.WEST);
            
            JButton exit = new JButton("退出系统"); 
            exit.setFont(font);
            exit.addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent e) {
                    System.exit(0);
                }
            });
            exit.setBackground(new Color(200,250,250));
            exit.setForeground(new Color(0,0,0));
            p7.add(exit,BorderLayout.EAST);
            
            
            setLayout(new GridLayout(7,1,5,2));
            add(p1);
            add(p2);
            add(p3);
            add(p4);
            add(p5);
            add(p6);
            add(p7);
        
            Cre.addActionListener(new ButtonListener());
            
            
            
            
        }
        public  boolean actionPerformed(ActionEvent e ,JRadioButton b) {
                if(b.isSelected())
                    return true;
                else
                    return false;    
        }
        
        private class ButtonListener implements ActionListener{
            public void actionPerformed(ActionEvent e) {
                int sum1 = Integer.parseInt(sum.getText());
                int min1 = Integer.parseInt(min.getText());
                int max1 = Integer.parseInt(max.getText());
                int ops1 = Integer.parseInt(ops.getText());    
                String path = "result.txt";
                
                boolean have_Mul = GUI.this.actionPerformed(e ,b2);

                boolean have_Bra = GUI.this.actionPerformed(e ,b1);
                
                //System.out.println(sum1+" "+min1+" "+max1+" "+ops1+" "+have_Mul+" "+have_Bra);
                
                String[] questionList = new String[sum1+3];
                Lib.makeQuestions(questionList, sum1, ops1, min1, max1, have_Mul, have_Bra);
                
                try {
                    Lib.filePrint(questionList, sum1, path);
                } catch(IOException ioe) {
                    ioe.printStackTrace();
                }
            }



            
        }
        public static void main(String[] args) {
            GUI frame = new GUI();
            frame.setTitle("四则运算题目生成系统");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
            frame.setSize(1000,800);

        }
}
复制代码

六、运行结果截图

七、总结心得

  这个项目的完成遇到了很多困难,请教了很多师兄师姐的帮助。

  程序还是不够全面,很多地方都没有完善。

 八、结对工作照片

原文地址:https://www.cnblogs.com/lingzihui/p/9845920.html