软件工程第二次作业--熟悉实用工具

Git地址 https://github.com/Yanyixiao
Git用户名 Yanyixiao
学号后五位 23225
博客地址 https://www.cnblogs.com/xiaoxiao0331/
作业链接 https://www.cnblogs.com/harry240/p/11515697.html

一、预先准备工作

Part 0. 程序需求
  • 程序接收一个参数 n 随机产生 n 道包含 四则运算 的练习题,数字在 0-100 之间,运算符为 2 或者 3 个。
  • 程序运算过程中不得出现分数,运算过程中与结果中都不可以出现。
  • 练习题生成好后,将生成的 n 道练习题及其对应答案输出至文件 Subject.txt 中。
Part 1. 配置环境
  • 几个月前我的电脑已经安装好Visual Studio 2019 Preview,不再赘述。

二、克隆项目

Part 2.克隆项目

  • Step 1.注册Github账号,已有不再赘述。

  • Step 2.成功登录后,输入阿超仓库的网址,点击右上角Fork,拷贝到自己的同名仓库中。

  • Step 3.在桌面右键菜单中打开Git Bash命令行,输入
    git clone https://github.com/Yanyixiao/AchaoCalculator.git,然后Enter。之后会发现桌面上多了一个同名文件夹。

  • 根据作业要求,不执行git checkout cplusplus

  • 新建文件夹,命名为Yanyixiao

  • 启动VS2019时发现,2019自带签出代码功能诶。

Part 2.5 签下来的代码是Java的,还得自己写。。

阅读了Java版的代码。

  • 照着Java版本的Calculator写了好久,有一个问题还没解决,但是已经很饿了。(09152019 7:00pm)

  • 代码最终是写完了。(09182019)
public static Formula MakeFormula()
        {
            Random ran = new Random();
            Formula Form = new Formula();
            string build = null;
            int count = ran.Next(1, 3); // generate random count
            int start = 0;
            int number1 = ran.Next(1, 99);
            build = build + number1;
            Form.FormQueue.Enqueue(Convert.ToString(number1));//uytd 8796r756eu675v 786f876v

            while (start <= count)
            {
                int operation = ran.Next(0, 4); ; // generate operator
                int number2 = ran.Next(1, 99);
                build = build + op[operation] + number2;
                Form.FormQueue.Enqueue(op[operation]);
                Form.FormQueue.Enqueue(Convert.ToString(number2));
                start++;
            }
            Form.Form = build;
            return Form;
        }//Make a Formula(like 1*5+62-5)
  • 利用生成随机数的方式,获得随机数字以及随机操作符,使用一个队列来记录生成的算式,方便后续采用双栈法计算混合算式。
public static double Solve(Formula formula)
        {
            Stack<double> numberStack = new Stack<double>();//Store number
            Stack operatorStack = new Stack();//Store operator
            while (!(formula.FormQueue.Count == 0))
            {
                if (!(formula.FormQueue.Peek() == "+" || formula.FormQueue.Peek() == "-"
                   || formula.FormQueue.Peek() == "*" || formula.FormQueue.Peek() == "/"))//判断是否数字或者operator
                {
                    numberStack.Push(Convert.ToDouble(formula.FormQueue.Dequeue()));
                }
                else
                {

                    double X, Y;
                    switch (formula.FormQueue.Dequeue())
                    {
                        case "*":
                            X = numberStack.Pop();
                            Y = Convert.ToDouble(formula.FormQueue.Dequeue());
                            numberStack.Push(X * Y);
                            goto First;

                        case "/":
                            X = numberStack.Pop();
                            Y = Convert.ToDouble(formula.FormQueue.Dequeue());                                   /////Designed by Yanyixiao
                            numberStack.Push(X / Y);                                                             /////09/18/2019
                            goto First;


                        case "+":
                            operatorStack.Push("+");
                            goto First;

                        case "-":
                            operatorStack.Push("-");
                            goto First;
                    }
                First:;
                }
              
            }//乘除法计算完毕
            while (numberStack.Count >1)
            {

                switch(operatorStack.Peek())
                {
                    case "+":
                        numberStack.Push((Convert.ToDouble(numberStack.Pop()) + Convert.ToDouble(numberStack.Pop())));
                        goto Second;

                    case "-":
                        double X, Y;
                        X = Convert.ToDouble(numberStack.Pop());
                        Y = Convert.ToDouble(numberStack.Pop());
                        numberStack.Push(Y - X);
                        goto Second;

                }
            Second:;

                

            }
            return numberStack.Pop();
        }
  • 采用双栈法计算混合算式,将数字压入栈中,遇到乘除运算符时弹出两个数字用于运算,再压入数字栈中。
  • 加减运算符压入操作栈中,待乘除运算完成后运算加减。
  • 我将代码贴到了我的github上并选择了public公开。
  • 欢迎大家Fork,点点Star。点击转到Github查看代码

更新了代码,消灭了出现小数的算式,顺手消灭了结果为负数的算式。

因为采用的方式是,舍弃出现小数的算式,同时,因为随机生成1-99的随机数,所以出现小数的概率实在是太高了。所以生成式子中的除法很少。

Part 3.单元测试

  • 新建单元测试
  • 添加引用
  • 测试代码如图

Part 4.效能工具

尝试查看CPU使用率,实际上使用率很低,但是也没学过怎么优化,听说可以多利用其他线程。
也只是听说,不一定对,没了解过。

Part.5 提交代码

利用git commit -m"message" git push 等命令行,提交了十次,但是我还是很不擅长分支管理,有很多分支都很乱,还有Visual Studio 2019版本里自带push commit 等功能,地表最强编译器不是盖的。

至此,整个教程完成啦。

posted on 2019-09-18 12:37  笑笑。。  阅读(224)  评论(2编辑  收藏  举报

导航