网页版命令行实现四则运算
一、github地址:https://gitee.com/leechooo/Arithmetic
项目成员:李树,李家杰
二、题目要求:实现一个自动生成小学四则运算题目的命令行程序。
- 使用 -n 参数控制生成题目的个数。
- 使用 -r 参数控制题目中数值的范围。
- 生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1 − e2的子表达式,那么e1 ≥ e2。
- 生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数。
- 每道题目中出现的运算符个数不超过3个。
- 在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件。
- 程序应能支持一万道题目的生成。
三、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 }
六、心得体会
收获满满