第二次博客做业

GIT地址       https://github.com/qili12
GIT用户名   qili12
学号后五位 62301
博客地址  https://home.cnblogs.com/u/qi-li/
做业连接  https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2793

1、环境配置html

vs是上个学期就已经安装好的,记得在配置过程当中没有遇到什么问题,主要是须要足够大的空间安装它,而且通常的软件下载安装都不要放在系统盘git

配置以下:github

2、代码设计小程序

一、项目背景c#

阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个做业:家长天天要给孩子出一些合理的,但要有些难度的四则运算题目,而且家长要对孩子的做业打分记录。既然天天都须要出题,那就作一个能够自动生成小学四则运算题目与解决题目的命令行 “软件”呢。这个软件的需求以下:数组

(1)接接收一个命令行参数n,而后随机产生n道加减乘除练习题,每一个数字在0-100之间,运算符在2-3个之间。浏览器

(2)运算过程不能出现非整数。网络

(3)生成好后,将生成的n到练习题及其正确答案输入到一个文件。dom

二、代码设计函数

主要思想过程如上图,随机产生的数字和字符用数组存储,将一道完整的运算题目用字符串储存,用c#中的datatable的compute方法计算字符串的值,判断运算结果中是否含有小数,若是符合要求则将产生的n道题写入ArrayList中,写入文件。

主要代码以下:

        //产生随机运算式
        public static void Create(int n)
        {
            Random random = new Random();//产生随机数
            for (int i = 0; i < n; i++)
            {
                char[] Operators = new char[] { '+', '-', '*', '/' };
                int num = random.Next(2, 5);//产生运算数的个数
                int[] numbers = new int[num];
                char[] Operator = new char[num];
                for (int j = 0; j < num; j++)
                {
                    int number = random.Next(1, 100);
                    numbers[j] = number;//运算数的值
                }
                for (int j = 0; j < num; j++)
                {
                    int op = random.Next(4);
                    Operator[j] = Operators[op];//操做符
                }
                string arr = "";
                for (int t = 0; t < numbers.Length; t++)
                {
                    arr += numbers[t].ToString() + Operator[t].ToString();
                }
                Chu(Operator, numbers);
                arr = arr.Substring(0, arr.Length - 1);
                float result = CalcByDataTable(arr);
                i=JudgePoint(arr, i, result);//计算的值
                
            }
        }

写代码过程当中遇到的问题与解决:

(1)除号的个数对算式的影响。在产生多个除号的时候,对除号两端的运算数处理起来很麻烦,刚开始写的时候想把全部状况除号产生的全部状况都罗列出来,来回调用函数形成栈溢出,后来换了一种思路,在产生一个或者两个除号的时候(不相连),则判断被除数和除数,其余状况判断结果,含有小数,从新生成。

(2)计算表达式的值。百度了一下网上的方法,发现c#中的datatablede方法能够实现。

三、代码运行结果

3、使用GitHub提交代码

fork仓库:

提交代码过程当中遇到的问题:

一、下载问题。下载了三四次才成功。解决办法:换浏览器,切换网络。

二、提交代码过程的问题

好比像什么没有将本地分支与远程仓库的分支关联,本地分支与远程分支之间由于各类缘由断开了,项目文件夹没有被修改,没有必要提交。

解决这些问题的途径就是经过看各类博客,按照百度上的方法尝试,最后终于成功了。ps:在pull的过程当中,加上--allow-unrelated-histories后显示界面解释为何容许,不填写理由只需按ESC,输入":wq"。推荐:http://www.javashuo.com/article/p-qghqtiim-ds.html对git提交代码写的很详细。

4、对代码进行单元测试和回归测试

public static int JudgePoint(string arr,int i,float result)
        {
            arr = arr + "=" + result.ToString(); 
            /*if (arr.Contains('.'))
            {
                i--;//从新生成一道题
            }*/
            arrayList.Add(arr);
            Write(arrayList);//写入文件
            return i;
        }

 

注释掉判断运算过程当中出现小数,测试会显示失败。(测试时,是工具栏中的测试的下拉菜单而不是直接启动。)

public static int JudgePoint(string arr,int i,float result)
        {
            arr = arr + "=" + result.ToString(); 
            if (arr.Contains('.'))
            {
                i--;//从新生成一道题
            }
            else arrayList.Add(arr);
            Write(arrayList);//写入文件
            return i;
        }

 

修改代码检查修改后的代码有无错误即对代码进行回归测试。

在测试过程当中要注释掉Assert.Fail()【在不检查任何条件的状况下使断言失败】不然会测试失败。

5、效能分析

在vs的界面上能够直接看到

6、感想与反思

一、接触到新东西的时候总会出现各类各样的问题,首先要本身查资料,搞不懂的地方再请教老师和同窗。

二、在代码方面有很大的改进空间,尤为在单元测试中,所谓单元测试是对最小程序集的测试,在个人代码里存在不少函数相互调用,函数写的不简洁,单元测试起来就不是很容易,还须要规范本身的代码书写。