• 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)我写的反应不过来了或累了她接着写。不然一直写,会大脑跟不上节奏。再多的例子我就不举了,上面的一些例子足以说明我在这次写代码中因为有了小伙伴,节省了大量的时间。而且设计的界面我也很满意,我们一直在计算组件该放的位置,看起来算是比较简洁大方了。

  • 相关阅读:
    在Windows平台上安装Node.js及NPM模块管理
    MySQL远程访问授权
    JSON (仅限本地)
    Json 调用 天气API 实例
    JS调用腾讯接口获取天气
    jsonp 调用天气API
    兼容性
    MySql like模糊查询使用详解
    编绎报错,解决方法objc_msgSend too many arguments to function call,expected 0, have3 (转)
    OC中ARC forbids explicit message send of release错误(转)
  • 原文地址:https://www.cnblogs.com/Liudanxixi/p/8644038.html
Copyright © 2020-2023  润新知