Software Engineering Pair Programming Second Assignment

1. Subject requirements

  • When we first started the class, we introduced an example of an automatic generation program of four arithmetic operations in elementary school. Please implement it and require:
  • Can automatically generate four arithmetic practice questions
  • The number of questions can be customized
  • User can choose operator
  • The maximum number set by the user (such as within ten, within one hundred, etc.)
  • The user chooses whether there are parentheses and whether there are decimals
  • The user selects the output method (such as output to a file, printer, etc.)
  • It is best to provide a graphical user interface (choose according to your own ability, mainly to complete the above functions)

    2. Assignment of tasks

  • In this pairing programming assignment, I acted as the pilot and took on all the code work. The program basically realized all the required functions, and uploaded the code to coding.net or GitHub code hosting system.
    Finally, I gave the navigator in this programming. Give an objective evaluation of the role played in the work, and complete a summary of more than 500 words.
  • My navigator is Lei Jian.
  • The picture below shows us discussing coding together when we were in the bedroom

3. Code implementation

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<iostream>
#include <fstream>  
#include <iomanip>  
#include<ctime>
using namespace std;
FILE *f3;
void SiZeYS( int NumS, int SuanF, int MaxS, int KuoH, int XiaoS,int WJ);
int main()
{
    int NumS;//题目数量
    int SuanF;//算法
    int MaxS;//最大数
    int KuoH;//是否有括号
    int XiaoS;//是否有小数
    int WJ;//输出到文件
    f3 = fopen("stud.txt", "w");
    cout<<"请输入生成题目数量:\n";
    cin >> NumS;
    while (1)
    {
        if (NumS> 100 || NumS <=0)
        {
            cout<<"输入错误\n";
            system("pause");
            cin >> NumS;
        }
        else
            break;
    }
    cout << "请输入生成题目类型:\n";
    cout << "1.加法 2.减法 3.加减混合法 4.乘法 5.除法 6乘除混合法 7加减乘除法\n";
    cin >> SuanF;
    while (1)
    {
        if ((SuanF != 1)&&(SuanF!= 2)&&(SuanF != 3)&&(SuanF != 4)&&(SuanF != 5)&&(SuanF != 6)&&(SuanF != 7))
        {
            cout << "输入错误\n";
            system("pause");
            cin >> SuanF;
        }
        else
            break;
    }
    cout << "请输入生成最大数:\n";
    cin >> MaxS;
    while (1)
    {
        if (MaxS<0||MaxS>10000)
        {
            cout << "输入错误\n";
            system("pause");
            cin >>MaxS;
        }
        else
            break;
    }
    if(SuanF==7)
    {
    cout << "请输入是否有括号:\n";
    cout << "1.没有 2.有\n";
    cin >> KuoH;    
    while (1)
    {
        if (KuoH!=1 && KuoH!=2)
        {
            cout << "输入错误\n";
            system("pause");
            cin >> KuoH;
        }
        else
            break;
    }
    }
    cout << "请输入是否有小数:\n";
    cout << "1.没有 2.有\n";
    cin >> XiaoS;
    while (1)
    {
        if (XiaoS != 1 && XiaoS != 2)
        {
            cout << "输入错误\n";
            system("pause");
            cin >> XiaoS;
        }
        else
            break;
    }
//SiZeYS(NumS,SuanF,MaxS,KuoH,XiaoS);//四则运算调用函数
    cout<<"是否要输出文件:\n";
    cout << "1.不需要 2.需要\n";
    cin >> WJ;
    while (1)
    {
        if (WJ> 2 || WJ <1)
        {
            cout<<"输入错误\n";
            system("pause");
            cin >> NumS;
        }
        else
            break;
    }
SiZeYS(NumS,SuanF,MaxS,KuoH,XiaoS,WJ);//四则运算调用函数
    system("pause");
    return 0;
}
void  SiZeYS(int NumS, int SuanF, int MaxS, int KuoH, int XiaoS,int WJ)
{
    //f3 = fopen("stud.txt", "w");
    int i;
    srand((unsigned int)time(0));
    double A[1000];
    double B[1000];
    double C[1000];
    double D[1000]; 
    for(i=0;i<NumS;i++)
      {
            A[i] = rand()%MaxS+1;
            B[i] = rand()%MaxS+1;
            C[i] = rand()%MaxS+1;
            D[i] = rand()%MaxS+1;
            //fout<<A[i]<<"+"<<B[i]<<"="<<endl;
            //cout<<A[i]<<C[i]<<B[i]<< D[i]<<endl;
       } 
    if(XiaoS==2)
    {  
         for(i=0;i<NumS;i++)
          { 
            A[i] = A[i]*0.01;
            B[i] = B[i]*0.01;
            C[i] = C[i]*0.01;
            D[i] = D[i]*0.01;
         }          
    }   
 if(SuanF==1)//加法运算
    {
        for(i=0;i<NumS;i++)
        {
            if(WJ==1)
               cout<<A[i]<<"+"<<B[i]<<"+"<<C[i]<<"+"<< D[i]<<"="<<endl;
            if(WJ==2)
               fprintf(f3,"%.4lf+%.4lf+%.4lf+%.4lf=\n",A[i],B[i],C[i],D[i]);
                
        }
    }
    if(SuanF== 2)//减法运算
    {
            for(i=0;i<NumS;i++)
            {   
              if(WJ==1)
                cout<<A[i]<<"-"<<B[i]<<"-"<<C[i]<<"-"<< D[i]<<"="<<endl;
              if(WJ==2)
               fprintf(f3,"%.4lf-%.4lf-%.4lf-%.4lf=\n",A[i],B[i],C[i],D[i]);
            }
    }
    if(SuanF==3)//加减运算
    {
        for(i=0;i<NumS;i++)
        {   
           if(i%2==0)
            {
               if(WJ==1)
                cout<<A[i]<<"+"<<B[i]<<"+"<<C[i]<<"-"<<D[i]<<"="<<endl;
               if(WJ==2)
               fprintf(f3,"%.4lf+%.4lf+%.4lf-%.4lf=\n",A[i],B[i],C[i],D[i]);
                
            }
            else if(i%3==0)
            {
                if(WJ==1)
                cout<<A[i]<<"+"<<B[i]<<"-"<<C[i]<<"+"<<D[i]<<"="<<endl;
                if(WJ==2)
               fprintf(f3,"%.4lf+%.4lf-%.4lf+%.4lf=\n",A[i],B[i],C[i],D[i]);  
            }
            else if(i%5==0)
            {
                if(WJ==1)
                cout<<A[i]<<"+"<<B[i]<<"-"<<C[i]<<"-"<<D[i]<<"="<<endl;
                if(WJ==2)
               fprintf(f3,"%.4lf+%.4lf-%.4lf-%.4lf=\n",A[i],B[i],C[i],D[i]);
            }
            else if(i%7==0)
            {
                if(WJ==1)
                cout<<A[i]<<"-"<<B[i]<<"+"<<C[i]<<"+"<<D[i]<<"="<<endl;
                if(WJ==2)
               fprintf(f3,"%.4lf-%.4lf+%.4lf+%.4lf=\n",A[i],B[i],C[i],D[i]);
                
            }
            else
            {
                if(WJ==1)
                cout<<A[i]<<"-"<<B[i]<<"+"<<C[i]<<"-"<<D[i]<<"="<<endl;
                if(WJ==2)
               fprintf(f3,"%.4lf-%.4lf+%.4lf-%.4lf=\n",A[i],B[i],C[i],D[i]);
              
            }           
        }
    }
    if(SuanF==4)//乘法运算
    {
            for(i=0;i<NumS;i++)
            {
                if(WJ==1)
                    cout<<A[i]<<"*"<<B[i]<<"*"<<C[i]<<"*"<< D[i]<<"="<<endl;
                if(WJ==2)
               fprintf(f3,"%.4lf*%.4lf*%.4lf*%.4lf=\n",A[i],B[i],C[i],D[i]);
    
            }
    }
    if(SuanF==5)//除法运算
    {
            for(i=0;i<NumS;i++)
            {
                if(WJ==1)
                    cout<<A[i]<<"/"<<B[i]<<"/"<<C[i]<<"/"<< D[i]<<"="<<endl;
                if(WJ==2)
               fprintf(f3,"%.4lf/%.4lf/%.4lf/%.4lf=\n",A[i],B[i],C[i],D[i]);
            }
    }
    if(SuanF==6)//乘除运算
    {
           for(i=0;i<NumS;i++)
        {   
           if(i%2==0)
            {
               if(WJ==1)
                cout<<A[i]<<"*"<<B[i]<<"*"<<C[i]<<"/"<<D[i]<<"="<<endl;
               if(WJ==2)
               fprintf(f3,"%.4lf*%.4lf*%.4lf/%.4lf=\n",A[i],B[i],C[i],D[i]);               
            }
            else if(i%3==0)
            {
                if(WJ==1)
                cout<<A[i]<<"*"<<B[i]<<"/"<<C[i]<<"*"<<D[i]<<"="<<endl;
                if(WJ==2)
               fprintf(f3,"%.4lf*%.4lf/%.4lf*%.4lf=\n",A[i],B[i],C[i],D[i]);                
            }
            else if(i%5==0)
            {
                if(WJ==1)
                cout<<A[i]<<"/"<<B[i]<<"*"<<C[i]<<"*"<<D[i]<<"="<<endl;
                    if(WJ==2)
               fprintf(f3,"%.4lf/%.4lf*%.4lf*%.4lf=\n",A[i],B[i],C[i],D[i]);               
            }
            else if(i%7==0)
            {
                if(WJ==1)
                cout<<A[i]<<"/"<<B[i]<<"*"<<C[i]<<"*"<<D[i]<<"="<<endl;
                        if(WJ==2)
               fprintf(f3,"%.4lf/%.4lf*%.4lf*%.4lf=\n",A[i],B[i],C[i],D[i]);              
            }
            else
            {
                if(WJ==1)
                cout<<A[i]<<"/"<<B[i]<<"*"<<C[i]<<"/"<<D[i]<<"="<<endl;
                if(WJ==2)
               fprintf(f3,"%.4lf/%.4lf*%.4lf/%.4lf=\n",A[i],B[i],C[i],D[i]);             
            }
        }
    }   
    if(SuanF==7)//四则混合运算
    {
         if(KuoH==2)//四则运算中有括号
         {
                for(i=0;i<NumS;i++)
    {   
           if(i%2==0)
            {
               if(WJ==1)
                cout<<A[i]<<"*"<<B[i]<<"-"<<C[i]<<"+"<<D[i]<<"="<<endl;
               if(WJ==2)
               fprintf(f3,"%.4lf*%.4lf-%.4lf+%.4lf=\n",A[i],B[i],C[i],D[i]);                
            }
            else if(i%3==0)
            {
                if(WJ==1)
                cout<<A[i]<<"+"<<B[i]<<"*"<<"("<<C[i]<<"-"<<D[i]<<")"<<"="<<endl;
                 if(WJ==2)
               fprintf(f3,"%.4lf+%.4lf*(%.4lf-%.4lf)=\n",A[i],B[i],C[i],D[i]);               
            }
            else if(i%5==0)
            {
                if(WJ==1)
                cout<<A[i]<<"+"<<B[i]<<"*"<<C[i]<<"-"<<D[i]<<"="<<endl;
                 if(WJ==2)
               fprintf(f3,"%.4lf+%.4lf*%.4lf-%.4lf=\n",A[i],B[i],C[i],D[i]);            
            }
            else if(i%7==0)
            {
                if(WJ==1)
                cout<<A[i]<<"+"<<"("<<B[i]<<"-"<<C[i]<<")"<<"*"<<D[i]<<"="<<endl;
                if(WJ==2)
               fprintf(f3,"%.4lf+(%.4lf-%.4lf)*%.4lf=\n",A[i],B[i],C[i],D[i]);               
            }
            else
            {
                if(WJ==1)
                cout<<A[i]<<"/"<<"("<<B[i]<<"+"<<C[i]<<")"<<"-"<<D[i]<<"="<<endl;
                if(WJ==2)
               fprintf(f3,"%.4lf/(%.4lf+%.4lf)-%.4lf=\n",A[i],B[i],C[i],D[i]);               
            }           
                }
          }
       if(KuoH==1)//四则运算中没有括号
        {
          for(i=0;i<NumS;i++)
        {   
            if(i%2==0)
            {
                if(WJ==1)
                cout<<A[i]<<"*"<<B[i]<<"-"<<C[i]<<"+"<<D[i]<<"="<<endl;
                if(WJ==2)
               fprintf(f3,"%.4lf*%.4lf-%.4lf+%.4lf=\n",A[i],B[i],C[i],D[i]);                
            }
            else if(i%3==0)
            {
                if(WJ==1)
                cout<<A[i]<<"+"<<B[i]<<"*"<<C[i]<<"-"<<D[i]<<"="<<endl;
                    if(WJ==2)
               fprintf(f3,"%.4lf+%.4lf*%.4lf-%.4lf=\n",A[i],B[i],C[i],D[i]);               
            }
            else if(i%5==0)
            {
                if(WJ==1)
                cout<<A[i]<<"+"<<B[i]<<"*"<<C[i]<<"+"<<D[i]<<"="<<endl;
                if(WJ==2)
               fprintf(f3,"%.4lf+%.4lf*%.4lf+%.4lf=\n",A[i],B[i],C[i],D[i]);            
            }
            else if(i%7==0)
            {
                if(WJ==1)
                cout<<A[i]<<"+"<<B[i]<<"-"<<C[i]<<"/"<<D[i]<<"="<<endl;
                if(WJ==2)
               fprintf(f3,"%.4lf+%.4lf-%.4lf/%.4lf=\n",A[i],B[i],C[i],D[i]);            
            }
            else
            {
                if(WJ==1)
                cout<<A[i]<<"/"<<B[i]<<"-"<<C[i]<<"*"<<D[i]<<"="<<endl;
                if(WJ==2)
               fprintf(f3,"%.4lf/%.4lf-%.4lf*%.4lf=\n",A[i],B[i],C[i],D[i]);                
            }
        } 
         } 
}   
}
  • Code address: GitHub
  • Due to limited personal ability, a user graphical interface cannot be provided.
  • Example of running results Example
    1. The number of questions is 10, addition, the random number range is 1-101, no decimals are involved in the operation, and an output file is required


    . , there are decimals involved in the operation, and an output file is required

    !
    Example 3. The number of questions is 25, the mixed operation of addition, subtraction, multiplication and division, the random number range is 1-101, there are parentheses involved in the operation, no decimals are involved in the operation, and an output file is required

    4. Evaluation of the navigator

      在这次编程任务中,领航员雷建同学的表现可以说是十分积极。任务刚刚布置下来的时候,他就自告奋勇想要担任领航员的角色,在编程过程中,他帮助了我很多,给我提供了很多思路。在我编写代码工作时,他总是能找出我的bug,这点让我十分的佩服。如果角色互换的话,面对这种题目,我免不了要对队友和其他同学进行求助的。当然啦,也不是说自己一个人在那里闷着代码就会自己弄懂。虽然我的编程能力还行,但是他这种慧眼独具,能及时想到各种会出现的bug的能力值得我学习。这就是他有信心去做领航员这个角色的原因吧。优点固然很多,但是代码对我来说还是有缺点的,最主要的就是没有细致的函数划分,对各种会出现的情况没有更全面的处理。如果有细致的函数划分的话,可能测试方面还会容易一些。当然啦,领航员的的确确是完成了自己的任务,这次作业还是我的不足多一些。

    5. Experience

      在此次的结对编程中,我担任的是驾驶员,负责完成代码工作,使程序能满足题目中的各项要求。在此次结对编程在我和雷建同学的合作努力下完成了四则运算自动生成程序的设计和编写。在编程过程中,雷建同学全程辅导我的代码编写,在一些功能的实现上也为我出谋划策,同时在我编写的过程中,雷建同学在一旁观看督促我,为我检查代码中的bug,为我整理设计了代码的整体布局,使我能够在编写的过程中思路更清晰,代码中出现bug时也能快速定位,我感觉这样代码编写效率有了很大的提升。同时,雷建同学也及时找出了程序中的漏洞和被我忽视的bug,使我代码的质量得到了保证。雷建同学作为此次的领航者,对我的代码的整体思路以及实现方法提出了很好的建议。在结对编程过程中发挥着不可忽视的作用。
      对于这次结对编程作业,我知道自己的程序不是最好的,各种情况也没有全面考虑,例如,在四则运算中,若除数为0的情况就应该舍去,但是我为了方便领航员测试,在编写程序时这种情况直接舍去了。尽管在编写过程中,和雷建同学一起商量排除了许多bug,但是还是存在许多bug,这让我明白了这次结对作业的意义了-------驾驶员编写程序不容易,但是领航员的代码测试更不容易

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324617748&siteId=291194637