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

原文地址:https://www.cnblogs.com/yanglqa/p/8641703.html