2016012041+小学四则运算练习软件项目报告

本文介绍了一个使用Java实现的小学生适用的四则运算题目生成器。该程序能够根据输入的参数n,生成n道不含负数和小数的四则运算题目,并自动计算答案,最终将题目和答案输出到文本文件中。

1.仓库地址:https://git.coding.net/wangyy2016012041/Calculate.git

2.需求分析:

  ①程序接受一个输入的参数n后,随机生成n道四则运算式,其中要保证生成的运算式的运算符在3-5个之间,同时程序对生成的运算式自动求解,结果和运算式一同输出到result.txt文件中。

  ②因为面向对象是小学生,要保证生成的运算式中无负数和小数,运算的结果也不能出现负数和小数。

  ③程序需要判断输入的参数n是否合法。

  ④在原有的基础上,生成的运算式随机性的带有括号和真分数。(未实现)

3.功能设计:

  ①基本功能:

    Ⅰ程序接收参数n,并对n的合法性作出判断,若出现错误则提示。

    Ⅱ自动生成n个运算式,并计算得出结果。

    Ⅲ将计算后的结果与运算式一同存入txt文件中,保存在指定目录下。

    Ⅳ由于面向对象是小学生,因此数字在0-100之间。

  ②扩展功能:

    Ⅰ随机产生括号并保证括号的合法有效性。(尚未实现)

    Ⅱ加入分数运算式,并且保证计算前后都是真分数,且不可化简。(尚未实现)

4.设计实现:

  ①整体思路:

    在最初拿到项目的要求时,我是一头雾水,因为已有将近一年没有碰过java代码,所以我也只好重新翻开java书,温习需要用到的java知识。我看了老师推荐的博客,觉得他们的想法很高深,对于我来说还是比较难。后来在网上学习调度场算法,经过多日的理解,仍然不明白其中的原理,因为我是学习前台的,本身对后端的知识不了解,接触后端语言也是用node.js和php,而且java本身就很繁琐,所以我想了很久,也问了同学和学长学姐该如何完成这个作业,在学长的推荐下使用了JS中的eval算法,算是一种解决的方法吧。

    对于表达式的构成,我的想法是首先生成随机数和随机运算符,将随机数放入数组中,随后将数字与运算符相连,在这期间要注意负数和小数不能出现,相连后构成表达式,运用eval算法将表达式求解。

  ②设计的函数:

    

    Ⅰ判断运算符的方法:Sign(int n)

    Ⅱ计算的方法:calculate(ArrayList<String> arrayList)

    Ⅲ分式化简的方法:gcd(int a,int b)

    

5.代码详情:

  ①生成表达式的算法:

    这一段主要用来生成随机数以及运算符,生成后将随机数和运算符组成运算式。

      for(int i = 0; i < num; i++){
            int n = (int)(Math.random()*3+2);//3-5个运算符
            int[] number = new int[n + 1];//数字要比运算符多1
            String nStr = new String();
           for (int j = 0; j <= n; j++) {
                number[j] = (int)(Math.random()*100+1);
            }
           for (int j = 0; j < n; j++) {
                int sign1 = (int)(Math.random()*4);
                nStr += String.valueOf(number[j]) + String.valueOf(Sign(sign1));
                if (sign1 == 3) {
                    number[j + 1] = gcd(number[j], number[j + 1]);
                }
            }
            nStr += String.valueOf(number[n]);
            Str.add(nStr);

 

  ②计算方法:

    这里使用了JS中的eval算法,计算表达式的最终结果。

 ArrayList<String> suanshi = new ArrayList<String>();
        for (String ax : arrayList) {
            try {
                ax = ax + "=" + jse.eval(ax);
                System.out.println(ax);
                suanshi.add(ax);
            }
            catch (ScriptException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

  ③判断非小数:

    通过判断能否整除,如果不能,则重新生成随机数,重新判断。

 Random ran = new Random();
        if(x%y!=0){
            y=ran.nextInt(100)+1;
            return gcd(x,y);
        }
        else{
            return y;
        }

 

6.测试运行:

  进入src文件下,输入javac -encoding utf-8 Main.java 编译出相应的class文件,再输入java Main 进行测试:

 

7.项目总结:

  这次项目对我来说是一个挑战,在阅读任务和解决任务的时候都遇到了很大的问题和困难,由于太久不接触java代码,导致在刚刚接触这个项目时要回头重新温习java的知识点,虽然用别的语言确实能特别快的完成这个项目,但是我也觉得用java对我来说也算是一个提升。在真正动手实践这个项目的时候,发现我的后端基础很差,看不懂老师提供的调度场算法,也是因为当初选择了前端,也没有好好学习java语言。因此选择了加入eval算法结构,同时也在我的能力范围内使用java代码,完成了这个作业。在这个过程中,让我意识到了时间分配上的不足以及和其他同学的差距,在以后的任务中,我会努力调控好自己的时间分配,多学一些别的语言,温习以前的知识,争取编译出更好的代码。

 

8.PSP

PSP2.1

任务内容

计划共完成需要的时间(min)

实际完成需要的时间(min)

Planning

计划

15

20

 

Estimate

估计这个任务需要多少时间,并规划大致工作步骤

10

8

Development

开发

360

900

Analysis

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

6

8

Design Spec

 生成设计文档

0

0

Design Review

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

30

20

Coding Standard

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

10

8

Design

具体设计

30

40

Coding

具体编码

300

360

Code Review

代码复审

30

15

Test

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

30

20

Reporting

报告

60

90

Test Report

 测试报告

5

3

Size Measurement

计算工作量

10

10

Postmortem & Process Improvement Plan

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

3

3

 

  

 

转载于:https://www.cnblogs.com/wangyy39/p/8645187.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值