You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
txj e1de42476c
Initial commit: add math test project structure
5 months ago
..
README.md Initial commit: add math test project structure 5 months ago

README.md

中小学数学卷子自动生成系统文档

注意事项(已经经过终端测试)

为了方便助教检查,将此注意事项放在最前面:

  • 有关功能中的查重:

实现了双重查重机制:

内存级查重 - 当前会话中生成的题目查重 文件级查重 - 历史生成的所有题目查重 主要代码在 AbstractQuestionGenerator 类和FileServiceImpl中

  • 测试时的java-version; java version "23" 2024-09-17 Java(TM) SE Runtime Environment (build 23+37-2369) Java HotSpot(TM) 64-Bit Server VM (build 23+37-2369, mixed mode, sharing)
  • 使用可执行文件:在cmd中运行如果是在登录时一直出现用户名密码不匹配可输入chcp 65001成功运行
  • 在powershell中运行# 设置 .NET 控制台输入/输出编码为 UTF-8 [Console]::InputEncoding = [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
  • 运行指令 java -jar 可执行文件
  • 生成的文件存放的题目会保存在可执行文件存放的文件夹中的exam_papers文件夹中若没有会创建该文件夹
  • 由于需求文件中有些提示词的连接并不是很流畅,我是尽可能按照提示词来写的;且需求文档的描述并不是特别清晰,在此提出是为了表明某些情况并不是提示信息错误,而是为了合理可能稍作改动;
  • 例如只有输入 切换成XX 但是XX并不是正确选项时才会给出“请输入小学、初中和高中三个选项中的一个”而输入的文字信息没有关键词 切换为,或者输入的数字范围不对,则会给出其他的提示词,

项目概述

这是一个中小学数学卷子自动生成系统,支持小学、初中和高中三个难度级别的数学题目生成。系统具有用户认证、题目生成、文件保存和查重等功能。

系统架构

核心类结构

src/
├── Main.java                    # 程序入口和主控制逻辑
├── 业务接口层/
│   ├── IAuthService.java        # 用户认证服务接口
│   ├── IFileService.java        # 文件服务接口
│   ├── IQuestionFactory.java    # 题目工厂接口
│   └── IQuestionService.java    # 题目服务接口
├── 业务实现层/
│   ├── AuthServiceImpl.java     # 认证服务实现
│   ├── FileServiceImpl.java     # 文件服务实现
│   ├── QuestionServiceImpl.java # 题目服务实现
│   └── QuestionFactory.java     # 题目工厂实现
├── 抽象基类/
│   └── AbstractQuestionGenerator.java # 题目生成器抽象基类
├── 实体类/
│   ├── User.java                # 用户实体
│   └── Question.java            # 题目实体
├── 工具类/
│   ├── DifficultyLevel.java     # 难度等级枚举
│   └── Validator.java           # 输入验证工具
└── 配置文件/
    ├── .gitignore
    ├── codeStyleConfig.xml
    ├── misc.xml
    ├── modules.xml
    └── workspace.xml

核心功能模块说明

1. 用户认证模块 (IAuthService)

功能:管理用户登录认证

实现类AuthServiceImpl

  • 预置了三个难度等级的用户账户
  • 小学张三1/张三2/张三3 (密码123)
  • 初中李四1/李四2/李四3 (密码123)
  • 高中王五1/王五2/王五3 (密码123)

2. 题目生成模块 (IQuestionFactory)

核心类

  • AbstractQuestionGenerator:题目生成器抽象基类
  • QuestionFactory:具体题目生成实现

题目生成逻辑

  • 小学:基础四则运算,支持括号
  • 初中:增加平方和开方运算
  • 高中:增加三角函数运算

3. 文件服务模块 (IFileService)

实现类FileServiceImpl

  • 按用户分目录保存题目文件
  • 支持题目内容查重
  • 文件路径:./exam_papers/用户名/时间戳.txt

4. 题目服务模块 (IQuestionService)

实现类QuestionServiceImpl

  • 协调题目生成和文件保存
  • 提供完整的题目生成流程

使用指南

启动程序

在idea中运行Main即可在终端运行可执行文件按照注意事项中提到的方法即可

操作流程

  1. 登录:输入用户名和密码(用空格隔开)
  2. 生成题目输入题目数量10-30
  3. 切换难度:输入"切换为小学/初中/高中"
  4. 退出用户:输入"-1"

示例会话

=== 中小学数学卷子自动生成程序 ===
请输入用户名和密码(用空格隔开): 张三1 123
当前选择为小学出题
准备生成小学数学题目,请输入生成题目数量(输入-1将退出当前用户重新登录
20
题目已生成并保存到: ./exam_papers/张三1/2024-01-01-10-30-45.txt
生成完成!可以继续生成题目或切换难度
切换为初中
准备生成初中数学题目,请输入生成题目数量

技术特点

1. 设计模式应用

  • 工厂模式:题目生成器工厂
  • 策略模式:不同难度级别的题目生成策略
  • 依赖注入:通过构造函数注入依赖

2. 查重机制

  • 内存级查重(当前会话)
  • 文件级查重(历史题目)
  • 避免生成重复题目

3. 异常处理

  • 文件操作异常处理
  • 输入验证机制
  • 备用题目生成策略

配置说明

项目配置

  • JDK版本22
  • 代码风格Google Style
  • 输出目录./exam_papers/

文件结构配置

<!-- misc.xml -->
<project version="4">
  <component name="ProjectRootManager" version="2" languageLevel="JDK_22" />
</project>