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


    1、实验目的与要求

    (1)掌握软件项目个人开发流程。

    (2)掌握Github上发布软件项目的操作方法。

    2、实验内容和步骤
     
    任务1:
    尝试按照《构建之法》第2章中2.3所述PSP流程,使用JAVA编程语言,独立完成一个包含3到5个数字的四则运算练习的命令行软件开发题目参考:http://www.cnblogs.com/xinz/p/7417960.html
    软件基本功能要求如下:
    • 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。
    • 为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。
    • 练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt中,不要输出额外信息,文件目录与程序目录一致。
    • 当程序接收的参数为4时,以下为输出文件示例。

    3.软件附加功能要求如下:(请有余力的同学完成)
    • 支持有括号的运算式,包括出题与求解正确答案。注意,算式中存在的括号必须大于2个,且不得超过运算符的个数。(5分)
    • 扩展程序功能支持真分数的出题与运算,例如:1/6 + 1/8 + 2/323/24。注意在实现本功能时,需支持运算时分数的自动化简,比如 1/2+1/6=2/3,而非4/6。(5分)

    4.需求分析:

            (1)程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间;(2)每个练习题至少要包含2种运算符(3)同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。

    5.功能设计:

        基本功能:小学四则运算加减乘除。

        扩展功能:实现了带括号的加减乘除,真分数的加减乘除正在完善中。

    6.设计实现:

        我设计了两个类,一个是Main()类,主要是进行运行程序,另一个类是calchyt()类主要是四则运算的解决过程。还实现了一个附加功能带括号的运算式。由于我是一个模块一个模块来的,我在另一个类中已经写好了真分数的出题与运算,但是我可能能力还不够,没办法把它们整合到一起。

    7.测试运行:下面是我的测试结果截图:

             

    8.核心代码:我觉得最主要核心就是用逆波兰思想进行压栈和出栈的过程。这个我一开始的时候想过几种方法,但就是有点繁琐,就上网借鉴大神的思想,下面给出参考链接   http://tianyami.iteye.com/blog/1462498;http://leon-a.iteye.com/blog/186104;https://bbs.csdn.net/topics/390049006

    if (youxianji(symbols.peek())<=youxianji(s)&&!s.equals(")")) 
                    {
                          symbols.push(s);
                    }
                    else if(!s.equals(")")&&youxianji(symbols.peek())>youxianji(s))
                    {
                           while (symbols.size()!=0&&youxianji(symbols.peek())>=youxianji(s)&&!symbols.peek().equals("(")) 
                           {
                               if (!symbols.peek().equals("(")) 
                                            {
                                                           String operator=symbols.pop();
                                                           houzhui.append(operator).append(" ");
                                                shuchus.push(operator);
                                            }
                                        }
                                        symbols.push(s);
                                    }
                                    
                          else if (s.equals(")")) 
                          {
                                while (!symbols.peek().equals("(")) 
                                  {
                                       String operator=symbols.pop();
                                        houzhui.append(operator).append(" ");
                                        shuchus.push(operator);
                                              }
                                       
                         symbols.pop();
                                      }
                                     }

    9.总结:模块化的设计是先给出具体实现的方法如,随机产生计算式的方法,转化成为逆波兰式的方法,还有怎么计算逆波兰式的方法,然后调用这些方法就可一了。

    10.展示PSP,这个环节重要的是让自己看到自己的估计和实际消耗时间如下表:

    PSP2.1

    任务内容

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

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

    Planning

    计划

    10

    20

    ·       Estimate

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

    8

    6

    Development

    开发

    200

    300

    ··       Analysis

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

    30

    60

    ·       Design Spec

    ·  生成设计文档

    5

    30

    ·       Design Review

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

    4

    20

    ·       Coding Standard

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

    3

    20

    ·       Design

      具体设计

    10

    20

    ·       Coding

      具体编码

    36

    120

    ·       Code Review

    ·  代码复审

    7

    5

    ·       Test

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

    13

    21

    Reporting

    报告

    30

    40

    ··       Test Report

    ·  测试报告

    3

    2

    ·       Size Measurement

      计算工作量

    2

    5

    ·       Postmortem & Process Improvement Plan

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

    3

    3

    11.个人感想:做软件的确是需要静下心来做的一件事,需要完善好前面包括需求分析,具体设计等每一步,如果需求分析和具体设计那一部分想的不够完善,那么当你具体写代码的时候会手忙脚乱,面对满篇的BUG;还有就是要注重代码的规范,这会让人在复查代码时节省很多时间;最重要的是要平时多联系写代码,这样敲代码的手速会快很多。

    GitHub地址:https://github.com/hyt6233/calculate

  • 相关阅读:
    模板、中间件以及MVC与MTV
    Cookie与Session
    分页与网页攻击
    Django一对一查询,列类型及参数
    Django ORM 查询
    Django中ORM多对多表的操作
    Django中的ORM
    一、Vue简介
    三、路由层(urls.py)
    二、django简介
  • 原文地址:https://www.cnblogs.com/haoytlearnblog/p/8613020.html
Copyright © 2020-2023  润新知