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


    Github的仓库主页链接地址:https://github.com/djhdijd/Calculate.git

    个人项目实施过程:

    1. 需求分析:

                使用JAVA编程语言,独立完成一个包含3到5个数字的四则运算练习的命令行软件开发。软件基本功能要求如下:

    • 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。
    • 每个练习题至少要包含2种运算符,且不能出现负数和非整数。
    • 练习题生成好后,将学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt中,不要输出额外信息文件目录与程序目录一致。
    • 当程序接收的参数为4时,以下为输出文件示例。

     

             2.功能设计:

              (1)输入一个参数n,会有n道计算题产生

              (2)计算题数字须为正整数,除法运算中分母不为0

              (3)将个人学号与生成的n道计算题保存至文件"result.txt"中

             3.设计实现:

              这次设计内容是随机产生四则运算的系统,我写了三个类Calculator(),Operator(),Main()。并在Calculator()中设计产生随机运算式,并把运算式转化为逆波兰式,进一步求解;Operator()类中对操作符进行判断,并设置优先级;最后将Calculator(),Operator()中的总合到Main()中。

             4.测试运行:

     

             5.核心代码:

    Calculator()类中运算式转化为逆波兰式

     1  if (ope.isOperator(s)) 
     2             {
     3                 if (operators.isEmpty()) 
     4                 {
     5                     operators.push(s);
     6                 }
     7                 else 
     8                 {
     9                     if (ope.priority(operators.peek())<=ope.priority(s)&&!s.equals(")")) 
    10                     {
    11                         operators.push(s);
    12                     }
    13                     else if(!s.equals(")")&&ope.priority(operators.peek())>ope.priority(s))
    14                     {
    15                         while (operators.size()!=0&&ope.priority(operators.peek())>=ope.priority(s)&&!operators.peek().equals("(")) 
    16                         {
    17                             if (!operators.peek().equals("(")) 
    18                             {
    19                                 String operator=operators.pop();
    20                                 sb.append(operator).append(" ");
    21                                 output.push(operator);
    22                             }
    23                         }
    24                         operators.push(s);
    25                     }
    26                    
    27                     else if (s.equals(")")) 
    28                     {
    29                         while (!operators.peek().equals("(")) 
    30                         {
    31                             String operator=operators.pop();
    32                             sb.append(operator).append(" ");
    33                             output.push(operator);
    34                         }
    35                         operators.pop();
    36                     }
    37                 }
    38             }
    39             else 
    40             {
    41                 sb.append(s).append(" ");
    42                 output.push(s);
    43             }
    44         }

     


    操作符优先级的计算:

    //计算操作符的优先级
        public int priority(String s){
            
            if(s=="+"||s=="-")
            	return 1;
            if(s=="*"||s=="/")
            	return 1;
            if(s=="("||s==")")
            	return 1;
            else
            	return 0;
            }
    //计算
        public int cal(int num1,int num2,String operator){
            
            
            	if(operator=="+")
            		return num1+num2;
            	if(operator=="-")
            		return num1-num2;
            	if(operator=="*")
            		return num1*num2;
            	if(operator=="/")
            		return num1/num2;
            	else
            		return 0;
      }
    
     

     

             6.总结:

            这次程序软件的实现过程中我先做了一点准备,对运算符优先级的判定,了解逆波兰式的基本定理和转化规则,在网上也找了许多相关的设计,但在实际操作过程中仍然不太理想,对核心的逆波兰式转化部分掌握不够,而且对JAVA语言的掌握不够熟练,所以以后还有更多要改进和学习的地方。

             7.展示PSP

    PSP

    任务内容

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

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

    Planning

    计划

    10

    20

    ·       Estimate

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

    15

    20

    Development

    开发

    150

    200

    ··       Analysis

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

    60

    80

    ·       Design Spec

    ·  生成设计文档

    10

    10

    ·       Design Review

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

    10

    15

    ·       Coding Standard

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

    5

    10

    ·       Design

      具体设计

    30

    35

    ·       Coding

      具体编码

    100

    100

    ·       Code Review

    ·  代码复审

    10

    10

    ·       Test

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

    15

    10

    Reporting

    报告

    30

    20

    ··       Test Report

    ·  测试报告

    5

    5

    ·       Size Measurement

      计算工作量

    3

    3

    ·       Postmortem & Process Improvement Plan

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

    3

    3

     

  • 相关阅读:
    动态规划(0-1背包)---划分数组为和相等的两部分
    动态规划(0-1背包)
    动态规划(最长递增子序列)---最长公共子序列
    动态规划(最长递增子序列)---最长摆动子序列
    动态规划(最长递增子序列)---最长递增子序列
    动态规划(最长递增子序列)
    动态规划(分割整数)---分割整数构成字母字符串
    浅谈进程同步和互斥的概念
    如何由Height Map生成Normal Map
    3D中的切线空间简介
  • 原文地址:https://www.cnblogs.com/PEINE/p/8600661.html
Copyright © 2020-2023  润新知