《构建之法》—— 系统分析与设计第二次作业
我的GitHub地址 | superLeeHan的github |
---|---|
这个作业要求在哪里 | 第二次作业要求 |
学号后五位 | 62406 |
博客地址 | LeeHan |
作业链接 | 作业链接 |
环境的配置以及克隆的练习
这里先下载一个人称宇宙第一编译器的VS(为了给电脑腾出足够的储存空间,我删了我心爱的IDEA以及辛辛苦苦配好的SSH框架环境······(╯‵□′)╯︵┻━┻)。
由于电脑空间不足的问题,之前经常安装/卸载VS,整套操作流程已经熟练地让人心疼:
之后就是漫长的等待·······(顺带吐槽一下上限高的离谱下限低的吓人的校园网)
然后我们来看git,git是long long ago就已经下载好了的,这里就不演示下载流程了。直接克隆项目:
- github账号也是已经注册过了的,所以直接用现成的。
- 然后fork阿超的四则运算
将仓库克隆至本地
之后在该文件夹下建立一个新的文件夹,重命名为superLeeHan(与GitHub账号同名)
并在此文件夹中建立C#项目
代码设计
背景:阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个作业:家长每天要给孩子出一些合理的,但要有些难度的四则运算题目,并且家长要对孩子的作业打分记录。
作为程序员的阿超心想,既然每天都需要出题,那何不做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”呢。他把老师的话翻译一下,就形成了这个软件的需求:
程序接收一个命令行参数 n,然后随机产生 n 道加减乘除(分别使用符号+ - * /来表示)练习题,每个数字在 0 和 100 之间,运算符在 2 个 到 3 个之间。
由于阿超的孩子才上一年级,并不知道分数。所以软件所出的练习题在运算过程中不得出现非整数,比如不能出现 3÷5+2=2.6 这样的算式。
练习题生成好后,将生成的 n 道练习题及其对应的正确答案输出到一个文件 subject.txt 中。
首先分析题目
- 随机产生题目
- 题目生成的过程中不能产生小数
- 对数字和运算符有要求
- 将结果输出至subject.txt文件之中
我的代码分为三个主要部分:
1.按照题目要求生成算式。
public static string createqu()
{
StringBuilder build = new StringBuilder();
Random ranum = new Random(Guid.NewGuid().GetHashCode()); //产生随机数
int sym_num = ranum.Next(1, 4);
int start = 0;
int num1 = ranum.Next(1, 101);
build.Append(num1);
for (start = 0; start <= sym_num; start++)
{
int idx = ranum.Next(0, 4); // 随机运算符
int num2 = ranum.Next(1, 101);
build.Append(sym[idx]).Append(num2); // 连接数字与字符
start++;
}
return build.ToString();
}
2.验证题目保证输出算式之中没有结果为小数的式子。
public static string verify(string question) //计算算式结果,验证式子结果是否为整数
{
DataTable dt = new DataTable();
string answer = dt.Compute(question, null).ToString(); // 将算式部分计算出结果并转为字符串
if (double.Parse(answer) % 1 != 0 || double.Parse(answer) < 0) // 如果结果是个小数,则返回null
{
return null;
}
return answer;
}
3.输出结果至文件之中。
public static void output(int n)
{
StreamWriter streamWriter = new StreamWriter(@"C:\Users\MAC1\Desktop\各种乱七八糟的作业\subject.txt", true);
List list = new List();
for (int i = 0; i < n; i++)
{
string question = createqu();
string answer = verify(question);
if (answer == null) // 如果是个小数,则continue
{
i--; continue;
}
list.Add(question + "=" + answer);
Console.WriteLine(question + "=" + answer);
}
foreach (string s in list)
{
streamWriter.WriteLine(s);
}
Console.ReadLine();
}
测试
首先,将所有的类都改成public。
然后,安装单元测试的相关插件
然后重启,等(再次吐槽这感人的网速)
新建单元测试,
添加引用
之前从未写过测试代码 开始有一些不知所云,最后还是简单的写了一点。
性能测试
提交
之后就是提交代码了,开始遇到了一点小问题,百度了一下,摆平。
感想
之前写代码从来没有上传过github(之前只用GitHub看别人的代码······),从来没有进行过单元测试,也算是有不小的收获。真的一年多没碰过C#了,写代码真的是头大···几乎是一边看资料一边写了,不会的地方就疯狂百度。