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


        Coding.net原码仓库地址:https://git.coding.net/caoying/FourArithmeticOperation.git

一.前言

        其实对于我个人来说,这次作业还是很有难度的。首先,我自己代码能力薄弱;另外,我是主要学前端,对后端Java开发语言其实很不熟悉,虽然之前上过Java课可怎么上的、上的怎么样其实自己也心知肚明。最后一点,就是思路和算法,其实如果换做学ACM和后端的同学来说,这个应该不在话下,但对于我来说,实际上是比较难的。归根到底,还是自己学的太浅。所以我这些天以来,先是把大家的博客仔仔细细的看了一遍,动笔记录别人的想法和点子;然后自己边看Java书,边百度,边尝试写代码。因为我有很多不懂的地方,所以也看了很多查了很多,甚至自己把好久不用的过期的myeclipse删掉重下并自己摸索着破解来写Java代码。总而言之,这次作业是边学边完成的。

二.需求分析

         根据作业要求,使用JAVA编程语言,独立完成一个3到5个运算符的四则运算练习的命令行软件开发。  

          软件基本功能要求如下:

1.程序可接收一个输入参数n,然后随机产生n道加减乘除(分别使用符号+-*÷来表示)练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。

2.每个练习题至少要包含2种运算符。同时根据小学生的特点,练习题在运算过程中不得出现负数与非整数。

3.练习题生成好后,将学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,文件目录与程序目录一致。

三.功能设计

        基本功能:输入运算式数的个数,输入每个运算术式的运算符的数量;输出四则运算式,输出结果。

四.设计实现  

        基本思路:1.运算式里的数用Math.random()函数生成随机数;

                          2.运算符“+,-,*,÷”用数组存,用Math.random()函数生成随机数来访问数组下标从而生成;

                          3.运算式式子、个数、结果用自己定义的makeQuestions()函数生成。

五.算法详解

1.运算数的生成

       我的思路是利用数组、for循环和Math.random()函数来生成运算数。

 

int QuestionOfNum[] = new int[6];//运算式里的数的最多个数
for(int i=0; i<OperationalFormula; i++){//i从1循环到运算式个数为止
            QuestionOfNum[0] = (int)(Math.random()*100);    
}    

 

 

 

2.运算符的生成

       我的思路是利用数组来存放运算符的个数和四个运算符,再Math.random()函数生成随机运算符。

 

char QuestionOfOp[] = new char[5];//运算式里运算符的最多个数
char[] op = new char[] {'+', '-', '*', '÷'};//数组存放运算符

 

      生成的运算符代码例子:

 

 QuestionOfOp[j] = op[ (int)(Math.random()*1)];

 

3.运算式的生成

 

String question = "" + QuestionOfNum[0];
            for(int j=0; j<ops; j++){
                question = question +  QuestionOfOp[j] + QuestionOfNum[j+1];   
} question
= question + "=" + result(question); System.out.println(question); questionList[i] = question; //生成运算式

 

 

 

4.计算运算结果

      Main.java中:

 

Lib.makeQuestions(questionList, OperationalFormula, operator);
        //调用Lib中的makeQuestions函数

 

      Lib.java中:

 

 

for(int i=0; i<OperationalFormula; i++){
            QuestionOfNum[0] = (int)(Math.random()*100);//生成运算式的数是随机的
            for(int j=0; j<ops; j++){
                 if( QuestionOfOp[j-1]=='+')
                     QuestionOfOp[j] = op[ (int)(Math.random()*1)];
                 else QuestionOfOp[j] = op[ (int)(Math.random()*3)];            
                 QuestionOfNum[j+1] = (int)(Math.random()*50);
                 //运算符为加时生成的随机运算符和运算式的数的个数
                 if( QuestionOfOp[j] == '-') {
                        String dis  = "" + QuestionOfNum[0];
                        int Num = result(dis);
                        QuestionOfNum[j+1] = (int)(Math.random()*Num);
                        for(int k=0; k<j; k++)
                            dis =dis +  QuestionOfOp[k] + QuestionOfNum[k+1];    
                    }
                 //运算符为减时生成的随机运算符和运算式的数的个数
                 else if( QuestionOfOp[j] == '*') {
                        QuestionOfNum[j] = (int)(Math.random()*20);
                        QuestionOfNum[j+1] = (int)(Math.random()*100/QuestionOfNum[j]);
                    }
               //运算符为乘时生成的随机运算符和运算式的数的个数
                 else if( QuestionOfOp[j] == '÷') {
                        QuestionOfNum[j+1] =  (int)(Math.random()*10);
                        QuestionOfNum[j] = QuestionOfNum[j+1]* (int)(Math.random()*10);
                    }
               //运算符为除时生成的随机运算符和运算式的数的个数
            }//加减乘除

 

 

 

5.输出运算结果          

      Main.java中:

try {
    Lib.Filefile(questionList, OperationalFormula, path);
   //调用Lib中的文件将结果输出到path里面
    s.close();
}
catch(IOException ioe) {
    System.out.println("文件生成错误");
}//将makeQuestions中的OperationalFormula个运算式和结果输出到path文件里
                

       Lib.java中:

static public void Filefile(String[] questionList, int OperationalFormula, String path) throws IOException{
        FileOutputStream f = new FileOutputStream(new File(path)); 
PrintStream output = new PrintStream(f);

for(int i=0; i<OperationalFormula; i++){ output.println(questionList[i]);
}
output.println("2016012102");
output.close(); }
//将makeQuestions中的OperationalFormula个运算式和结果输出到path文件里

六.测试运行

       myeclipse运行的结果以及将学号、生成的n道练习题、正确答案输出到文件“result.txt”的结果:

 

七.项目总结

1.我码代码的过程其实还比较困难和漫长,我是先看了其他同学的博客,了解同学们的解题思路和方法,然后尝试自己一点点去写。写的时候我百度了很多具体的函数实现方法,首先是将问题按照功能设计拆分成一小部分一小部分(就是“设计实现”),然后对这些一小部分一小部分进行编码去实现,一点点来一个功能一个要求的来实现。

2.项目主要是完成了基本功能,至于附加的扩展功能还需要继续努力实现。

3.通过做这个项目,我又重新拾起了Java,迫使我去多看、去思考、去码代码,促进了自身的学习。  

八.PSP展示

       其实在这个项目实现中,码代码和写博客(报告)的时间是与预估时间差别最大的。前者主要原因是我自身码代码能力弱,思路不清晰;后者主要原因是需要整理的东西太多,梳理起来有些久和乱。其他虽然大多久于预估时间,但是大概和预估时间差不了多少。总之,辛苦很多,收获很多。

 

posted @ 2018-03-25 11:50  caoying  阅读(157)  评论(2编辑  收藏  举报