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

源码在Github的仓库主页链接地址

 https://github.com/devilwjy/Second

a. 需求分析:

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

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

 

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

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

 

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

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

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

b. 软件设计:

 

各个模块的主要功能:

(1)Main()类:利用calculate类生成表达式,调用选择模块,即Select()类。

(2)Select()类:让用户登录,并选择答整数题还是分数题。

(3)Test()类:生成用户答题的界面。

(4)Summer()类:显示本轮的分数并打印错误题目及答案,并让用户选择是做下一轮题还是看看做题情况。

(5)Histogram()类:画出每一轮的统计图。

(6)TimerThread()类:产生计时功能。

 

c. 核心功能代码展示:

1、下面为画统计图的代码:主要方法为在JFrame内加入Jpanel,在Jpane加入矩形框,和Label。

 

public Histogram(final ArrayList<String> summer) 
    {
        length = summer.size();
        count = new int[length];
        System.out.print(length);
        this.setLayout(null);
        for(int i=0;i<summer.size();i++)
        {
            count[i] = Integer.parseInt(summer.get(i));    
        }
        for(int i=1;i<summer.size();i=i+2)
        {
            JLabel  Label = new JLabel("第"+((i+1)/2)+"轮",JLabel.LEFT);
            Label.setFont(new Font("SansSerif", Font.BOLD + Font.ITALIC, 18));
            Label.setBounds(30+(i-1)*30, 610, 60,50);
            JLabel  Label2 = new JLabel(count[i]+"",JLabel.CENTER);
            Label2.setFont(new Font("SansSerif", Font.BOLD + Font.ITALIC, 18));
            Label2.setBounds(25+(i-1)*30, 555-6*count[i], 60,50);
            label.add(Label);
            label.add(Label2);
            this.add(label.get(i-1));
            this.add(label.get(i));  
        }
    } 
     protected void paintComponent(Graphics g) 
     {
         int x=10;
         g.setColor(Color.red);
         for (int i = 0; i < count.length; i++) 
         {   
             g.fillRect(x, 600-6*count[i], 30,6*count[i] );
             x += 30; 
         }
     }

 

2、下面为显示答题时间的代码(新建了一个JFrame让它显示,但是必须设置它为最上面放置)。

public class TimerThread extends JFrame implements Runnable
{
     private JFrame frame;
     private JPanel timePanel;
     private JLabel timeLabel;
     private JLabel displayArea;
     private String DEFAULT_TIME_FORMAT = "HH:mm:ss";
     private int ONE_SECOND = 1000;
     int time = 1;    boolean isRun = true; 
     public TimerThread()
     {
         timePanel = new JPanel();
         timeLabel = new JLabel("您本次用时:");
         displayArea = new JLabel();
         timePanel.add(timeLabel);
         timePanel.add(displayArea);
         this.add(timePanel);
         this.setDefaultCloseOperation(EXIT_ON_CLOSE);
         this.setBounds(800, 100, 200, 80);
     }
     public void run()
     {
         while(isRun)
         {    
             try {
                 displayArea.setText(time+"s");
                 time++;
                 Thread.sleep(1000);
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }
         }
     }
}

 

 

d. 程序运行:程序运行时每个功能界面截图。

1、输入学号和姓名,选择答分数还是整数:

 

2、如果选择整数,开始答题与计时(图片很大,放不下)。

 

3、查看得分和用时,并显示错误题目和答案(图片很大,放不下)。

 

4、再来一轮:

 

5、如果选择分数:

 

6、查看的分和用时:

 

7、经过多轮测试后,点总结,统计图如下:

   

 

 

 

e.描述结对的过程,提供两人在讨论、细化和编程时的结对照片(非摆拍)。

 

                       

 

 

f.提供此次结对作业的PSP

PSP2.1

任务内容

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

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

Planning

计划

60

100

·       Estimate

·  估计这个任务需要多少时间,并规划大致工作步骤

60

100

Development

开发

890

1256

··       Analysis

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

6

10

·       Design Spec

·  生成设计文档

30

20

·       Design Review

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

4

6

·       Coding Standard

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

30

20

·       Design

  具体设计

100

150

·       Coding

  具体编码

600

700

·       Code Review

·  代码复审

120

200

·       Test

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

100

150

Reporting

报告

38

32

··       Test Report

·  测试报告

3

2

·       Size Measurement

  计算工作量

5

10

·       Postmortem & Process Improvement Plan

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

30

20

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

  刚开始我们都说了各自设计本次项目的想法,基本差不多,稍微有点不一样的想法我们就择优选取了。可以说是配合的相当默契,并不是谁写谁的,而是一个人看一个人写,遇到问题商量,商量不出来就百度。刚开始我觉得分工比较好,效率高,但是合作后才发现并不是这样,一个人写会马虎或者想不明白,然后就卡在那了,而一起写会注意对方是否马虎写错了,或者遇到不会的时候可以商量,一经商量就迎刃而解了。重点是我的小伙伴相当有耐心,认真的听取我的想法,而且我打字很慢,容易打错,她总是一直提醒我。她动手能力很强,而且反应很快,我看她写的时候,有时候都跟不上节奏,每次我们约着写代码她都相当积极,总之就一句话,合作很好,小伙伴更好!很期待下次与她的合作!(注明:我们宿舍就在隔壁,天天在宿舍商量着写,所以在github基本没怎么传代码)

h. 结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会。

     有,这个绝对有,举个例子,(1)我的小伙伴说,让我把我们写的代码写一部分后给她发一份,不然丢了咋办,我觉得没事,一般丢不了,结果第二天我们果真丢了一个类里面的代码,重新写了一遍。唯一的想法就是听她的该多好,(2)我在写代码的时候总是会马虎,一个小小的问题马虎了,类似于数组溢出的那种错误,程序报错了,因为程序代码量比较大,一查就是几个小时,有了小伙伴的提醒,我马虎出错的次数基本没有了,(3)有时候我写代码,运行的结果并不是我想象的结果,然后我就和小伙伴重新把代码审核一遍,一下子就找到问题出在哪了。如果我一个人审核,第一当局者迷,自己就又跟着错误的思路走了,第二,自己找着找着就反应不过来了。(4)在设计界面的时候因为组件特别多,一个人根本盯不住。(5)我写的反应不过来了或累了她接着写。不然一直写,会大脑跟不上节奏。再多的例子我就不举了,上面的一些例子足以说明我在这次写代码中因为有了小伙伴,节省了大量的时间。而且设计的界面我也很满意,我们一直在计算组件该放的位置,看起来算是比较简洁大方了。

posted @ 2018-03-25 13:03  是该成熟一些了  Views(430)  Comments(3Edit  收藏  举报