201571030114/201571030143《小学四则运算练习软件》结对项目报告

一:源码

       github地址https://github.com/Lei-surely/Project3
git

二:项目报告 github

1:需求分析编程

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

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

                                

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

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

                                     

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

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

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

2. 软件设计:

            

      (1)MainTest()类:调用四则运算模块,即MyFrame()类。

  (2)MyFrame()类:点击开始测试按钮,调用CalTest()类,生成题库;点击提交按钮,调用Submit()类,统计结果按钮调用Chart()类,显示多轮答题结果的柱状图。

  (3)Submit()类:显示本轮测试的正确答案以及用户提交的答案以及测试的正确率,并让用户选择是进行下一轮仍是返回统计结果界面。

  (4)CalTest():运算式生成,实现了随机生成一百之内的混合运算。

3. 核心功能代码展现:

     (1)计算四则运算界面监听器

//注册监听
 2         private void registerListener() {
 3             //计时
 4             Timer timer = new Timer(1000, new ActionListener() {
 5                 public void actionPerformed(ActionEvent e) {
 6                     Date now2 = new Date(now.getTime() + 1000);
 7                     now = now2;
 8                     SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
 9                     lbl.setText(formatter.format(now));
10                 }
11             });
12             btn_begin.addActionListener(new ActionListener() {
13                 public void actionPerformed(ActionEvent arg0) {
14                     //开始测试函数调用
15                     begin();
16                     timer.start();
17                 }                
18             });
19             btn_tj.addActionListener(new ActionListener() {
20                 public void actionPerformed(ActionEvent arg0) {
21                     timer.stop();
22                     try {
23                         submit();
24                     } catch (IOException e) {
25                         e.printStackTrace();
26                     }
27                 }
28             });
29             btn_js.addActionListener(new ActionListener() {
30                 @Override
31                 public void actionPerformed(ActionEvent arg0) {
32                     //统计结果函数
33                     counts();
34                 }                
35             });
36         }

  (2)显示测试结果

private void registerListener() {
        btn_again.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                onceagain();                
            }    
        });
        
        btn_xianshi.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                File file = new File("answer.txt");
                if (file.exists() && file.isFile()) {
                    try {
                        BufferedReader input = new BufferedReader(new FileReader(file));
                        String text;
                        while ((text = input.readLine()) != null)
                            r_answer.setText(r_answer.getText() + text + "\n");
                    } catch (IOException ioException) {
                    System.err.println("File Error!");
                   }        
                }                     
                result();//显示测试结果函数调用
                try {
                    compare();
                } catch (IOException e) {
                    e.printStackTrace();
                }                
            }            
        });
        btn_exit.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                onceagain();
                
            }
            
        });
    }
//显示测试结果
 2     public void result() {
 3         File file = new File("result.txt");
 4         if (file.exists() && file.isFile()) {
 5             try {
 6                 BufferedReader input = new BufferedReader(new FileReader(file));
 7                 String text;
 8                 while ((text = input.readLine()) != null)
 9                     my_answer.setText(my_answer.getText() + text + "\n");
10             } catch (IOException ioException) {
11             System.err.println("File Error!");
12            }        
13         }
14     }
15     
16     //比较结果
17     public int compare() throws IOException {
18         //封装数据源
19         BufferedReader br_a = new BufferedReader(new FileReader("answer.txt"));
20         BufferedReader br_r = new BufferedReader(new FileReader("result.txt"));
21         //封装目的地
22         ArrayList<String> answer = new ArrayList<String>();
23         ArrayList<String> result = new ArrayList<String>();
24         //读取数据写到集合中
25         String line1 = null;
26         String line2 = null;
27        
28         while((line1 = br_a.readLine())!= null){
29             answer.add(line1);
30         }
31         while((line2 = br_r.readLine())!= null){
32             result.add(line2);
33         }
34         //遍历进行比较并计算正确率
35         int i=0;
36         int count=0;
37         for(i=0;i<answer.size();i++) 
38         {
39             String s1=answer.get(i);
40             String s2=result.get(i);
41             if(s1.equals(s2)) 
42             {
43                 count++;                        
44             }                
45         }
46         NumberFormat numberFormat = NumberFormat.getInstance();    
47         numberFormat.setMaximumFractionDigits(2);  
48         String s3 = numberFormat.format((float) count / (float)answer.size() * 100);   
49         correct.setText("您作对了"+count+"道, "+"正确率为:"+String.valueOf(s3)+"%");
50         int b=count*5;
51         return b;
52     }

(3)绘制柱状图

//绘制矩形  
32        g2.fillRoundRect(leftMargin+step*2, Height-(Height/110)*f-5, 30, (Height/110)*f-3,30, 0);    
33        g2.drawString("第"+(i+1)+"轮", leftMargin+step*2,Height-(Height/110)*f-10);  

4. 程序运行:

(1)程序启动,点击开始测试按钮出题并开始计时

 (2)答题完毕,点击提交按钮提交测试结果,跳转到显示结果页面,点击显示结果按钮后,显示正确结果以及用户测试结果,并计算出正确率。

(3)用户可选择再来一侧或者返回查看测试详细结果图,再来一轮步骤与上面相同,不作赘述,当用户测试几轮完毕,返回点击统计结果按钮

   

5.描述结对的过程,

              

 

6.提供这次结对做业的PSP

PSP2.1

任务内容

计划共完成须要的时间(min)

实际完成须要的时间(min)

Planning

计划

30

40

·       Estimate

·  估计这个任务须要多少时间,并规划大体工做步骤

30

40

Development

开发

600

720

··       Analysis

  需求分析 (包括学习新技术)

60

90

·       Design Spec

·  生成设计文档

30

45

·       Design Review

·  设计复审 (和同事审核设计文档)

20

30

·       Coding Standard

  代码规范 (为目前的开发制定合适的规范)

15

20

·       Design

  具体设计

40

65

·       Coding

  具体编码

400

480

·       Code Review

·  代码复审

30

30

·       Test

·  测试(自我测试,修改代码,提交修改)

25

30

Reporting

报告

30

30

··       Test Report

·  测试报告

15

15

·       Size Measurement

  计算工做量

10

10

·       Postmortem & Process Improvement Plan

·  过后总结 ,并提出过程改进计划

10

 

15

 

 

7. 请使用汉堡评价法给你的小伙伴一些点评。

        在此次的结对编程中,个人小伙伴是个人好朋友,咱们俩人编程能力都不是很强,可是俗话说得好,两个臭皮匠顶个诸葛亮,仍是顺利的把此次的项目完成了。咱们已经有了很好的默契,因此在合做完成这个项目时起到了不少的做用,基本没有出现很大的分歧,不少想法一拍即合,而后一块儿讨论编程实现,小伙伴提出了不少好的建议,对咱们完成项目相当重要,经过此次项目合做,提高了咱们得能力同时也加强了咱们得默契,若是之后还有合做,相信也会很顺利。

8. 结对编程真的可以带来1+1>2的效果吗?经过此次结对编程,请谈谈你的感觉和体会。

       我以为结对编程带来的效果超过了1+1>2,一我的的时候出现了问题只能本身解决要花费很长的时间,结对编程两我的知识互补,问题很快就能获得解决。而且结对编程大大下降了出错率,为后面的代码测试和审查节省了好多时间,在结对编程的过程当中两我的共同窗习和解决问题,知识的提高也是大于二的。

相关文章
相关标签/搜索