软件工程第二次作业 —— 结对编程

1.小组成员

汪浩 1500802117

韩英璨 1500802104 博客园地址

2.代码连接地址

https://coding.net/u/iiiiii126/p/jieduibiancheng/git

3.程序功能分析及截图
(1)图形界面

(2)设计的应用程序可以完成加法、减法、乘法、除法运算
加法截图

减法截图

乘法截图

除法截图

代码
void CMy1Dlg::OnBnClickedzhengshu()
{
// TODO: 在此添加控件通知处理程序代码
s=true;
n=0;
n2=0;
CString strz;
strz.Format(_T("%d"),n2);
GetDlgItem(cuo_wu)->SetWindowText(strz);
GetDlgItem(zong_shu)->SetWindowText(strz);
for(int p=0;p<100;p++)
str[p]=_T("");
for(int p=0;p<100;p++)
{
int i=(int)rand()%10;
int j=(int)rand()%9+1;
int k=(int)rand()%100/25;
CString str0("");
switch(k)
{
case 0:
a[p]=i+j;
str0+=_T("+");
break;
case 1:
a[p]=i-j;
str0+=_T("-");
break;
case 2:
a[p]=ij;
str0+=_T("
");
break;
case 3:
try
{
a[p]=i/j;
str0+=_T("/");
}
catch(...)
{
p--;
}
}

    CString stri;
    stri.Format(_T("%d"),i);
    CString strj;
    strj.Format(_T("%d"),j);
    str[p]+=stri+=str0+=strj;
}

}
(3)应用程序可以完成真分数的四则运算

代码
void CMy1Dlg::OnBnClickedfenshu()
{
// TODO: 在此添加控件通知处理程序代码
s=false;
n=0;
n2=0;
CString strz;
strz.Format(_T("%d"),n2);
GetDlgItem(cuo_wu)->SetWindowText(strz);
GetDlgItem(zong_shu)->SetWindowText(strz);
for(int p=0;p<100;p++)
str2[p]=_T("");
for(int p=0;p<100;p++)
{
int i=(int)rand()%10;
int j=(int)rand()%10;
while(j0||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;
CString str0("");
switch(k)
{
case 0:
str0+=_T("+");
b[p][0]=iy+xj;
b[p][1]=jy;
break;
case 1:
str0+=_T("-");
b[p][0]=i
y-xj;
b[p][1]=j
y;
break;
case 2:
str0+=_T("");
b[p][0]=i
x;
b[p][1]=jy;
break;
case 3:
b[p][0]=i
y;
b[p][1]=j*x;
str0+=_T("/");
}
CString stri((char)(i+48));
stri+=_T("/");
CString strj((char)(j+48));
CString strx((char)(x+48));
strx+=_T("/");
CString stry((char)(y+48));
CString strl("(");
CString strr(")");
str2[p]+=_T("(");
str2[p]+=stri+=strj+=strr+=str0+=strl+=strx+=stry+=strr;
int g=1;
for(int c=1;(c<=b[p][0]||c<=(-b[p][0]))&&(c<=b[p][1]||c<=b[p][1]);c++)
{
if(b[p][0]%c0&&b[p][1]%c0)
g=c;
}
b[p][0]/=g;
b[p][1]/=g;
}
}
(4)有退格和清屏的功能
清屏截图
点击清屏按钮,所有的数据将会被清空

退格截图
点击退格按钮,答案输入框里的数据就会减少一位

代码
void CMy1Dlg::OnBnClickedqingping()
{
// TODO: 在此添加控件通知处理程序代码
KillTimer(1);
CString strz("");
CString strz1("0");
GetDlgItem(timu)->SetWindowText(strz);
GetDlgItem(jieguo)->SetWindowText(strz);
GetDlgItem(zhengque)->SetWindowText(strz);
GetDlgItem(9)->SetWindowText(strz);
GetDlgItem(daojishi003)->SetWindowText(strz);
GetDlgItem(da_an)->SetWindowText(strz);
GetDlgItem(zong_shu)->SetWindowText(strz);
GetDlgItem(cuo_wu)->SetWindowText(strz);
}
void CMy1Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
if(strd.GetLength()>0)
{
strd.MakeReverse();
strd.Delete(0,1);
strd.MakeReverse();
GetDlgItem(da_an)->SetWindowText(strd);
}
else
{
GetDlgItem(da_an)->SetWindowText(strd);
}
}
(5)让程序能接受用户输入答案,并判定对错

代码
void CMy1Dlg::OnBnClickedjisuan()
{
// TODO: 在此添加控件通知处理程序代码

UpdateData(TRUE);
if(s)
{
	int x;
	x=_ttoi(strd);
    if(x==a[n-1])
	{
        GetDlgItem(jieguo)->SetWindowText(_T("回答正确"));
		n2++;
	}
    else
        GetDlgItem(jieguo)->SetWindowText(_T("回答错误"));
}
else
{
	int x1,x2;
	CString fz;
	CString fm;
	int i=0;
	while(strd.GetAt(i)!='/'&&strd.GetAt(i)!='\0')
	{
		fz+=strd.GetAt(i);
		i++;
	}
	if(strd.GetAt(i)=='\0'||strd.GetAt(i+1)=='\0')
	{
		GetDlgItem(da_an)->SetWindowText(_T("输入错误,请重新输入"));
	}
	else
	{
	     x1=_ttoi(fz);
	     i++;
	     while(strd.GetAt(i)!='\0')
	    {
		    fm+=strd.GetAt(i);
		    i++;
	    }
	    x2=_ttoi(fm);
	    if(x1==b[n-1][0]&&x2==b[n-1][1])
		{
            GetDlgItem(jieguo)->SetWindowText(_T("回答正确"));
			n2++;
		}
        else
            GetDlgItem(jieguo)->SetWindowText(_T("回答错误"));
	}
}
CString strz;
strz.Format(_T("%d"),n2);
GetDlgItem(cuo_wu)->SetWindowText(strz);

}
选做功能
(2)增加“倒计时”功能,每个题目必须在20秒钟完成,如果完不成,得0分进入下一题

代码
void CMy1Dlg::OnTimer(UINT nIDEvent)
{
if(d==0)
{

	OnBnClickedjisuan();
	OnBnClickedchuti();
	
	
}
    else
    {    
    d--;
    CString strz;
    strz.Format(_T("%d"),d);
    GetDlgItem(daojishi003)->SetWindowText(strz);
    }

}
(3)可以统计用户总的练习题目数量,正确的数量,并且在程序重新启动后能保持记录

代码
int n=0; //出题总数
int n2=0; //正确的数量

if(s) //每次出题出题总数加一
{
GetDlgItem(timu)->SetWindowText(str[n]);
n++;
}
else
{
GetDlgItem(timu)->SetWindowText(str2[n]);
n++;
}

if(xa[n-1]) //每次回答正确正确的数量加一
{
GetDlgItem(jieguo)->SetWindowText(_T("回答正确"));
n2++;
}
if(x1
b[n-1][0]&&x2==b[n-1][1])
{
GetDlgItem(jieguo)->SetWindowText(_T("回答正确"));
n2++;
}
4.谈谈对这次结对编程的感受
(1)结对编程时的照片

(2)编程感受及心得体会
通过这次的结对编程实验,我们了解了结对编程就是两个人一起写一个程序。有实验证明,结对编程时间会比单人编程减少许多的代码bug,而且结对编程比单人更有效率,更加节省成本。结对编程的流行可以追溯到肯特 • 贝克在1999年撰写的《Extreme Programming Explained》一书,根据书中记述,公司应该非常快速的发行软件,而且软件本身也应该在发行的过程中不断得到改善,而结对编程则可以更加快速的实现这一点。通过本次实验,我们发现了结对编程的一些优势,在结对编程的过程当中两个程序员可以互相帮助,互相教对方,可以得到能力上的互补,可以增强代码的质量。在编程中,互相讨论,可以更快更有效的解决问题。但是,结对编程也存在一些缺点,在编程中,两个人可能会产生分歧和矛盾,正是由于这种问题的存在,才会让彼此双方都要去考虑对方的意见,这样才能更好的完成实验。总而言之,通过这次的结对编程实验,我们学到了很多,同时也进一步加强了彼此之间的交流与合作。

posted @ 2017-05-10 17:05  Fraster  阅读(265)  评论(0编辑  收藏  举报