第二次博客作业

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

一、环境配置

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

配置如下:

二、代码设计

1、项目背景

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

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

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

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

2、代码设计

主要思想过程如上图,随机产生的数字和字符用数组存储,将一道完整的运算题目用字符串储存,用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仓库:

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

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

2、提交代码过程的问题

比如像什么没有将本地分支与远程仓库的分支关联,本地分支与远程分支之间因为各种原因断开了,项目文件夹没有被修改,没有必要提交。

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

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

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()【在不检查任何条件的情况下使断言失败】否则会测试失败。

五、效能分析

在vs的界面上可以直接看到

六、感想与反思

1、接触到新东西的时候总会出现各种各样的问题,首先要自己查资料,搞不懂的地方再请教老师和同学。

2、在代码方面有很大的改进空间,尤其在单元测试中,所谓单元测试是对最小程序集的测试,在我的代码里存在很多函数相互调用,函数写的不简洁,单元测试起来就不是很容易,还需要规范自己的代码书写。

posted @ 2019-03-28 21:17  七里1  阅读(194)  评论(2编辑  收藏  举报