小学生四则运算结对项目

GitHub地址:https://github.com/jiyx/operation-four.git
一、需求分析

1、需求分析

  (1)由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计

分,20道题测试结束后给出测试总分;

  (2)题库文件可采用实验二的方式自动生成,也可以手工编辑生成,文本格式如下:

 

(3)程序为用户提供三种进阶四则运算练习功能选择:百以内整数算式(必做)、带括号算式、真分数算式练习;

(4)程序允许用户进行多轮测试,提供用户多轮测试分数柱状图,示例如下:

 



(5)程序记录用户答题结果,当程序退出再启动的时候,可为用户显示最后一次测试的结果,并询问用户可否进行新一轮的测试;

(6)测试有计时功能,测试时动态显示用户开始答题后的消耗时间。

(7)程序人机交互界面是GUI界面(WEB页面、APP页面都可),界面支持中文简体(必做)/中文繁体/英语,用户可以进行语种选择。

二、软件设计

三、核心代码

class Num{                              //定义数字类
     private int a;
         public Num()
     {
         this.a = (int)(Math.random()*10000);
     }
     
     public Num(int i)
     {
         this.a = (int)(Math.random()*4)+1;
    }
     
     public int get_num()
     {
         return this.a;
     }
     
     public int num_sum(Num B)
     {
         return this.a + B.a;
     }
     
     public int num_dec(Num B)
     {
         return this.a - B.a;
     }
     
    public int num_c(Num B)
     { 
        return this.a * B.a;
    }
    
     public int num_chu(Num B)
     {
         return this.a / B.a;
     }
     
    public void flash()
     {
         this.a = (int)(Math.random()*100);
        }
     
     public void flash_t()
    {
         this.a = (int)(Math.random()*4)+1;
     }
     
     public boolean pd(int i)
     {
         if(this.a == i)
             return true;
         else
             return false;
     }
}
public class jiedui {
        private static Num a = new Num();  //a,b
        private static Num b = new Num();
        private static Num c = new Num(1);
        private static int q = 0;
        private static String p;
        private static JFrame frame = new JFrame("简单四则运算");
        private static JLabel label1 = new JLabel("A");
        private static JLabel label2 = new JLabel("*");
        private static JLabel label3 = new JLabel("B");
        private static JLabel label4 = new JLabel(" "+"="+" ");
        private static JLabel label5 = new JLabel("结果");
        private static JButton button = new JButton("查看");
        private static JButton bt1 = new JButton("下一题");
        private static JButton bt2 = new JButton("退出");
        private static JTextField text = new JTextField(5);
        private static JPanel pane = new JPanel();  
        
        public static void main(String[] args) {
            pane.setBorder(BorderFactory.createEmptyBorder(20,60,20,60));
            pane.setLayout(new GridLayout(0,5));  //设置布局
            pane.add(label1);
            pane.add(label2);
            pane.add(label3);
            pane.add(label4);
            pane.add(text);
            pane.add(label5);
            pane.add(button);
            pane.add(bt1);
            pane.add(bt2);

            if(c.pd(1)) 
            {
                p = "+";
                q = a.num_sum(b);
            }
            if(c.pd(2))
            {
                p = "-";
                q = a.num_dec(b);
            }
            if(c.pd(3))
            {
                p = "*";
                q = a.num_c(b);
            }
            if(c.pd(4))
            {
                p = "/";
                q = a.num_chu(b);
            }
             
            frame.getContentPane().add(pane,BorderLayout.CENTER);
            button.setMnemonic(KeyEvent.VK_I);
             
            button.addActionListener(new ActionListener(){  //鼠标单击事件
                public void actionPerformed(ActionEvent e){
                    if(q == Integer.parseInt(text.getText().trim()))
                        label5.setText("正确!");
                    else
                        label5.setText("错误!");
                    
                }
            });
            
            bt1.setMnemonic(KeyEvent.VK_H);
            bt1.addActionListener(new ActionListener(){  //鼠标单击事件
                public void actionPerformed(ActionEvent e){
                    a.flash();
                    b.flash();
                    c.flash_t();
                    if(c.pd(1)) 
                    {
                        p = "+";
                        q = a.num_sum(b);
                    }
                    if(c.pd(2))
                    {
                        p = "-";
                        q = a.num_dec(b);
                    }
                    if(c.pd(3))
                    {
                        p = "*";
                        q = a.num_c(b);
                    }
                    if(c.pd(4))
                    {
                        p = "/";
                        q = a.num_chu(b);
                    }
                    label1.setText(" "+a.get_num()+" ");
                    label2.setText(p);
                    label3.setText(" "+b.get_num()+" ");
                    text.setText(" ");
                    label5.setText("结果");
                }
            });
            
            bt2.setMnemonic(KeyEvent.VK_T);
            bt2.addActionListener(new ActionListener(){  //鼠标单击事件
                public void actionPerformed(ActionEvent e){
                    System.exit(0);
                    
                }
            });
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            label1.setText(" "+a.get_num()+" ");
            label2.setText(p);
            label3.setText(" "+b.get_num()+" ");
            
            frame.setVisible(true);
        }

四、运行过程

 

五、结对过程

六、psp

PSP2.1任务内容计划完成的时间(min)实际完成需要的时间(min)
PLanning 计划 60 100
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 60 60
Developmet 开发 480 700
Analysis 需求分析(包括学习新技术) 30 50
Design Spec 生成设计文档 10 25
Design Revie 设计复审(和同事审核设计文档) 30 35
Coding Standard 代码规范 20 30
Design 具体设计 60 80
Coding 具体编码 300 350
Code Review 代码复审 30 360
Test 测试(自我测试,修改代码,提交修改) 20 30
Reporting 报告 30 35
Test Report 测试报告 20 20
Size Measurement 计算工作量 5 5
Postmortem & Process Improvement Plan 事后总结,并提出过程改机计划 30 35

 

七、请使用汉堡评价法给你的小伙伴一些点评

     我的结对小伙伴是个有想法的人,尽管这次我们遇到太多的问题,但总归比一个人的效果要好,两个人一起合作讨论交流,思路开阔,容易发现一个人发现不了的错误,也可以及时改正错误,还可以增加团队合作意识,相信这对以后的训练很有帮助。(由于我俩编程比较差差了,没有实现全部的需求。尽我们最大的努力,也只能做到这了)遇到不会的问题就要去学习,一口吃不了个胖子,所幸我们能够一起努力,一起进步。

八、 结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会。
       一根筷子容易折,一把筷子难折断,我想这就是群体的力量,一个人的编程设计往往会出现很多的问题,比如一些代码上的漏洞和设计功能等考虑的不全面,一个人编程的时候遇到问题有时候会卡好长时间,有时候很简单的错误也需要好久才能找见,但是结对编程的时候这种问题出现次数比较少,遇到问题时解决问题的思路和时间会很大幅度的减少,经过两个人的讨论会对问题理解的更透彻,效率更高,所以说结对编程和团队合作还是很有必要的。一个成功的项目后面往往有一个优秀的团队。

posted @ 2018-04-04 21:04  听你说呵呵  阅读(178)  评论(0编辑  收藏  举报