中小学数学卷子自动生成程序

【基于C++分析队友代码】中小学数学卷子自动生成程序 【分析队友代码】中小学数学卷子自动生成程序 分析对于同样用C++完成的出题系统,两相比较,取长补短,有所增益。 阅读详情

本来是不打算写这个课程作业的博客的,但是后续结队编程又需要和队友相互交流代码,而我当时写代码的时候也没有过多的注释,为了我的结队队友“、、”能够更轻松的(至少不会想捶我)完成课程任务,我还是准备写篇博客简单介绍一下课程项目。
PS:也附上“、、”的博客网站,也是关于这次的项目的

程序要求

点击下载需求文件

程序架构

使用java实现程序,总有5个类,并使用数据库来查重

1.Main

程序运行的地方,主要处理逻辑,程序状态和用户交互之类的

2.User抽象类

代表出题者的一个抽象类,拥有登录(连接数据库),出题,检查题目是否重复的功能

3.Primary,JuniorHigh,High三个实例用户类

继承User,并实现出题的具体方法

4.mysql数据库

实现题目的查重功能和用户信息存储功能


下面将从Main类开始介绍整个程序

Main类

变量

private int state = LOGIN;//代表程序状态,初始状态为登录状态
private static final int LOGIN = 0;//定义宏LOGIN
private static final int LOGGED_IN = 1;//定义宏LOGGED_IN
private User user;//当前程序的使用用户
private static Scanner scanner = new Scanner(System.in);//实例化输入对象

main方法,程序入口

public static void main(String[] args) throws SQLException, ClassNotFoundException {
    System.out.println("中小学数学卷子自动生成程序");
    Main main = new Main();
    while (true) {
        //根据程序状态实现不同功能
        switch (main.state) {
            case LOGIN:
                //实现登录功能
                main.processLogin();
                break;
            case LOGGED_IN:
                //实现登录后功能
                main.processLoggedIn();
                break;
        }
    }
}

processLogin()

private void processLogin() throws SQLException, ClassNotFoundException {
    System.out.println("请输入用户名、密码");
    String account = scanner.next();
    String password = scanner.next();
    //根据输入的账号密码获取用户实例对象
    user = User.login(account, password);
    if (user == null) {
        System.out.println("请输入正确的用户名、密码");
    } else {
        System.out.println("当前选择为" + user.getDifficultyType() + "出题");
        //将状态更新为已登录
        state = LOGGED_IN;
    }
}

processLoggedIn()

private void processLoggedIn() {
    System.out.println("准备生成" + user.getDifficultyType() + "数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):");
    //接收用户输入
    String scannerContent = scanner.next();
    //监测用户输入是否为int型数据
    try {
        int questionsNumber = Integer.parseInt(scannerContent);
        //-1为退出登录,将状态重置为登录状态,并将用户对象置为null
        if (questionsNumber == -1) {
            state = LOGIN;
            user = null;
        } else if (questionsNumber >= 10 && questionsNumber <= 30) {
            System.out.println("指令正确");
            //开始生产题目,传入的参数为:用户的难度类型,题目数量
            user.generateQuestionsByType(user.getDifficultyType(), questionsNumber);
        } else {
            System.out.println("请输入正确的指令");
        }
    }
    //用户输入为非int型,监测是否为“切换为”指令
    catch (Exception NumberFormatException) {
        if (scannerContent.startsWith("切换为")) {
            String type = scannerContent.substring(3);
            //重置用户的难度类型
            if (type.equals("小学") || type.equals("初中") || type.equals("高中")) {
                user.setDifficultyType(type);
            } else {
                System.out.println("请输入正确的指令");
            }
        } else {
            System.out.println("请输入正确的指令");
        }
    }
}

User类

变量

    private String type;//用户类型
    private String account;//用户账号
    private String password;//用户密码
    private String difficultyType;//难度类型
    //下面的变量需要设置为自己的数据库数据
    private static final String URL = "jdbc:mysql://localhost:3306/testgeneration?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";//数据库连接地址
    private static final String USER = "root";//数据库用户名
    private static final String PASSWORD = "1234";//数据库密码

构造器,getter,setter不再赘述

但是需要注意保护用户隐私,不比设置密码的getter和setter

login

public static User login(String account, String password) throws SQLException, ClassNotFoundException {
    //1.加载驱动程序
    Class.forName("com.mysql.cj.jdbc.Driver");
    String searchedType;//从数据库获取到的类型
    String sql = "SELECT identity from user where account=? and password=?";
    //数据库的运行很耗费资源,所以需要及时关闭
    try (Connection connection = DriverManager.getConnection(URL, USER, PASSWORD)) {
        //下面使用的是PreparedStatement,用法会贴在下面
        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            preparedStatement.setObject(1, account);
            preparedStatement.setObject(2, password);
            try (ResultSet resultSet = preparedStatement.executeQuery()) {
                if (resultSet.next()) {
                    //从数据库获取类型
                    searchedType = resultSet.getString("identity");
                    //返回实例对象
                    switch (searchedType) {
                        case "小学":
                            return new Primary(account, password, searchedType);
                        case "初中":
                            return new JuniorHigh(account, password, searchedType);
                        case "高中":
                            return new High(account, password, searchedType);
                    }
                }
                //查询失败,返回null
                else {
                    return null;
                }
            }
        }
    }
    return null;
}

statement 、prepareStatement的用法和解释,转自优快云

getQuestionsArray

//由子类实现的抽象方法
public abstract String[] getQuestionsArray(int number);

generateQuestions

//根据输入的题目数量生成题目,并将其添加到数据库
public void generateQuestions(int number) {
    Timestamp timestamp = new Timestamp(System.currentTimeMillis());
    try {
        //测试重复问题,addQuestionsToDatabase会返回添加失败的个数,getQuestionsArray是根据不同类型的对象生成的,也就是不同难度的题目生成方法
        int failNum = addQuestionsToDatabase(getQuestionsArray(number), timestamp);
        while (failNum != 0) {
            failNum = addQuestionsToDatabase(getQuestionsArray(failNum), timestamp);
        }
    } catch (ClassNotFoundException | SQLException e) {
        e.printStackTrace();
    }
}

addQuestionsToDatabase

//返回添加失败的问题的个数
protected int addQuestionsToDatabase(String[] questions, Timestamp time) throws ClassNotFoundException, SQLException {
    int count = 0;
    //1.加载驱动程序
    Class.forName("com.mysql.cj.jdbc.Driver");
    String sql = "INSERT INTO testgeneration.questions (question, account, created_time) VALUES (?, ?, ?);";
    try (Connection connection = DriverManager.getConnection(URL, USER, PASSWORD)) {
        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            //创建文件对象
            File file = new File("questionsData/" + account);
            //如果没有用户的文件就创建文件夹
            if (!file.exists()) {
                file.mkdir();
            }
//                System.out.println(file.getPath());
            //创建文件写入对象
            try (FileWriter fileWriter = new FileWriter(file.getPath() + "/" + new SimpleDateFormat("yyyy年-MM月-dd日-HH时-mm分-ss秒").format(time) + ".txt", true)) {
                //在多次写入时preparedStatement就能大大降低运行成本
                for (int i = 0; i < questions.length; i++) {
                    preparedStatement.setObject(1, questions[i]);
                    preparedStatement.setObject(2, account);
                    preparedStatement.setObject(3, time);
                    try {
                        preparedStatement.executeUpdate();
                        fileWriter.write(questions[i] + "\r\n");
                    }
                    //如果重复则会报错,并将重复的题目数量+1
                    catch (SQLException e) {
                        System.out.println("'" + questions[i] + "'" + "与之前的题目重复,准备重新出题");
                        count++;
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
    return count;
}

User子类

User的子类主要介绍生成题目的方法

Primary

//符号集
private static final String[] symbols = {"+", "-", "*", "/"};
@Override
public String[] getQuestionsArray(int number) {
    String[] questions = new String[number];
    //StringBuilder在操作变换的字符串的时候效率更高
    StringBuilder question = new StringBuilder();
    //以当前时间作为随机种子
    Random random = new Random(System.currentTimeMillis());
    for (int index = 0; index < number; index++) {
        //随机生成操作数数量,最少为两个
        int operandsNumber = random.nextInt(4) + 2;
        //随机生成左括号的位置
        int bracketStart = random.nextInt(operandsNumber);
        //随机生成右括号的位置
        int bracketEnd = random.nextInt(operandsNumber);
        //判断括号位置是否合法
        boolean isBracketIllegal = bracketStart < bracketEnd;
        int[] operands = new int[operandsNumber];
        for (int i = 0; i < operandsNumber; i++) {
            //操作数为1~100
            operands[i] = random.nextInt(100) + 1;
            //括号位置合法,并且当前为左括号位置
            if (isBracketIllegal && i == bracketStart) {
                question.append("(");
            }
            question.append(operands[i]);
            //操作数合法并且当前为右括号位置
            if (isBracketIllegal && i == bracketEnd) {
                question.append(")");
            }
            if (i < operandsNumber - 1) {
                //随机从符号集里抽取一个符号
                int symbolIndex = random.nextInt(symbols.length);
                question.append(symbols[symbolIndex]);
            }
            //最后一个操作数后面为=号
            else {
                question.append("=");
            }
        }
        questions[index] = question.toString();
        System.out.println(question);
        //重新设置问题
        question.delete(0, question.length());
    }
    return questions;
}

JuniorHigh

//符号集
private static final String[] symbols = {"+", "-", "*", "/"};
@Override
public String[] getQuestionsArray(int number) {
    String[] questions = new String[number];
    StringBuilder question = new StringBuilder();
    Random random = new Random(System.currentTimeMillis());
    for (int index = 0; index < number; index++) {
        //操作数数量,1到5个
        int operandsNumber = random.nextInt(5) + 1;
        //括号起始点
        int bracketStart = random.nextInt(operandsNumber);
        //括号终止点
        int bracketEnd = random.nextInt(operandsNumber);
        //初中符号个数
        int juniorSymbolNum = operandsNumber == 1 ? 1 : random.nextInt(operandsNumber) + 1;
        //根号个数
        int RadicalNum = random.nextInt(juniorSymbolNum + 1);
        //平方个数
        int squareNum = juniorSymbolNum - RadicalNum;
        //是否有括号
        boolean isBracketIllegal = bracketStart < bracketEnd;
        int[] operands = new int[operandsNumber];
        for (int i = 0; i < operandsNumber; i++) {
            //是否加根号
            boolean addRadical = operandsNumber == 1 ? RadicalNum == 1 : random.nextBoolean();
            //是否加平方
            boolean addSquare = operandsNumber == 1 ? !addRadical : !addRadical && random.nextBoolean();
            operands[i] = random.nextInt(100) + 1;
            if (isBracketIllegal && i == bracketStart) {
                //在括号外加根号
                boolean outsideRadical = random.nextBoolean();
                if (outsideRadical && RadicalNum > 0) {
                    question.append("√");
                    RadicalNum--;
                }
                question.append("(");
            }
            //普通根号
            if (addRadical && RadicalNum > 0) {
                question.append("√");
                RadicalNum--;
            }
            question.append(operands[i]);
            //普通平方
            if (addSquare && squareNum > 0) {
                question.append("²");
                squareNum--;
            }
            if (isBracketIllegal && i == bracketEnd) {
                boolean outsideSquare = random.nextBoolean();

                question.append(")");
                //括号外平方
                if (outsideSquare && squareNum > 0) {
                    question.append("²");
                    squareNum--;
                }
            }
            if (i < operandsNumber - 1) {
                int symbolIndex = random.nextInt(symbols.length);
                question.append(symbols[symbolIndex]);
            }
            //最后一个操作数后面为=号
            else {
                question.append("=");
            }
        }
        questions[index] = question.toString();
        System.out.println(question);
        question.delete(0, question.length());
    }
    return questions;
}

High

//符号集
private static final String[] symbols = {"+", "-", "*", "/"};
private static final String[] highSymbols = {"sin", "cos", "tan"};
@Override
public String[] getQuestionsArray(int number) {
    String[] questions = new String[number];
    StringBuilder question = new StringBuilder();
    Random random = new Random(System.currentTimeMillis());
    for (int index = 0; index < number; index++) {
        //操作数数量,1到5个
        int operandsNumber = random.nextInt(5) + 1;
        //括号起始点
        int bracketStart = random.nextInt(operandsNumber);
        //括号终止点
        int bracketEnd = random.nextInt(operandsNumber);
        //初中符号个数
        int juniorSymbolNum = random.nextInt(operandsNumber) + 1;
        //根号个数
        int RadicalNum = random.nextInt(juniorSymbolNum + 1);
        //平方个数
        int squareNum = juniorSymbolNum - RadicalNum;
        //高中符号个数
        int highSymbolNum = operandsNumber == 1 ? 1 : random.nextInt(operandsNumber) + 1;

        //是否有括号
        boolean isBracketIllegal = bracketStart < bracketEnd;
        int[] operands = new int[operandsNumber];
        for (int i = 0; i < operandsNumber; i++) {

            //是否加高中符号
            boolean addHighSymbol = operandsNumber == 1 || random.nextBoolean();
            //是否加根号
            boolean addRadical = !addHighSymbol && random.nextBoolean();
            //是否加平方
            boolean addSquare = !addRadical && random.nextBoolean();
            operands[i] = random.nextInt(100) + 1;
            if (isBracketIllegal && i == bracketStart) {
                //在括号外加根号
                boolean outsideRadical = random.nextBoolean();
                //在括号外加高中符号
                boolean outsideHighSymbol = !outsideRadical && random.nextBoolean();
                if (outsideRadical && RadicalNum > 0) {
                    question.append("√");
                    RadicalNum--;
                }
                if (outsideHighSymbol && highSymbolNum > 0) {
                    question.append(highSymbols[random.nextInt(highSymbols.length)]);
                    highSymbolNum--;
                }
                question.append("(");
            }
            //普通根号
            if (addRadical && RadicalNum > 0) {
                question.append("√");
                RadicalNum--;
            }
            if (addHighSymbol && highSymbolNum > 0) {
                question.append(highSymbols[random.nextInt(highSymbols.length)]);
                highSymbolNum--;
            }
            question.append(operands[i]);
            //普通平方
            if (addSquare && squareNum > 0) {
                question.append("²");
                squareNum--;
            }
            if (isBracketIllegal && i == bracketEnd) {
                boolean outsideSquare = random.nextBoolean();

                question.append(")");
                //括号外平方
                if (outsideSquare && squareNum > 0) {
                    question.append("²");
                    squareNum--;
                }
            }
            if (i < operandsNumber - 1) {
                int symbolIndex = random.nextInt(symbols.length);
                question.append(symbols[symbolIndex]);
            }
            //最后一个操作数后面为=号
            else {
                question.append("=");
            }
        }
        questions[index] = question.toString();
        System.out.println(question);
        question.delete(0, question.length());
    }
    return questions;
}

数据库

user用户信息

create table user
(
    account  varchar(12) not null
        primary key,
    password varchar(15) null,
    identity varchar(5)  null
);

questions题目信息

将question和account设置为键,使添加时,同一个用户不能重发添加一个题,实现题目查重

create table questions
(
    q_id         int auto_increment
        primary key,
    question     varchar(30) null,
    account      varchar(8)  null,
    created_time timestamp   null,
    constraint questions_pk
        unique (question, account),
    constraint questions_fk
        foreign key (account) references user (account)
);

完整程序代码

项目完整文件已经上传到github,仅供参考

更多

欢迎来访我的个人网站

题库及组卷系统(数学).rar 题库及组卷系统(数学),不是源代码,可以用作设计题库的参考!转载网上的,不是本人写的! 立即下载

相关推荐

小学生数学练习题自动生成器

自己编写的一个用来自动生成小学生数学练习题的工具,支持加减乘除及混合运算,可指定几位数和几个数参与的连续加减乘除,自动保证计算结果总是整数,不会出现除不尽小数的问题。生成习题的同时还能自动同步生成答案。每次自动生成18页A4大小的习题,并同时生成2页答案方便家长批改习题,无需编辑可直接打印出来。

使用Python为小学生批量生成数学题

作者小明的老师布置了一项作业,要求学生每天坚持做20道乘法和加减法混合运算题目。为了满足这个需求,作者决定使用Python批量生成符合要求的数学题。文章通过具体的代码和步骤,生动地展示了作者是如何使用Python解决实际问题的。这种方法不仅提高了效率,还能够满足特定的需求,为学生提供更有趣、个性化的学习体验。

一键难忘的博客 7135

个人项目:中小学数学卷子自动生成程序

个人编程项目源码-Java,本资源主要是某哥课程的个人编程题目,主要是实现如下功能: 1.输入与用户数据库对应的用户名密码即可登录,否则重新输入 2.登录之后可以输入题目数量,然后就可以生成对应难度的题目了 3.登录过程可以切换难度 4.试卷会按照相应格式保存为txt文件

python实现随机生成小学数学题目并输出到word

这个程序使用了Python的random模块来生成随机数和随机运算符,然后根据不同的运算符生成不同的数学题目。这些题目和答案使用Python的docx模块输出到Word文档中。您可以根据需要修改程序中的字体样式和题目数量。要运行程序,请将它保存为.py文件并在命令行中输入python filename.py命令。程序将在当前目录下创建一个名为math_questions.docx的Word文档,其中包含生成的数学题目。

yechuanhui的专栏 1166

单相变换器的二次纹波分析

1. 单相PWM整流器的二次纹波产生原因   单相变换器的二次纹波产生的原因是功率含有二次脉动分量。设电网电压 us=Vmsin(wt),电网电流IL=Imsin(wt−θ)I_L=I_msin(wt-\theta)IL​=Im​sin(wt−θ)。其中w是电网电压披绿,θ\thetaθ是电流之后电压相位。保证输入功率和输出功率相等,就要保证两者的直流量和交流量对应相等。   uDu_DuD​为 PWM 整流器直流电容电压平均值,IoI_oIo​ 为负载电流平均值 ,uDC^\widehat {u_{DC}

qq_38847810的博客 4974

草莓成熟度与叶片病虫害智能检测数据集应用全解析

本文深入解析草莓成熟度与叶片病虫害智能检测数据集的应用价值,涵盖从绿草莓到红果转色的完整成熟周期及白粉病、炭疽病等7种病害的精准识别。通过实战案例展示如何提升病害识别率至94%,并介绍数据集的科研价值,包括跨品种迁移学习和多模态数据融合技术。

weixin_28366353的博客 275

word置顶_一款word插件,函数图像,数学符号一键生成

这款办公插件是专门为数学老师量身定做的,用于编写数学试卷、教学文档、电子备课,试题编辑,课件制作的通用工具软件。该工具弥补了WORD编辑过程中输入各种数学图形、符号、公式等不方便的遗憾,减少了编写数学试卷等工作中的大量重复劳动,极大地提高了工作效率。该工具软件作为word 的一个插件,所以你的电脑必须安装word软件才可正常使用,包括平面几何、立体几何、函数图形、图像等大量图形和符号,其中“函数图...

weixin_39939665的博客 1212

避坑指南:OpenWebUI+SearXNG联网搜索的5个常见配置错误及解决方法

本文详细解析了OpenWebUI与SearXNG整合过程中常见的5个配置错误及解决方案,包括JSON格式配置陷阱、国内搜索引擎缺失、连续搜索失效等问题。通过实战验证的优化策略,帮助开发者避免性能下降和功能异常,提升大模型与搜索引擎的协同效率。

jenkins8butler的博客 820

python试卷生成_python生成试题库和界面 (python generate test database and layout)

1 import tkinter #Tkinter模块是python的标准Tk GUI工具包的接口2 #from tkinter import *3 #from tkinter.messagebox import *4 from tkinter importmessagebox5 importsqlite3678 #调用下一道题目函数9 defcallNext():10 #设置k和sco...

weixin_39883091的博客 530

高通camx ThreadManager

m_pCore->AcceptNewJob是将一个Job或者任务插入一个Queue,有一个工作线程循环从Queue中取Job任务执行,执行任务就是回调任务中的callback函数,AcceptNewJob实现。调用AddToPriorityQueue将任务添加到queue任务队列,那么什么时候从这个queue中取任务执行呢?有个线程循环执行DoWork,最终调用checkAndDequeue取任务执行。

GetnextWindow的专栏 437

Open3D 高斯牛顿法优化的ICP点云配准

本文介绍了基于高斯牛顿法的ICP点云配准算法。算法通过最小化源点云与目标点云之间的误差函数,求解最优的刚性变换参数(平移向量和欧拉角)。核心内容包括:1)建立误差函数和目标函数;2)推导雅可比矩阵计算,特别是旋转导数的李代数近似;3)详细阐述高斯牛顿法的迭代流程,包括变换计算、最近邻搜索、参数更新等步骤;4)分析算法的优缺点,指出其具有二阶收敛速度但可能陷入局部最优。最后给出了完整的数学推导过程,包括误差函数的泰勒展开和目标函数的近似优化。该算法适用于三维点云配准任务,但需要良好的初始位姿以避免局部收敛问题

点云侠的博客 128

软件工程导论个人项目 -- 中小学数学卷子自动生成程序

中小学数学卷子自动生成程序1. 项目需求1.1 项目名称1.2 用户1.3 功能2. 程序分析2.1 Teacher类 1. 项目需求 1.1 项目名称 中小学数学卷子自动生成程序。 1.2 用户 小学、初中、高中老师。 1.3 功能 命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入 正确的用户名、密码”,重新输入用户名、密码; 登录

weixin_43320890的博客 1597

SentEval学习笔记

SentEval allows you to evaluate your sentence embeddings as features for the followingdownstreamtasks: Task Type #train #test needs_train set_classifier MR movie review(影评) 11k 11k 1 1 CR product review(产品评述) ...

AlphaFinance 803

结对编程分析——中小学数学卷子自动生成程序

中小学数学卷子自动生成程序分析 本次课程任务要求我们在规定时间内完成一个可以自动生成中小学数学题目卷子的程序,用户为老师。主要是实现账户名密码的验证,账户的切换,根据账户类型生成不同难度的试题并查重。在此简单分析一下搭档小梁的项目代码。 程序流程 小梁的程序流程图如下图所示,可以看到她的程序编写逻辑十分清晰,将程序总体分为登录和题目创建两个模块,在模块内部对各个方法进行封装实现各细节功能。 优点 变量命名清晰规范,很好的遵循了编码规则。且仅有一个成员变量,节省了内存空间。 主函数中只调用了两个方法

qq_43425914的博客 603

STM32入门教程:人脸识别

STM32CubeMX配置 打开STM32CubeMX,创建一个新的工程,并选择你使用的STM32系列和具体型号。根据摄像头模块的规格,将摄像头的输出引脚连接到相应的STM32引脚上。人脸识别是一种非常常见的人工智能应用,它可以通过摄像头捕捉到的图像,识别出图像中的人脸并进行相关的分析和处理。在本教程中,我们将使用STM32开发板和相关传感器,通过指导你搭建一个基于STM32的简单人脸识别系统,并编写相应的代码来实现该功能。另外,为了达到更好的人脸识别效果,可能需要使用更高性能的处理器和更复杂的算法。

吃不胖. 374

【Android Performance】Android CPU绑核实战:从taskset到cpuset的完整调优指南

本文系统讲解Android系统中的CPU绑核(CPU Affinity)技术,涵盖用户空间的taskset命令行绑核、内核cpuset分组机制的原理与操作、进程级与线程级绑核的代码实现、以及中断绑核的底层方法。文中深入拆解CPU亲和性掩码的计算规则、各cpuset分组的默认策略差异、绑核后的验证手段及常见踩坑场景,并配有多项实操命令与C代码示例。适合从事Android系统性能调优、进程调度优化的开发者阅读。

weixin_44081096的博客 1312

中小学数学卷子自动生成程序——结队编程队友互相评价

中小学数学卷子自动生成程序——结队编程队友互相评价 评价方面中小学数学卷子自动生成程序——结队编程队友互相评价基本功能实现一.功能要求:二.登录要求的实现三,优缺点分析:代码分析一.代码整体分析:二.代码格式与规范三.优缺点分析 基本功能实现 一.功能要求: 1、命令行输入用户名和密码,核对是否正确。根据账户类型显示,否则系统提示错误信息,重新输入用户名、密码。 2、登录后,系统提示,用户输入选择,用户手动输入题目数量,按下-1退出 3、程序根据输入生成符合的题目的卷子。同一个老师的卷子中的题目不能与以前的

qq_45653461的博客 555

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

中小学数学卷子自动生成程序:队友代码分析

本次的个人项目是——中小学数学卷子自动生成程序,同学的程序基本实现了个人项目的几点要求,我觉得还是不错的:D 优点一:代码编程风格统一,增加开发过程代码的可读性和易维护性。 优点二:函数及变量命名规范准确,具有自我描述性,可以让人一眼看出是什么功能。 优点三:多个不同功能函数分离,虽然没有分包管理,但是日后要实现的话也便于分离。 优点四:和之前的卷子查重部分写得挺...

dhbtt5812的博客 285

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

中小学数学卷子自动生成程序--对G同学的代码分析

前几天,在课程要求下完成了个人项目的项目工程编写,即一个中小学数学卷子自动生成程序。 程序主要功能是用户预设账户登录后可以选择等级进行对应的小中高的数学卷子对应出题生成txt文本。 本文针对partner G 的工程进行分析,讲解这个项目的一些过程得失。 据需求分析,项目难点在于 1.文件流的使用,包括文件夹的生成,试卷txt的生成 2.随机出题已经保证出的题目不会重复 3.题目的数学...

青城墨白的 399

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

个人项目:中小学数学卷子自动生成程序——队友代码点评

个人项目:中小学数学卷子自动生成程序——队友代码点评 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进

ohh-hl的博客 579

结对编程——中小学数学卷子自动生成程序互评

结对编程——中小学数学卷子自动生成程序互评 优点: 1、程序分为五个类,Demo,HighSchool,MiddleSchool,PrimarySchool,UserDate类,分别对应程序运行,高中题目生成,初中题目生成,小学题目生成和用户账号密码初始化,程序结构明确,便于设计和修改。 2、用户体验很好,输入时有很多提示,不会导致用户输入错误,便于用户使用。 3、代码使...

ZHANGQING2016的博客 302

中小学数学卷子自动生成程序--对郭同学的代码分析

前几天,在课程要求下完成了个人项目的项目工程编写,即一个中小学数学卷子自动生成程序。 程序主要功能是用户预设账户登录后可以选择等级进行对应的小中高的数学卷子对应出题生成txt文本。 本文针对partner G 的工程进行分析,讲解这个项目的一些过程得失。 据需求分析,项目难点在于 1.文件流的使用,包括文件夹的生成,试卷txt的生成 2.随机出题已经保证出的题目不会重复 3....

aiqiang7851的博客 292

【java】个人项目:中小学数学卷子自动生成程序

用户: 小学、初中和高中数学老师。 功能: 1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户名、密码”,重新输入用户名、密码; 2、登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”,XX为小学、初中和高中三个选项中的一个,用户输入所需出的卷子的题目数量,系统默认将根据账号类型进行

小梁说代码的博客 5297

个人项目——中小学数学卷子自动生成程序

个人项目 第一次接触这种项目,感觉很难却又有点好玩;第二次写博客,感觉这是一个好习惯,希望后面能够继续坚持,加油! ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019091920103284.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly...

qq_44937699的博客 4512

中小学数学卷子自动生成程序——与Creddit同学的结对编程项目分析

1.简单介绍 项目名称:中小学数学卷子自动生成程序 主要功能:a.登陆 通过命令行输入账号和密码进行登陆,成功后出现提示 否则需要重新输入 b.切换难度 可以输入“切换为XX”,修改生成题目的类型,如小学,初中,...

313
上一篇: 中秋节在女友手上p了一个超级漂亮的月亮
下一篇: Spring/IoC、DI、Bean
南懿烨曦
博客等级 码龄6年 108粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值