cruelwinter

实验总结——结对编程(300道四则运算练习题)

实验总结——结对编程(300道四则运算练习题)

成员1:杨继周2252334 主要负责设计UI界面,以及最后整合两人的代码

* 成员2:张子桀* 2252324 主要负责编写程序的核心框架和功能的实现方法

源代码展示(GitHub):Yangjizhou147/300Arithmetic (github.com)

考虑到两人都比较擅长C++,所以选择C++作为编程语言,配合EasyX图形库绘制自己的UI界面。使用面向对象的编程语言,逻辑更加明了。

1、题目类

一个题目包含三个数字和两个运算符,和一个计算结果。

并且把四则运算题目中的每个部分转换为string类型,再进行组合成一个完整的式子进行显示。

(编写结束后发现一个较大的设计缺陷:我们的Tpic类既负责生成题目,又负责计算结果,导致代码的逻辑不够清晰,不易于拓展。但这个缺陷是完全编写结束后才发现的,要修改的话,花费的人力不亚于再次重新编写,以后有机会再进行改进)

class Tpic            //题目类
{
public:
	struct TPIC
	{
		int a = 0;
		int b = 0;
		int c = 0;
		char OPERATOR1; char OPERATOR2;
		float RESULT;
	};

	string str1, str2, str3; 
	string equation[30];                      //题目字符串数组
	LPCTSTR text[30];                         //类型转换

	vector<TPIC>TPIC1;
}

2、随机出题的实现方法

使用srand()实现随机数的生成

	void CreateTpic(char OPERATOP1,char OPERATOP2) {           //随机出题
		time_t t;
		srand((unsigned)time(&t));
		TPIC tpic[30];
		for (int i = 0; i < 30; i++) {
			
			tpic[i].a = rand() % 100;
			tpic[i].b = rand() % 100;
			tpic[i].c = rand() % 100;
			tpic[i].OPERATOR1 = OPERATOP1;
			tpic[i].OPERATOR2 = OPERATOP2;
			TPIC1.push_back(tpic[i]);
			str1 = to_string(TPIC1[i].a);
			str2 = to_string(TPIC1[i].b);
			str3 = to_string(TPIC1[i].c);
			GetTpic(i);
			int m;
			if (TPIC1[i].OPERATOR1 == '+') {
				m = TPIC1[i].a + TPIC1[i].b;
			}
			if (TPIC1[i].OPERATOR1 == '-') {
				m = TPIC1[i].a - TPIC1[i].b;
			}
			if (TPIC1[i].OPERATOR1 == 'x') {
				m = TPIC1[i].a * TPIC1[i].b;
			}
			if (TPIC1[i].OPERATOR1 == '/') {
				m = TPIC1[i].a / TPIC1[i].b;
			}
/////////////////////////////////////////////////////////////
			if (TPIC1[i].OPERATOR2 == '+') {
				TPIC1[i].RESULT = m + TPIC1[i].c;
			}
			if (TPIC1[i].OPERATOR2 == '-') {
				TPIC1[i].RESULT = m - TPIC1[i].c;
			}
			if (TPIC1[i].OPERATOR2 == 'x') {
				TPIC1[i].RESULT = m * TPIC1[i].c;
			}
			if (TPIC1[i].OPERATOR2 == '/') {
				TPIC1[i].RESULT = m / TPIC1[i].c;
			}
		}
		return;
	}

3、UI界面

1)按钮类

class Button {
public:
	/**** 控件左上角的x坐标 ****/
	int x = -1,

		/**** 控件左上角的y坐标 ****/
		y = -1;

	/**** 控件的宽度 ****/
	int width = -1,

		/**** 控件的高度 ****/
		height = -1;

	/**** 控件所显示的文本 ****/
	LPCTSTR text = L"";

	/**** 控件显示的文本高度 ****/
	int size = 16;

	/**** 控件是否可见,可见为true,否则为false ****/
	bool visible = false;
}

2)文本类

/**** 文本(该控件为自动调整大小) ****/
class Label {
private:
	int width, height;
public:
	/**** 控件左上角的x坐标 ****/
	int x = -1,

		/**** 控件左上角的y坐标 ****/
		y = -1;

	/**** 控件所显示的文本 ****/
	LPCTSTR text = L"";

	/**** 控件显示的文本高度 ****/
	int size = 16;

	/**** 控件是否可见,可见为true,否则为false ****/
	bool visible = false;
}

4、成果展示

每一页可以显示30道四则运算题目,点击“下一页”便可切换到下一页。

可以按照需求生成不同运算符的题目:



5、实验体会

(1)优点

1)结对编程给我的第一感觉就是提高了代码质量,两个人一起编程更容易发现代码的漏洞和逻辑上的错误。

2)实现了知识共享:两个人擅长的地方都不同,结对编程增加了交流学习的机会,加速了双方的学习曲线。

3)更快的问题解决。两人一起思考解决问题往往能更快的发现问题的解决方案,尤其是在遇到复杂的问题或者困难时。

4)提高了团队的合作和沟通,建立了团队精神。

5)减少了长时间独自编程的孤独感。

(2)缺点

1)有的时候会产生较大的分歧,进而引发不必要的争执。

2)有时导致生产力下降。因为两个开发者需要花更多的时间来共同讨论决策,而不是编写代码,进而可能增加整个项目的成本。

(3)总结

结对编程在团队中会有很多好处,但还是得谨慎使用、合理使用,最大限度地拓展其优势。

posted on   WinterCruel  阅读(20)  评论(0编辑  收藏  举报

导航

统计

点击右上角即可分享
微信分享提示