zoukankan      html  css  js  c++  java
  • 2016012086+小学四则运算练习软件项目报告

    
    
    
    
    .仓库地址:https://git.coding.net/yanglq/week2work2.git
    1.需求分析:
    • 程序可接收一个输入参数n,然后随机产生n道加减乘除,每个数字在 0 和 100 之间,运算符在3个到5个之间。结果和运算式一同输出到result.txt文件中。
    • 面向对象为小学生。运算式及结果不能出现分数和负数。
    • 程序需要判断输入的参数n是否合法,在不合法时要进行一定的处理。
    • 在原有的基础上,生成的运算式随机性的带有括号,算式中存在的括号必须大于2个,且不得超过运算符的个数。
    2.功能设计:
    输入练习题的个数,并判断是否为整数,是否合理
    产生随机数和随机符
    利用栈设计运算符的优先级并计算练习题的结果
    将结果输出到指定文件中,并输入学号
    3.设计实现:
    创建两个类Main和Count
    用了Main方法产生随机数及随机运算符
    用TranSuffix方法实现用盏中缀转后缀的运算
    用opration方法计算后缀表达式
    BufferedWriter将结果输出到文件
    4.代码详情:

     产生随机数和随机运算符。先产生四个随机数,然后把四个随机产生的运算符插入。

    Random ran = new Random();
    		int len = 0;
    		String arry[] = new String[100];
    		for(int i = 0;i<4;i++){
    			len++;
    			arry[i] = String.valueOf(ran.nextInt(100));
    		}
    		char[] ch = {'+','-','*','/'};
    		for(int i= 0;i<3;i++){
    			int index = ran.nextInt(ch.length);
    			int head = (i+1)*2;
    			int tail = len+1;
    			for(int j = tail;j >= head;j--){
    				arry[j] = arry[j-1];
    			}
    		}
    

      

    中缀表达式换为后缀表达式

    //中缀转后缀
    public static String toSuffix(String infix){ List<String> queue = new ArrayList<String>(); List<Character> stack = new ArrayList<Character>(); char[] charArr = infix.trim().toCharArray(); String standard = "*/+-()"; char ch = '?';//对ch初始化 int len = 0; for (int i = 0; i < charArr.length; i++) { ch = charArr[i]; if(Character.isDigit(ch)) { len++; }else if(Character.isLetter(ch)) { len++; }else if(ch == '.'){ len++; }else if(Character.isSpaceChar(ch)) { if(len > 0) { queue.add(valueOf(Arrays.copyOfRange(charArr, i - len, i))); len = 0; } continue; }else if(standard.indexOf(ch) != -1) { if(len > 0) { queue.add(valueOf(Arrays.copyOfRange(charArr, i - len, i))); len = 0; } if(ch == '(') { stack.add(ch); continue; } if (!stack.isEmpty()) { int size = stack.size() - 1; boolean flag = false; while (size >= 0 && ch == ')' && stack.get(size) != '(') { queue.add(valueOf(stack.remove(size))); size--; flag = true; } while (size >= 0 && !flag && basic.get(stack.get(size)) >= basic.get(ch)) { queue.add(valueOf(stack.remove(size))); size--; } } if(ch != ')') { stack.add(ch); } else { stack.remove(stack.size() - 1); } } if(i == charArr.length - 1) { if(len > 0) { queue.add(valueOf(Arrays.copyOfRange(charArr, i - len+1, i+1))); } int size = stack.size() - 1; while (size >= 0) { queue.add(valueOf(stack.remove(size))); size--; } } } return queue.stream().collect(Collectors.joining(",")); }

       对后缀表达式进行运算

    public static String dealEquation(String equation){
            String [] arr = equation.split(",");
            List<String> list = new ArrayList<String>();
    
            for (int i = 0; i < arr.length; i++) {
                int size = list.size();
                switch (arr[i]) {
                    case "+": double a = Double.parseDouble(list.remove(size-2))+ Double.parseDouble(list.remove(size-2)); list.add(valueOf(a));     break;
                    case "-": double b = Double.parseDouble(list.remove(size-2))- Double.parseDouble(list.remove(size-2)); list.add(valueOf(b));     break;
                    case "*": double c = Double.parseDouble(list.remove(size-2))* Double.parseDouble(list.remove(size-2)); list.add(valueOf(c));     break;
                    case "/": double d = Double.parseDouble(list.remove(size-2))/ Double.parseDouble(list.remove(size-2)); list.add(valueOf(d));       break;
                    default: list.add(arr[i]);     break;
                }
            }
    
    接收一个输入参数n,然后随机产生n道加减乘除,结果和运算式一同输出到result.txt文件中
     BufferedWriter bw = new BufferedWriter(new FileWriter("C:\Users\xiaoqing\Desktop\untitled\result.txt"));
    bw.write("2016012086");
    while (s-- > 0) {
    bw.newLine();
    bw.write(p);
    }
    bw.close();
    5.测试运行:

    6.不足与改进:
       (1)代码增加括号的部分由于时间关系只完成了一部分,未能完全实现;
    (2)代码扩展性有待提高,由四个扩展的较少的话容易完成,但扩展太多较为麻烦
    7.项目总结:
       本以为三四天可以完成的代码,却用了一个星期多。在开始代码的编写时,毫无头绪,后来采用了书中和老师所推荐的“逐步求精”的设法方法,将一个项目分解成几个不同的小问题,通过编写不同的方法来逐步解决
    每个问题。一开始把任务分成几个模块,但在编码的过程中也有许多自己解决不了的问题,问题的解决方案是先上网查资料,然后编写代码,通过请教同学发现有更好
    用的方法,然后得到进步。做一个项目可以学习到很多,在实践中学习,在请教中进步。


    8.PSP展示:

      

    PSP2.1

    任务内容

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

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

    Planning

    计划

    10

    5

    ·        Estimate

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

    10

    6

    Development

    开发

    500

    650

    ·        Analysis

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

    50

    70

    ·        Design Spec

    ·         生成设计文档

    10

    10

    ·        Design Review

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

    5

    5

    ·        Coding Standard

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

    10

    5

    ·        Design

    ·         具体设计

    10

    20

    ·        Coding

    ·         具体编码

    400

    450

    ·        Code Review

    ·         代码复审

    10

    20

    ·        Test

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

    20

    25

    Reporting

    报告

    10

    30

    ·         Test Report

    ·         测试报告

    5

    8

    ·         Size Measurement

    ·         计算工作量

    1

    1

    ·         Postmortem & Process Improvement Plan

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

    10

    20

  • 相关阅读:
    Effective STL~2 vector和string(条款13~18)
    Effective STL~5 算法
    Effective STL~6 函数子、函数子类、函数及其他
    Effective STL~7 在程序中使用STL
    Effective STL~4 迭代器(条款26~29)
    STL std::remove和std::remove_if
    C/C++ 计算算法的执行时间
    Effective STL~3 关联容器(条款19~25)
    Effective C++读书笔记~7 模板与泛型编程
    C++ Primer学习笔记 原始内存分配类allocator
  • 原文地址:https://www.cnblogs.com/yanglqa/p/8641703.html
Copyright © 2011-2022 走看看