系统分析与设计(第二次作业)
Git地址 | https://github.com/yatangtang |
---|---|
Git用户名 | yatangtang |
学号后五位 | 62601 |
博客地址 | https://www.cnblogs.com/zxx-xxx/ |
作业链接 | https://www.cnblogs.com/harry240/p/11515697.html |
part1 配置环境
因为之前安装过vs,但是电脑重装过系统,所以就没了,但有之前的经验,这次安装起来还是比较简单的。只是下载的时间会比较长一点,这次为了避免全部安装在c盘,学会了使用软链接使用了mklink的命令,让vs并没有全部安装在C盘节省了很多的空间part2 克隆项目
1.因为之前做项目的时候,有接触到git和github对他们并不算陌生,但还没有克隆下载过别人的代码来使用或者学习,首先找到要克隆的仓库:
<img src="https://img2018.cnblogs.com/blog/1785170/201909/1785170-20190919210148216-1419688341.png"width="80%">
2.按照作业里的教程,点击fork后就可以将阿超的四则运算库拷贝到自己的同名仓库中了
先复制项目的仓库地址,在git Bash here中输入git clone<克隆的地址>,因为电脑重装的问题,在git配置文件中的链接地址不对,所以出现了错误,最后改到现在git在的地址后就成功克隆下来了。
这是克隆到本地的文件
ps:在输入git命令的时候,因为自己不小心输少了一个“导致命令一直有错,还百度了很久,最后才发现是符号的问题,所以在输命令的时候一定要小心小心再小心!
3.创建c#项目
part 3 设计思路:
在做这个项目的时候,前面的过程还比较顺利,最开始遇到的一个问题是用c#中生成随机数的函数Random的时候,会经常产生一样的等式,通过查询资料,发现在创建Random类的时候,一个Enviro.TickCount对象作为因子被默认传递给第二个构造函数,这导致一个具有毫秒精度的因子参与了随机数的生成过程,在循环过程中我们使用了同一个,从而生成了相同的随机数(原文链接https://www.cnblogs.com/xiaowie/p/8759837.html)所以我将随机数放在了外面,然后在循环中在调用Next方法,这样就解决了随机数生成是一样的问题。
1.产生随机式子:
public string GetCalculation(Random random)//传入一个Random
{
string str = "";
string[] list1 = new string[4];
list1[0] = "+";
list1[1] = "-";
list1[2] = "*";
list1[3] = "/";
int f = 0, tip;
ArrayList list = new ArrayList();
int num = random.Next(2, 4);//随机生成两个或者三个符号
for (int j = 0; j <= num; j++)//生成计算表达式
{
while (f < j)//当数字生成了再生成符号
{
int num1 = random.Next(0, 4);
list.Add(list1[num1]);
f++;
}
tip = random.Next(0, 100);//随机生成数字
list.Add(tip);
}
f = 0;
foreach (var str1 in list)
{
str += str1;//将数字与符号拼接起来
}
return str;
}
2.生成等式的结果,之前做的时候一直在想一个字符串要怎样计算结果,还要判断优先级,后来发现DataTable.Compute这个好东西,它可以直接将字符串进行运算自带优先级判断省了很多的功夫
Random Number = new Random();
DataTable dt = new DataTable();
string re;
string str = "";
for (int i = 0; i < n; i++)//循环生成需要的等式
{
str = GetCalculation(Number);//得到等式
string result = dt.Compute(str, "false").ToString();//计算结果
while(result.Contains(".")||result.Contains("-"))//判断是否为零,小数
{
str = GetCalculation(Number);//如果是重新生成等式再计算
result = dt.Compute(str, "false").ToString();
}
str = str + "=";
re = str + result;
writetxt(re);
Console.WriteLine(str+"{0}",result);
3.写入文档,最开始是用的using.System.IO,WriteAppend 写入的文档但是写入进去发现不能换行样式很不好看,于是用了StreamWrite来写入文档
string path = @"E:\作业\系统设计与分析\AchaoCalculator\yatangtang\Calculator\result.txt";
if (File.Exists(path))
{
}
else
{
File.Create(path).Dispose();
}
StreamWriter sw = File.AppendText(path);
sw.WriteLine(str);
sw.Flush();
sw.Close();
这是最后的结果:
part4 单元测试与回归测试:
1.我先是尝试了作业文档中的方法,但并没有找到相应的配置引用,所以我是直接在相应的函数
右键-->>创建单元测试:
测试的过程中也出现了许多错误,因为我前面并不是静态的方法,所以在测试时必须要先创建一个实例才行,测试进行的比较顺利还是比较开心的
这是测试的结果:
回归测试:最开始我是将for循环生成表达式放在主函数里的,后来代码逻辑有一些混乱,之后我将for循环放入了函数了,在测试并没有出现问题。所以回归测试是很重要的,有些时候你认为不会错的有可能会出错,我们应该多做做回归测试
这是修改后的
关于测试的一些总结:
之前对测试没有什么了解,也没有想过测试对一个项目的重要性,做测试之前简单的认为生成单元测试后是自动帮助测试的哈哈哈~~,很明显不是,需要我们自己写代码,写测试代码有一个好处就是,可以帮助你从另一个角度去看待你写的代码,更能够帮助你找到逻辑上的不足。
part 5 基本的调试方法:
1.断点的使用
因为之前学习c语言的时候就有用过所以对他也不陌生,断点的存在让我们更能发现问题的所在,一步一步的帮你理清楚逻辑,看哪里出现了问题,还可以随时查看变量让你更清晰哪一步出错了。
vs的断点设置也很方便
(1)先在你需要设置的地方打上红点,运行。
(2)根据需要,有逐语句,逐过程,跳出等选项
(3)在下方可以看见变量的值,你也可以随时添加你想查看的变量
part6 效能分析:
1.选择分析-->性能探查器
2.我这里是选择的内存作为指标,当然还有其他的可以作为指标,比如说cpu
3.根据cpu来分析时,停止收集后你会看见一个效能分析结果,根据她你可以好好优化你的代码
part7 提交代码
1.在你的项目文件夹里面打开git
2.用 git add 和git commit命令
3.git push 你就可以提交了,因为我之前没有设置,所以又输了一次用户名和密码
提交后你可以到Github去看看成功没有。
4.最后pull new request,等待审核
part8 总结
这次是使用c#做的项目,因为之前并没有太多的学习c#,所以这次又重新学习了一些c#的知识,重新了解了类,静态的知识确实花了不少的时间,当然这次收获也是蛮大的,学习了DataTable的用法,String的Contains方法,如何写入文档,git的使用,单元测试,Random的坑,随机数的产生并不是那么的随机,果然程序猿需要无止境的学习,还要更加的细致,周全!