《构建之法》第三次作业(张英和安坤组)
一、题目
请编写一个能自动生成小学四则运算题目的 “软件”。
让程序能接受用户输入答案,并判定对错。
最后给出总共 对/错 的数量。
二、需求分析
本程序适合小学生,锻炼自己的运算能力。练习的软件。操作方便。
三、 基本需求
1、 显示题目数量
2、 逐个自动显示题目
3、 用户可以逐题解答
4、 显示答题对错
5、 统计对错数量
四、扩展功能
(1)可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
(2)程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
五、代码实现
import java.util.Scanner;
import java.util.*;
public class ruanjian {
public static void main(String[] args)
{
int i = 1, t1, t2, h = 0;
String e = String.format("%tM", new Date());
t2 = Integer.parseInt(e);
size myTest = new size();
while (i <= 20)
{
i = i + 1;
String k = String.format("%tM", new Date());
t1 = Integer.parseInt(k);
if (t1 - t2 >20)
{
System.out.println("测试结束!!!");
break;
} else
{
h = myTest.chouti();
}
}
int tempI = i - h - 2;
System.out.println("您一共答对了" + h + "道题");
System.out.println("您一共答错了" + tempI + "道题");
}
}
上面是主代码程序及运行结果。
import java.util.Scanner;
class size {
int h, g;
size(){
h=0;
g=0;
}
public int chouti()
{
double D;
int a,b,s;
a = suiji(-100, 100);
b = suiji(-100, 100);
s = suiji(1, 4);
switch (s)
{
case 1:
if (a > 0 & b > 0)
{
System.out.println(a + "+" + b + "=");
} else if (a < 0 & b > 0) {
System.out.println("(" + a + ")+" + b + "=");
} else if (b < 0 & a > 0) {
System.out.println(a + "+(" + b + ")=");
} else {
System.out.println("(" + a + ")+(" + b + ")=");
}
Scanner reader = new Scanner(System.in);
D = reader.nextInt();
if (D == a + b)
{
System.out.println("答对了,你真聪明!");
h++;
} else {
System.out.println("答错了,正确答案是:" + (a + b));
g++;
}
break;
case 2:
if (a > 0 & b > 0)
{
System.out.println(a + "*" + b + "=");
} else if (a < 0 & b > 0)
{
System.out.println("(" + a + ")*" + b + "=");
} else if (b < 0 & a > 0)
{
System.out.println(a + "*(" + b + ")=");
} else
{
System.out.println("(" + a + ")*(" + b + ")=");
}
Scanner reader1 = new Scanner(System.in);
D = reader1.nextInt();
if (D == a * b)
{
System.out.println("答对了,你真聪明!");
h++;
} else {
System.out.println("答错了,正确答案是:" + (a * b));
g++;
}
break;
case 3:
if (a > 0 & b > 0)
{
System.out.println(a + "-" + b + "=");
} else if (a < 0 & b > 0)
{
System.out.println("(" + a + ")-" + b + "=");
} else if (b < 0 & a > 0)
{
System.out.println(a + "-(" + b + ")=");
} else
{
System.out.println("(" + a + ")-(" + b + ")=");
}
Scanner reader2 = new Scanner(System.in);
D = reader2.nextInt();
if (D == a - b)
{
System.out.println("答对了,你真聪明!");
h++;
} else {
System.out.println("答错了,正确答案是:" + (a - b));
g++;
}
break;
case 4:
if (a > 0 & b > 0)
{
System.out.println(a + "/" + b + "=");
} else if (a < 0 & b > 0)
{
System.out.println("(" + a + ")/" + b + "=");
} else if (b < 0 & a > 0) {
System.out.println(a + "/(" + b + ")=");
} else {
System.out.println("(" + a + ")/(" + b + ")=");
}
Scanner reader3 = new Scanner(System.in);
D = reader3.nextInt();
if (D == a / b) {
System.out.println("答对了,你真聪明!");
h++;
} else {
System.out.println("答错了,正确答案是:" + (a / b));
g++;
}
break;
}
return h;
}
public static int suiji(int num1, int num2)
{
int C = (int) num1 + (int) (Math.random() * (num2 - num1));
return C;
}
}
上面是封装的子类代码
import java.util.Scanner;
public class ceshi {
public static void main(String[] args) {
System.out.println("设a=5,b=-6");
int a = 5, b = -6;
for (int s = 1; s <= 4; s++)
switch (s) {
case 1:
if (a > 0 & b > 0) {
System.out.println(a + "+" + b + "=" + (a + b));
} else if (a < 0 & b > 0) {
System.out.println("(" + a + ")+" + b + "=" + (a + b));
} else if (b < 0 & a > 0) {
System.out.println(a + "+(" + b + ")=" + (a + b));
} else {
System.out.println("(" + a + ")+(" + b + ")=" + (a + b));
}
break;
case 2:
if (a > 0 & b > 0) {
System.out.println(a + "*" + b + "=" + (a * b));
} else if (a < 0 & b > 0) {
System.out.println("(" + a + ")*" + b + "=" + (a * b));
} else if (b < 0 & a > 0) {
System.out.println(a + "*(" + b + ")=" + (a * b));
} else {
System.out.println("(" + a + ")*(" + b + ")=" + (a * b));
}
break;
case 3:
if (a > 0 & b > 0) {
System.out.println(a + "-" + b + "=" + (a - b));
} else if (a < 0 & b > 0) {
System.out.println("(" + a + ")-" + b + "=" + (a - b));
} else if (b < 0 & a > 0) {
System.out.println(a + "-(" + b + ")=" + (a - b));
} else {
System.out.println("(" + a + ")-(" + b + ")=" + (a - b));
}
break;
case 4:
if (a > 0 & b > 0) {
System.out.println(a + "/" + b + "=" + (a / b));
} else if (a < 0 & b > 0) {
System.out.println("(" + a + ")/" + b + "=" + (a / b));
} else if (b < 0 & a > 0) {
System.out.println(a + "/(" + b + ")=" + (a / b));
} else {
System.out.println("(" + a + ")/(" + b + ")=" + (a / b));
}
break;
}
}
}
上面是对四则运算算法的单元测试,直接显示结果。
这个程序我还加了一个定时的功能,如果在20分钟内做不完,程序会自动跳出,也会显示答对打错题目数
六、两人合作步骤:
本次作业是在第二次作业的基础上进一步修改和加以完善的,张英和安坤同学积极组成了一组进行了相应的讨论与改进。
1、我们拿到本作业后,一起讨论此次作业,针对这个程序进行了需求分析,但是在原有的基础上改动不是很大。
2、代码规范设计方面,我们两位同学认真阅读教材Page57:4.2-4.3节中内容,进行了一系列讨论,在最后我们决定修改安坤同学的java代码,同时我们也邀请了,本学院张艳老师的帮助,进行了一系列强化,使之符合 “代码风格和设计规范”的基本要求,并 采用模块化的思想,我们将函数和一些变量封装起来了。
3、其次,我们认真阅读教材Page21:2.1.1节内容,并进行了对我们的程序一系列相关测试;我们两位同学一直在共同的探索,改进的问题。
4、在探索与改进的过程中,我们对该软件的功能进行了扩展,每一次测试结束会给出本次测试的时间,或者在120秒时间内未完成给出的题目,则会显示时间已到,不能答题!;
5、我们进行的每一过程,都在不断的探索,两个人从合作——分工——合作过程中完成本题目,一起商讨,一起修改代码,一起测试,互相监督并指出相应的问题等等。最后,我们二人也对本次合作进行了总结,收获很多!
七、分析和总结
本题目,主要是设计这块比较重要,我充分感觉到一个程序不止是编程,其实设计分析更重要。
八、PSP统计表格
Personal Software Process Stages |
耗时 |
耗时百分比 |
需求分析 |
25 |
7.14% |
设计 |
67 |
19.14% |
代码实现 |
127 |
36.29% |
测试 |
36 |
10.29% |
代码复审 |
27 |
7.71% |
代码规范 |
39 |
11.14% |
分析总结 |
29 |
8.29% |