《构建之法》第二次作业

GIT地址https://github.com/xiaxiaoshux/AchaoCalculator
GIT用户名xiaxiaoshux
学号后五位03226
博客地址我的博客园
作业链接作业链接

一、环境配置

1.安装Visual Studio 2017
1598963-20190919133850770-1669151251.png

2.安装git
如下图可运行
1598963-20190919133947528-748365857.png

3.克隆项目
点击fork后直接复制链接,再在git中输入命令即可。
1598963-20190919134013972-2118599128.png

1598963-20190919134037428-660985775.png

二、代码思路

问题的背景:

阿超家里的孩子上小学一年级了,这个暑假老师给家长们布置了一个作业:家长每天要给孩子出一些合理的,但要有些难度的四则运算题目,并且家长要对孩子的作业打分记录。

作为程序员的阿超心想,既然每天都需要出题,那何不做一个可以自动生成小学四则运算题目与解决题目的命令行 “软件”呢。他把老师的话翻译一下,就形成了这个软件的需求:

程序接收一个命令行参数 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
我的解决方案:

每次都产生范围内随机数和随机运算符,字符串拼接起来,最后使用DataTable将字符串算式计算出来,若不为小数即可。

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.IO;

public class Calculator
{
    private static string[] op = new string[] { "+", "-", "*", "/" }; //初始化运算符
    
    //生成表达式avd
    public static string mkfun()
    {
        Random r = new Random(Guid.NewGuid().GetHashCode());//解决随机数重复的问题
        StringBuilder build = new StringBuilder();
        int count = r.Next(2,4);    // 运算符个数
        int start = 0;
        int num1 = r.Next(1,101);   // 范围内随机数
        build.Append(num1);         // 第一个数字
        for (start = 0; start <= count; start++)
        {
            int idx = r.Next(0,4);      // 随机运算符
            int num2 = r.Next(1,101);   // 范围内随机数
            build.Append(op[idx]).Append(num2); // 运算符 连接 随机数
            start++;
        }
        return build.ToString();
    }
    //计算四则运算表达式结果
    public static string Solve(string question)
    {
        DataTable dt = new DataTable();
        string ans = dt.Compute(question, null).ToString(); // 将算式部分计算出结果并转为字符串
        if (double.Parse(ans) % 1 != 0) // 如果结果是个小数,则返回null
        {
            return null;
        }
            
        return ans;
    }

    public static void Main(string[] args)
    {
        StreamWriter streamWriter = new StreamWriter(@"G:\000_xiaxiaoshux____大学各学期的文件\大三_上学期\系统分析与设计作业\AchaoCalculator\MyCalculator\MyCalculator\bin\Debug\test.txt", true);
        List<string> list = new List<string>();
        Console.Write("请输入想要生成的个数:");
        int n = int.Parse(Console.ReadLine());
        for (int i = 0; i < n; i++)
        {
            string question = mkfun();
            string answer = Solve(question); 
            if (answer == null) // 如果是个小数,则continue
            {
                i--; continue;
            }
            list.Add(question + "=" + answer);
            Console.WriteLine(question + "=" + answer);
           
        }
        Console.WriteLine(string.Join("", list.ToArray()));
        foreach(string s in list)
        {
            streamWriter.WriteLine(s);
        }
        Console.ReadLine();
    }
}

1598963-20190919134118129-1791328043.png

输出的文件test.txt
1598963-20190919134140425-1166852111.png

三、测试过程

1598963-20190919134213883-1601890350.png

1598963-20190919134234379-230246477.png

四、提交与感想

最终使用git命令行提交,迭代了3次,最后这个是第4个版本。
如下三个命令
1598963-20190920163158452-1940262605.png
1598963-20190920163211720-775946454.png
1598963-20190920163227987-1684581602.png

1598963-20190919134251713-1154357163.png

感想就是对我来说还是挺复杂的,首先是之前没有上传项目的经历,其次C#语法确实不太记得了,中间好多次请教同学,也确实获得了很多有用的想法,总之这是个很有意思的经历。

转载于:https://www.cnblogs.com/xiaxiaoshux/p/11548887.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值