第一次作业——四则运算
一、需求分析
二、功能设计
- 基本功能
- 每个数字定义为一个包含分子、分母、符号的结构体
- 随机生成数字
- 随机生成四则运算符号
- 随机生成括号
- 在重新定义的数字上实现通分、约分、以及加减乘除的基本操作
- 将生成的式子以及计算出的答案保存到txt文件
- 对提供的式子和答案进行打分校验,包括查重,并将统计结果保存到txt文件
- 通过命令行传递参数
三、设计实现
- 整体思路是根据范围随机生成参数,然后随机生成操作符和括号,然后用两个字符串数组分别存储txt中可让小学生看懂的表达式格式,另一个数组存储电脑计算的表达式格式,不太想用常规的中缀转后缀表达式进行计算,所以直接使用eval对表达式进行 计算,不过这部分有点问题,当结果是无限小数时由于变量长度导致不能转变为分数。
- 关于查重功能的实现。在表达式生成的时候直接按照数字的大小排序存入到字符串数组中,操作符也是类似,具体还得看代码,,在进行打分校验的时候,如果表达式的结果相同,就通过存储的表达式对比进行查重,不过这种查重有很小概率会有BUG。
四、代码说明
1 // 生成题目 2 public static String rubric(int m,int []num,int optn){ 3 char[] ch=new char[]{'+','-','*','/'}; 4 char[] ch2=new char[]{'+','-','×','÷'}; 5 char[] opt=new char[optn+1]; 6 int i=new Random().nextInt(5); 7 int fs=new Random().nextInt(10); 8 int a=0,b=0; 9 String rub; 10 // 随机生成括号 11 if(i==0&&optn!=0){ 12 a=new Random().nextInt(optn+1); 13 while(a>=b){ 14 b=new Random().nextInt(optn+1)+1; 15 } 16 if(a==0&&b!=optn+1){ 17 rub="("+Integer.toString( num[0]); 18 } 19 else{ 20 rub=Integer.toString( num[0]); 21 b=0; 22 } 23 } 24 else{ 25 rub=Integer.toString( num[0]); 26 } 27 rubs[m]=rub; 28 // 合成四则运算表达式 29 int[] temp=new int[optn+1]; 30 for(int j=0;j<=optn;j++){ 31 int t=new Random().nextInt(4); 32 temp[j]=t; 33 opt[j]=ch[t]; 34 if(b!=0){ 35 rub=rub+opt[j]; 36 rubs[m]=rubs[m]+ch2[t]; 37 if(a!=0&&j==a-1){ 38 rub=rub+"("; 39 rubs[m]=rubs[m]+"("; 40 } 41 rub=rub+num[j+1]; 42 rubs[m]=rubs[m]+num[j+1]; 43 if(b-1==j){ 44 rub=rub+")"; 45 rubs[m]=rubs[m]+")"; 46 } 47 } 48 else{ 49 rub=rub+opt[j]+num[j+1]; 50 rubs[m]=rubs[m]+ch2[t]+num[j+1]; 51 } 52 } 53 num=sort(num); 54 for(int j=0;j<num.length;j++){ 55 houzhui[m]=houzhui[m]+String.valueOf(num[j]); 56 } 57 temp=sort(temp); 58 for(int j=0;j<temp.length;j++){ 59 houzhui[m]=houzhui[m]+ch[temp[j]]; 60 } 61 rubs[m]=rubs[m]+" ="; 62 return rub; 63 }
五、测试运行
六、PSP展示(单位:天)
PSP2.1 |
Personal Software Process Stages |
Time Senior Student |
Time |
|
Planning |
计划 |
1.5 |
1 |
|
· Estimate |
估计这个任务需要多少时间 |
1.5 |
1 |
|
Development |
开发 |
1.2 |
0.8 |
|
· Analysis |
需求分析 (包括学习新技术) |
10分钟 |
10分钟 |
|
· Design Spec |
生成设计文档 |
5分钟 |
0分钟 |
|
· Design Review |
设计复审 |
5分钟 |
0分钟 |
|
· Coding Standard |
代码规范 |
5分钟 |
2分钟 |
|
· Design |
具体设计 |
20分钟 |
20分钟 |
|
· Coding |
具体编码 |
1天 |
0.8天 |
|
· Code Review |
代码复审 |
10分钟 |
5分钟 |
|
· Test |
测试(自我测试,修改代码,提交修改) |
20分钟 |
10分钟 |
|
Reporting |
报告 |
20分钟 |
20分钟 |
|
· |
测试报告 |
5分钟 |
0 |
|
· |
计算工作量 |
5分钟 |
0 |
|
· |
并提出过程改进计划 |
50分钟 |
0 |
|
|
|
|
|
|
七、小结
此外这次作业的内容看起来并不是很难,但是真正做起来的时候还是很花时间的,尤其是在一些细节的地方,因为不太想用老师上课分享的方法做,所以作业完成度不高。