软件工程第二次结对作业

一.题目要求

我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:
能够自动生成四则运算练习题
1.可以定制题目数量
2.用户可以选择运算符
3.用户设置最大数(如十以内、百以内等)
4.用户选择是否有括号、是否有小数
5.用户选择输出方式(如输出到文件、打印机等)
6.最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)
我们选择第一题作为结对项目,第一题要求生成一个四则运算程序,并且加入了与用户互动的部分,例如括号的选择,运算符的选择,等等,至于图形化界面部分,由于我俩都没有学习过c++图形界面设计方面的知识,所以只能选择放弃,转而用运行窗口来进行替代。

二.编程概况

驾驶员:陈大千
领航员:李子涵
编程语言:c++
开发工具:dev c++
运行环境:windows 10

三.功能模块设计

本次作业代码已上传至coding:https://coding.net/u/Bluebird_/p/projects_Pairing/git/blob/master/结对2.cpp?public=true
整数模块代码:

void integer_Cal()
{
	int a,b,c,d;              //定义四个随机整数
	a=(rand()%m)+1;       //生成随机整数
	b=(rand()%m)+1;
	c=(rand()%m)+1;
	int op1,op2,op3;        //定义三个符号变量
	op1=rand()%4;         //生成随机符号变量
	op2=rand()%4;
	if(brackets==1)         //无括号的情况
	{
		if(ope==1)        //运算符号为加法
		{
			cout<<a<<"+"<<b<<"+"<<c<<"="<<endl;
			outfile<<a<<"+"<<b<<"+"<<c<<"="<<endl;
		}
		else if(ope==2)  //运算符号为减法
		{
			cout<<a<<"-"<<b<<"-"<<c<<"="<<endl;
			outfile<<a<<"-"<<b<<"-"<<c<<"="<<endl;
		}
		else if(ope==3) //运算符号为乘法
		{
			cout<<a<<"*"<<b<<"*"<<c<<"="<<endl;
			outfile<<a<<"*"<<b<<"*"<<c<<"="<<endl;
		}
		else if(ope==4)  //运算符号为除法
		{
			cout<<a<<"/"<<b<<"/"<<c<<"="<<endl;
			outfile<<a<<"/"<<b<<"/"<<c<<"="<<endl;
		}
		else               //四种运算符号交替
		{
			cout<<a<<op[op1]<<b<<op[op2]<<c<<"="<<endl;
			outfile<<a<<op[op1]<<b<<op[op2]<<c<<"="<<endl;
		}
	}
	else                       //有括号的情况             
	{
		int k;
		k=rand()%2;  //控制括号位置
		if(k==0)         //k=0为时前两个变量之间加入括号
		{
			if(ope==1)
			{
				cout<<"("<<a<<"+"<<b<<")"<<"+"<<c<<"="<<endl;       //输出至窗口
				outfile<<"("<<a<<"+"<<b<<")"<<"+"<<c<<"="<<endl;    //输出至文件
			}
			else if(ope==2)
			{
				cout<<"("<<a<<"-"<<b<<")"<<"-"<<c<<"="<<endl;
				outfile<<"("<<a<<"-"<<b<<")"<<"-"<<c<<"="<<endl;
			}
			else if(ope==3)
			{
				cout<<"("<<a<<"*"<<b<<")"<<"*"<<c<<"="<<endl;
				outfile<<"("<<a<<"*"<<b<<")"<<"*"<<c<<"="<<endl;
			}
			else if(ope==4)
			{
				cout<<"("<<a<<"/"<<b<<")"<<"/"<<c<<"="<<endl;
				outfile<<"("<<a<<"/"<<b<<")"<<"/"<<c<<"="<<endl;
			}
			else
			{
				cout<<"("<<a<<op[op1]<<b<<")"<<op[op2]<<c<<"="<<endl;
				outfile<<"("<<a<<op[op1]<<b<<")"<<op[op2]<<c<<"="<<endl;
			}	
		}
		else
		{
			if(ope==1)
			{
				cout<<a<<"+"<<"("<<b<<"+"<<c<<")"<<"="<<endl;
				outfile<<a<<"+"<<"("<<b<<"+"<<c<<")"<<"="<<endl;
			}
			else if(ope==2)
			{
				cout<<a<<"-"<<"("<<b<<"-"<<c<<")"<<"="<<endl;
				outfile<<a<<"-"<<"("<<b<<"-"<<c<<")"<<"="<<endl;
			}
			else if(ope==3)
			{
				cout<<a<<"*"<<"("<<b<<"*"<<c<<")"<<"="<<endl;
				outfile<<a<<"*"<<"("<<b<<"*"<<c<<")"<<"="<<endl;
			}
			else if(ope==4)
			{
				cout<<a<<"/"<<"("<<b<<"/"<<c<<")"<<"="<<endl;
				outfile<<a<<"/"<<"("<<b<<"/"<<c<<")"<<"="<<endl;
			}
			else
			{
				cout<<a<<op[op1]<<"("<<b<<op[op2]<<c<<")"<<"="<<endl;
				outfile<<a<<op[op1]<<"("<<b<<op[op2]<<c<<")"<<"="<<endl;
			}	
		}
	}
}

小数模块代码:

void decimal_Cal()
{
	double a,b,c,d;                                          //定义四个浮点小数
	a=(double)rand()/RAND_MAX*m+1.0;     //随机生成四个随机小数
	b=(double)rand()/RAND_MAX*m+1.0;
	c=(double)rand()/RAND_MAX*m+1.0;
	int op1,op2;                                             //定义两个符号变量
	op1=rand()%4;                                        //随机生成符号变量
	op2=rand()%4;
	if(brackets==1)                                        //没有括号情况
	{
		if(ope==1)
		{
			cout<<a<<"+"<<b<<"+"<<c<<"="<<endl;
			outfile<<a<<"+"<<"("<<b<<"+"<<c<<")"<<"="<<endl;
		}
		else if(ope==2)
		{
			cout<<a<<"-"<<b<<"-"<<c<<"="<<endl;
			outfile<<a<<"-"<<"("<<b<<"-"<<c<<")"<<"="<<endl;
		}
		else if(ope==3)
		{
			cout<<a<<"*"<<b<<"*"<<c<<"="<<endl;
			outfile<<a<<"*"<<"("<<b<<"*"<<c<<")"<<"="<<endl;
		}
		else if(ope==4)
		{
			cout<<a<<"/"<<b<<"/"<<c<<"="<<endl;
			outfile<<a<<"/"<<"("<<b<<"/"<<c<<")"<<"="<<endl;
		}
		else
		{
			cout<<a<<op[op1]<<b<<op[op2]<<c<<"="<<endl;
			outfile<<a<<op[op1]<<"("<<b<<op[op2]<<c<<")"<<"="<<endl;
		}
	}
	else                                                    //有括号情况
	{
		int k;
		k=rand()%2;    
		if(k==0)                                     //括号加在前两个变量之间
		{    
			if(ope==1)                        //随机生成符号为加号
			{
				cout<<"("<<a<<"+"<<b<<")"<<"+"<<c<<"="<<endl;
				outfile<<"("<<a<<"+"<<b<<")"<<"+"<<c<<"="<<endl;
			}
			else if(ope==2)         //随机生成符号为减号
			{
				cout<<"("<<a<<"-"<<b<<")"<<"-"<<c<<"="<<endl;
				outfile<<"("<<a<<"-"<<b<<")"<<"-"<<c<<"="<<endl;
			}
			else if(ope==3)         //随机生成符号为乘号
			{
				cout<<"("<<a<<"*"<<b<<")"<<"*"<<c<<"="<<endl;
				outfile<<"("<<a<<"*"<<b<<")"<<"*"<<c<<"="<<endl;
			}
			else if(ope==4)         //随机生成符号为除号
			{
				cout<<"("<<a<<"/"<<b<<")"<<"/"<<c<<"="<<endl;
				outfile<<"("<<a<<"/"<<b<<")"<<"/"<<c<<"="<<endl;
			}
			else                        //随机生成四个符号
			{
				cout<<"("<<a<<op[op1]<<b<<")"<<op[op2]<<c<<"="<<endl;
				outfile<<"("<<a<<op[op1]<<b<<")"<<op[op2]<<c<<"="<<endl;
			}	
		}
		else                               //有括号情况
		{
			if(ope==1)               
			{
				cout<<a<<"+"<<"("<<b<<"+"<<c<<")"<<"="<<endl;
				outfile<<a<<"+"<<"("<<b<<"+"<<c<<")"<<"="<<endl;
			}
			else if(ope==2)
			{
				cout<<a<<"-"<<"("<<b<<"-"<<c<<")"<<"="<<endl;
				outfile<<a<<"-"<<"("<<b<<"-"<<c<<")"<<"="<<endl;
			}
			else if(ope==3)
			{
				cout<<a<<"*"<<"("<<b<<"*"<<c<<")"<<"="<<endl;
				outfile<<a<<"*"<<"("<<b<<"*"<<c<<")"<<"="<<endl;
			}
			else if(ope==4)
			{
				cout<<a<<"/"<<"("<<b<<"/"<<c<<")"<<"="<<endl;
				outfile<<a<<"/"<<"("<<b<<"/"<<c<<")"<<"="<<endl;
			}
			else
			{
				cout<<a<<op[op1]<<"("<<b<<op[op2]<<c<<")"<<"="<<endl;
				outfile<<a<<op[op1]<<"("<<b<<op[op2]<<c<<")"<<"="<<endl;
			}	
		}
	}
}

四.队友评价及总结

  这次编程作业中,李子涵担任我的领航员,协助完成了本次代码的设计,在这里,向李同学表示感谢。最初拿到题目时,我们并没有具体思路,但经过细致的交流之后,得到了一个初步的方案,循着这个方案,我们将问题逐步分解为一个一个模块,然后逐一击破。
  本次作业我们采用模块化设计来实现,主要由两个模块构成,其中一个模块负责证书运算部分,另一个模块负责小数运算部分,在两个模块内部,我们又分别对有无括号情况进行了判断,对于有括号的情况,主要是要考虑括号的位置,第一种情况,括号包含前两个数字,第二种情况,括号在包含后两个数字,为了解决这个问题,我们采用生成随机数的方法进行了解决,如果生成随机数为0,则在前两个数字之间,如果随机数为1,则在后两个数字之间,接下来就是四则运式的生成问题了,由于我俩都没有图形化设计相关知识,所以这一块只能选择放弃,转而选择较为普通的运行窗口设计方案。PS:(我们会在之后学习这一块内容的!!!)
  总之,这次结对编程培养了我们的协助能力,问题解决能力,希望在之后学习生活中,能够有较多这样互相学习、互相进步的机会,这种机会对我们来说绝对是大有裨益。
  合影↓↓↓

posted on 2018-04-16 22:37  qianqian丶  阅读(152)  评论(1)    收藏  举报

导航