小学数学练习
2.1【问题描述】
编写一个帮助小学生练习数学的程序,帮助小学生练习100以内的四种数学运算:加、减、乘、除。
2.2【基本要求】
a)程序应先询问用户的ID号(ID号的前两个字符是大写字母,后四个字符是4位数字),例如:
请输入用户ID号:AB1234
程序应对输入的ID号验证,符合ID号要求的格式,然后程序提示三种操作选择:
(1)开始测试
(2)检查分数
(3)退出
b)测试:该程序将给出 10 道数学题,例如:
12 * 3 = 36
48 + 32 = 80
„
56 / 28 = 2
注意:
i)学生将依次回答每一个问题(在等于号后面给出答案),然后给出下一道题。
ii)试题应包含四种数学运算:加、减、乘、除,它们是随机产生的。相邻的问题应该是不同的操作, 每个操作必须至少出现一次。报告中应给出实现方法或算法。
iii)为每道题随机生成数字,但必须确保参与运算的数字和结果都小于100且大于零的整数,除法时还要注意两个整数要能整除。报告中应给出实现方法或算法。
iv)十道题做完后,记录学生完成这十道题所用的时间。
v)给每个学生一个分数。将该学生的 ID、成绩和使用时间保存到一个为 record.txt 的文件中。
vi)在屏幕上输出以下信息:(3列信息,第1列是b)中的测试题,蓝色部分)
问题 | 正确答案 | 你的答案
c)成绩检查:从文件“record.txt”中列出该学生的所有历史成绩(其他学生的不显示)。例如:
你以前的记录是:
AB1234 80 150 秒
AB1234 50 182 秒
AB1234 90 98秒
问题描述:
需要做成一个交互页面,判断录入同学的信息是否正确,能够随机出现小学数学题目,并且要能记录时间、保存答题记录。还要能够判断出输入答案的正确性
问题分析:
判断录入同学信息可以根据ascii码的区间来辨别,之后运用随机生成数字来创造十个小学算术,同时用记录文档的函数将每次答题的信息记录下来。
功能实现:
package com.report;
import java.io.File;
import java.io.FileWriter;
import java.util.Arrays;
import java.util.Scanner;
import java.lang.System;
public class Test {
static String[] sb = new String[10];
public static void main(String[] args) {
String[][] test0 = new String[3][4];
String[] test = new String[4];
int q = 0;
System.out.println("欢迎来到太理测试乐园!!!");
System.out.println("先输入独属于宝子你的专属ID账号吧!");
while (true) {
System.out.println("(ID账号是由2位大写字母和4位数字组成的哦!!!)");
Scanner sc0 = new Scanner(System.in);
String sc = sc0.next();
char[] id = sc.toCharArray();
if (!inspection(id)) {
System.out.println("输入错误,重新输入:");
} else {
test[0] = String.valueOf(id);
test0[q][0] = test[0];
break;
}
} try {
// 此处我放在了这个位置,可以更换
File file = new File("D:\\record.txt");
if (!file.isFile()) // 如果没有该文件,就新建一个
file.createNewFile();
FileWriter fileWriter = new FileWriter(file, true); // 通过 true 设置追加
fileWriter.write("你以前的记录是: \n");
fileWriter.flush(); // 清空缓存区,压入文件
fileWriter.close();
boolean flag = true;
while (flag) {
System.out.println("1.测试计算");
System.out.println("2.本次测试数据");
System.out.println("3.退出");
System.out.println("既然辣馍喜欢测试,辣就请做出你的选择吧");
Scanner ch0 = new Scanner(System.in);
int ch = ch0.nextInt();
int j = 0;
if (ch == 1) {
System.out.println("马上就要开始测试了,准备好了吗?");
System.out.println("一道题10分,一共十道题,满分100分!");
System.out.println("测试游戏正式开始!!!");
long startTime = System.currentTimeMillis();
String grade;
int k = 0;
while (j < 9) {
double x = Math.random();
double min = 0, max = 100;
double y = x * (max - min) + min;
double m = Math.random();
double min1 = 0, max1 = 100;
double n = m * (max1 - min1) + min1;
long a = (long) y, b = (long) n;
max = 4;
y = x * (max - min) + min;
long si = (long) y;
int an = 0;
char si0 = '+';
if (si == 0) {
j++;
an = Integer.parseInt(String.valueOf(a)) + Integer.parseInt(String.valueOf(b));
} else if (si == 1) {
si0 = '-';
j++;
an = Integer.parseInt(String.valueOf(a)) - Integer.parseInt(String.valueOf(b));
} else if (si == 2) {
si0 = '*';
j++;
an = Integer.parseInt(String.valueOf(a)) * Integer.parseInt(String.valueOf(b));
} else if (si == 3 && Integer.parseInt(String.valueOf(a)) != 0) {
si0 = '/';
j++;
an = Integer.parseInt(String.valueOf(a)) / Integer.parseInt(String.valueOf(a));
} else if (si == 3 && Integer.parseInt(String.valueOf(a)) == 0) {
throw new ArithmeticException();
}
System.out.print("第" + j + "个式子:\t" + a + si0 + b + " =");
Scanner p = new Scanner(System.in);
int an0 = p.nextInt();
//System.out.println(an);
sb[j - 1] = (a + " " + si0 + " " + b + "= " + an + "\t" + an0);
if (an0 == an) {
k++;
}
}
long endTime = System.currentTimeMillis();
test[2] = String.valueOf((endTime - startTime) / 1000);
test[1] = String.valueOf(k * 10);
switch (k) {
case 10:
grade = "优秀 请继续保持!";
case 9:
grade = "良好 查漏补缺";
case 8:
grade = "良好 查漏补缺";
case 7:
grade = "及格 再接再厉呀!";
case 6:
grade = "及格 再接再厉呀!";
default:
grade = "差 要认真反思呀!";
}
test[3] = grade;
test0[q][1] = test[1];
test0[q][2] = test[2];
test0[q][3] = test[3];
System.out.println(" 问题 | 正确答案 | 你的答案");
for (int i = 0; i < 9; i++) {
System.out.println(sb[i]);
}
q++;
test0[q][0] = test[0];
} else if (ch == 2) {
System.out.println("你以前的记录是: ");
System.out.println(test[0] + " " + test[1] + " " + test[2] + "秒");
} else if (ch == 3) {
System.out.println("正在退出……");
flag = false;
file.delete(); // 删除文件
break;
} else {
System.out.println("输入错误,请在1~4中做出选择");
}
}
}
catch(Exception e) {
e.printStackTrace();
}
}
private static boolean inspection(char[] id) {
if(id.length!=6){
System.out.println("提示: 用户名ID是六位大写字母和数字组成的哦!");
return false;
}
for(int a=0;a<id.length;a++) {
if (a < 2) {
//判断是否为大写字母
if (!Character.isUpperCase(id[a])) { // 前两位不是大写字母
System.out.println("提示: 用户名ID的前两位应该是大写字母哦! ");
return false;
}
} else if(a>=2&&a<6) {
//判断是否为数字
if (!Character.isDigit(id[a])) { // 后四位不是数字
System.out.println("提示: 用户名ID的后四位应该是数字哦! ");
return false;
}
}
}
return true;
}
}
运行结果: