这个作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186。
我的github远程仓库的地址:https://github.com/Wzh1997/Software-Engineering
一:要求
像《构建之法》的人物阿超那样,写一个能自动生成小学四则运算题目的命令行 “软件”。
具体要求:
任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。 如:23 - 3 * 4 = 11
扩展要求:
1) 要求能出和真分数 (二分之一, 十二分之五,等)相关的练习题。
2) 并且要求能处理用户的输入,并判断对错,打分统计。 要求能处理用户输入的真分数, 如 1/2, 5/12 等。
二:设计
1.模块:主类中包含四个方法,出题,计算,判断对错,判断字符串是否都为数字。
2.数据结构:采用了数组将操作数,操作符分别存放;
3.计算方式:将存题目的字符串数组按顺序遍历,将数字存入操作数数组,将“+”,“-”符号存出操作符数组,当便利到“*”,“/”号 时,则将“*”,“/”符号两边的数取出运算,将的数存入操作数数组。当题目遍历完后则进行计算,因为在前面我们已经对*,/进行运算,所以操作符数组中只有加减号。然后每次将操作数数组中的前两位i取出,将一位符号取出,进行运算,得数存入第二数的数组位置,以此类推。
例:操作数数组:2,3,6,4,9
操作符数组:+,-,+,+
2+3=5 操作数数组:空,5,6,4,9 5+6=11 操作数数组:空,空,11,4,9
操作符数组:空,-,+,+ 操作符数组:空,空,+,+
之所以采用这种计算方式,是因为便于日后对计算方式的拓展,如增加操作数的数量,带括号的题目等;
三:主要代码
public static float jisuan(String[] timu){ float[] shu=new float[10];//用于存操作数的数组 String[] fu=new String[10];//用于存操作符的数组 int shu_top=-1;//操作数数组尾部标记 int fu_top=-1;//操作符数组尾部标记 for (int i=0;i<5;i++){ if(isNumer(timu[i])){//判断timu[i]是否为数字 shu_top++; //将timu[i]转为整型,存入数组中 shu[shu_top]=Integer.valueOf(timu[i]).intValue(); } else if (timu[i]=="*"){//如果是*号,将操作数数组尾部的一个数取出,与*号后的数字相乘,的数再放入操作数数组 float a=shu[shu_top]; shu_top--; float b=Integer.valueOf(timu[i+1]).intValue(); shu_top++; shu[shu_top]=a*b; i++; } else if (timu[i]=="/"){//如果是/号,将操作数数组尾部的一个数取出,与*号后的数字相除,的数再放入操作数数组 float a=shu[shu_top]; shu_top--; float b=Integer.valueOf(timu[i+1]).intValue(); shu_top++; shu[shu_top]=a/b; i++; } else {//将操作符放入数组 fu_top++; fu[fu_top]=timu[i]; } } //不断将操作数数组中的前两个数取出,将一个操作符取出,进行计算 //得数放到第二个数的位置,操作符数组为空,则操作数中的数为答案 int i=0; int j=0; while (i!=shu_top){ float a=shu[i]; float b=shu[i+1]; String fuhao=fu[j]; if (fuhao=="+"){ shu[i+1]=a+b; }else { shu[i+1]=a-b; } i=i+1; j=j+1; } return shu[shu_top]; }
四:结果展示
五:时间表
PSP2.1 | Personal Software Process Stages | Time Senior Student | Time |
Planning | 计划 | 8 | 6 |
· Estimate | 估计这个任务需要多少时间 | 12 | 10 |
Development | 开发 | 60 | 120 |
· Analysis | 需求分析 (包括学习新技术) | 8 | 10 |
· Design Spec | 生成设计文档 | 0 | 0 |
· Design Review | 设计复审 | 3 | 5 |
· Coding Standard | 代码规范 | 4 | 3 |
· Design | 具体设计 | 10 | 13 |
· Coding | 具体编码 | 35 | 30 |
· Code Review | 代码复审 | 10 | 9 |
· Test | 测试(自我测试,修改代码,提交修改) | 15 | 30 |
Reporting | 报告 | 9 | 6 |
· | 测试报告 | 0 | 0 |
· | 计算工作量 | 5 | 2 |
· | 并提出过程改进计划 | 0 | 0 |
六:心得
在这次编写程序中,发现自己在编码过程中不够细心,常漏写,写错等等,以及对一些逻辑判断得不够准确。总体的设计在程序编写中也是很重要的,觉得自己的总体的设计,一些类的划分方面做得不够好,代码逻辑不够清晰。自己应该加强对面向对象的理解,加强对程序总体规划的技能。
chuti()