软件工程第二次结对作业
1.题目要求
我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:
(1)能够自动生成四则运算练习题
(2)可以定制题目数量
(3)用户可以选择运算符
(4)用户设置最大数(如十以内、百以内等)
(5)用户选择是否有括号、是否有小数
(6)用户选择输出方式(如输出到文件、打印机等)
(7)最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)
2.角色分配
本次作业要求两人合作完成,分为驾驶员和导航员,驾驶员主要负责编写代码,导航员负责审查代码,在编程期间双方角色可以进行交换,本次作业中我是担任了驾驶员的角色,我的伙伴王鹏是我的导航员。以下是我们两人的代码托管所地址:
人员分工 | 姓名 | 代码地址 |
---|---|---|
驾驶员 | 张浩 | 简单四则运算 |
导航员 | 王鹏 | <a href="https://e.coding.net/wangpeng24/ruanjiangongchengdisancizuoye.git |
">四则运算代码地址 |
3.功能实现
本次四则简单运算的实现是用C++来实现的,刚开始也想用其它语言来实现,因为考虑到界面的问题,可惜最后没能成功,只能用C++来实现,最后生成的题目保存在了文本中。
加法整数无括号运算的实现
以上是加法整数无括号运算的实现,同时还包括了用户自由设置最大数,选择是否有括号和是否需要小数计算。单个的符号运算是较为简单的,同学也不需要考虑括号和小数的实现,以下是它的实现代码
void add(int number, int range, int bracket, int decimals)//加法运算题目生成
{
float a, b, c, d, e;
char aa = '+';
if ((fp = fopen("D:\\222.txt", "w")) == NULL) //将表达式写入到文件
{
printf("不能打开文件!\n");
exit(0);
}
srand((unsigned)time(NULL));
if (bracket == 0 && decimals == 0)//不需要括号运算,也不需要小数运算
{
for (int i = 0; i < number; i++)
{
a = rand() % range;
b = rand() % range;
c = rand() % range;
d = rand() % range;
printf("%.0f%c%.0f%c%.0f%c%.0f\n", a, aa, b, aa, c, aa, d);
fprintf(fp, "%.0f%c%.0f%c%.0f%c%.0f\n", a, aa, b, aa, c, aa, d);
}
fclose(fp);
}
}
减法整数有括号运算的实现
乘法无括号有小数的实现
除法有括号有小数的实现
以上是对加减乘除四则运算和有无括号,整数小数的运算,程序中对加减乘除和括号,小数的运算是可以搭配使用的,你可以选择加法有括号的小数运算,也可以选择加法有括号的整数运算,以上是列出了一些较为常见的例子,具体如何搭配就需要用户按照自己的要求来设置了。
混合运算
混合整数有括号运算
混合小数有括号运算
随机数的产生:在代码中是利用了rand函数来产生随机数
srand((unsigned)time(NULL));
rand()%10;
代码整体功能实现
int main()
{
int number;//代表题目的数量
int type;//代表题目的类型,包括加减乘除或是混合运算
int range;//题目中最大数的范围,将题目运算控制在一定的范围,比如10以内,100以内
int bracket;//题目中是否需要括号
int decimals;//题目中是否需要小数
menu();
printf("请问你想要生成多少道计算题呢?\n");
scanf("%d", &number);
printf("==============================\n");
printf("您想要生成什么样的计算机题呢?加法请输入1,减法请输入2,乘法请输入3,除法请输入4,混合运算请输入5\n");
scanf("%d", &type);
printf("=======================================================\n");
printf("您想要生成的计算题是在十以内还是百以内,又或者是千以内呢?\n");
printf("十以内请输入10,百以内请输入100,千以内请输入1000\n");
scanf("%d", &range);
printf("===================================================\n");
printf("还想请问一下你生成的计算题中是否需要括号运算?1代表您想要,0代表您不需要\n");
scanf("%d", &bracket);
printf("=========================================================\n");
printf("最后请问一下您的题目中是否需要小数运算,1代表您想要,0代表您不想要\n");
scanf("%d", &decimals);
printf("==========================================================\n");
printf("好的,请您稍后,题目马上生成。");
system("pause");
if (type == 1)
add(number, range, bracket, decimals);
if (type == 2)
minus(number, range, bracket, decimals);
if (type == 3)
multiply(number, range, bracket, decimals);
if (type == 4)
remove(number, range, bracket, decimals);
if (type == 5)
mixture(number, range, bracket, decimals);
system("pause");
}
用户首先输入自己的要求,例如题目中最大的数是什么范围的,需要加减乘除哪种运算,或者需要混合运算,题目中需不需要有括号和小数,在设置完成以后就交由不同的函数来实现其功能,add是加法运算,minus是减法运算,multiply是乘法运算,remove是除法运算,mixture则是混合运算,各个函数负责不同的模块,共同完成用户的要求。
文本生成
4.体会总结
本次作业刚好安排在了五一假期时间,虽说放假完以后还有2天时间,不过不敢拖到那时候才开始做,在五一的假期里将作业紧赶慢赶得做完了,本次作业刚开始时是想要设计一个图形界面的,以前学得C和C++里面也没讲这么创建图形界面的,当时是想要用C#来完成,因为C#在图形界面这块要容易实现很多,可惜后来试了几次之后发现错误百出,不得已只能用C++来实现,在用户输入这块,只能以黑框的形式来呈现,在编程中出现了很多的问题,幸亏有我的同伴王鹏,他和我一起努力,合作,解决了很多的问题,在一些问题上我钻了牛角尖,总在想为什么这种方法不行,而我的结对伙伴却提出了另外的一种方法,这种方法不行换一种方法,这是我这次学到的,不管白猫黑猫,能抓到老鼠的就是好猫,这话果然没错。
在此次作业中也突出暴露了很多的问题,我个人现阶段掌握的编程语言太过于缺乏,在针对一些问题的时候选用合适的编程语言会达到事半功倍的效果,这是我目前所缺乏的,在以后的学习中要努力去弥补。最后我要感谢我的结对伙伴,谢谢他对我的帮助,希望在以后的学习中还有机会和他合作。