2016012019——小学四则运算练习软件项目报告
仓库地址:https://git.coding.net/Buza/arithmeticForStu.git
内容一:需求分析
用户用例:
用例名称 |
设置题目数 |
适用系统 |
Windows10 IOS |
级别 |
用户用例 |
用户 |
程序使用者 |
利益关系者 |
用户 |
前置条件 |
无 |
成功保证 |
输入正整数 |
主要成功场景 |
用户输入正整数,点击回车键,返回所输入数目的题目 |
扩展 |
输入小数或负数时,返回“请输入正整数” |
特殊需求 |
无 |
技术与数据计数表 |
暂无 |
发生频率 |
用户使用时发生一次 |
其他 |
无 |
内容二:功能设计
- 可以输入算式数目
- 算式结果不可出现小数、负数
- 生成计算结果正确的三到五个0~100之间正整数的四则运算算式
内容三:设计思路及其结构
·首先这个问题我首先想到的是,可以用栈或者递归来完成,我太菜了,想不出附加题,就用了递归。
·观察算式结构,要想使算式中不出现括号,比较简单的一种方法就是把算式拆分成两部分
·首先构造两个算法,分别生成第一部分的string和在第一部分的基础上逐步拼接第二部分的加减法。同时这两个算法要返回生成计算的结果值。在顾思宇同学的帮助下,我把结果值分别导入了指针为ans[ ]和newAnswer[ ]里面,就可以在不返回数值的同时得到我们需要的结果了。
第一部分:
public String addNum(int a,int b,String aa, int []ans,int d) { int c; if(a<b) { c = b-a; aa = a+" "+"+"+" "+c; d = b ; return aa; }else if(a>b) { c = a - b; aa = b+" "+"+"+" "+c; d = a; return aa; }else { aa = a+" "+"+"+" "+0; d = a; return aa; } } public String minNum(int a,int b,String aa, int []ans,int d) { int c; if(a<b) { c = b-a; aa = a+" "+"-"+" "+c; d = b; return aa; }else if(a>b) { c = b-a; aa = b+" "+"-"+" "+c; d = a ; return aa; }else { aa = a+" "+"-"+" "+b; d = 0; return aa; } } public String multNum(int a,int b,String aa, int []ans,int d) { int c = a*b ; d = c; aa = a+" "+"*"+" "+b; return aa; } public String divNum(int a,int b,String aa, int []ans,int d) { int c = a*b; if(c<=100) { aa = c+" "+"%"+" "+a; d = b; return aa; }else { return divNum(a,b,aa, ans, d); } }
其中大家可能都有一个问题,如何避免除法中的分数和减法中的负数。我的思路是,除法生成时,先随机生成一个正整数作为算式的结果,再令这个结果乘一个正整数,得到算式的除数,这样避免了小数的出现;减法中,随机生成的两个数在进行减法时,进行比较,分出减数和被减数就好啦。
第二部分:
public String add(int a,int b,String equ,String bb,int[] newAnswer,int c) { c = a+b; bb = equ+" "+"+"+" "+ b; return bb; } public String min(int a,int b,String equ,String bb,int[] newAnswer,int c) { bb = equ+" "+"-"+" "+ b; return bb; }
因为只需要编写加减两部分,就轻松很多。
·最后在返回算式结果时,在新的string中加上=answer(导出的结果值)就好。
·方法构建完了,就要调用它,调用就很难,因为要递归,就感觉很复杂。
调用方法时我们要考虑:
1.需要的重要变量:符号数:numOfSign; 符号选择:(因为用了两个变量,我定义了两个变量来生成随机数)ran、ran0;两个随机正整数:a 、b;和两个数组用于接收结果值:Answer[ ]、newAnswer[ ]。
2.然后就是递归方法了,首先分了三种情况:两个符号、三个符号、四个符号;然后我们得把第二种方法套进去
if(numOfSign == 2) { int c = (int)(Math.random()*100); int ran0 = (int)(Math.random()*2); if(ran == 0) { addNum(a, b,equations,Answer, 0); int ans = Answer[0]; if(ran0 == 0) { add(ans, c, equations, equations0,newAnswer,0); equations = equations0; }else{ min(ans, c, equations, equations0,newAnswer,0); equations = equations0; } }else if (ran == 1) { minNum(a, b, equations,Answer, 0); int ans = Answer[0]; if(ran0 == 0) { add(ans, c, equations, equations0,newAnswer,0); equations = equations0; }else{ min(ans, c, equations, equations0,newAnswer,0); equations = equations0; } }else if (ran == 2) { multNum(a, b,equations,Answer, 0); int ans = Answer[0]; if(ran0 == 0) { add(ans, c, equations, equations0,newAnswer,0); equations = equations0; }else{ min(ans, c, equations, equations0,newAnswer,0); equations = equations0; } }else{ divNum(a, b,equations,Answer, 0); int ans = Answer[0]; if(ran0 == 0) { add(ans, c, equations, equations0,newAnswer,0); equations = equations0; }else{ min(ans, c, equations, equations0,newAnswer,0); equations = equations0; } } int newans = newAnswer[0]; cc = equations+" "+"="+" "+newans; return cc; } //there are two signs above else if(numOfSign == 3) { int c = (int)(Math.random()*100); if(ran == 0) { addNum(a, b, equations,Answer, 0); int q; for(q = 0;q<2;q++) { int ran0 = (int)(Math.random()*2); int ans = Answer[0]; if(ran0 == 0) { add(ans, c, equations, equations0,newAnswer,0); equations = equations0; }else{ min(ans, c, equations, equations0,newAnswer,0); equations = equations0; } } }else if (ran == 1) { minNum(a, b, equations,Answer, 0); int q; for(q = 0;q<2;q++) { int ran0 = (int)(Math.random()*2); int ans = Answer[0]; if(ran0 == 0) { add(ans, c, equations, equations0,newAnswer,0); equations = equations0; }else{ min(ans, c, equations, equations0,newAnswer,0); equations = equations0; } } }else if (ran == 2) { multNum(a, b,equations,Answer, 0); int q; for(q = 0;q<2;q++) { int ran0 = (int)(Math.random()*2); int ans = Answer[0]; if(ran0 == 0) { add(ans, c, equations, equations0,newAnswer,0); equations = equations0; }else{ min(ans, c, equations, equations0,newAnswer,0); equations = equations0; } } }else{ divNum(a, b,equations,Answer, 0); int q; for(q = 0;q<2;q++) { int ran0 = (int)(Math.random()*2); int ans = Answer[0]; if(ran0 == 0) { add(ans, c, equations, equations0,newAnswer,0); equations = equations0; }else{ min(ans, c, equations, equations0,newAnswer,0); equations = equations0; } } } int newans = newAnswer[0]; cc = equations+" "+"="+" "+newans; return cc; } //there are three signs above else{ int c = (int)(Math.random()*100); if(ran == 0) { addNum(a, b, equations,Answer, 0); int q; for(q = 0;q<3;q++) { int ran0 = (int)(Math.random()*2); int ans = Answer[0]; if(ran0 == 0) { add(ans, c, equations, equations0,newAnswer,0); equations = equations0; }else{ min(ans, c, equations, equations0,newAnswer,0); equations = equations0; } } }else if (ran == 1) { minNum(a, b, equations,Answer, 0); int q; for(q = 0;q<3;q++) { int ran0 = (int)(Math.random()*2); int ans = Answer[0]; if(ran0 == 0) { add(ans, c, equations, equations0,newAnswer,0); equations = equations0; }else{ min(ans, c, equations, equations0,newAnswer,0); equations = equations0; } } }else if (ran == 2) { multNum(a, b,equations,Answer, 0); int q; for(q = 0;q<3;q++) { int ran0 = (int)(Math.random()*2); int ans = Answer[0]; if(ran0 == 0) { add(ans, c, equations, equations0,newAnswer,0); equations = equations0; }else{ min(ans, c, equations, equations0,newAnswer,0); equations = equations0; } } }else{ divNum(a, b,equations,Answer, 0); int q; for(q = 0;q<3;q++) { int ran0 = (int)(Math.random()*2); int ans = Answer[0]; if(ran0 == 0) { add(ans, c, equations, equations0,newAnswer,0); equations = equations0; }else{ min(ans, c, equations, equations0,newAnswer,0); equations = equations0; } } } int newans = newAnswer[0]; cc = equations+" "+"="+" "+newans; return cc; } //there are four signs above
·最后只需要构造main函数,让用户输入所需题目数,然后用for循环来调用上面的方法。
第四部分:算法讲解
我的算法很烂啊,我感觉没啥说的,但是最近看博客大家提交的都好强啊,我会继续关注大佬们的更新动态的,fighting!
如果一定要说,我感觉递归是个好东西,虽然用不利索。。。。。。
第五部分:测试运行
从周五调到现在了,还是有bug(沮丧.jpg)还没修完,下周接着修,有时候有行,有时候就出问题了,就各种null,应该是某些方法出问题了,目前这样
第六部分:我感觉我除法这里弄的挺好的,这样做就没有分数,但是如果叫我做分数出来,我就不会弄了
public String divNum(int a,int b,String aa, int []ans,int d) { int c = a*b; if(c<=100) { aa = c+" "+"%"+" "+a; d = b; return aa; }else { return divNum(a,b,aa, ans, d); } }
第七部分:总结
模块化很重要的,提前设计程序,把大程序拆成不同功能,面向不同功能的编程可以少走弯路节省很多时间,尤其是我这样的菜菜,做到模块化可以省力,不会很迷茫。模块化最重要的还是:小块修改不会牵扯大块,就很方便了。
第八部分:PSP
PSP2.1 |
任务内容 |
计划共完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
40 |
20 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
40 |
20 |
Development |
开发 |
610 |
1230 |
· Analysis |
· 需求分析 (包括学习新技术) |
20 |
10 |
· Design Spec |
· 生成设计文档 |
20 |
20 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
10 |
10 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
10 |
10 |
· Design |
· 具体设计 |
120 |
150 |
· Coding |
· 具体编码 |
180 |
600 |
· Code Review |
· 代码复审 |
60 |
120 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
120 |
210(目前) |
Reporting |
报告 |
|
|
· Test Report |
· 测试报告 |
50 |
80 |
· Size Measurement |
· 计算工作量 |
10 |
15 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
10 |
5 |
上面只是代码部分的PSP。。。。这周末研究coding.net研究到胃疼。最后还是王超学姐帮我找到了问题,总算把git给弄好了,公钥给生成了,可惜我还是不是很懂git的代码,照着教程码是行,但看代码看不懂,不太懂怎么用命令行往移动仓库移东西,还得接着研究呀。
- 软件工程之— 项目开发文档(单元测试报告)
- 这是现代软件工程课的个人项目作业-小学四则运算
- 软件开发项目-文档编写标准化--测试分析报告
- 软件可行性分析报告的练习
- 软件项目总结报告范文
- 软件开发项目-文档编写标准化--项目开发总结报告
- 软件项目风险评估报告
- 软件项目经理述职报告
- 【项目管理】软件项目经理述职报告
- 华为软件开发云测评报告一:项目管理
- 软件设计文档国家标准—项目开发总结报告(GB8567——88)
- 锁屏软件项目可行性研究报告
- 软件及系统开发项目可行性分析报告-样例
- 练习项目——学生协作软件客户端(1)界面
- 练习项目——学生协作软件客户端(2)ListFragment
- 研发项目管理软件对比调研报告
- 软件开发项目-文档编写标准化--软件问题报告
- 软件工程之— 项目开发文档(可行性研究报告的编写)
- java图形用户界面组件与布局管理——四则运算练习软件界面搭建(FlowLayout、GridBagLayout、Font)
- 软件开发项目-文档编写标准化--软件修改报告