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

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计划4040
Estimate估计这个任务需要多少时间,并规划大致工作步骤4040
Developmet开发162180
Analysis需求分析(包括学习新技术)1222
Design Spec生成设计文档53
Design Revie设计复审(和同事审核设计文档)33
Coding Standard代码规范22
Design具体设计4550
Coding具体编码7570
Code Review代码复审55
Test测试(自我测试,修改代码,提交修改)1525
Reporting报告3040
Test Report测试报告2030
Size Measurement计算工作量33
Postmortem & Process Improvement Plan事后总结,并提出过程改机计划77

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

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

8、结对编程的感受

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

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值