自动出题系统
1.题目避免重复;
2.可定制(数量/打印方式);
3.可以控制下列参数:
package classWork; import java.math.*; import java.util.Scanner; public class MathTest2 { public static void main(String args[]) { mathOperation P = new mathOperation(); P.SetValue(); P.output(); P.ProduceRandom(); P.Output(); } } class mathOperation { private int[] firNum = new int[100];//分别代表左右操作数集 private int[] secNum = new int[100]; private int[] operNum = new int[100];//记录了100个表达式的100个运算符 private int index;//记录数组位置索引 private int amout;//记录用户要求产生题目的数量 private int mulAndDiv;//记录是否有乘除法的状态值 0代表无1代表有 private int numLowBound;//记录数值下限 private int numHighBound;//记录数值上限 private int neviNum;//记录加减是否有负数 0代表无1代表有 private int remainder;//记录除法是否有余数 0代表无1代表有 //构造函数对数值进行初始化 public mathOperation() { for(int i=0;i < 100;i++) { firNum[i] = -1; secNum[i] = -1; }//为了避免查重失败将其初始化为-1 mulAndDiv = 1; numLowBound = 1; numHighBound = 99; neviNum = 0; remainder = 0; index = 0; amout = 100; } //设置是否有乘除法 public void set_mulAndDiv(int n) { mulAndDiv = n%2; } //设置是否有负数 public void set_neviNum(int n) { neviNum = n%2; } //设置是否有余数 public void set_remainder(int n) { remainder = n%2; } //设置计算下限 public void set_numLowBound(int n) { if(n < 0) { System.out.println("您设置的计算下限为负值!系统自动将其恢复为1"); numLowBound = 1; } else { numLowBound = n; } } //设置计算上限 public void set_numHighBound(int n) { if(n < 0) { System.out.println("您设置的计算上限为负值!系统自动将其恢复为1"); numHighBound = 99; } else { numHighBound = n; } } //设置用户要求产生题目的数量 public void set_amout(int n) { if(n >= 1 && n <= 100) amout = n; else System.out.println("对不起,您设置的题目量已经超出本程序的运行能力之外!"); } public void SetValue() { int amoutValue;//记录用户要求产生题目的数量 int mulAndDivValue;//记录是否有乘除法的状态值 0代表无1代表有 int numLowBoundValue;//记录数值下限 int numHighBoundValue;//记录数值上限 int neviNumValue;//记录加减是否有负数 0代表无1代表有 int remainderValue;//记录除法是否有余数 0代表无1代表有 System.out.println("hello word!"); Scanner sc = new Scanner(System.in); System.out.println("请您指定要产生题目的数量:(限制范围在1到100之间)"); amoutValue = sc.nextInt(); set_amout(amoutValue); System.out.println("请您指定题目中数值的下限:(限制范围在1到100之间)"); numLowBoundValue = sc.nextInt(); set_numLowBound(numLowBoundValue); System.out.println("请您指定题目中数值的上限:(限制范围在1到100之间)"); numHighBoundValue = sc.nextInt(); set_numHighBound(numHighBoundValue); System.out.println("请您指定题目中是否有乘除法(0代表没有1代表有)"); mulAndDivValue = sc.nextInt(); set_mulAndDiv(mulAndDivValue); System.out.println("请您指定题目中减法的结果是否有负数(0代表没有1代表有)"); neviNumValue = sc.nextInt(); set_neviNum(neviNumValue); if(mulAndDivValue == 1) { System.out.println("请您指定题目中的除法结果是否有余数(0代表没有1代表有)"); remainderValue = sc.nextInt(); set_remainder(remainderValue); } } //检查产生的运算式是否和前面的运算式有重复 public boolean RepCheck(int leftNum,int rightNum,int mNum) { boolean flag = true;//初始默认为不重复 for(int i = 0;i < index;i++) { if(firNum[i] == leftNum && secNum[i] == rightNum && operNum[i] == mNum) { flag = false; break; } } return flag; } //产生符合用户要求的随机数 public void ProduceRandom() { boolean f = false; while(index <= amout-1) { int leftNum = (int)(Math.random()*(numHighBound-numLowBound+1))+numLowBound;//生成左操作数 int rightNum = (int)(Math.random()*(numHighBound-numLowBound+1))+numLowBound;//生成右操作数 int mNum = (int)(Math.random()*4)+1;//生成1234代表加减乘除 //如果随机生成的运算符是除法但用户不允许有除法就把它转化为加减法 if(mNum == 3 && mulAndDiv == 0) mNum = 1; if(mNum == 4 && mulAndDiv == 0) mNum = 2; //如果随机生成的运算符是减法但不允许有负数那么就让左操作数大于右操作数 if(mNum == 2 && neviNum == 0) { int midNum;//用mid作为中间数来交换两个数 if(leftNum < rightNum) { midNum = leftNum; leftNum = rightNum; rightNum = midNum; } } //如果生成的随机运算符是除法而且允许有除法但是不允许有余数 if(mNum == 4 && mulAndDiv == 1 && remainder == 0) { int midNum;//用mid作为中间数来交换两个数 if(leftNum < rightNum) { midNum = leftNum; leftNum = rightNum; rightNum = midNum; } leftNum = leftNum/rightNum * rightNum; } //产生随机数的重复性检查 f = RepCheck(leftNum,rightNum,mNum); //重复性检查通过就对数组赋值 if(f == true) { firNum[index] = leftNum; secNum[index] = rightNum; operNum[index] = mNum; index++; } } } //输出记录数值的数组 public void Output() { for(int i = 0;i < amout;i++) { System.out.print(firNum[i]); if(operNum[i] == 1) System.out.print("+"); if(operNum[i] == 2) System.out.print("-"); if(operNum[i] == 3) System.out.print("*"); if(operNum[i] == 4) System.out.print("/"); System.out.println(secNum[i]); } } public void output() { System.out.println("amout "+amout+"mulAndDiv "+mulAndDiv+"numLowBound "+numLowBound+ "numHighBound "+numHighBound+"neviNum "+neviNum+"remainder "+remainder); } }
3.运行结果截图:
case1:数值范围在15到40之间,有乘除法,减法没负数,除法没余数
case2:数值范围在10到20之间,有乘除法,减法有负数,除法有余数
case3:数值下限是20,数值上限是30,无乘除法,减法有余数。
周活动总结表
姓名:王宏伟 日期 2016/3/19
|
听课 |
编写代码 |
阅读课本 |
编写代码休息 |
日总计 |
周日 |
|
|
35 |
|
35 |
周一 |
100 |
240 |
20 |
|
360 |
周二 |
|
|
|
|
|
周三 |
|
|
30 |
|
30 |
周四 |
|
|
10 |
|
10 |
周五 |
|
|
50 |
|
50 |
周六 |
|
100 |
90 |
30 |
220 |
周总计 |
100 |
340 |
235 |
30 |
705 |
时间记录日志
学生:王宏伟 日期:2016/3/19
教师:王建民 课程:软件工程
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
C |
U |
3/14 |
8:00 |
9:50 |
10 |
100 |
听课 |
下课,休息 |
|
|
|
14:30 |
20:40 |
130 |
240 |
编程 |
|
|
|
3/15 |
|
|
|
|
|
|
|
|
3/16 |
15:30 |
16:00 |
0 |
30 |
阅读构建之法 |
|
|
|
3/17 |
15:00 |
15:10 |
0 |
10 |
阅读构建之法 |
|
|
|
3/18 |
17:10 |
18:00 |
0 |
50 |
阅读构建之法 |
|
|
|
3/20 |
15:30 |
17:30 |
20 |
100 |
修改程序 |
|
|
|
缺陷记录日志
学生:王宏伟
日期:2016/3/19
教员:王建民
程序号:四则运算2
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
||||||||
3/14 |
1 |
|
编码 |
运行 |
5min |
|
||||||||
描述:找不到或无法加载主类。
|
||||||||||||||
3/18 |
|
|
编码 |
编译 |
1min |
|
||||||||
|
描述:数值范围不准确 |