结对编程作业

一、队员信息

姓名 学号 博客地址 码云地址
谢元将 201521123018 谢元将
罗登宇 201521123019 罗登宇

二、需求分析

随着课余娱乐项目的增加,现在的小孩子在学习上变得越来越不自觉,需要老师、家长在背后催着才会做作业,因此需要实现一个计时功能,以时间的流逝来给孩子一些紧迫感。另外,在经过长期的运算训练之后,如何才知道学生的运算水平是否有显著提高呢?将做题过程进行计时可以解决这个问题,从花费时间的长短就可以看出是否取得进步。同时,老师、家长也可以利用计时功能设立奖励机制。例如,规定在二十秒内完成十道题目的学生可以得到一个大大的奖励,激励学生一次又一次地挑战这个时间。
为了让这个四则运算自动生成器的使用人群跨越国界,就需要我们实现语言切换功能。不仅让中国大陆的小孩可以简单上手这个小程序,同时还能让中国台湾以及外国的小孩同样可以使用。实现这样一个小小的功能,就可以让我们这个自动生成器的受众面遍布世界各地,不受语言的障碍,何乐而不为呢?
大多数的时候我们都不能要求这些小孩子在一个时间段内持续不断地做计算题,而是让他们分次来完成。举个例子,当老师布置小孩子一周之内要完成200道的四则运算,并记录做对多少题,做错多少题时,绝大部分学生肯定会选择一天做几次,一次做几题,极少同学会选择一次性把这200道题做完。这样子就存在一个问题,如果分次做的话那每一次做对多少题做错多少题都要登记下来吗?这也太麻烦了。因此就需要我们能够记录用户做题的总数,即使在用户退出又再次启动时,可以做到把以前的对错数量保存并在此基础上进行增量计算。

三、代码展示

1.代码分析

学长的项目是一个支持简、繁体和英语的三种语言四则运算器,支持加减乘除和分数运算。我们基于学长的代码进行了一定的改进和新添功能:乘方。

2.脑图

3.(1)、计时功能

     package szys;
     import java.util.TimerTask;
     import javax.swing.JTextField;
     public class Work_Time extends TimerTask{
     static int y=0;
     static int z=0;
      @Override
       public void run() {
           // TODO Auto-generated method stub
           String str_second = Frame.Time.getText().substring(6);
           int x = Integer.parseInt(str_second);
           if(Frame.Time.getText().equals("00:00.00")){
              x=0;y=0;z=0;
           }
           x++;
           if(z<10){
               if(y<10)
               {
                   if(x<100)
                       Frame.Time.setText("0"+z+":0"+y+"."+x);
                   if(x==100)
                   {
                       y++;
                      Frame.Time.setText("0"+z+":0"+y+".0");
                      x=0;
                       
                   }
               }
               if(y<60&&y>=10)
               {
                   if(x<100)
                      Frame.Time.setText("0"+z+":"+y+"."+x);
                   if(x==100)
                  {
                       y++;
                       Frame.Time.setText("0"+z+":"+y+".0");
                       x=0;
                       
                   }
               }
               if(y==60){
                   y=0;
                   x=0;
                   z++;
              }
           }
           if(z<60&&z>=10){
               if(y<10)
               {
                   if(x<100)
                       Frame.Time.setText(z+":0"+y+"."+x);
                   if(x==100)
                   {
                       y++;
                       Frame.Time.setText(z+":0"+y+".0");
                       x=0;
                       
                   }
               }
              if(y<60&&y>=10)
              {
                   if(x<100)
                       Frame.Time.setText(z+":"+y+"."+x);
                   if(x==100)
                  {
                       y++;
                        Frame.Time.setText(z+":"+y+".0");
                       x=0;
                      
                   }
               }
               if(y==60){
                  y=0;
                   x=0;
                   z++;
               }
               else
               {
                   Frame.Time.setText("都一小时了放弃吧");
               }
            }
        }

(2.1)、整数的四则运算和乘方

    public String int_szys()
    {
        int result = 0;
	switch(ysfh){
	case 0:result=input1+input2;break;
	case 1:result=input1-input2;break;
	case 2:result=input1*input2;break;
	case 3:if(input1==0)
                    {
           		str=int_szys();
           		return str;
                    }
    		else
    		{
    			if(input1!=0&&input1!=1){
    			int d=common_divisor(input2,input1);
    			input2=input2/d;
    			input1=input1/d;
    			str = (input2+"/"+input1);
    			 }
                        if(input1==1)
                        str=(""+input2);
    		};
    		break;
	case 4:result=(int) Math.pow(input2, input1);break;
	default:println("请输入正确的运算符号!");break;
        }
     return str;
    }

(2.2)、分数的四则运算和乘方

    public String fs_szys(){
        this.a = new Random().nextInt(10)%(10-1+1) + 1;
        this.b = new Random().nextInt(10)%(10-2+1) + 2;
        this.c = new Random().nextInt(10)%(10-1+1) + 1;
        this.d = new Random().nextInt(10)%(10-2+1) + 2;
        if(b<a||d<c||b%a==0||d%c==0)
        {
            str=fs_szys();
            return str;
        }
            
        int fz=1,fm=c*e;
	switch(ysfh){
	case 0:fz=a*d+b*c;break;
	case 1:fz=a*d-b*c;
                    if(fz==0)
    	          {
    		      return str=("0");
    	          };
    	          break;
	case 2:fz=a*c;break;
	case 3:fz=a*d;
                    fm=b*c;
                    break;
	case 4:fz=(int) Math.pow(a*d, f);
                    fm=(int) Math.pow(b*c, f);
    	           break;
	default:println("请输入正确的运算符号!");break;
	}
	str = (fz+"/"+fm);
        return str;      
    }

四、psp表格

PSP2.1 个人开发流程 预估耗费时间(分钟) 实际耗费时间(分钟)
Planning 计划 30 50
Estimate 明确需求和其他相关因素,估计每个阶段的时间成本 15 10
Development 开发 180 240
Analysis 需求分析 (包括学习新技术) 20 30
Design Spec 生成设计文档 20 20
Design Review 设计复审 10 12
Coding Standard 代码规范 10 15
Design 具体设计 30 30
Coding 具体编码 90 120
Code Review 代码复审 15 20
Test 测试(自我测试,修改代码,提交修改) 20 30
Reporting 报告 60 50
测试报告 10 10
计算工作量 10 5
并提出过程改进计划 10 15

五、代码上传码云