网页版命令行实现四则运算

一、github地址:https://gitee.com/leechooo/Arithmetic

   项目成员:李树,李家杰

二、题目要求:实现一个自动生成小学四则运算题目的命令行程序。

  1. 使用 -n 参数控制生成题目的个数。
  2. 使用 -r 参数控制题目中数值的范围。
  3. 生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1 − e2的子表达式,那么e1 ≥ e2。
  4. 生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数。
  5. 每道题目中出现的运算符个数不超过3个。
  6. 在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件。
  7. 程序应能支持一万道题目的生成。

三、PSP

 

 

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 40  60

· Estimate

· 估计这个任务需要多少时间

 40  60

Development

开发

 710  600

· Analysis

· 需求分析 (包括学习新技术)

 120  150

· Design Spec

· 生成设计文档

 60  40

· Design Review

· 设计复审 (和同事审核设计文档)

 30  30

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

 30  30

· Design

· 具体设计

 120  60

· Coding

· 具体编码

 210  200

· Code Review

· 代码复审

 40  30

· Test

· 测试(自我测试,修改代码,提交修改)

 100  60

Reporting

报告

 100  80

· Test Report

· 测试报告

 40  40

· Size Measurement

· 计算工作量

 30  30

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

 30  30

合计

  850 740

 

四、解题思路

传入核心函数range...

五、核心代码

下载到本地的函数

// 生成txt文件,并且可以输出下载

function download(filename, text) { 
    var pom = document.createElement('a'); 
    pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
    pom.setAttribute('download', filename); 
    if (document.createEvent) { 
        var event = document.createEvent('MouseEvents'); 
        event.initEvent('click', true, true); 
        pom.dispatchEvent(event); 
    } else { 
        pom.click();
    } 
}

解析指令函数

  function run (command) {
      var commandArr = command.split(' ')
      var num, range
      for (var i = 0; i < commandArr.length; i++) {
        if (commandArr[i] === '-n') {
          num = commandArr[i + 1]
        } else if (commandArr[i] === '-r') {
          range = commandArr[i + 1]
        }
      }
      if (!num || !range) {
        alert('参数错误')
        return false
      }
      for (var j = 0; j < num; j++) {
        console.log(arithmetic(range))
      }
    }

 实现网页terminal

  <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.terminal/1.22.7/js/jquery.terminal.min.js"></script>
  <link href="https://cdnjs.cloudflare.com/ajax/libs/jquery.terminal/1.22.7/css/jquery.terminal.min.css" rel="stylesheet"/>
    $(function() {
      $('#term_demo').terminal(function (command) {
        run(command) // 开始解析指令
      }, {
        greetings: 'Javascript Interpreter',
        name: 'js_demo',
        height: document.documentElement.clientHeight,
        width: document.documentElement.clientWidth,
        prompt: '在此输入命令> '
      })
    })

核心函数

    function arithmetic (range) {
      var operaterArr = ['+', '-', '*', '/']
          d1 = Math.floor(Math.random()*range) // [0,range)
          d2 = Math.floor(Math.random()*range)
          operater = operaterArr[Math.floor(Math.random()*4)]
      var result
      var str
      switch (operater) {
        case '+': 
          result = d1 + d2
          str = d1 + '+' + d2
          break
        case '-':
          if (d1 > d2) {
            result = d1 - d2
            str = d1 + '-' + d2
          } else {
            result = d2 - d1
            str = d2 + '-' + d1
          }
          break
        case '*':
          result = d1 * d2
          str = d1 + '*' + d2
          break
        case '/':
          if (d1 > d2) {
            result = d2 + '/' + d1
            str = d2 + '/' + d1
          } else {
            result = d1 + '/' + d2
            str = d1 + '/' + d2
          }
          break
      }
      return str + '=' + result
    }

六、心得体会

收获满满

posted on 2018-09-29 22:39  李才浩  阅读(203)  评论(0编辑  收藏  举报

导航