源码在Github的仓库主页链接地址:https://github.com/mazhongshan/Demo

1.需求分析:

  (1),产生的题目数量要手动输入;

  (2),数字大小在0-100之间;

  (3),运算符至少3个;

  (4),算式中不能出现分数和负数;

  (5),题生成后,学号,练习题及答案输出到result.txt;

2.功能设计:

  (1),产生随机数(调用random()函数);

  (2),产生随机符号(“+”,“-”,“*”,“/”);

  (3),分数的处理;

  (4),负数的处理;

  (5),等式的输出(调用FileOutputStream()函数和PrintStream()函数,将生成的等式输出到result.txt文件中);

3.设计实现:

  (1),调用Math包中的random()函数产生随机数,但随机数在0-1之间,故Math.random()*100+1;加1是为了让产生的随机数中没有零,更好的处理;

  (2),调用FileOutputStream()函数和PrintStream()函数将生成的等式放在result.txt文件中。

       (3),

4.测试运行(截图):

   

     

5.核心代码:

package cn.mzs.longteng.test;

/*
 * 在本次程序设计过程中遇到了很多问题。比如0-100的随机数如何产生;
 * 如何处理负数的问题;
 * 还有处理除数为零及算式结果不能为小数的问题;
 * 还有符号之间的选择;
 * 为了处理算式运算过程中不能产生小数。又因本人能力有限,设计的程序大大降低了出题的随机性。
 */
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Scanner;

public class Main {
    int a, b, c, d, e, f, m;
    static int n;
    int[] s = new int[n];
    String[] st = new String[n];
    String[] ts = new String[n];


    public Main() {

    }

    // 产生随机数和运算:
    public void Num() throws FileNotFoundException {

        FileOutputStream os = new FileOutputStream(new File("src/cn/mzs/longteng/test/result.txt"));
        PrintStream p = new PrintStream(os);
        p.println("201571030322");
        p.println("----------------------------");

        for (int k = 0; k < n; k++) {
            a = (int) (Math.random() * 100 + 1);
            b = (int) (Math.random() * 100 + 1);
            c = (int) (Math.random() * 100 + 1);
            e = (int) (Math.random() * 10 + 1);
            m = (int) (Math.random() * 6);
            d = m * e;
            f = (int) (Math.random() * 3);
            if (f == 0) {
                s[k] = a * b - d / e + c;
                // 处理负数;
                if (a * b - d / e >= 0) {
                    ts[k] = a + "*" + b + "-" + d + "/" + e + "+" + c + "=";
                    st[k] = a + "*" + b + "-" + d + "/" + e + "+" + c + "=" + s[k];
                    System.out.println(ts[k] + "\n");
                } else {
                    s[k] = d / e - a * b + c;
                    ts[k] = d + "/" + e + "-" + a + "*" + b + "+" + c + "=";
                    st[k] = d + "/" + e + "-" + a + "*" + b + "+" + c + "=" + s[k];
                    System.out.println(ts[k] + "\n");
                }
            } else if (f == 1) {
                s[k] = a + b * d / e - c;
                // 处理负数;
                if (b * d / e - c >= 0) {
                    ts[k] = a + "+" + b + "*" + d + "/" + e + "-" + c + "=";
                    st[k] = a + "+" + b + "*" + d + "/" + e + "-" + c + "=" + s[k];
                    System.out.println(ts[k] + "\n");
                } else {
                    s[k] = c - b * d / e + a;
                    ts[k] = c + "-" + b + "*" + d + "/" + e + "+" + a + "=";
                    st[k] = c + "-" + b + "*" + d + "/" + e + "+" + a + "=" + s[k];
                    System.out.println(ts[k] + "\n");
                }
            } else if (f == 2) {
                s[k] = d / e - a * c + b;
                // 处理负数;
                if (d / e - a * c >= 0) {
                    ts[k] = d + "/" + e + "-" + a + "*" + c + "+" + b + "=";
                    st[k] = d + "/" + e + "-" + a + "*" + c + "+" + b + "=" + s[k];
                    System.out.println(ts[k] + "\n");
                } else {
                    s[k] = a * c - d / e + b;
                    ts[k] = a + "*" + c + "-" + d + "/" + e + "+" + b + "=";
                    st[k] = a + "*" + c + "-" + d + "/" + e + "+" + b + "=" + s[k];
                    System.out.println(ts[k] + "\n");
                }
            }

            p.println(st[k] + "\n");
        }
        p.println("-----------------------------");
        p.close();
    }

    public static void main(String[] args) throws FileNotFoundException {
        // TODO Auto-generated method stub
        Scanner input = new Scanner(System.in);
        System.out.println("请输入要输入多少道题");
        n = input.nextInt();
        System.out.println("\n");
        System.out.println("201571030322");
        System.out.println("====================");
        Main a = new Main();
        a.Num();
        System.out.println("====================");
    }

}


6.总结:

  本次实验中,我学到了很多,收获很大,以前我觉得四则运算这种题目应该比较简单,但是经过动手实践,发现了很多问题;而这些问题以前是我没有发现的;以前写代码就是简单的写代码,但是这次不同,边写代码边想问题,边画流程图;让我受益很多。最让我在这次实验中的收获就是:不管是简单的项目还是复杂的项目都应该动手去实践,而不是凭空去想象。有一种“实践是检验真理的唯一标准”的感觉。

7.psp:

PSP2.1 任务内容 计划完成需要的时间(min) 实际完成的时间(min)
planning 计划 20 40
Estimate 估计这个任务需要多少时间 30 45
Development 开发 100 105
Analysis 需求分析 8 10
Design Spec 生成设计文档 8 19
Design Review 设计审查 5 5
Coding Standard 代码规范 14 9
Design 具体设计 20 31
Coding 具体编码 60 89
Code Review 代码复审 38 15
Test 测试(自我测试,修改代码,提交修改) 8 10
Reporting 报告 16 14
Test Report 测试报告 10 13
Size Measurement 计算工作量 4 6

Postmortem & Process

Improvement

事后总结 10 12

 

  源码在Github的仓库主页链接地址:https://github.com/mazhongshan/Demo

posted on 2018-03-24 20:35  马仲山  阅读(205)  评论(2编辑  收藏  举报