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

时间:2023-02-14 13:11:41

 

代码链接:https://git.coding.net/yueshendaren/personal_project.git

目录:

1:需求分析

2:功能设计

3:设计实现

4:算法详解

5:测试运行

6:部分代码

7:作业总结

 


 

1:需求分析:题目要求我们设计一个四则运算的程序,在输入随机数n后产生n道题涉及3到5个运算符,且不能有负数和小数。练习题生成好后,输出学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。

输出实例如下:

2018010203 
13+17-1=29
11*15-5=160
3+10+4-16=1
15÷5+3-2=4

 

 

 

 

 

 

 

2:功能设计:设计一个四则运算程序,能将运算式和答案一起输出。运算符在3—5个之间。并附带自己的学号

3:设计实现:通过随机数函数生成运算符和运算的数字,使用调度场算法来解决运算问题

4:算法详解:使用Random函数生成随机数和随机运算符

                        调度场算法:  由于后缀表达式求值比较容易,一个下推栈即可,所以在编译过程中,中缀表达式会转成后缀表达式。而调场度算法就是将中缀表达式转换成后缀表达式的算法。

5:测试运行:

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

 

6:部分代码:(1)生成中缀表达式

 
 
public static String zhongxu(){
            int[] shuzi = new int[7];
            char[] zifu = new char[7];
            String wenti = "";
            
            shuzi[0] = (int)(Math.random()*10);
            wenti = wenti + shuzi[0];
            for(int i=0; i<5; i++)
            {
                zifu[i] = caozuo[(int)(Math.random()*3)];
                if(zifu[i]=='+') shuzi[i+1] = (int)(Math.random()*10);
                if(zifu[i]=='-') shuzi[i+1] = (int)(Math.random()*shuzi[i]);
                if(zifu[i]=='*') shuzi[i+1] = (int)(Math.random()*10);
                if(zifu[i]=='÷') shuzi[i+1] = yueshu(shuzi[i+1]);
                wenti = wenti+zifu[i]+shuzi[i];
            }
            return wenti;
        }
        
 
 

 

 

(2)生成并计算后缀表达式

 
 
public static int youxianji(char x){
            if(x=='+' || x=='-') return 1;
            else return 2;
        }
        
        public static int yunsuan(int x, int y, char z)
        {
            if(z=='+') return x+y;
            if(z=='-') return x-y;
            if(z=='*') return x*y;
            if(z=='÷') return x/y;
            return -1;
        }
        
        public static  int houxujisuan(String wenti){
            char[] zifu = new char[20];
            char[] caozuo = new char[20]; 
            int[] shuzi = new int[20];
            int temp = 0, pn = -1, pc = -1; 
            
            zifu = wenti.toCharArray();
            
            for(int i=0; i<zifu.length; i++){
                
                if(Character.isDigit(zifu[i])) {
                    temp = temp*10 + zifu[i]-'0';
                    if(i == zifu.length-1){
                        shuzi[++pn] = temp;
                    }
                }
                else {
                    shuzi[++pn] = temp; 
                    temp = 0;
                    
                    while(pc!=-1 && youxianji(caozuo[pc]) >= youxianji(caozuo[i]) ) {
                        int num1 = shuzi[pn--];
                        int num2 = shuzi[pn--];
                        char ch1 = caozuo[pc--];
                        shuzi[++pn] = yunsuan(num2, num1, ch1);
                    }
                    
                    if(pc == -1) caozuo[++pc] = zifu[i];
                }
            }
            
            while(pc != -1) {
                int num1 = shuzi[pn--];
                int num2 = shuzi[pn--];
                char ch1 = caozuo[pc--];
                shuzi[++pn] = yunsuan(num2, num1, ch1);
            }
            
            return shuzi[0];
        }
        
 
 

 

 

7:作业总结:说实话,从刚看到作业开始就知道自己的编程能力实在是差。甚至都不知道怎么去写这个作业,最终在同学和百度的帮助下,勉强完成了这次作业。不得不说自己用的调场度算法大量借鉴了别人的博客,因为自己的能力真的有限。可能这次作业不尽人意,但它却让我意识到自己到底有多差。这学期重新学java,并不是说说而已,毕竟自己的时间真的不多了。不想也不能再这样下去了。不管这次作业的结果如何,我都会接受,我只能说,下一次的自己一定能有进步。

PSP2.1

任务内容

计划共完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 8 10
      Estimate   估计这个任务需要多少时间,并规划大致工作步骤 10   15
Development 开发 10 10
·        Analysis     需求分析 (包括学习新技术) 60 100
    Design Spec    生成设计文档 10 10
 Design Review 设计复审 (和同事审核设计文档) 6 4
Coding Standard    代码规范 (为目前的开发制定合适的规范) 10 10
   Design 具体设计 6 6
     Coding        具体编码 400 600
  Code Review  代码复审 7 9
     Test   测试(自我测试,修改代码,提交修改) 11 12
Reporting 报告 10 10
    Test Report 测试报告 10 11
   Size Measurement    计算工作量 5 6
 Postmortem & Process Improvement Plan   事后总结, 并提出过程改进计划 10 20