软件工程结队作业二

题目要求

       本次作业要求两个人合作完成,驾驶员和导航员角色自定,鼓励大家在工作期间角色随时互换,这里会布置两个题目,请各组成员根据自己的爱好任选一题。
题目1:我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:


  • 能够自动生成四则运算练习题

  • 可以定制题目数量

  • 用户可以选择运算符

  • 用户设置最大数(如十以内、百以内等)

  • 用户选择是否有括号、是否有小数

  • 用户选择输出方式(如输出到文件、打印机等)

  • 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)

角色分配

驾驶员:刘文彤
负责代码编写。
coding地址
领航员:冯雅婧
负责指导驾驶员,对其程序进行测试与评估。
博客地址

程序编写

#include<iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <windows.h>
#include <windef.h>
#include <math.h>
#include<fstream>
#include<iomanip>
using namespace std;


double nums[100];
char str[100];
int n, Max, flag, q = 1;
int decimal,         ///是否输入小数
    brackets,        ///是否输入括号
    fst,              ///是否写入文件
    pos = 0,         ///pos为 + - * /的位置
    pos1 = -1,        ///pos1,pos2为括号位置
    pos2 = -1;
ofstream ofile;

 void randomNumber()                                   /***********nums保存四则运算中将出现的数字*************************/
 {
    flag = rand() % 3 + 2;
    for(int i = 0; i < flag; i++)
    {
        if(decimal)
        {
            nums[i] = (rand() % Max) + (rand() % 100 *0.01);
        }
        else
        {
            nums[i] = (rand() % Max) + 1;
        }
    }
 }

 void randomBrackets()                               /**********随机括号的位置****************************************/
 {
     pos1 = -1;
     pos2 = -1;
     if(brackets)
     {
       while(1)
       {
         pos1 = rand() % flag;
         pos2 = rand() % flag;
         if(abs(pos1-pos2))
         {
            pos1 = min(pos1, pos2);
            pos2 = max(pos1, pos2);
            break;
         }
       }
       if(flag == 2)
       {
            pos1 = -1;
            pos2 = -1;
       }
    }
 }

 void priduction()                                  /************输出算式***********************************/
 {
    for(int i = 0; i < flag; i++)
    {
        int k = rand()% pos;                  ///str[i]为随机的符号
        if(i == pos1 && pos1!=pos2)
        {
            cout<< "("<<" ";
            fst && ofile<<"("<<" ";
        }
        cout << nums[i] << " ";
        fst && ofile<<nums[i]<<" ";
        if(i == pos2 && pos1!=pos2)
        {
            cout<< ")" <<" ";
            fst && ofile<<")"<<" ";
        }
        if(i != flag-1)
        {
            cout<< str[k] << " ";
            fst && ofile<<str[k]<<" ";
        }
    }

 }



int main(){
    ofile.open("G:\lwt.txt" );
    cout << "请输入题目数量以及题目中出现的最大数:" << endl;
    cin >> n >> Max;
    cout << "请输入想要的运算符(+-*/)"<<endl;
    getchar();
    gets(str);
    cout << "是否需要小数?(1/0)";
    cin  >> decimal;
    cout << "是否需要括号?(1/0)";
    cin >> brackets;
    cout <<"是否写入文件?(1/0)";
    cin >> fst;

    for(int i = 0; i < strlen(str); i++)
    {
        if(str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/')
        {
           str[pos++] = str[i];                       ///str 存四则运算中将出现的符号
        }
    }

    while(n--)
    {
        randomNumber();
        randomBrackets();
        fst && ofile<<"(" << q << ")"<< "  ";
        cout << "(" << q++ << ")"<< "  ";
        priduction();
        cout<< endl;
        fst && ofile<<endl;

    }
    ofile.close();
    return 0;
}

程序运行

样例一:无小数,无括号,不写入文件





样例二:无小数,有括号,写入文件








样例三:有小数,有括号,写入文件








总结

        本次作业为结对的第二次编程,通过这次结对编程我深深地认识到了合作的重要性。在这次合作中,领航员冯雅婧给我提供了很大的帮助。导航员善于发现程序中的问题,找到程序的不足,在一起编写代码的过程中,她提出了一些我经常犯的错误,然后说出一些比较好的实现方法。在这个合作过程中,我们能够相互学习,弥补自身的不足,通过查阅资料解决了很多以前不懂的问题。同时,导航员对代码进行了测试,找出了代码很多的错误,通过改写代码,我学到了很多。也许这就是结对编程吧,通过两个人的合作完成作业,在合作的过程中我们都能发现对方的不足,提醒彼此,与此同时也能发现对方的优点,然后积极去学习。总而言之,在此次结对作业中,我到导航员起到的作用很大,一个好的导航员能减轻驾驶员的好多工作。
        我们虽然完成了这次作业,但是完成的并不是很好,其中有一些要求没能实现,比如没能给出用户界面。通过这次作业,我认识到了自己的不足,自己和别人还有很大差距。要想弥补这些差距,以后要多多练习编程。

猜你喜欢

转载自www.cnblogs.com/lwtreact/p/10817905.html