您的位置:首页 > 其它

2016012019——小学四则运算练习软件项目报告

2018-03-25 21:32 351 查看

仓库地址:https://git.coding.net/Buza/arithmeticForStu.git

内容一:需求分析

用户用例:

用例名称

设置题目数

适用系统

Windows10  IOS

级别

用户用例

用户

程序使用者

利益关系者

用户

前置条件

成功保证

输入正整数

主要成功场景

用户输入正整数,点击回车键,返回所输入数目的题目

扩展

输入小数或负数时,返回“请输入正整数”

特殊需求

技术与数据计数表

 暂无

发生频率

用户使用时发生一次

其他

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

内容二:功能设计

  1. 可以输入算式数目
  2. 算式结果不可出现小数、负数
  3. 生成计算结果正确的三到五个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的代码,照着教程码是行,但看代码看不懂,不太懂怎么用命令行往移动仓库移东西,还得接着研究呀。

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: