zoukankan      html  css  js  c++  java
  • 结对编程-四则运算

    组员

        李勇 201421122027

        何忠鹏 201421122024

    代码地址:https://git.coding.net/ThinkAlone/Arithmetic02.git

    本次作业的完成内容

        本次作业基于作业一四则运算程序做增量开发,新增了如下功能

        1、良好用户界面

        2、保存历史的错题和对题的数量,用于参考。

        3、计时功能,用于计算本次练习的所花时间。

    需求分析

        在练习四则运算题目的时候,我们需要参考原来做题的正确率,来了解一下自己的实力。有时候我们做练习题不仅需要得到题目的正确率,还需要在限定时间内完成练习,这时候需要这个程序有一个计时功能,在开始练习的时候开始计时,到练习完成计算所花时间。记录题目正确率需要统计每一次的练习,这样能保证这个正确率的参考性,将数据保存到本地文本文件,使数据持久化。用户也需要良好的界面来操作程序,还需要对程序的界面进行优化。

    思维导图

    代码展示:

          

    int main()
    {
    
        string exp;//用于保存到TXT文件的表达式
        string str;//用于计算的表达式
        string stt;//记录表达式的计算顺序
        int cdNum;
        int ns,n,m=0;//题目的个数
        cout<<"*****************************************************"<<endl;
        cout<<"欢迎使用四则运算生成系统"<<endl;
        cout<<"*****************************************************"<<endl;
        cout<<""<<endl;
    
        srand((unsigned)time(NULL));
        ofstream location_out;
        string isrepeat;
        int range;
        string answer;
        time_t time_s;
        struct tm *date_time;
        int correntCount=0;
        int wrongCount=0;
        int totalCorrentCount=0;
        int totalWrongCount=0;
        string totalCorrentNum;
        string totalWrongNum;
        ifstream in1("CorrentCount.txt",std::ios::app);
        int sh,sm,ss;
        int eh,em,es;
        int th,tm,ts;
        int total;
    
        location_out.open("Suffix.txt", std::ios::out);
        location_out.close();
        location_out.open("Exercise.txt", std::ios::out);
        location_out.close();
        location_out.open("Answer.txt", std::ios::out);
        location_out.close();
        location_out.open("Grade.txt", std::ios::out);
        location_out.close();
        n=0;
        if(in1.eof())
        {
            location_out.open("CorrentCount.txt", std::ios::out);
            location_out <<totalCorrentCount<<endl;
            location_out<<totalWrongCount<<endl;
            location_out.close();
        }
        getline(in1,totalCorrentNum);
        getline(in1,totalWrongNum);
        totalCorrentCount=atoi(totalCorrentNum.c_str());
        totalWrongCount=atoi(totalWrongNum.c_str());
        cout<<"总错题数:"<<totalWrongCount<<"        总对题数:"<<totalCorrentCount<<endl;
        cout<<"请输入题目的数量:";
        cin>>ns;
        cout<<"请输入数值的范围:";
        cin>>range;
        time(&time_s);
        date_time = localtime(&time_s);
    
        printf("开始做题时间:%04d/%02d/%02d %02d:%02d:%02d 
    ",date_time->tm_year+1900,
               date_time->tm_mon+1,date_time->tm_mday,sh=date_time->tm_hour,
               sm=date_time->tm_min,ss=date_time->tm_sec);
        while(n<ns)
        {
            exp = "";
            cdNum = operatorNum();
            string *cd = new string[cdNum];
            string *nums = new string[cdNum + 1];
            cd = operators(cdNum);
            nums = num(cdNum,range);
    
            exp = nums[0];
            for (int i = 0; i < cdNum; i++)
            {
                exp = exp + cd[i] + nums[i + 1];
            }
            exp = insertBr(cdNum, exp);
            str=getStr(exp);
            while (exp.find("?") != string::npos)
            {
                exp.replace(exp.find("?"), 1, "÷");
            }
            str=getAns(str);
            stt=str.substr(str.find("|")+1,str.size()-1);
            isrepeat=isRepeat(stt);
            if(isrepeat.compare("no")==0)
            {
                location_out.open("Suffix.txt", std::ios::out | std::ios::app);  //以写入和在文件末尾添加的方式打开.txt文件,没有的话就创建该文件。
                location_out << n + 1 << ". ";
                location_out << stt <<endl;
                location_out.close();
                str=str.substr(0,str.find("|"));
    
                location_out.open("Answer.txt", std::ios::out | std::ios::app);  //以写入和在文件末尾添加的方式打开.txt文件,没有的话就创建该文件。
                location_out << n + 1 << ". ";
                if(str.compare("0")!=0)
                {
                    str=simplify(str);
                }
                location_out <<str<<endl;
                location_out.close();
                location_out.open("Exercise.txt", std::ios::out | std::ios::app);  //以写入和在文件末尾添加的方式打开.txt文件,没有的话就创建该文件。
                cout<<"-------------------------------------------------------------------------"<<endl;
                cout<<n+1<<". "<<exp<<"=";
                cin>>answer;
                location_out << n + 1 << ". ";
                location_out << exp << "="<<answer<<endl;
                location_out.close();
                n++;
            }
            else
            {
                m++;
                location_out.open("Grade.txt", std::ios::out | std::ios::app);  //以写入和在文件末尾添加的方式打开.txt文件,没有的话就创建该文件。
                location_out << exp << " repeat ";
                location_out << isrepeat <<endl;
                location_out.close();
            }
        }
        location_out.open("Grade.txt", std::ios::out | std::ios::app);  //以写入和在文件末尾添加的方式打开.txt文件,没有的话就创建该文件。
        location_out << "repeat: ";
        location_out << m <<endl;
        location_out.close();
        cout << "题目作答完毕"<< endl;
        correntCount=check();
        time(&time_s);
        date_time = localtime(&time_s);
        printf("做题结束时间:%04d/%02d/%02d %02d:%02d:%02d 
    ",date_time->tm_year+1900,
               date_time->tm_mon+1,date_time->tm_mday,eh=date_time->tm_hour,
               em=date_time->tm_min,es=date_time->tm_sec);
        total=(es+em*60+eh*3600)-(ss+sm*60+sh*3600);
        ts=total%60;
        tm=(total/60)%60;
        th=total/3600;
        printf("本次做题所花时间为%d小时%d分钟%d秒
    ",th,tm,ts);
        cout<<"题目检测完毕"<<endl;
        wrongCount=ns-correntCount;
        cout<<"本次错题数:"<<wrongCount<<"            本次对题数:"<<correntCount<<endl;
        totalCorrentCount+=correntCount;
        totalWrongCount+=wrongCount;
        location_out.open("CorrentCount.txt", std::ios::out);
        location_out <<totalCorrentCount<<endl;
        location_out<<totalWrongCount<<endl;
        location_out.close();
        return 0;
    }

    程序运行截图:

      

    小结感受

         结对编程这种模式还是很好的,两个人可以互相交流,弥补自己的不足。还可以交流不同的想法,把程序优化的很好。但是由于这次作业时间不足,作业一要求用的vs2010开发,使用的是C++,之前很少接触C++的编程语法。那次作业就做的很吃力。这次又需要在上次的基础上优化,由于没有C++图形编程的基础,时间也是不太够,还需要其它事情要做,所有没使用GUI编程。程序的基本功能在这个程序有体现,由于是控制台,有一些操作无法实现。但是这次目前主要是感受一下结对编程的乐趣,程序的缺陷比较次要吧,在这次结对编程的过程中,交流很多,学习到到也很多,还是收益很多的。图形编程QT也有接触过,只是还无法掌握。

    评价合作伙伴

        何忠鹏同学是一个很好的合作伙伴,他对于编程兴趣很高 ,了解的知识面很广。在结对编程过程中,他能提供很多的帮助和建议,能对一个程序的实现提供很多新颖的思路。交流沟通方面也很有优势,他是我的舍友,我们能随时交流想法,这样让我们完全体验了结对编程的乐趣。

    展示PSP

    PSP2.1 

    Personal Software Process Stages

    Time Senior Student

    Time 

    Planning

    计划

    16

    25

    · Estimate

    估计这个任务需要多少时间

    15

    22

     Development

    开发

    552

    573

     ·Analysis

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

    40

    35

    · Design Spec

    生成设计文档

    30

    25

    · Design Review

    设计复审

    15

    23

     · Coding Standard

    代码规范

    16

    15

    · Design

    具体设计

    46

    35

    · Coding

    具体编码

    264

    263

    · Code Review

    代码复审

    40

    26

     · Test

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

    40

    50

     Reporting

    报告

    63

    84

     

    测试报告

    10

    8

     

    计算工作量

    14

    13

     

    并提出过程改进计划

    15

    17

     
     
     
     
  • 相关阅读:
    SDN第一次上机作业
    SDN第一次作业
    2017软件工程第二次作业
    Swift基础(一)
    iOS获取当前屏幕显示的viewcontroller
    Swift基础(二)
    属性和点语法
    Delphi 2008 和 C++Builder 将于8月25日发布
    为什么建议使用多重using
    .Net中Timers的学习备忘二
  • 原文地址:https://www.cnblogs.com/ThinkAlone/p/7710963.html
Copyright © 2011-2022 走看看