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


    作业来源: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);
    
            }
    }
    复制代码

    六、运行结果截图

    七、总结心得

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

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

     八、结对工作照片

  • 相关阅读:
    浅析Redis基础数据结构
    【ElasticSearch7.7】在linux中安装ElasticSearch7.7,在laravel5.7中安装es扩展亲测成功
    【死磕NIO】— 探索 SocketChannel 的核心原理
    Windows10 企业版LTS无法更新到最新版Windows10的解决办法
    Singleton之C++部分
    使用初始化列表进行初始化类的条件(不能使用初始化列表构造的原因)
    Windows提高指纹提高识别率诀窍
    使用 LOAD DATA LOCAL INFILE,sysbench 导数速度提升30%
    CentOS 7 源码安装 Zabbix 6.0
    Adams Subroutine创建
  • 原文地址:https://www.cnblogs.com/lingzihui/p/9845920.html
Copyright © 2020-2023  润新知