201571030107/201571030121《小学四则运算练习软件》结对项目

结对伙伴:201571030107 冯晓

项目Github地址

https://github.com/depers/Arithmetic-Webapp_SE

1、需求分析
* 由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计分,20道题测试结束后给出测试总分。
* 程序为用户提供四则运算练习功能:百以内整数算式+带括号算式。
* 程序允许用户进行多轮测试,提供用户多轮测试分数柱状图,示例如下:
* 程序记录用户答题结果,当程序退出再启动的时候,可为用户显示24小时内参与测试的成绩统计。
* 测试有计时功能,测试时动态显示用户开始答题后的消耗时间。
* 该程序为Web端程序,可供用户在线使用。

2、软件设计

[系统UML]

3、核心代码

* 将算术表达式(中缀表达式)转换为后缀表达式:
>  eg. 89-(44/(56\*33)) 中缀表达式转换为后缀表达式
> 后缀表达式:89 44 56 33 * / -,元素之间用空格隔开。
> 从左到右遍历中缀表达式的每一个数字和运算符
> 如果是数字就输出(即存入后缀表达式)
> 如果是右括号,则弹出左括号之前的运算符
> 如果优先级低于栈顶运算符,则弹出栈顶运算符加入后缀表达式,并将当前运算符加入后缀表达式
> 遍历结束后,将栈则剩余运算符弹出。

--------------------------------------------------------------------------------------------------------

public static String prefixToSuffix(String express) throws Exception {String[] expression = express.split(",");StringBuffer suffixStr = new StringBuffer();String temp = "";try {for (int i = 0; i < expression.length; i++) {if (SuffixToValueUtil.isNum(expression[i])) {suffixStr.append(expression[i]).append(" ");} else if (expression[i].equals(")")) {temp = stack.pop();while (!temp.equals("(")) {suffixStr.append(temp).append(" ");temp = stack.pop();}} else if (expression[i].equals("(") ||priority.get(expression[i]) >= priority.get(getTopOperator())) {stack.push(expression[i]);} else {temp = stack.pop();suffixStr.append(temp).append(" ").append(expression[i]).append(" ");}}} catch (Exception e) {throw e;}while (stack.size() > 0) {suffixStr.append(stack.pop());}return suffixStr.toString();}


* 根据中缀表达式计算结果
>  eg. 根据后缀表达式:89 44 56 33 * / - 计算结果。
>  从左到右遍历后缀表达式
>  遇到数字就进栈
>   遇到符号,就将栈顶的两个数字出栈运算,运算结果进栈,直到获得最终结果。

--------------------------------------------------------------------------------------------------------

public static int compute(String expression) throws Exception {int numOne, numTwo;String temp = "";String[] express = expression.split(" ");Stack<String> stack = new Stack<>();for (int i = 0; i < express.length; i++){if (isNum(express[i])){stack.push(express[i]);}else{numTwo = Integer.parseInt(stack.pop());numOne = Integer.parseInt(stack.pop());temp = CalculateUtil.compute(numOne, numTwo, express[i]).toString();if (Integer.parseInt(temp) < 0){throw new Exception("Negative numbers in operation");}stack.push(temp);}}return Integer.parseInt(stack.pop());}

4、程序运行

[示例图片一]

[示例图片二]

[示例图片三]

[示例图片四]

5、结对编程

6、PSP

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

7、使用汉堡评价法给小伙伴的一些点评

像汉堡法上面说的那样找一个伙伴要找那种和自己有共同兴趣和爱好谈得来的人,这样在软件项目制作中两个人起的摩擦会很小。虽然我和冯晓挺谈的来的但是在制作图形界面的时候也发生了一些小的摩擦,他认为做的话要做到完美不要用Java图形库来做界面,可是我觉得这样相对于项目的压力会小很多,但是在冯晓向我灌输认真、完美的学习态度后我开始妥协。虽然摩擦会有但是也完美的解决了摩擦。冯晓同学是一个认真追求卓越的人,和他在一起结对会对自己要求增加,这恰恰是我不太具备的东西,冯晓同学让我学到了很多。

8、结对编程的感受

结对编程会大大减少项目编程压力,也会对项目产生更好的意见,毕竟三个臭皮匠顶个诸葛亮吗。结对编程会弥补我一些编程方面的不足,在第二次实验中我的运算只能实现3个运算符和不加括号的,在结对编程中冯晓同学解决了这个问题并且给我细心讲解,这样除了完成了项目还丰富了自身的能力,我觉得很不错。

转载于:https://www.cnblogs.com/masy/p/8707998.html

201571030121 《小学生四则运算练习软件》结对项目相关推荐

  1. 201571030301/201571030302《小学生四则运算练习软件》结对项目报告

    Github地址 :https://github.com/Ahmatjan-IT/sizeyunsuanGUI 队友博客地址:http://www.cnblogs.com/dyh666/p/87191 ...

  2. 201571030139/201571030134《小学生四则运算练习软件需求说明》结对项目报告

    任务一 首先,我们进行了用户体验,把我们已经完成的小学生四则运算软件发给我们要调研的人,他们体验了我们的程序后再填写需求分析调查问卷,这样可以更好的得到一个反馈,让我们的需求分析更加清楚. 其次,我们 ...

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

    小学生四则运算练习软件项目报告 github地址:https://github.com/Opalus-wangs/ws-lib/tree/master 一.需求分析 由用户输入参数n. 系统随机生成随 ...

  4. 基于JavaGUI的小学生四则运算练习软件

    资源下载地址:https://download.csdn.net/download/sheziqiong/85638970 一.需求分析 本次实验采用结对编程方式,设计开发一个小学生四则运算练习软件, ...

  5. 四则运算网页版--结对项目

    前言: 这次项目是用前后台分离,后台代码由servlet编写.项目部署于我的个人服务器. github仓库地址https://github.com/LeonP3ng/CalculateWeb.git ...

  6. 简易小学生四则运算练习软件(自动出题判题)-java实现

    一.主要功能说明 二.运行截图 三.类的设计(各类之间的关系) 四.源代码 1. MyExGUI.java 2.Operation.java 3.Addition.java 4.Subtraction ...

  7. 《小学生四则运算出题软件》结对项目总结

    一.项目介绍及github地址 github地址:https://github.com/ChaoPiPi 结对伙伴:哦哦:博客地址:https://www.cnblogs.com/Mooa123/ A ...

  8. 软件工程导论项目之小学生四则运算出题软件

    要求: 程序可接收一个输入参数n,然后随机产生n道加减乘除(分别使用符号+-*÷来表示)练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间. 每个练习题至少要包含2种运算符.同时,由于小 ...

  9. 《小学生四则运算出题软件》个人项目总结

    一.PSP耗时估算 可以从上图看出:在Reporting上我减少了一般的时间,因为在本次项目中没有完成单元测试,只做了简单的CPU占用率和热路径图,在测试上时间也少了一半,是因为只做了黑盒测试. 二. ...

最新文章

  1. 6.6 二分 K-Means 算法-机器学习笔记-斯坦福吴恩达教授
  2. 离散对数(关于方程x^A=B(mod C)的解)
  3. kotlin 编译时常量_Kotlin程序| 编译时常量示例
  4. 彻底弄懂计算机中的大端小端
  5. Spring事务管理(二)-TransactionProxyFactoryBean原理
  6. c#鼠标点击TextBox控件后清空默认字体-完美解决方案
  7. kvm安装android虚拟机,qemu-kvm安装虚拟机
  8. 调速水泵控制c语言实验程序,液压控制实验报告
  9. idea 内存溢出问题
  10. Smartbi的使用
  11. qt中glMultiTexCoord2fARB报错
  12. 结婚5年又发现了一场爱情 感人
  13. multisim电流探棒怎么改变方向?MULTISIM电流探
  14. SOA+LDAP实现SSO单点登录思路
  15. Python可以制作植物大战僵尸,你还不知道吗?
  16. 分治法一个整数数列求最大值最小值_五大常见算法策略之丨递归与分治策略
  17. JSP-session
  18. 面向初学者的 MQL4 语言系列之3——技术指标和内置函数
  19. pebble刷android wear,Pebble智能手表刷官方中文固件教程
  20. 使用RKE部署Rancher v2.5.8 HA高可用集群

热门文章

  1. 谐振电路的原理和作用
  2. winwebmail设置 小记
  3. 这家5G边缘计算企业科创板首发过会!
  4. 基于8086微机原理核心考点(考试必背)
  5. 2020技术类博客撰写发布一揽子解决方案
  6. HashMap集合常见方法
  7. 修改头像上传至七牛云Java实现
  8. 亚马逊上传报告报错常见情况
  9. 计算机视觉相关词汇翻译
  10. 文件上传漏洞之——漏洞进阶(读文件,写文件,包含图片马,包含日志文件,截断包含)