《构建之法》第二次作业
GIT地址 | GIT地址 |
---|---|
GIT用户名 | 327033511 |
学号后五位 | 62314 |
博客地址 | 我的博客 |
作业链接 | 作业链接 |
一、关于环境配置
在去年暑假学习C#的时候就已经下载好了Visual Studio 2017,并且完成了C#相关组件的安装,环境配置过程非常简单,实在有不懂得可以参考网上大把的教程。
然后是GIT的安装,GIT的下载安装也比较简单,官网上教程说的也很明白,但是就是下载速度太慢,于是我选择了网友之前下好存在网盘里的版本。
安装后右键可以出现如下显示(截此图需要极快手速):
之后是GITHUB的注册和登录,注册和登录都比较简单,就不细说了。
二、代码设计
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.IO;
namespace ConsoleApp1
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("输入需要产生的等式个数:");
int n = Convert.ToInt32(Console.ReadLine());
Formula formula1 = new Formula();
for (int i = 0; i < n; i++)
{
formula1.MakeFormula();
formula1.Print();
}
Console.WriteLine("所有的等式已保存到指定文件夹!");
Console.Read();
}
}
public class Formula
{
DataTable dt= new DataTable();
public int strnum;
public string str;
public string equation = "";
string[] symbol = { "+", "-", "*", "/" };
object sum = null;
public string MakeSym()//制造符号
{
Random ran0 = new Random(Guid.NewGuid().GetHashCode());
return symbol[ran0.Next(0, 4)];
}
public int MakeNum()//制造数字
{
Random ran1 = new Random(Guid.NewGuid().GetHashCode());
return ran1.Next(0, 101);
}
public string MakeFormula()//制造等式
{
start: int j = 0;
equation = "";
Random ran2 = new Random(Guid.NewGuid().GetHashCode());
strnum = ran2.Next(2, 4);//等式符号个数
do
{
equation += Convert.ToString(MakeNum());
equation += MakeSym();
j++;
} while (j < strnum);
MakeNum();
equation += Convert.ToString(MakeNum());//等式左边的制造
sum = dt.Compute(equation, "");//等式右边的制造(计算结果)
equation = equation+ "=" + Convert.ToString(sum); //等式的制造
if (Convert.ToString(sum).Contains(".") || Convert.ToString(sum).Contains("-") || equation.Contains("/0"))
{
goto start;
}//去除不和规则的等式
return equation;
}
public int Sum()//返回sum的值
{
return Convert.ToInt32(sum);
}
public void Print() //写入文件、输出
{
StreamWriter sw = new StreamWriter(@"E:\result\resultprint2.txt", true);
sw.WriteLine(equation);
Console.WriteLine(equation);
sw.Flush();
sw.Close();
}
}
}
设计开始时我首先想到了之前学习数据结构时学到的,通过栈来实现四则运算。然后简单的实现了下,发现总是出错。。然后发现了C#中的系统函数Datatable
很方便,可以直接计算字符串,通常Datatable.Compute
是用来计算类似于EXCEL中的公式,但用在这里也挺好的,这样就不用一个一个的把符号和数字拿出来计算了,我们只需要生成等式左边的等式字符串就可以了,值就交给这个函数计算,很方便。
实现的大概思路就是先创建一个Formula
类,这个类有5个函数,分别是产生随机符号的MakeSym
,产生随机数字的MakeNum
,产生等式的MakeFormula
,输出、存入文件的Print
,和一个返回sum
值的函数(用于测试),前两个很简单就不说了,MakeFormula
函数的一些思路如下:
等式左边是符号和数字的组合,因为数字总是比符号多一个,所以就进行符号个数的循环生成一个字符串,最后再在这个字符串尾部加上一个生成的数字就生成等式左边的的字符串了。等式右边就通过Datatable.Compute
来计算得到字符串对应的值。
在过程中遇到了很多问题,比如产生随机数的问题,直接使用Random
在进行循环时产生的随机数因为时间间隔太短都是一个数等等。这里主要分享一个遇到的问题,就是关于生成字符串是否符合规则的判断,之前我采用的判断方法是
if(Convert.ToInt32(sum) != Convert.ToDouble(sum)||Convert.ToInt32(sum)<0||equation.Contains("/0"))
这里我想的是通过上面的判断分别排除了结果为小数、结果小于0、等式中出现除数是0的等式,但是因此出现了如下问题
这里出现了越界问题,所以我修改了判断条件
if (Convert.ToString(sum).Contains(".")|| Convert.ToString(sum).Contains("-") || equation.Contains("/0"))
我觉得这是非常巧妙的判断,通过判断字符串中是否含有小数点、负号来判断是否是小数和负数。
之后成功在指定文件里输出了等式
三、克隆项目以及提交代码过程
1.接着是在阿超的仓库中拷贝四则运算库到自己的同名仓库中,点击右上方Fork,即可拷贝到自己的仓库。
2.拷贝后在自己仓库可以找到:
3.然后通过GIT CLONE命令将文件复制到本地:
4.首次使用git需要配置自己的邮箱和用户名。
5.代码提交过程稍微复杂点,我也是参考了CSDN的文章才提交上去的,主要还是不熟悉GIT,想到这里还是觉得自己不够勤奋,大三了都不太会用GITHUB,但我相信多加练习尝试肯定要好的多。
提交成功后可以在GITHUB上看到了:
遇到的问题:提前提交过一次,然后发现代码还可以优化,因此需要再次提交,所以不知道怎么修改,通过询问同学,原来是直接在自己的本地仓库修改然后就直接再次提交就行了,非常简单。
四、单元测试、回归测试以及调试方法
1.首先我们点击右键创建单元测试:
出现以下问题
如图,此时只需要在方法和类之前加上public
即可运行:
然后编写单元测试代码
然后进行测试:
2.回归测试
回归测试在软件开发过程中是必不可少的阶段,在这个阶段能重新测试来确认没有引入新的错误,以及可以发现一些之前编写代码时出现的问题。比如在编写代码过程中我经常会专注实现特定功能,无论怎么样只要能跑对就行,而忽略了更加优化的方案,在本次回归测试中也优化了一些代码,比如之前将变量的定义语句放在循环内,导致了更多的耗时,后来发现放在循环外一样的,节约了不少时间。
这是之前的测试时间:
3.一些有用的调试方法
断点是调试的基础,设置断点只用在代码行号左边用鼠标左键点击一下就行了,非常简单。这里我们在17行处设置好了断点。
在调试过程中要用到这些操作:
分别是 显示下一语句,逐语句,逐过程,跳出。
在调试过程中可以在下方看到变量的值:
我们也看可以添加监视:
这样我们就能看到我们需要监视的变量了:
五、效能分析
效能分析有多重要就8用我说了吧,它能探查程序运行中的各项指标数据。
这里演示了VS中效能分析器的使用。
1.点击右上角性能探查器:
2.这里我们选择查看CPU使用率
3.稍等片刻,可以看到分析结果
4.我们也可以选择创建更详细的分析报告
可以看到代码占用CPU的时间比例,由此可以找到自己代码的缺陷,采用更为合适的算法和数据结构来优化代码,非常有帮助。
六、心得体会
通过本次学习,温习了一年前被我丢掉的C#知识,之前只会写代码,写完了能跑就好了,没管什么测试啦,什么代码管理啦,总感觉这些好像离我们还很遥远。但是这次我通过完成博客作业真的学到了很多,虽然在写代码方面没有怎么学到东西,但是感觉我离软件工程师好像又近了一步。本次作业我也学习了使用GITHUB,之前用GITHUB只是看看别人写的程序。博客作业不像其他的作业一样只用把代码写出来就行了。我们需要学习比较繁琐的知识,然后再运用,我觉得这对我非常有好处,我学到了很多东西。