构建之法第二次作业
第二次作业
Git地址 | https://github.com/isliudong/AchaoCalculator |
---|---|
GIT用户名 | isliudong |
学号后五位 | 062227 |
博客地址 | https://www.cnblogs.com/liudong123/ |
作业链接 | https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign/homework/7584 |
作业背景
阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个作业:家长每天要给孩子出一些合理的,但要有些难度的四则运算题目,并且家长要对孩子的作业打分记录。
作为程序员的阿超心想,既然每天都需要出题,那何不做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”呢。他把老师的话翻译一下,就形成了这个软件的需求:
- 程序接收一个 命令行参数
n
,然后随机产生n
道加减乘除(分别使用符号+-*/
来表示)练习题,每个数字在0
和100
之间,运算符在2
个 到3
个之间。 - 由于阿超的孩子才上一年级,并不知道分数。所以软件所出的练习题在运算过程中 不得出现非整数,比如不能出现
3÷5+2=2.6
这样的算式。 - 练习题生成好后,将生成的 n 道练习题及其对应的正确答案输出到一个文件
subject.txt
中。 - 当程序接收的参数为
4
时,以下为一个输出文件示例。
13+17-1=29
11*15-5=160
3+10+4-16=1
15÷5+3-2=4
作业要求:
- 请以博客记录的方式,体现环境配置过程(包括遇到了哪些问题,你是如何解决的)
- 体现你代码设计的思路(注意:请保证代码能够运行通过)
- 记录你使用github克隆项目以及提交代码的整个过程(包括遇到的问题,你是如何解决的)
- 记录你对项目进行单元测试和回归测试的过程(包括你遇到的问题,解决的方法是什么)
一:环境配置
1.安装Visual Studio 2017
以前使用过vs2017,所以就不在重复配置了,vs的配置也比较简单基本上按照安装提示操作就可以了。
如图已安装好的vs2017:
2.安装git
下载按提示操作即可
二:代码思路
我的方法比较简单暴力,将操作数,算式符号个数,符号。设置成随机数。如图
int num1=1, num2=1, num3=1, num4=1;//操作数
int numop=3;//符号个数
int optype=1,optype1=1,optype2=2,optype3=3;//操作数类型用数字代表
char[] op = { '+', '-', '*', '/' };//操作符
float result=0;//计算值
string s;//算式字符串
这是主类如图
create函数思想,直接枚举出所有可能,将计算结果存入result,如图展示操作符个数为2的时候,操作数为3犹豫代码过多就不展示了。可以去我的GitHub查看。
if (numop == 2)
switch (optype1)
{
case 1:
switch (optype2)
{
case 1:
s = num1.ToString() + op[0] + num2.ToString() + op[0] + num3.ToString();
result = num1 + num2 + num3;
break;
case 2:
s = num1.ToString() + op[0] + num2.ToString() + op[1] + num3.ToString();
result = num1 + num2 - num3;
break;
case 3:
s = num1.ToString() + op[0] + num2.ToString() + op[2] + num3.ToString();
result = num1 + num2 * num3;
break;
case 4:
s = num1.ToString() + op[0] + num2.ToString() + op[3] + num3.ToString();
result = num1 + (float)num2 / num3;
break;
}
break;
case 2:
switch (optype2)
{
case 1:
s = num1.ToString() + op[1] + num2.ToString() + op[0] + num3.ToString();
result = num1 - num2 + num3;
break;
case 2:
s = num1.ToString() + op[1] + num2.ToString() + op[1] + num3.ToString();
result = num1 - num2 - num3;
break;
case 3:
s = num1.ToString() + op[1] + num2.ToString() + op[2] + num3.ToString();
result = num1 - num2 * num3;
break;
case 4:
s = num1.ToString() + op[1] + num2.ToString() + op[3] + num3.ToString();
result = num1 - (float)num2 / num3;
break;
}
break;
case 3:
switch (optype2)
{
case 1:
s = num1.ToString() + op[2] + num2.ToString() + op[0] + num3.ToString();
result = num1 * num2 + num3;
break;
case 2:
s = num1.ToString() + op[2] + num2.ToString() + op[1] + num3.ToString();
result = num1 * num2 - num3;
break;
case 3:
s = num1.ToString() + op[2] + num2.ToString() + op[2] + num3.ToString();
result = num1 * num2 * num3;
break;
case 4:
s = num1.ToString() + op[2] + num2.ToString() + op[3] + num3.ToString();
result = num1 * (float)num2 / num3;
break;
}
break;
case 4:
switch (optype2)
{
case 1:
s = num1.ToString() + op[3] + num2.ToString() + op[0] + num3.ToString();
result = (float)num1 / num2 + num3;
break;
case 2:
s = num1.ToString() + op[3] + num2.ToString() + op[1] + num3.ToString();
result = (float)num1 / num2 - num3;
break;
case 3:
s = num1.ToString() + op[3] + num2.ToString() + op[2] + num3.ToString();
result = (float)num1 / num2 * num3;
break;
case 4:
s = num1.ToString() + op[3] + num2.ToString() + op[3] + num3.ToString();
result = (float)num1 / num2 / num3;
break;
}
break;
}
以下为运行实例,输入题目数n
在题目文本中生成如下题目:
在答案文本中生成如下答案:
三:使用github克隆项目以及提交代码
fork项目到自己仓库
克隆项目到本地,由于已经拉取过了,显示为更新
使用git add .命令将所有的修改的文件提交到缓存区
git commit -m “提交代码”
将缓存区代码推送到Git服务器git push
注意:
1.利用 git reset 命令将撤回缓存中的代码。
2.git reset —hard + 版本号,彻底回退到某个版本,本地的代码也会改变上一个版本内容。
四:对项目进行单元测试和回归测试
1.右键选择创建单元测试
默认确定
测试代码如图:
运行测试
测试失败
调试发现原因是取值超范围,数组越界了。
2.回归测试
进行项目代码升级修改后,任然取原来的测试值
问题不再出现测试成功
3.性能分析
对程序进行内存占用分析
4.总结
(1)通过这次作业体验了开发工具的使用方法
(2)过程中遇到了很多困难,c#不熟,GitHub指令操作完全靠现学。提交代码部分遇到很多问题,还好差不多都解决了。百度解决问题的能力又提高了,嘿嘿。
(3)对项目测试有一定了解了,知道怎样方便高效测试代码。收获还挺大的。