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

 

 

posted on 2018-03-21 10:43  三千戈  阅读(224)  评论(1编辑  收藏  举报

导航