Github项目地址:
https://github.com/J777lh7/Calc_Demo
一、需求分析
每个数字在 0 和
2.为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。
3.练习题生成好后,将你的学号
4.当程序接收的参数为4时,以下为输出文件示例。
5.支持有括号的运算式
随机产生n道四则运算题,n只能在1到1000之间,不能是其他。
2.计算出表达式的结果,并且运算过程中不能出现负数和非整数。
3.将随机产生的题目及正确答案和学号保存在result.txt文件中。
三、设计实现
四、测试运行
运行Main.java文件,先对输入的异常参数进行处理,后输入参数n为10,生成result.txt文件,截图如下。
Eclipse下:
cmd下:
五、核心代码
1.根据输入的范围获取随机数
1 public static int getNumber(int max){ 2 int number = 0; 3 Random ran = new Random(); 4 number = ran.nextInt(max+1); 5 return number; 6 }
2.获取每个节点的运算结果,并检验除法 。当除数为0 或不能整除时,将该运算符随机变换成其他三种运算符。
1 public String getResult(){ 2 if(hasChild()){ 3 switch(str){ 4 case "+": 5 return String.valueOf(Integer.parseInt(getLchild().getResult()) + Integer.parseInt(getRchild().getResult())); 6 case "-": 7 return String.valueOf(Integer.parseInt(getLchild().getResult()) - Integer.parseInt(getRchild().getResult())); 8 case "*": 9 return String.valueOf(Integer.parseInt(getLchild().getResult()) * Integer.parseInt(getRchild().getResult())); 10 case "/": 11 if(getRchild().getResult().equals("0")){ 12 while(str.equals("/")){ 13 str = String.valueOf(Ran.getOperator()); 14 } 15 return this.getResult(); 16 } 17 else if(Integer.parseInt(getLchild().getResult()) % Integer.parseInt(getRchild().getResult()) != 0){ 18 while(str.equals("/")){ 19 str = String.valueOf(Ran.getOperator()); 20 } 21 return this.getResult(); 22 } 23 else 24 return String.valueOf(Integer.parseInt(getLchild().getResult()) / Integer.parseInt(getRchild().getResult())); 25 } 26 } 27 return str; 28 }
3.主函数
1 import java.io.BufferedWriter; 2 import java.io.File; 3 import java.io.FileWriter; 4 import java.io.IOException; 5 import java.util.*; 6 7 public class Main { 8 public static void main(String args[]) throws IOException{ 9 BinaryTree bTree; 10 Scanner in = new Scanner(System.in); 11 int n=-1; 12 while(n<1||n>1000) 13 { 14 try 15 { 16 n=in.nextInt(); 17 } 18 catch(Exception e) 19 { 20 System.out.println("请输入1~1000以内的数字"); 21 in.next(); 22 n=-1; 23 } 24 if((n<1||n>1000)&&n!=-1) 25 System.out.println("请输入1~1000以内的数字"); 26 } 27 String str="result.txt"; 28 String str1="201571030133"; 29 BufferedWriter bw = new BufferedWriter(new FileWriter(str)); 30 writeToFile(str,str1+' '); 31 for(int i = 0; i < n; i++){ 32 bTree = new BinaryTree(2); 33 bTree.createBTree(); 34 String result = bTree.CalAndVal(); 35 if(Integer.parseInt(result)<0) 36 { 37 i--; 38 } 39 else 40 { 41 writeToFile(str,bTree.toString() + "=" + result+' '); 42 } 43 44 } 45 } 46 public static void writeToFile(String filePath, String content) { 47 48 try{ 49 BufferedWriter writer = new BufferedWriter(new FileWriter(new File(filePath),true)); 50 writer.write(content); 51 writer.close(); 52 }catch(Exception e){ 53 e.printStackTrace(); 54 } 55 } 56 }
六、总结
这次项目,由于个人基础比较薄弱,长时间未接触Java编程,无法独立完成项目,很是吃力。程序对网上大神程序进行参考,并在同学的帮助下基本实现项目要求。项目中还有许多不足,希望通过今后的学习改进完善。本次作业最大的收获就是发现了很多自己知识不足,也知道了今后学习努力方向。
七、生成PSP
PSP2.1 |
任务内容 |
计划完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
15 |
25 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
15 |
25 |
Development |
开发 |
320 |
440 |
· Analysis |
需求分析 (包括学习新技术) |
10 |
20 |
· Design Spec |
· 生成设计文档 |
5 |
5 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
15 |
10 |
· Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
10 |
15 |
· Design |
具体设计 |
30 |
40 |
· Coding |
具体编码 |
200 |
270 |
· Code Review |
· 代码复审 |
15 |
30 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
35 |
50 |
Reporting |
报告 |
40 |
75 |
· Test Report |
· 测试报告 |
15 |
35 |
· Size Measurement |
计算工作量 |
10 |
10 |
· Postmortem & Process Improvement Plan |
· 事后总结 ,并提出过程改进计划 |
15 |
30 |