IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java实现小学数学练习系统 -> 正文阅读

[Java知识库]Java实现小学数学练习系统

小学数学练习

1、问题描述

编写一个帮助小学生练习数学的程序,帮助小学生练习 100 以内的四种数学运算:加、减、乘、除。

2、要求

(1)程序应先询问用户的 ID 号(ID 号包括两个大写字母和 4 位数字),例如: 请输入用户 ID 号:AB1234,ID无误后方可进入菜单界面。

(2)对菜单的要求:必须有的功能有测试、检查历史成绩、检查答题情况、退出系统

(3)对题目的要求:学生将依次回答每一个问题(在等于号后面给出答案),然后给出下一道题。试题应包含四种数学运算:加、减、乘、除,它们是随机产生的。相邻的问题应该是不同的操作, 每个操作必须至少出现一次。每道题随机生成数字,必须确保参与运算的数字和结果都小于 100 且大于零的整数,除法时 还要注意两个整数要能整除。十道题做完后,记录学生完成这十道题所用的时间。

(4)对输出格式的要求:历史成绩包含id、分数、答题所用时间,例如AB1234 80 150 秒;检查答题情况包含问题、正确答案、使用者答案,格式如问题 | 正确答案 | 你的答案

3、对问题进行分析

首先分析对象,有学生和问题两个对象。再分析对象具有哪些属性,学生:id、分数、答题时间;问题:两个运算的数、运算符号、表达式、学生的答案、题目的正确答案。模块分析:在此我使用了四个类,学生类、问题类分别包含各自的字段、读写方法、覆写toString()方法;Dao类包含一些要使用的方法如判断id、生成10个相邻之间不相等的范围是0-3的数字、生成题目、学生参与测试、检查分数、打印历史成绩;Main类包含main()方法,实现菜单。

4、程序

首先学生类

public class Student {
    private String id;
    private int score;
    private long time;

    public Student() {
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public int getScore() {
        return score;
    }
    public void setScore(int score) {
        this.score = score;
    }
    public long getTime() {
        return time;
    }
    public void setTime(long time) {
        this.time = time;
    }
    //最终存入record文件的格式
    @Override
    public String toString() {
        return id+" "+score+" "+time+"秒";
    }
}

问题类

public class Problem {
    private int x;
    private int y;
    private int symbol;        //通过数字表示不同的运算符号
    private int result;
    private int studentResult;
    private String expression; //表达式的表现形式

    public Problem() {
    }
    public Problem(int x, int y, int symbol) {
        this.x = x;
        this.y = y;
        this.symbol = symbol;
    }

    public int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
    public int getY() {
        return y;
    }
    public void setY(int y) {
        this.y = y;
    }
    public int getSymbol() {
        return symbol;
    }
    public void setSymbol(int symbol) {
        this.symbol = symbol;
    }
    public int getResult() {
        return result;
    }
    public void setResult(int result) {
        this.result = result;
    }
    public int getStudentResult() {
        return studentResult;
    }
    public void setStudentResult(int studentResult) {
        this.studentResult = studentResult;
    }
    public String getExpression() {
        return expression;
    }
    public void setExpression(String expression) {
        this.expression = expression;
    }
    //匹配方法,将不同的数字与不同的表达式相匹配
    public void matchSymbol(){
        switch (symbol){
            case 0:
                result = x+y;
                expression = x+"+"+y+"=";
                break;
            case 1:
                result = x-y;
                expression = x+"-"+y+"=";
                break;
            case 2:
                result = x*y;
                expression = x+"*"+y+"=";
                break;
            case 3:
                result = x/y;
                expression = x+"/"+y+"=";
                break;
            default:
                break;
        }
    }
    //检查分数的格式
    @Override
    public String toString() {
        return expression+"|"+result+"|"+studentResult;
    }
}

Dao类进行数据处理,主要的功能实现就在这里了

import java.io.*;
import java.util.Random;
import java.util.Scanner;

public class Dao {
    //判断id是否合理,正则表达式
    public boolean judge(String id){
        String str = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6}$";
        return id.matches(str);
    }
    //生成10个相邻之间不相等的范围是0-3的数字
    public int[] symbol(){
        Random random = new Random();
        int[] ints = new int[10];
        int a;
        for (int i = 0;i<10;i++){
            a = random.nextInt(4);
            ints[i] = a;
            //如果相邻的两个符号相同,循环进行回退
            if (i>0&&ints[i]==ints[i-1]){
                i--;
            }
        }
        return ints;
    }
    //生成题目
    public Problem[] createProblem(){
        Random rd = new Random();
        Problem[] problems = new Problem[10];
        int[] symbol = symbol();    //上方的生成10个数字的方法
        for (int i = 0;i<10;i++){
            int x = rd.nextInt(99)+1;
            int y = rd.nextInt(99)+1;
            //创建临时问题对象,满足要求后存入数组
            Problem temp = new Problem(x,y,symbol[i]);
            temp.matchSymbol();
            //如果是除法要保证两个整数能整除
            if (symbol[i]==3){
                if (x%y==0){
                    problems[i] = temp;
                }else {
                    i--;
                }
            }else {
                //结果必须保证在100以内
                if (temp.getResult()>0&&temp.getResult()<100){
                    problems[i] = temp;
                }else {
                    i--;
                }
            }
        }
        return problems;
    }
    public void test(Student s) throws IOException {
        long time1 = System.currentTimeMillis();
        int correctNum = 0;                    //设置累加变量来记录学生答对的题目数
        Scanner sc = new Scanner(System.in);
        Problem[] problems = createProblem();
        for (int i = 0;i<10;i++){
            System.out.print(problems[i].getExpression());
            problems[i].setStudentResult(sc.nextInt());
            if (problems[i].getResult()==problems[i].getStudentResult()){
                correctNum++;
            }
        }
        long time2 = System.currentTimeMillis();
        long time = (time2-time1)/1000;
        //输入用户信息
        s.setTime(time);
        s.setScore(correctNum*10);
        //将用户成绩写入文件record.txt
        FileWriter writer = new FileWriter("D:\\record.txt",true);//第二个参数是保证将内容写在文件末尾处,而不是覆盖原文件
        BufferedWriter bw = new BufferedWriter(writer);
        bw.write(s.toString());
        bw.write("\n");
        bw.flush();          //将缓冲区的内容写入
        //将题目信息写入文件problem
        FileWriter fileWriter = new FileWriter("D:\\problem.txt",true);
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
        bufferedWriter.write("\n");
        for (int i = 0;i<10;i++){
            bufferedWriter.write(problems[i].toString());
            bufferedWriter.newLine();
            bufferedWriter.flush();
        }
    }
    //检查分数
    public void check() throws IOException {
        FileReader reader = new FileReader("D:\\problem.txt");
        BufferedReader br = new BufferedReader(reader);
        StringBuffer buffer = new StringBuffer();
        if (br.ready()){
            String temp ;
            while ((temp= br.readLine())!=null){
                buffer.append(temp);
                buffer.append("\n");
            }
            System.out.println(buffer.toString());
        }else {
            System.out.println("还未有过记录");
        }
    }
    //打印历史成绩
    public void printAllData() throws IOException {
        FileReader reader = new FileReader("D:\\record.txt");
        BufferedReader bufferedReader = new BufferedReader(reader);
        StringBuffer buffer = new StringBuffer();
        if (bufferedReader.ready()){
            String temp;
            while ((temp=bufferedReader.readLine())!=null){
                buffer.append(temp);
                buffer.append("\n");
            }
            System.out.println(buffer.toString());
        }else {
            System.out.println("还未有记录");
        }
    }
}

最后进行测试

package Project11;

import java.io.IOException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        Student student = new Student();//创建一个学生
        Dao dao = new Dao();            //创建Dao类对象来调用各种方法
        System.out.println("学生数学练习系统");
        System.out.println("请输入你的id");
        boolean flag = true;            //id的标志位
        boolean sign = true;            //菜单标志位
        while (flag){
            String id = sc.next();
            if (dao.judge(id)){
                student.setId(id);
                while (sign){
                    System.out.println("请选择使用的功能:1、2、3、4");
                    System.out.println("(1)开始测试");
                    System.out.println("(2)检查分数");//从文件problem.txt中检查
                    System.out.println("(3)历史成绩");
                    System.out.println("(4)退出");
                    int input = sc.nextInt();
                    switch (input){
                        case 1:
                            dao.test(student);
                            System.out.println("学生成绩:"+student.getScore());
                            break;
                        case 2:
                            System.out.println("问题|答案|正确答案");
                            dao.check();
                            break;
                        case 3:
                            dao.printAllData();
                            break;
                        case 4:
                            sign = false;
                            flag = false;
                            break;
                        default:
                            System.out.println("请输入正确的功能序号");
                            break;
                    }
                }
            }else {
                System.out.println("id有误");
                flag = false;
            }
        }
    }
}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 11:31:22  更:2021-07-25 11:32:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 11:13:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码