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、感想与反思
一、接触到新东西的时候总会出现各类各样的问题,首先要本身查资料,搞不懂的地方再请教老师和同窗。
二、在代码方面有很大的改进空间,尤为在单元测试中,所谓单元测试是对最小程序集的测试,在个人代码里存在不少函数相互调用,函数写的不简洁,单元测试起来就不是很容易,还须要规范本身的代码书写。