zoukankan      html  css  js  c++  java
  • 四则运算“软件”之升级版

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

    六、运行结果截图

    七、总结心得

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

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

     八、结对工作照片

  • 相关阅读:
    HDOJ 1846 Brave Game
    并查集模板
    HDU 2102 A计划
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    POJ 1321 棋盘问题
    CF 999 C.Alphabetic Removals
    CF 999 B. Reversing Encryption
    string的基础用法
    51nod 1267 4个数和为0
  • 原文地址:https://www.cnblogs.com/lingzihui/p/9845920.html
Copyright © 2011-2022 走看看