• 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展示

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

  • 相关阅读:
    Fedora/CentOS使用技巧
    Haproxy配置
    iscsi使用教程
    Linux网络配置
    Linux命令使用
    luogu-1908 逆序对 离散化+树状数组
    算法题目签到表
    [笔记-机器学习]贝叶斯分类器的原理及实现
    [笔记-数据结构]树状数组
    [笔记-数据结构]哈希表
  • 原文地址:https://www.cnblogs.com/caoying993/p/8636149.html
Copyright © 2020-2023  润新知