实验二 结对编程
本次实验内容不定时更新。实验小组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更新