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

     
     
     
     
  • 相关阅读:
    ArrayList用法
    MessageBox
    将文本文件导入Sql数据库
    在桌面和菜单中添加快捷方式
    泡沫排序
    Making use of localized variables in javascript.
    Remove double empty lines in Visual Studio 2012
    Using Operations Manager Connectors
    Clear SharePoint Designer cache
    Programmatically set navigation settings in SharePoint 2013
  • 原文地址:https://www.cnblogs.com/ThinkAlone/p/7710963.html
Copyright © 2011-2022 走看看