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

一、coding.net源码仓库地址:https://git.coding.net/mx123422/CaCulateMaster.git

二、流程记录

1.需求分析

1)程序可接收一个输入参数n,然后随机产生n道加减乘除(分别使用符号+-*÷来表示)练习题,每个数字在 0 100 之间,运算符在3个到5个之间。

2)为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3÷5+2=2.62-5+10=7等算式。

3)练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。

4)当程序接收的参数为4时,以下为一个输出文件示例。 

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

软件附加功能要求如下:(请有余力的同学完成)

支持有括号的运算式,包括出题与求解正确答案。注意,算式中存在的括号必须大于2个,且不得超过运算符的个数。(5分)

扩展程序功能支持真分数的出题与运算(只需要涵盖加减法即可),例如:1/6 + 1/8 + 2/3= 23/24。注意在实现本功能时,需支持运算时分数的自动化简,比如 1/2+1/6=2/3,而非4/6,且计算过程中与结果都须为真分数。(5分)

 2.功能设计

 生成的算术表达式以字符串的形式,使用BigDecimal以及io流分别完成字符串转化为算术表达式并计算结果和写入文件。

基本功能实现

附加功能未能全部实现

3.设计实现

Main类:主程序,可以从命令行接收参数; 生成算式表达式字符串。

Calculate类:解析字符串,优先级判别,文件写入。

4.算法详解

1)生成题目.jisuanshi(n)

利用随机函数以及字符串型的数组生成和存储计算表达式(内容较为繁琐,暂时没想到更好的方法).调用.jisuanshi(n)

(2)字符串转换、计算及写文件

运算符优先级比较compare(char str);

计算BigDecimal。通过构造字符串型的算术表达式(jisuanshi生成),使用BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象,接受来自主函数的字符串信息然后进行字符串解析,内含caculate(String st)括号处理parse(String st)

文件写入:通过io流(输出流)将内容写入写入文件。

 1 public static void write(String fileName, String content) {
 2 
 3             FileWriter writer = null;
 4 
 5             try {
 6 
 7                 writer = new FileWriter(fileName, true); /*打开一个写文件器,构造函数中的
第二个参数true表示以追加形式写文件,false表示覆盖的方式写入*/
8 writer.write(content+" "); 9 } catch (IOException e) { 10 e.printStackTrace(); 11 } finally { 12 13 try { 14 if(writer != null){ 15 writer.close(); 16 } 17 } catch (IOException e) { 18 e.printStackTrace(); 19 20 } 21 } 22 }

5.测试运行

(1)文件创建

(2)

6.满意代码

(1)优先级

 1 //①优先级判别
 2 
 3 private boolean compare(char str) {
 4 
 5         if (chs.empty()) {
 6             // 当为空时,显然 当前优先级最低,返回高
 7             return true;
 8         }
 9 
10         char last = (char) chs.lastElement();
11         switch (str) {
12         case '*': {
13 
14             // '*/'优先级只比'+-'高
15             if (last == '+' || last == '-')
16                 return true;
17             else
18                 return false;
19         }
20 
21         case '/': {
22             if (last == '+' || last == '-')
23                 return true;
24             else
25                 return false;
26         }
27 
28             // '+-'为最低,一直返回false
29         case '+':
30             return false;
31         case '-':
32             return false;
33         }
34         return true;
35 
36     }

(2)括号处理

 1 //②括号处理
 2 
 3 public BigDecimal parse(String st) {
 4 
 5             int start = 0;
 6             StringBuffer    sts = new StringBuffer(st);
 7             int end = -1;
 8 
 9             while ((end = sts.indexOf(")")) > 0) {
10 
11                 String s = sts.substring(start, end + 1);
12                 int first = s.lastIndexOf("(");
13                 BigDecimal value = caculate(sts.substring(first + 1, end));
14                 sts.replace(first, end + 1, value.toString());
15 
16             }
17 
18             return caculate(sts.toString());
19         }

7.总结

1)反思:个人能力明显不足,对于Java知识的缺少是一大缺点,除数据结构的堆栈了解能力稍好,字符串型的算术表达式生成完全是靠了C语言的数组使用;Java中的io流读写文件完全是现学现用,为了节约时间也仅仅是了解了写文件的有关知识。

2)感想:在Calculate这个类中,自认为生成字符串型的表达式很简单,所以放在最后写的jisuanshi生成这个方法。然而后来开始写jisuanshi的时候才感觉到前面有很多问题已经不好解决了,由于时间原因也没想到更便捷的方法。比如附加功能真分数的这个情况就不知道该如何处理。所以如果要对这个项目进行再次改进,重写jisuanshi的代码应该是首要的,随后而来的各种问题也将十分困难。所以项目中的每一个部分都应该认真对待,合理安排时间,全面考虑后续可能的扩展内容,才能尽可能地将它完美的实现。

 8.PSP

PSP2.1

任务内容

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

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

Planning

计划

20

30

·  Estimate

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

20

30

Development

开发

18×60

25×60

·  Analysis

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

60

120

·  Design Spec

· 生成设计文档

20

25

·  Design Review

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

20

25

·  Coding Standard

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

20

30

·  Design

· 具体设计

60

100

·  Coding

· 具体编码

5×2×60

6×2×60

·  Code Review

· 代码复审

2×1×60

2×2×60

·  Test

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

3×1×60

2×2×60

Reporting

报告

60

60

·  Test Report

· 测试报告

20

20

·  Size Measurement

· 计算工作量

10

10

·  Postmortem & Process Improvement Plan

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

30

30

原文地址:https://www.cnblogs.com/mx123422/p/8645653.html