20194675+自动生成四则运算第一版报告
一、需求分析
现在学生的作业越来越高,学生的作业难度也不断增强,对学生学习和家长辅导都提出了严重的困难。所以为解决广大家长尤其是小学生家长的辅导难题,结合学生的课业要求,设计出一款可以自动生成四则运算的小程序,要求操作简单,能有效的节省时间,提高学习效率。
二、功能设计
(一)基本功能
1、自动生成10个100以内的2个操作数的四则运算(+、-、*、/),要求结果也在100以内;
2、剔除重复算式。 2 + 3 = 和 2 + 3 = 是重复算式, 2 + 3 = 和 3 + 2 = 不属于重复算式;
3、题目数量可定制;
4、相关参数可控制;
是否包含乘法和除法
操作数数值范围可控(如操作数 在100以内 还是1000以内)
操作数是否含负数
5、生成的运算题存储到外部文件result.txt中;
(二)扩展功能
可自动生成答案并输出;
三、设计实现
在程序设计实现过程中运用了java编程语言中的主类public class ()。方法主要有主方法public static void main(String[] args) 和生成随机数的Random()方法。使用for循环语句、switch语句以及if-else语句来实现具体功能。
1、通过(int) (Math.random()*number);语句实现随机数的生成
a= (int) (Math.random()*number1+1); b= (int) (Math.random()*number2+1);
2、通过if-else语句来实现是否输出乘除运算
if(number4==0) { d=(int) (Math.random()*2); }else { d=(int) (Math.random()*4); }
3、使用PrintStream ps = new PrintStream("e:/result.txt");语句,将生成的试题自动保存在result.txt文件内
PrintStream ps = new PrintStream("e:/result.txt"); System.setOut(ps);
四、测试运行
1、生成十道四则运算,操作数在100 以内,存在result.txt文件中
五、部分实现代码
1、提示信息代码
public static void main(String[] args) throws FileNotFoundException { PrintStream ps = new PrintStream("e:/result.txt"); Random rand = new Random();//创建随机类的实例 @SuppressWarnings("resource") Scanner reader =new Scanner(System.in);//创建输入类的实例 /** * 定义五个全局变量 * a,b为两个随机数的值 * d的值用来判断是否生成乘除运算 * i为for循环中的累加器 * r的值用来判断是否输出答案 */ int a,b,d,i,r; /** * number1为操作数的数值控制范围 * number2为题目数量的控制范围 * number3的值用来判断运算结果是否出现负数 */ System.out.println("请输入操作数的控制范围:"); int number1 = reader.nextInt(); System.out.println("请输入题目数量的控制范围:"); int number2 = reader.nextInt(); System.out.println("操作数数值是否出现负数,是按1;否按0:"); int number3 = reader.nextInt(); System.out.println("算式中是否出现乘法和除法运算,是按1;否按0:"); int number4 = reader.nextInt(); System.out.println("是否输出上述等式的答案:是按1;否按0"); int number5 = reader.nextInt(); int sum[]=new int[number2]; //a = rand.nextInt(number1);//在0-number1的范围内随机生成整数 //b = rand.nextInt(number1);//在0-number1的范围内随机生成整数
2、输出加减算式代码
switch(d) { //输出加法运算式 case 0: if(number3==1) { switch(rand.nextInt(4)) { case 0: a=0-a;b=0-b; System.out.println("("+a+")"+"+"+"("+b+")"+"=\n"); sum[i]=a+b;break; case 1: a=0-a; System.out.printf("("+a+")"+"+"+b+"=\n"); sum[i]=a+b;break; case 2: b=0-b; System.out.printf(+a+"+"+"("+b+")"+"=\n"); sum[i]=a+b;break; case 3: System.out.printf(a+"+"+b+"=\n"); sum[i]=a+b;break; } }else { System.out.printf(a+"+"+b+"=\n"); sum[i]=a+b; } i++;break; //输出减法运算式,并且控制结果是否含有负值 case 1: if(number3==1) { switch(rand.nextInt(4)) { case 0: a=0-a;b=0-b; System.out.printf("("+a+")"+"-"+"("+b+")"+"=\n"); sum[i]=a-b;break; case 1: a=0-a; System.out.printf("("+a+")"+"-"+b+"=\n"); sum[i]=a-b;break; case 2: b=0-b; System.out.printf(a+"-"+"("+b+")"+"=\n"); sum[i]=a-b;break; case 3: System.out.printf(a+"-"+b+"=\n"); sum[i]=a-b;break; } }else { System.out.printf(a+"-"+b+"=\n"); sum[i]=a-b; }i++; break;
3、生成算式自动保存到外部文档中
PrintStream ps = new PrintStream("e:/result.txt"); System.setOut(ps);
六、总结
1、用switch case选择语句确定运算符,输出算式;
2、定义一个number1变量来控制操作数范围;
3、定义一个number2变量来控制出题数量的范围;
4、定义一个number3变量来控制操作数数值是否出现负数;
5、定义一个number4变量来控制是否出现乘除算法算式;
6、定义一个number5变量来控制是否输出算式运算结果;
7、定义a,b为两个随机数的值;
通过本次作业,充分暴露出我在编程能力方面的不足,在今后的学习中我会继续努力。最后感谢在程序编写过程中为我提供帮助的同学,感谢你们的宝贵建议和思路想法。
七、PSP
PSP2.1 |
任务内容 |
计划共完成需要的时间(h) |
实际完成需要的时间(h) |
Planning |
计划 |
0.5 |
0.7 |
Estimate |
估计这个任务需要多少时间,并规划大致工作步骤 |
2 |
10 |
Development |
开发 |
2 |
4 |
Analysis |
需求分析 (包括学习新技术) |
1 |
1 |
Design Spec |
生成设计文档 |
0.5 |
1 |
Design Review |
设计复审 (和同事审核设计文档) |
0.5 |
0.8 |
Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
1 |
2 |
Design |
具体设计 |
1 |
1.5 |
Coding |
具体编码 |
3 |
4 |
Code Review |
代码复审 |
1 |
1 |
Test |
测试(自我测试,修改代码,提交修改) |
2 |
2.5 |
Reporting |
报告 |
0.5 |
1.5 |
Test Report |
测试报告 |
0.5 |
1 |
Size Measurement |
计算工作量 |
2 |
2 |
Postmortem & Process Improvement Plan |
事后总结 ,并提出过程改进计划 |
0.5 |
0.5
|