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

github地址:https://github.com/Opalus-wangs/ws-lib/tree/master

一、需求分析

  • 由用户输入参数n。
  • 系统随机生成随机产生n道加减乘除练习题。
  • 每个数字在 0 和 100 之间,运算数在3个到5个之间。
  • 每个练习题至少要包含2种运算符。且所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。
  • 练习题生成好后,学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。
  • 当程序接收的参数为4时,以下为输出文件示例。

二、功能设计

  • 实现生成n个可以加减乘除四则运算的式子并能输出正确结果
  • 式子中的每一个值都在0~100之间
  • 每个式子都含有有3-5个运算数
  • 式子的结果不为负,且除法不会出现非整数
  • 支持有括号的运算式,包括出题与求解正确答案
  • 括号的数量不超过运算符的个数
  • 练习题生成好后,将学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中

三、功能实现

  • 程序模块及功能

   

  • 程序流程图

四、运行测试

  • Eclipse窗口运行结果:

  • cmd窗口运行结果:

五、核心代码

  • 生成运算式(以四个操作数为例)
 1      case 4:
 2                         int a1 = (int)(Math.random()*100)+1;
 3                         int b1 = (int)(Math.random()*100)+1;
 4                         int c1 = (int)(Math.random()*100)+1;
 5                         int d1 = (int)(Math.random()*100)+1;
 6                         int x1 = (int)(Math.random()*symbol.length);
 7                         int y1 = (int)(Math.random()*symbol.length);
 8                         int z1 = (int)(Math.random()*symbol.length);
 9                         int bracket1 = (int)(Math.random()*4);//括号,注意四个式子中括号为2个,此时有3种情况
10                         if(bracket1==0)//0表示没有括号
11                         {
12                             len=String.valueOf(a1)+String.valueOf(symbol[x1])+String.valueOf(b1)+String.valueOf(symbol[y1]                                        +String.valueOf(c1)+String.valueOf(symbol[z1])+String.valueOf(d1)+"= ");
13                         }
14                         else if(bracket1==1)
15                         {
16                             len="("+String.valueOf(a1)+String.valueOf(symbol[x1])+String.valueOf(b1)+")"+String.valueOf(symbol[y1]                                        +"("+String.valueOf(c1)+String.valueOf(symbol[z1])+String.valueOf(d1)+")"+"= ");
17                         }
18                         else if(bracket1==2)
19                         {
20                             len="("+"("+String.valueOf(a1)+String.valueOf(symbol[x1])+String.valueOf(b1)+")"+String.valueOf(symbol[y1]                                        +String.valueOf(c1)+")"+String.valueOf(symbol[z1])+String.valueOf(d1)+"= ");
21                         }
22                         else
23                         {
24                             len=String.valueOf(a1)+String.valueOf(symbol[x1])+"("+String.valueOf(b1)+String.valueOf(symbol[y1]                                     +"("+String.valueOf(c1)+String.valueOf(symbol[z1])+String.valueOf(d1)+")"+")"+"= ");
25                         }
26                         operation cal1 = new operation();
27                         long result1=cal1.caculate(len);
28                         if(result1!=999999)
29                         {
30                             System.out.println(len+result1);
31                             pw.println(len+result1);
32                         }
33
34                         else
35                             i--;
36                         break;

  • 运算过程
 1  while (!comparePri(ch) && !symbolStack.empty()) {
 2                     long b = numberStack.pop();
 3                     long a = numberStack.pop();
 4                     long midtemp=0;
 5                     switch ((char) symbolStack.pop()) {
 6                         case '+':
 7                             numberStack.push(a + b);
 8                             break;
 9                         case '-':
10                             midtemp = a - b;
11                             if(midtemp<0) {   //判断减法结果是否为负数
12                                 midtemp=0;
13                                 exp = false;
14                             }
15                             numberStack.push(midtemp);
16                             break;
17                         case '*':
18                             numberStack.push(a * b);
19                             break;
20                         case '/':     //判断除法是否合法,且能整除
21                             if(b==0) {
22                                 b=1;
23                                 exp = false;
24                             }
25                             midtemp = a / b;
26                             if(midtemp*b!=a)
27                                 exp = false;
28                             numberStack.push(midtemp);
29                             break;
30                         default:
31                             break;
32                     }
33                 }
34                 if (ch != '=') {
35                     symbolStack.push(new Character(ch)); // 符号入栈
36                     if (ch == ')') { // 去右括号
37                         symbolStack.pop();
38                         symbolStack.pop();
39                     }
40                 }
41             }
42         }
43         // 返回计算结果
44         if(exp)
45             return numberStack.pop();
46         else
47             return 999999;   

六、总结

 第一次看到这个题目的时候给我的感觉是之前做过类似的程序,所以应该不是很困难,但是当我认真分析了题目之后,我发现这个题目和我之前做过的内容都不太一样,要实现所有的功能还是有一定难度的,而且在做的过程中我由于提前没有先好好的分析题目,匆忙动手,有很多细节的问题都没有考虑清楚,在做的过程中就需要大量的返工,而且我第一次尝试写的时候是先做的三位数的运算,当我代码长度写到200多行的时候将三位数运算解决之后,我发现了一个致命的问题,就是这个运算附的优先级和扩展性问题,如果还是按照之前的写法的话,每多一个运算数,代码的长度是指数倍的增长且不具备扩展性,于是我又重新分析了题目,推翻了之前的写法,采取了逆波兰后缀表达式的方法来解决运算式优先级问题,我就发现在一个项目中前期的设计分析是非常重要的,只有做好基础的工作才能在后面的实现中进展顺利,但是我最后的项目在生成运算式的程序中还是有许多的冗余代码,代码不够精炼,也没有实现真分数的运算,在后面我也会对此次项目代码进行完善和补充,希望越来越进步。

七、生成PSP

PSP2.1 任务内容 计划完成的时间(min) 实际完成需要的时间(min)
PLanning 计划 20 25
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 20 25
Developmet 开发 240 510
Analysis 需求分析(包括学习新技术) 20 20
Design Spec 生成设计文档 10 5
Design Revie 设计复审(和同事审核设计文档) 10 5
Coding Standard 代码规范 5 10
Design 具体设计 30 40
Coding 具体编码 140 400
Code Review 代码复审 10 5
Test 测试(自我测试,修改代码,提交修改) 15 25
Reporting 报告 30 55
Test Report 测试报告 20 35
Size Measurement 计算工作量 5 5
Postmortem & Process Improvement Plan 事后总结,并提出过程改机计划 5 15

转载于:https://www.cnblogs.com/Opalus-wangs/p/8609906.html

201571030130 小学生四则运算练习软件项目报告相关推荐

  1. 201571030107 小学四则运算练习软件项目报告

    本文转载自:http://www.javaxxz.com/thread-359437-1-1.html 201571030107 小学四则运算练习软件项目报告 项目Github地址 Arithmeti ...

  2. 201571030334 小学四则运算练习软件项目报告

    小学四则运算练习软件项目报告 Github的仓库主页链接地址:https://github.com/huicunzhang/sizeyunsuan 一.需求分析: 1. 程序可接收一个输入参数n,然后 ...

  3. 2016012101小学四则运算练习软件项目报告

    2016012101小学四则运算练习软件项目报告 Coding.net源码仓库地址:https://git.coding.net/naiteu/sgwq.git 一.需求分析 1,程序可以接收一个参数 ...

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

    小学四则运算练习软件项目报告 作业源代码地址:https://git.coding.net/weijn/SiZe.git 一.需求分析 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题. 每个 ...

  5. 2016012090+小学四则运算练习软件项目报告

    2016012090+小学四则运算练习软件项目报告 Coding.net原码仓库地址:https://git.coding.net/Ai_Code/Work.git 目录: 一.需求分析 二.功能设计 ...

  6. 2016012028+小学四则运算练习软件项目报告

    任务1源码可直接克隆的仓库地址: (HTTPS)https://git.coding.net/zhaoliguaner/Calculate.git (SSH)git@git.coding.net:zh ...

  7. 2016012007+小学四则运算练习软件项目报告

    此次作业的源码地址:https://git.coding.net/ClausKE/Calculator1.git 写在前面:这次的作业完成得不易,在跟一些同学的交流中对这次作业有了更多的理解,在咨询了 ...

  8. 201571030337/201571030327——《小学生四则运算》结对项目报告

    GitHub地址:https://github.com/zhouheqh 1.需求分析 (1)由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5 ...

  9. 2016012033 小学四则运算练习软件项目报告

    week2的作业弄到现在week3才开始着手做,所幸截止日期还有几天. Coding.net源码仓库地址:https://git.coding.net/Agustin_Leonard_DPS/Calc ...

最新文章

  1. node.js写一个json服务
  2. java中单例实现常用的方式_Java单例的常见形式
  3. Enterprise Library 2.0 Hands On Lab 翻译(1):数据访问程序块(一)
  4. 第三代英特尔至强可扩展处理器,英特尔数据中心的“芯法宝”
  5. (软件工程复习核心重点)第七章软件维护-第一节:软件维护的概念和特点
  6. 软考网络管理员学习笔记5之第五章广域网与接入网技术
  7. Intel 64/x86_64/IA-32/x86处理器 - 指令格式(9) - 64位指令格式(通用格式)
  8. Intelli IDEA+jdk++maven+tomcat环境配置
  9. dbentry mysql_DbEntry.Net(Lephone Framework) Access ORM:安装和简单使用
  10. Nhibernate学习的第一天
  11. aac蓝牙编解码协议_蓝牙协议总结
  12. Word文档的规范格式
  13. 【sketchup 2021】草图大师图像输出与渲染之Enscape渲染(优秀的实时渲染软件)的基本使用【渲染实时更新与同步、在线资源库、渲染和常规设置(图标背景、草地渲染)、导出为图像和独立文件】
  14. PHP自学笔记 ---李炎恢老师PHP第一季 TestGuest0.5
  15. con和com开头单词规律_日语单词靠死记硬背?那你需要看看这篇文章了
  16. oj-杭电 熊猫阿波的故事
  17. Hadoop、Storm和Spark主流分布式系统特点和应用场景
  18. Python3-爬虫~selenium\phantomjs\爬取XX网页电影过程中向下滚动网页问题
  19. java spring 中 每小时一次_spring 定时任务的 执行时间设置规则
  20. SDL介绍----4、S-SDLC安全开发生命周期

热门文章

  1. 信息推荐服务 信息推送服务器,根据用户喜好进行信息推送的方法及服务器技术...
  2. java 组织机构代码_JAVA实现社会统一信用代码校验的方法
  3. 计算机圣诞节教案,小班圣诞节教案三篇
  4. 计算机信息检索系统中常用的检索技术,在计算机信息检索系统中,常用的检索技术主要有哪些...
  5. 科学视角读科幻:李开复新书《AI未来进行式》|赠书福利
  6. 三菱SFC程序编程心得
  7. 汉高公布2020年上半年和第二季度财报
  8. [传智杯 #4 初赛] 小卡和质数(C++,数学)
  9. 关于Spring纳管对象及属性注入的一点理解
  10. 什么网页游戏是按地地狱划分服务器的,神座游戏资料:地狱边境-2345网页游戏...