结对编程---四则运算
Posted lhd001
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结对编程---四则运算相关的知识,希望对你有一定的参考价值。
目录
一、实验目的
二、实验内容
三、实验代码
四、实验结果
五、实验心得
一、实验目的
通过两位同学组队用结对编码(两位位同学轮流coding,另一个同学在旁边审核代码)的方式完成本次实验。本次实验需要设计一个四则运算练习题的随机出题程序,可以通过C/C++/Java/Python等语言进行实现,四则运算练习题需要一或两个运算符,100以内的数字,不需要写答案,但是需要再输入答案之后检查答案是否正确并保证答案在0-100之间。
二、实验内容
编写一个四则运算程序(c/c++),限制100以内的数字,运算符1-2个,并检查答案是否正确。
三·、实验代码
队员A(2152211)编写部分:
void DisplayFenshu(int a[][2],int w,int m) if(w==1) for(int q=0; q<m; q++) if(a[q][0]==0) cout<<"0"<<\'\\t\'; else cout<<a[q][0]<<"/"<<a[q][1]<<\'\\t\'; if(q%5==4) cout<<endl; else ; void DealInt(int m,int a[]) for(int p=0; p<m; p++) int i=(int)rand()%10; int j=(int)rand()%10; int k=(int)rand()%100/25; switch(k) case 0: cout<<i<<"+"<<j<<"="; a[p]=i+j; break; case 1: cout<<i<<"-"<<j<<"="; a[p]=i-j; break; case 2: cout<<i<<"*"<<j<<"="; a[p]=i*j; break; case 3: try a[p]=i/j; cout<<i<<"/"<<j<<"="; catch(...) p--; if(p%5==4) cout<<endl; else cout<<\'\\t\';
队员B(2052643)编写部分:
void DisplayInt(int a[],int w,int m) if(w==1) for(int q=0; q<m; q++) cout<<a[q]<<\'\\t\'; if(q%5==4) cout<<endl; else ; void DealFenshu(int m, int a[][2]) for(int p=0; p<m; p++) int i=(int)rand()%10; int j=(int)rand()%10; while(j==0||i>=j) i=(int)rand()%10; j=(int)rand()%10; int x=(int)rand()%10; int y=(int)rand()%10; while(y==0||x>=y) x=(int)rand()%10; y=(int)rand()%10; int k=(int)rand()%100/25; switch(k) case 0: cout<<"("<<i<<"/"<<j<<")"<<"+"<<"("<<x<<"/"<<y<<")"<<"="; a[p][0]=i*y+x*j; a[p][1]=j*y; break; case 1: cout<<"("<<i<<"/"<<j<<")"<<"-"<<"("<<x<<"/"<<y<<")"<<"="; a[p][0]=i*y-x*j; a[p][1]=j*y; break; case 2: cout<<"("<<i<<"/"<<j<<")"<<"*"<<"("<<x<<"/"<<y<<")"<<"="; a[p][0]=i*x; a[p][1]=j*y; break; case 3: a[p][0]=i*y; a[p][1]=j*x; cout<<"("<<i<<"/"<<j<<")"<<"/"<<"("<<x<<"/"<<y<<")"<<"="; if(p%5==4) cout<<endl; else cout<<\'\\t\';
队员C(2152219)编写部分:
int main() int p; do system("cls"); int a[1000],b[1000][2]; int m,n,w; cout<<"请输入生成的四则运算题个数:"; cin>>m; cout<<endl; cout<<"请输入要生成的四则运算种类(输入1为整数,否则为真分数):"; cin>>n; cout<<endl; if(n==1) DealInt(m,a); cout<<endl; else DealFenshu(m,b); cout<<endl; cout<<"是否输出答案(输入1则输出答案否则不输出答案)"<<endl; cin>>w; if(n==1) DisplayInt(a,w,m); else DisplayFenshu(b,w,m); cout<<endl; cout<<"是否继续生成运算题(输入1则生成否则不生成)"<<endl; cin>>p; cout<<endl; while(1==p);
四、实验结果
五、实验心得
我们代码都是结对一起写的,一些单元测试和一些小修小改是分开进行的,然后结对的时候交流更改了什么。结对编程确实大大提高了攻坚的效率,而且代码的质量确实更高了,单元测试很少测出错误。但是在我们的实践中并没有提高对需求的覆盖,仍旧时不时遗忘一些不重要的需求。而对于这一次结对编程,队友之间的相互配合真的很重要,三人完成自己的部分从而可以顺利的组合会让整个过程变得更加的流程。再者,函数的正确命名以及适当的注释非常重要,利于代码组合以后的修改与维护。
作业四:结对编程——四则运算
项目名称:结对编程——四则运算(GUI)
同学小伙伴:张富彬
博客园地址:http://www.cnblogs.com/legend07/
GitHub代码地址:https://github.com/8561549/Arithmetic2.0/tree/master/Arithmetic2.0
需求分析:
首先是实现GUI的界面设计,主要有两个窗体,一个窗体进行参数设计,另一个窗体负责显示题目。两个窗体之间实现自由跳转。在参数设置窗口可以获取各个控件中的信息,能对出题窗口的出题情况进行限制,其中包括题目数量的设置,题目数值的设置,每道题目运算符个数的设置,分数模式的设置,算式中运算符的选择。在答题界面中需要可以显示出题题目,答题栏,每道题的正确答案,可以对用户的答案进行判断,可以清空历史的出题情况与答案,将错误的题目生成TXT格式的文档以供查询。
具体功能实现:
在拿到题目时我们两个人已经有了大概的思路(因为上次作业做了控制台版本的四则运算),由于上次作业没有限制编程语言,我的小伙伴选择了使用比较熟悉的C语言进行编写,而我则选用了刚刚学过的C#语言进行编写。由于这次要求GUI的界面进行编程,所以我来主导编程,选用了我的思路进行设计。
界面设计
最初的想法我们打算以答题窗体作为主窗体来设计,在菜单栏中进行参数的设计,每次点击菜单栏中的选项会跳出新的窗口进行参数设置,于是我们有了如下图所示的Arithmetic1.0界面:
下面是各个子窗体的界面:
在Arithmetic1.0的编程过程中我们在实现了部分功能的时候才发现,看似简单的各个窗体之间参数的传递就成了一个很麻烦的问题,例如我们在从一个窗体中得到参数时其窗体就不能正常关闭,如果再次打开这个窗体进行设置值时就会出现以下的问题:
在进行一番讨论与百度后发现是因为之前新建的窗体没有得到资源释放导致的,于是我们着手处理这个问题,可是在解决了释放问题之后又出现了新的问题,就是程序窗体中的值传不过来了......于是我们只能放弃拥有了2天生命周期的1.0窗体!这样我们迎来了一个新的版本——Arithmetic2.0(学聪明了,就俩窗体!先进行参数设置再传递到下一个窗口进行出题~)窗口界面如下面的图片所示:
参数设计
由于使用C#语言进行编程,所以不能直接使用省事儿的全局变量,只好做了一个容器来装所有我们程序中要用到的变量!于是乎采用一个类来装我们接下来要用的变量,同时这样的好处也更方便我们进行管理设置。
其中大部分的变量的值都是在设置窗口中得到的,我们采用了不同的控件来获得不同的参数值,其中题目数量、运算符个数、数值范围采用TextBox控件来获取,在这些TextBox加了KeyPress事件,只能从接收数字、退格、负号这些符号,同时也对位数进行了限制,这样就能控制数值的溢出。而运算符选择、是否包含分数、是否包含括号采用了CheckBox控件与RadioButton控件来实现,用CheckedChanged事件来进行数值设置,不同的模式有不同的编号,通过这些编号控制一些数值的改变来实现不同模式的功能。
功能实现
不同的功能都通过单击答题窗口的不同按钮来实现的。于是将每一个功能的实现放在了各个按钮的单击事件中,如下图所示:
在程序生成题目的同时会将每一个题目的答案装进一个数组当中,在答题栏中每一行对应行出题的答案,输入的答案会记录在另一个数组当中,当用户单击判断按钮时将会对两个数组进行比对,如果两个数组的相同序号的位置的值相同就将会在正确题目数目这个变量+1,在答题窗口的左下角会显示你所答对的题数。在进行判断的同时我们会将做错的题目存在一个数组当中,当用户单击错题本时会将错题数组导入到一个TXT格式的文档中并打开。
程序的功能进行了封装,主要涉及到输出的部分,以及运算式结果的计算部分。将这两个部分做成了两个类,在各个功能实现时进行调用。
测试效果如下所示:
附加题:
由于刚刚开始练习使用单元测试对程序进行测试,花费了很多的时间去了解如何测试最后只是做了一个简单的整数加法的测试,不知做的对还是错,如果有问题请助教老师指出来,我会认真学习改正的!测试截图与测试代码如下所示:
总结反思
首先在程序方面还存在着许多的问题,有许多Bug需要解决(/(ㄒoㄒ)/~~)例如在分数求计算值时各种中断错误,所以如今还在优化当中!同时我们这次作业会接着做下去,希望老师持续关注。^_^
在这次结对编程的过程中我负责的部分主要是核心代码的编写,我的小伙伴负责帮我查找一些在各种所需要的资料以及GUI的界面设计,我合作的还是比较愉快的,如果有下次的结对机会我们会互换一下各自的工作,由他来负责主要部分,而我来负责其他部分,每个人都可以有发挥的机会!
我的小伙伴的优点有很多,在编程的时候很积极,在解决问题的时候他总能很快的找到解决方案,可以看出他经常会逛一些与我们专业相关的论坛,同时他的思维也很开阔,总能有一些新奇的想法可以解决我们所遇到的问题。缺点的话就是对算法不是很精通,数据结构部分比较薄弱。
结对编程在我看来是十分有趣的,两个人使用一台电脑,一人操作,在不同的沟通交流中可以互补的解决问题开拓思路,在解决问题时会更加全面,可以发现一些潜在的问题。但是缺点也是比较明显的,还是学生的我们时间上不会有太多的统一,以致于两个人在这个工作的过程中比较少的进行集中。其次两个人共用一台电脑的情况下效率是比较低下的。
以上是关于结对编程---四则运算的主要内容,如果未能解决你的问题,请参考以下文章