2018102997-小学四则运算练习软件项目报告

本文介绍了一款针对小学生设计的四则运算练习软件,详细阐述了软件的需求分析、功能设计与实现过程,包括随机生成符合特定规则的数学题、确保结果非负及整数、输出至文件等功能。

代码地址 https://coding.net/u/lirl660/p/arithmetic/git

1.需求分析
作为一个四则运算练习软件,其基本功能要求如下:

  • 程序可接收一个输入参数n,然后随机产生n道加减乘除(分别使用符号±*÷来表示)练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。
  • 每个练习题至少要包含2种运算符。
  • 不得出现负数与非整数。
  • 练习题生成好后,将学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。

通过以上需求,我们可以了解到,我们的目标是做一款可以生成指定数目的简单数学题目的软件。目标用户是小学生和老师或家长,因此题目中的数字不超过100,不可以出现负数和非整数,且运算符数量也要适量。同时,为了方便老师或家长对题目进行批阅,需要将学生学号、生成的n道题目及其结果写入文件中。

2.功能设计
基本功能即生成符合题目要求的四则运算题目并输出到文件中。

3.设计实现
在实现过程中,只新建了一个Main类,其他各块功能均由Main类的内部方法实现。
*main函数:*主函数,功能包括:接收参数n,判断参数n的合法性,调用函数产生四则运算式,计算运算式结果并输出到文件中。
*newE函数:*生成一个符合要求的四则运算式。
*Fraction函数:*生成一个符合要求的使用真分数进行加减的四则运算式。
*divideExactly函数:*在生成运算式用到“÷”时,判断此时的计算是否能整除,如果不能整除,则返回一个新的可以整除的整数。
*calculate函数:*在生成所有四则运算式后,计算所有运算式的结果,并将结果分别附加到每一个四则运算式的尾部。 在计算过程中如果发现某个式子结果为负数则重新生成一个四则运算式来保证式子的非负性。
*write函数:*将calculate函数生成的结果写入到已有的文件“result.txt”中。
4.算法详解
*生成四则运算式:*在生成题目过程中,先通过随机数确定运算符的个数(3-5个),然后通过循环取随机数确定参与运算的数字(比运算符多一个),实现如下:

 Random rd = new Random();
 //产生运算符的个数,3-5个
 int on=rd.nextInt(3)+3;
 //产生比运算符多一个的随机数字
 int[] nums = new int[on+1];
 for(int j=0;j<=on;j++){
     nums[j]=rd.nextInt(101);
 }

5.测试运行

输入n的值为20,运行结果如图所示。

6.代码片段

  • 片段一:
    在本次作业中,老师要求使用“÷”来作为输出时的除号,但计算机在计算结果时使用的是“/”来作为除号,所以为了正确的计算出结果,我将生成的运算式分成两种,一种除号使用“÷”,用做输出,另一种除号使用“/”,用作计算,分别放在两个ArryList中。`
 ArrayList<String> ex1=new ArrayList<String>();//用于显示,使用÷
 ArrayList<String> ex2=new ArrayList<String>();//用于计算,使用/
  • 片段二:
    为了使所出的题有更好的锻炼效果,我添加一小段代码使得相邻的两个运算符不会是同一种。这样使我出的题更多样化,更能锻炼人的计算能力。
int[] os=new int[2];
os[j%2]=rd.nextInt(4);//随机选择一个运算符
int o;//本次添加的运算符
if(j==0){
    o=os[0];
}
else{
    while(os[j%2]==os[(j+1)%2]){
        os[j%2]=rd.nextInt(4);
    }
    o=os[j%2];
}

7.总结
通过这次个人项目,我的感慨颇深。作为一名软件工程专业的学生,我的代码能力真的是严重不足,使得这次任务的完成过程中出现了许许多多的波折,完成的时间比预计晚了很多,而且相应功能也不是十分完善,对于关键算法的理解也不是十分到位。很多时候我都在给自己找理由,说代码对于我来说太难了,我想做的是产品方向,所以代码能力不足也没什么关系。但是从事互联网相关工作,往往都是离不开代码的,代码是工作的基础。
不要再找借口,踏实去做。趁现在还不算晚,真的要努力夯实基础了。
从现在开始好好加油!

8.展示PSP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值