实验二 结对编程

本次实验内容不定时更新。实验小组CIA&FBI,小组成员 shinilsc(本人)和 lzp(暂时称呼) 共同完成结对编程实验。

最新更新日期:2020/4/5

 

一、实验目标:

 

1)体验敏捷开发中的两人合作。

2)进一步提高个人编程技巧与实践。

二 、实验内容:

1)根据以下问题描述,练习结对编程(pair programming)实践;

2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。

3)要求在结对编程工作期间,两人的角色至少切换 4 次;

4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。

 

三、问题描述(二选一)

开发一个自动生成小学四则运算题目的命令行 “软件”。实现 输入你要出题的个数,随机产生四则运算,然后用户回答,并且进行打分。

规则:用随机数实现100以内的加、减、乘、除运算,其中和与积不能超过100,差不为负(即须大减小),商不为小数或分数(即必须整除)。要求总计输出10个运算式,每输出一个运算式,等待输入结果,

然后进行对错判断并输出。最后输出统计答对的题数与分

 

四、其他要求

1)在博客园https://www.cnblogs.com/注册个人账号,记录二个人的编程实现过程,遇到的问题及解决方法。

2)在github上托管二个人项目的代码,采用git对项目代码进行管理

 

 五、实验过程

第一部分:github远程仓库的学习

1.github使用自己的远程仓库

 

先在本地创建了仓库my-travel-plans,按照要求添加文件。

 

然后在github上新建仓库,我个人的github账号用户名为shinisc,故我的github仓库https为 https://github.com/shinisc/my-travel-plans.git ,仓库名为my-travel-plans。

 

然后用命令git remote add origin https://github.com/shinisc/my-travel-plans.git。add是为了创建一个远程仓库的简名origin(自己可以任意取)。

 

确认github上的远程仓库还没有commit分支提示后,使用命令git push origin master来推送本地仓库的master分支。这时会提示登录github,要输入自己的用户名和密码,如下图所示。上传完成后会显示如下提示,可以看到大小、速度和分支。

这时使用git log  --oneline --graph --decorate --all命令,可以看到commit信息发生了变化。master多了跟踪标记,可以跟踪远程仓库origin(仓库名)/master(分支)。同时注意到远程仓库的SHA和本地仓库的SHA值相同。这个跟踪标记不会时时更新,如果其他人对这个分支提交了commit,必须检查更新才会移动。

 

要从远程仓库更新本地仓库就要让远程仓库有更多的提交,在github上修改app.css文件并提交。可以看到远程库的commit变成2个。

 

使用git pull origin master让本地库与远程库同步。

以上为3/8 2020更新

 课上老师说不用把GitHub的操作写进实验报告,以上GitHub操作不再更新。

与队友商量后选择四则运算作为结对编程实验项目。

以上为3/11 2020更新

第二部分 结对编程

1.算法

通过查阅网络资料和手动编程。确定了整体思路,通过srand(time())来生成随机数种子。其中操作数a,b都由rand()%100+1,即0-100的整数。运算符选择用c表示,c=rand()%4,范围0-3。0表示+,1表示-,2表示*,3表示/。

因为结果要在0-100之间,所以当a,b,c不满足时,重新生成。由于重新生成c的话,就要重新使用switch(),并重复循环,比较麻烦。

今天的结对编程过程没有完成全部的编写

以上为3/16 2020更新

经过讨论决定在第一次随机生成后,使用switch()选择运算方式后c不再改变,只随机生成a,b。这样,只要在单个case下进行循环,while(ture),在结果满足0-100时break。

以下为主要代码。

int a, b, d, t;   
    char c;        
    int i, sum = 0;   
    srand(time(0)); 
        
    for (i = 0; i < 10; i++)
    {
        a = rand() % 100 + 1;
        b = rand() % 100 + 1;
        c = rand() % 4;    
        switch (c)
        {
        case 0:
            while ((d = a + b) > 100)   
            {
                a = rand() % 100 + 1;
                b = rand() % 100 + 1;
            }
            printf("%d + %d = ", a, b);
            break;
        case 1:
            while (a > 100 || b > 100) 
            {
                a = rand() % 100 + 1;
                b = rand() % 100 + 1;
            }
            if (a < b)            
            {
                d = a;
                a = b;
                b = d;
            }
            d = a - b;
            printf("%d - %d = ", a, b);
            break;
        case 2:
            while ((d = a * b) > 100)   
            {
                a = rand() % 100 + 1;
                b = rand() % 100 + 1;
            }
            break;
        case 3:
            while (a > 100 || b > 100 || (a * b == 0))   
            {
                a = rand() % 100 + 1;
                b = rand() % 100 + 1;
            }
            if (a < b)           
            {
                d = a;
                a = b;
                b = d;
            }
            a = (a / b) * b;    
            d = a / b;
            break;
        }

    }

 

以上为3/21 2020更新

经过几天的查阅资料和摸鱼,我们决定使用mfc来做界面。

 

 

第一次搭建界面,做成了全部手动输入输出的形式。为了测试输入输出数据等是否可以完成,然后经过讨论确定了整体界面布局。

 

 

 

 最后完成了所有的界面,并补充代码

 

 

 以上为3/27 2020更新

 

继续补充代码,并添加新的对话框,包括规则补充,错误提示等,并测试。

 

以下为截图展示。

 

 

 

 

 

 

 

 

 

以下为结对编程过程

 

 

 

 

 

github项目地址 https://github.com/lv-byte/LL 

(我的)github克隆地址 https://github.com/shinisc/LL

 exe文件地址 https://files.cnblogs.com/files/ShiNiba/%E5%9B%9B%E5%88%99%E8%BF%90%E7%AE%97.rar

4/5 2020更新

posted on 2020-03-11 10:47  shinilsc  阅读(230)  评论(0编辑  收藏  举报