《构建之法》作业——熟悉使用工具

 博客开头

GIT地址 https://github.com/hanhao-3
GIT用户名 hanhao-3
学号后五位 62319
博客地址 https://www.cnblogs.com/hanhaocom/
作业链接 https://www.cnblogs.com/harry240/p/11515697.html

 

 

 

 

 

 

 

Part 0. 背景

阿超要给他上小学一年级的孩子做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”。该软件需求如下:

  • 程序接收一个命令行参数 n,然后随机产生 n 道加减乘除(分别使用符号+-*/来表示)练习题,每个数字在 0 和 100 之间,运算符在 2 个 到 3个之间。
  • 由于阿超的孩子才上一年级,并不知道分数。所以软件所出的练习题在运算过程中不得出现非整数,比如不能出现 3÷5+2=2.6 这样的算式。
  • 练习题生成好后,将生成的 n 道练习题及其对应的正确答案输出到一个文件 subject.txt 中。
  • 当程序接收的参数为4时,以下为一个输出文件示例。
    13+17-1=29
    11*15-5=160
    3+10+4-16=1
    15÷5+3-2=4

阿超选择使用C#语言、Visual Studio 2017 IDE来完成以上需求。

Part 1. 配置环境

我之前就已经安装好了VS并且配好了环境,就不再重复安装,在此仅展示我电脑上VS已配好的相关环境:

遇到的问题:我记得当初我们团队要求装VS的时候是要把Dev express嵌进去的,首先是VS的安装中途老是安装到一半就不动了。后来百度了才知道安装的是Blend for Visual Studio,最后安装Visual Studio 2017才解决了。在嵌入Dev express的时候也老是嵌不上去,多次尝试之后,把文件全部卸载干净了才装好。

 Part 2. 克隆项目

1.申请注册Github账号,用户名为hanhao-3:

2.登录并输入阿超的仓库的网址https://github.com/Cherish599/AchaoCalculator,点击右上角的 Fork ,将阿超的四则运算库拷贝到自己的同名仓库中:

3.账号名为hanhao-3的用户从AchaoCalculator中获取到了阿超的四则运算库:

 4.点击Clone or download,复制下拉框链接:

 5.返回桌面,点击右键,点击Git Bash Here,出现Git命令行界面,在Git命令行中写入:git clone https://github.com/hanhao-3/AchaoCalculator.git(这个地址是我们 Fork 后仓库的地址),点击回车:

 

 可以看到桌面上多出了一个名为AchaoCalculator的文件夹,这就是克隆到本地的项目。

 6.在该文件夹下新建一个名为hanhao-3的文件夹:

 7.在VS中新建项目:

 8.代码思路:

 从控制台读取一个数字n,表示生成n个算式,调用Pro1开始生成算式:

 

 

 Pro1的构造函数,调用表示开始执行代码命令生成算式:

 

 

 建立一个结构体,用于储存算式,x,y,z表示运算数字,a,b表示运算符号,sm表示运算结果:

 

 

  这两个函数用于计算算式的值,Com用于单次计算,Sum用于计算算式最后答案:

 

 

 

 

  Judge函数用于判断生成的算式是否合法,是则返回true否则返回false:

 

 

 随机生成算式,并调用Judge函数判断算式是否合法,不合法继续执行生成新算式,合法返回一个Node值表示该算式:

 

 

 

 

 该函数用于输出运算符号,因为我对运算符号有int值1,2,3,4表示,输出时因转化成对应运算符号:

 

 

 构造函数调用的函数,用于接收n,并开始执行生成n个算式,生成算式后输出打印到txt文件中:

 

 

 运行截图:

 

 

 

Part 3. 单元测试

新建一个名为UnitTestProject1的单元测试项目:

 

 添加引用:

 

 编辑测试代码:

 

 测试结果:

Part 4. 基本操作与回归测试

设置断点:

 

 单步运行,可以看到监视值:

Part 5. 代码提交

开始向源仓库发起 Pull Request:

Part 6. 总结

    本次作业步骤比较繁琐,尤其是GitHub的使用,对我来说更是全新的内容。做起来比较吃力,但在探索的过程中,也学到了很多东西。助教们也很贴心,将详细步骤给我们做了示范,不然面对全英文的网页,我们还真不知道怎么下笔。

Part 7. 完整源代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace hanhao_3
{
class Program
{
static void Main(string[] args)
{
int n = Convert.ToInt32(Console.ReadLine());
Prol pro = new Prol(n);
}
}
class Prol
{
public Prol(int n)
{
Run(n);
}
private struct Node
{
public int x, y, z, a, b, sm;
}
private int Com(int a, int b, int c)
{
if (b == 1)
return a + c;
else if (b == 2)
return a - c;
else if (b == 3)
return a * c;
else
return a / c;
}
private int Sum(Node k)
{
if (k.a > 2 || k.b <= 2)
return Com(Com(k.x,k.a,k.y),k.b,k.z);
return Com(k.x,k.a,Com(k.y,k.b,k.z));
}
private bool Judge(List<Node> data, Node k)
{
for (int i = 0; i < data.Count; i++)
if (data[i].x == k.x && data[i].y == k.y && data[i].z == k.z && data[i].a == k.a && data[i].b == k.b)
return false;
if (k.a == 4 && (k.x / k.y * k.y) != k.x)
return false;
if (k.b == 4)
{
if (k.a <= 2 && (k.y / k.z * k.z) != k.y)
return false;
if (k.a >2 && (Com(k.x,k.a,k.y)/k.z*k.z) != Com(k.x,k.a,k.y))
return false;
}
if (Sum(k) < 0)
return false;
return true;
}
private Node Ad(List<Node> data)
{
Random key = new Random();
while (true)
{
Node k = new hanhao_3.Prol.Node();
k.x = key.Next(1,100);
k.a = key.Next(1, 5);
k.y = key.Next(1, 100);
k.b = key.Next(1, 5);
k.z = key.Next(1, 100);
if (Judge(data, k))
{
k.sm = Sum(k);
return k;
}
}
}
private char Pri(int n)
{
if (n == 1)
return '+';
else if (n == 2)
return '-';
else if (n == 3)
return '*';
else
return '/';
}
private void Run(int n)
{
List<Node> data = new List<Node>();
for (int i = 0; i < n; i++)
data.Add(Ad(data));
//StreamWriter sw = new StreamWriter
for (int i = 0; i < n; i++)
{
Console.WriteLine(data[i].x+""+Pri(data[i].a)+""+data[i].y+""+Pri(data[i].b)+data[i].z+"="+data[i].sm);
}
}

}
}

posted on 2019-09-20 19:39  月隐星归  阅读(159)  评论(1编辑  收藏  举报