系统分析与设计(第二次作业)

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盘节省了很多的空间
1785170-20190919205525264-2106908081.png

part2 克隆项目

1.因为之前做项目的时候,有接触到git和github对他们并不算陌生,但还没有克隆下载过别人的代码来使用或者学习,首先找到要克隆的仓库:
1785170-20190919210148216-1419688341.png

2.按照作业里的教程,点击fork后就可以将阿超的四则运算库拷贝到自己的同名仓库中了
1785170-20190919210233678-522399659.png

先复制项目的仓库地址,在git Bash here中输入git clone,因为电脑重装的问题,在git配置文件中的链接地址不对,所以出现了错误,最后改到现在git在的地址后就成功克隆下来了。
1785170-20190919210653405-2136370474.png
这是克隆到本地的文件
1785170-20190919210750935-1219970920.png
ps:在输入git命令的时候,因为自己不小心输少了一个“导致命令一直有错,还百度了很久,最后才发现是符号的问题,所以在输命令的时候一定要小心小心再小心!

3.创建c#项目
1785170-20190919210852574-899525899.png

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();
这是最后的结果:

1785170-20190919211714377-412438997.png

part4 单元测试与回归测试:

1.我先是尝试了作业文档中的方法,但并没有找到相应的配置引用,所以我是直接在相应的函数
右键-->>创建单元测试:
1785170-20190919211121512-1889371859.png

测试的过程中也出现了许多错误,因为我前面并不是静态的方法,所以在测试时必须要先创建一个实例才行,测试进行的比较顺利还是比较开心的
1785170-20190919211320360-509942146.png
这是测试的结果:
1785170-20190919211520412-1122895681.png
1785170-20190919211622694-896370525.png

回归测试:最开始我是将for循环生成表达式放在主函数里的,后来代码逻辑有一些混乱,之后我将for循环放入了函数了,在测试并没有出现问题。所以回归测试是很重要的,有些时候你认为不会错的有可能会出错,我们应该多做做回归测试
1785170-20190919211829683-1207202954.png
这是修改后的
1785170-20190919212123382-156406140.png

关于测试的一些总结:
之前对测试没有什么了解,也没有想过测试对一个项目的重要性,做测试之前简单的认为生成单元测试后是自动帮助测试的哈哈哈~~,很明显不是,需要我们自己写代码,写测试代码有一个好处就是,可以帮助你从另一个角度去看待你写的代码,更能够帮助你找到逻辑上的不足。

part 5 基本的调试方法:

1.断点的使用
因为之前学习c语言的时候就有用过所以对他也不陌生,断点的存在让我们更能发现问题的所在,一步一步的帮你理清楚逻辑,看哪里出现了问题,还可以随时查看变量让你更清晰哪一步出错了。
vs的断点设置也很方便
(1)先在你需要设置的地方打上红点,运行。
1785170-20190919212425079-1621678657.png
(2)根据需要,有逐语句,逐过程,跳出等选项
1785170-20190919212502130-894433551.png
(3)在下方可以看见变量的值,你也可以随时添加你想查看的变量
1785170-20190919212558614-855126906.png

part6 效能分析:

1.选择分析-->性能探查器
1785170-20190919212650424-882649180.png

2.我这里是选择的内存作为指标,当然还有其他的可以作为指标,比如说cpu
1785170-20190919213207760-1614363801.png

3.根据cpu来分析时,停止收集后你会看见一个效能分析结果,根据她你可以好好优化你的代码
1785170-20190919213247846-491823542.png

part7 提交代码

1.在你的项目文件夹里面打开git
2.用 git add 和git commit命令
1785170-20190919213323196-1065251366.png
3.git push 你就可以提交了,因为我之前没有设置,所以又输了一次用户名和密码
1785170-20190919213356611-550383425.png
1785170-20190919213426347-503598378.png

提交后你可以到Github去看看成功没有。
1785170-20190919213524381-817173165.png
4.最后pull new request,等待审核
1785170-20190919213558260-639385972.png

part8 总结

这次是使用c#做的项目,因为之前并没有太多的学习c#,所以这次又重新学习了一些c#的知识,重新了解了类,静态的知识确实花了不少的时间,当然这次收获也是蛮大的,学习了DataTable的用法,String的Contains方法,如何写入文档,git的使用,单元测试,Random的坑,随机数的产生并不是那么的随机,果然程序猿需要无止境的学习,还要更加的细致,周全!

转载于:https://www.cnblogs.com/zxx-xxx/p/11551416.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值