GIT地址 | link |
---|---|
GIT用户名 | sllierz |
学号后五位 | 24236 |
博客地址 | 个人博客 |
作业链接 | 作业链接 |
一、配置环境
1、VS2017的安装与配置
vs是上个学期就已经安装好的,在配置过程中没有遇到什么问题。
2、git的安装与配置
二、克隆项目
1、登录到我的GITHUB的主页
2、 进入阿超仓库的网址,点击右上角的 Fork ,将阿超的四则运算库拷贝到自己的同名仓库中
3、将项目克隆到电脑硬盘中(E:\zb 软件工程作业)
三、代码设计
1、打开VS2017,新建项目
2、在网上经过查阅找到的代码,经过自己的修改,并且完全理解。主要思想:随机产生的数字和字符用数组存储,将一道完整的运算题目用字符串储存,用c#中的datatable的compute方法计算字符串的值,判断运算结果中是否含有小数,如果符合要求则将产生的n道题写入ArrayList中,写入文件。
代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Collections; using System.Data; using System.IO; namespace ConsoleApp2 { public class Program { public static ArrayList arrayList = new ArrayList(); static void Main(string[] args) { Create(); } //产生随机运算式 public static void Create() { Console.WriteLine("输出的题目个数:"); int n = int.Parse(Console.ReadLine()); 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);//计算的值 arr = arr + "=" + result.ToString(); if (arr.Contains('.')) { i--; } else arrayList.Add(arr); Write(arrayList);//写入文件 } } //判断除号的个数,保证可以除尽 public static int[] Chu(char[] Operator, int[] numbers) { int j = 0; for (int i = 0; i < Operator.Length - 1; i++) { if (Operator[i] == '/') j++; } switch (j) { case 0: break; case 1: for (int m = 0; m < Operator.Length; m++) { if (Operator[m] == '/' && m < Operator.Length - 1) { numbers[m + 1] = Judge(numbers[m], numbers[m + 1]); } } break; default: break; } return numbers; } //检验是否含有分数,若有则改变除数 public static int Judge(int a, int b) { if (a % b != 0 && a == 1) { b = 1; } if (a % b != 0 && a != 1) { for (int x = 2; x <= a; x++) if (a % x == 0) { b = x; } } return b; } //利用datatable计算字符串的值 public static float CalcByDataTable(string expression) { object result = new DataTable().Compute(expression, ""); return float.Parse(result + ""); } //写入文件 public static void Write(ArrayList a) { FileStream fs = File.Open(@"E:\输出的计算题.txt", FileMode.Create); StreamWriter wr = new StreamWriter(fs); foreach (string s in a) { wr.WriteLine(s); } Console.WriteLine("写入文件成功!"); wr.Close(); } 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; } } }
3、结果如下
四、单元测试与回归测试
1、根据教程所示先新建一个项目,选择单元测试,然后进行引用,最后进行测试。
代码如下:
using System; using Xunit; using ConsoleApp2; namespace XUnitTestProject2 { public class UnitTest1 { [Fact] public void Test1() { string s = "1+2+3*4/2"; float f = ConsoleApp2.Program.CalcByDataTable(s); Assert.Equal(9+"", f+""); } } }
2、检查修改后的代码有无错误即对代码进行回归测试。
五、效能分析
根据教程我们可以进行操作
六、提交代码到Github
七、遇到的问题以及感想
- 第一就是关于写代码的部分对于目前的我来说比较困难,所以我就在网上找了个不是很齐全的代码进行修改过后,并且了解了主要思想写出来了,单元测试的环节是自己写的,主要就是代码方面还有不足,第二就是在Github上传代码的过程中遇到了很大的问题,经常就是建立好了仓库不知道该如何进行上传操作,包括Git的操作,像git push 经常会出现错误,另外就是单元测试环节并不能熟练的使用。还需要多加练习才能达到熟悉的目的。