zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    设计模式之装饰模式
    SpringAOP 失效解决方案、Spring事务失效
    Jmeter测试出现端口占用情况
    ElasticSearch创建动态索引
    Zuul + Ribbon 脱离Eureka完成负载均衡+重试机制
    TCP的三次握手与四次挥手笔记
    Java中的阻塞队列
    Jmeter5.1——聚合报告参数分析
    SpringCloud"灰度部署"——动态刷新网关配置
    JVM学习笔记——类加载过程
  • 原文地址:https://www.cnblogs.com/mx123422/p/8645653.html
Copyright © 2011-2022 走看看