可怜的二柱子同学,老师又对他的自动出题系统提出了新的要求:
1、题目避免重复;2、可定制(数量/打印方式);3、可以控制下列参数:
是否有乘除法;
是否有括号(最多可以支持十个数参与计算);
数值范围;
加减有无负数;
除法有无余数!
结对:张一博,何琳琳
设计思想
需求分析:二年级100以内加减乘除,无负数,无余数,无括号
三年级,无负数,无余数
四年级,无负数
五年级,无负数
六年级,有负数
输入:输入选择;
选择内容:选择要打印的题目数量,取值范围最大值和最小值,加减有无负数,有无乘除法,除法有无余数,有无括号
加工:设置for循环,num为要打印的题目数量
是否有乘除法:只需设置运算符随机出数的范围在0-1(+,-)之间还是0-3(+,-,*,/)之间
数值范围:即四则运算随机出数的范围最大值,最小值
加减有无负数:对随机生成的数字进行运算,如果进行加/减运算之后,有负数,则根据选择进行保留或舍弃
是否有括号:需要利用栈来进行括号的添加···(但是并没有弄懂),这里分了两种简单情况
输出:运算式
源程序代码
import java.util.*; import java.util.Random; public class Calculate { public static void main(String[] args) { // TODO 自动生成的方法存根 Scanner in = new Scanner(System.in); Random random=new Random(); int p=0; int t; System.out.println("请输入要打印的题目数量:"); int num=in.nextInt(); System.out.println("请输入取值范围最大值:"); int max=in.nextInt(); System.out.println("请输入取值范围最小值:"); int min=in.nextInt(); System.out.println("请输入加减有无负数(1:有 0:无):"); int neg=in.nextInt(); System.out.println("请输入有无乘除法(1:有 0:无):"); int mul=in.nextInt(); System.out.println("请输入除法有无余数(1:有 0:无):"); int rem=in.nextInt(); System.out.println("请输入有无括号(1:有 0:无):"); int bra=in.nextInt(); for(int i=0;i<num;i++) { int a=(int)(Math.random()*(max-min+1)+min); int b=(int)(Math.random()*(max-min+1)+min); int c=(int)(Math.random()*(max-min+1)+min); int d=(int)(Math.random()*(max-min+1)+min); if(bra==0) { if(mul==1) { p=(int)(Math.random()*4); } if(mul==0) { p=(int)(Math.random()*2); } switch(p) { case 0: System.out.println(a+"/"+b+" + "+c+"/"+d+"="); break; case 1: if(neg==0)//减法没有负数 { if(a<c) { t=a; a=c; c=t; } System.out.println(a+"/"+b+" - "+c+"/"+d+"="); break; } else { System.out.println(a+"/"+b+" - "+c+"/"+d+"="); break; } case 2: System.out.println(a+"/"+b+" * "+c+"/"+d+"="); break; case 3: if(b==0||d==0)//分母为零则不计入总数 { i=i-1; break; } else if(rem==0)//除法没有余数 { if(a/b%c/d==0) { System.out.println(a+"/"+b+" / "+c+"/"+d+"="); break; } else { i=i-1;break; } } else if(rem==1)//除法有余数 { if(a/b%c/d!=0) { System.out.println(a+"/"+b+" / "+c+"/"+d+"="); break; } else { i=i-1; break; } } if((i+1)%num==0) { System.out.println(); } else { System.out.println(" "); } } } else { if(mul==1) { p=(int)(Math.random()*4); } if(mul==0) { p=(int)(Math.random()*2); } switch(p) { case 0: System.out.println(a+"/"+"("+b+" + "+c+")"+"/"+d+"="); break; case 1: if(neg==0)//减法没有负数 { if(a<c) { t=a; a=c; c=t; } System.out.println(a+"/"+"("+b+" - "+c+")"+"/"+d+"="); break; } else { System.out.println(a+"/"+"("+b+" - "+c+")"+"/"+d+"="); break; } case 2: System.out.println(a+"/"+"("+b+" * "+c+")"+"/"+d+"="); break; case 3: if(b==0||d==0)//分母为零则不计入总数 { i=i-1; break; } else if(rem==0)//除法没有余数 { if(a/b%c/d==0) { System.out.println(a+"/"+"("+b+" / "+c+")"+"/"+d+"="); break; } else { i=i-1;break; } } else if(rem==1)//除法有余数 { if(a/b%c/d!=0) { System.out.println(a+"/"+"("+b+" / "+c+")"+"/"+d+"="); break; } else { i=i-1; break; } } if((i+1)%num==0) { System.out.println(); } else { System.out.println(" "); } } } } } }
运行结果截图
个人总结:这次程序结对完成,何同学的编程思路更清晰,能力更强,在讨论过程中,我认识到自己的不足,题目看起来简单,实践起来却很难,在何同学的帮助下,我对程序有了大致的认识,但是部分功能还是无法实现,我上网查了一些程序,但有的还是看不懂,希望以后可以在不断练习中进步。
项目计划总结
姓名:张一博 日期:2016/3/19
听课 |
编写代码 |
阅读课本 |
准备考试 |
讨论设计思想 |
查阅资料 |
日总计 |
|
周日3.13 |
|
|
|
|
|
|
|
周一3.14 |
100 |
|
20 |
|
|
|
120 |
周二3.15 |
|
60 |
|
|
|
30 |
90 |
周三3.16 |
|
60 |
20 |
|
30 |
30 |
140 |
周四3.17 |
|
60 |
|
|
|
20 |
80 |
周五3.18 |
|
60 |
20 |
|
30 |
|
110 |
周六3.19 |
|
180 |
|
|
|
60 |
240 |
周总计 |
100 |
420 |
60 |
|
60 |
140 |
780 |
时间记录日志
学生:张一博 日期:2016/3/19
教师:王建民 课程:软件工程概论
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
C |
U |
3/14 |
8:00 |
10:00 |
20 |
100 |
听课 |
下课,休息,上厕所 |
|
|
|
15:00 |
15:20 |
0 |
20 |
读构建之法 |
|
|
|
3/15 |
14:30 |
16:30 |
30 |
90 |
写程序,查资料 |
聊天,打电话 |
|
|
3/16 |
16:20 |
19:40 |
60 |
140 |
讨论设计思想查资料,阅读构建之法,写程序 |
吃饭,休息,打水,上厕所 |
|
|
3/17 |
15:00 |
17:00 |
40 |
80 |
编程序,查资料 |
休息,玩手机 |
|
|
3/18 |
15:00 |
17:30 |
40 |
110 |
编程序,阅读构建之法,讨论 |
吃饭 |
|
|
3.19 |
9:00 |
11:40 |
20 |
140 |
查资料,写代码 |
吃饭 |
|
|
|
13:00 |
15:30 |
50 |
100 |
|
聊天,洗衣服 |
|
|
缺陷记录日志
姓名:张一博 日期:2016/3/19
教师:王建民 程序:四则运算2
日期 |
编 号 |
类 型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3.16 |
1 |
20 |
编码 |
编译 |
30s |
|
描述:漏掉符号 |
||||||
3.17 |
2 |
10 |
设计 |
编译 |
5min |
|
描述:需求分析 |
||||||
3 |
10 |
编码 |
编译 |
2min |
||
描述:局部变量重复,变量忘记初始化 |
||||||
3.19 |
4 |
20 |
编码 |
编译 |
3min |
|
描述:没有为类型Math定义方法random |
||||||
5 |
20 |
编程 |
编译 |
3min |
||
描述:找不到符号/ |