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.
 
 
 
 
HuQiQiang bdc3683f9f
头文件加了define保护
4 months ago
.vscode 初版 4 months ago
build 头文件加了define保护 4 months ago
doc 初版 4 months ago
src 头文件加了define保护 4 months ago
.gitignore test 4 months ago
README.md 初版 4 months ago

README.md

hqqiproject

数学考试系统 - 项目说明文档

项目概述

这是一个基于C++实现的智能数学题目生成系统,支持小学、初中、高中三个不同难度级别的题目自动生成。系统具有用户管理、题目查重、文件保存和日志记录等完整功能。

项目结构

核心模块

模块 文件 功能描述
主程序 main.cc 程序入口,系统配置和启动
系统核心 exam_system.h/.cc 系统主流程控制,用户会话管理
题目生成 problem_generator.h/.cc 不同难度题目生成器实现
文件管理 file_manager.h/.cc 用户目录和题目文件管理
查重服务 duplicate_checker.h 题目重复性检查
输入验证 input_validator.h/.cc 各类输入数据验证
日志系统 logger.h/.cc 分级日志记录

详细设计说明

1. 系统架构

graph TD
    A[ExamSystem<br/>系统控制中心] --> B[ProblemGenerator<br/>题目生成器]
    A --> C[FileManager<br/>文件管理器]
    A --> D[DuplicateChecker<br/>查重服务]
    
    B --> B1[小学生成器]
    B --> B2[初中生成器] 
    B --> B3[高中生成器]
    
    C --> C1[目录操作]
    C --> C2[文件操作]
    
    D --> D1[历史题目管理]
    D --> D2[重复检查]

架构分层说明

层次 组件 职责 设计模式
用户交互层 用户界面 控制台I/O处理 -
核心控制层 ExamSystem 系统流程控制 状态模式
业务逻辑层 ProblemGenerator等 核心业务处理 工厂模式、策略模式
数据访问层 FileManager 数据持久化 -
基础设施层 Logger等 支撑服务 单例模式
数据存储层 文件系统 数据存储 -

2. 用户管理

预置用户账户

  • 小学组张三1、张三2、张三3
  • 初中组李四1、李四2、李四3
  • 高中组王五1、王五2、王五3
  • 密码:均为"123"

3. 题目生成器设计

3.1 小学题目生成器 (PrimarySchoolGenerator)

  • 运算符+、-、×、÷
  • 特点:确保计算结果不为负数
  • 操作数2-5个
  • 数值范围1-100

示例题目15 + 23 - 7 × 3

3.2 初中题目生成器 (MiddleSchoolGenerator)

  • 新增运算符:平方(²)、开根号(√)
  • 特点:至少包含一个特殊运算符
  • 操作数1-5个

示例题目(5)² + √16 × 3

3.3 高中题目生成器 (HighSchoolGenerator)

  • 新增运算符sin、cos、tan
  • 特点:包含三角函数计算
  • 角度范围0-360度

示例题目sin(45°) + cos(90°) × 2

4. 核心算法实现

4.1 表达式求值算法

// 处理运算符优先级:先乘除,后加减
int EvaluateExpression(const std::string& expression) {
    // 1. 分词处理
    // 2. 第一遍:处理乘除法
    // 3. 第二遍:处理加减法
    // 4. 返回最终结果
}

4.2 题目查重机制

  • 基于用户名的题目历史记录
  • 实时检查新生成题目是否重复
  • 支持历史题目加载

4.3 文件命名策略

// 格式YYYY-MM-DD-HH-MM-SS.txt
std::string GenerateFilename() {
    //1.获取当前时间
    //2.生成格式字符串
    //3.返回文件名
}

5. 系统配置参数

参数 说明
最小题目数量 10 单次生成最少题目数
最大题目数量 30 单次生成最多题目数
操作数最小值 1 题目中数字的最小值
操作数最大值 100 题目中数字的最大值
最大操作数个数 5 单个题目最多包含的数字个数

6. 使用流程

  1. 启动系统

    ./exam_system
    
  2. 用户登录

    请输入用户名和密码(用空格隔开): 张三1 123
    
  3. 题目生成

    当前选择为小学出题
    准备生成小学数学题目,请输入生成题目数量(输入-1将退出当前用户重新登录: 15
    
  4. 类型切换

    切换为初中
    准备生成初中数学题目,请输入生成题目数量...
    
  5. 退出登录

    准备生成小学数学题目,请输入生成题目数量(输入-1将退出当前用户重新登录: -1
    

7. 文件存储结构

项目根目录/
├── 张三1/
│   ├── 2025-01-15-10-30-45.txt
│   └── 2025-01-15-11-15-20.txt
├── 李四1/
│   └── 2025-01-15-09-45-10.txt
└── 王五1/
    └── 2025-01-15-14-20-35.txt

8. 设计模式应用

8.1 工厂模式

std::unique_ptr<ProblemGenerator> factory = 
    ProblemGeneratorFactory::CreateGenerator("小学");

8.2 策略模式

不同难度的题目生成器实现统一的ProblemGenerator接口

8.3 单例模式

日志系统和文件管理器使用静态方法提供全局访问

9.系统要求

操作系统

  • 仅支持 Windows 系统
  • 不支持 Linux、macOS 等其他操作系统

编译器要求

  • 支持 C++17 标准的编译器
  • 推荐使用:
    • Microsoft Visual Studio 2017 或更高版本
    • MinGW-w64 (GCC 8.0 或更高版本)
    • Clang with MSVC backend

10.编译和运行

先到src目录下

cd src

编译命令

g++ -std=c++17 -Wall -Wextra -I. -Iexam_system -Ifile_manager -Ilogger -o exam_system main/main.cc exam_system/exam_system.cc exam_system/problem_generator.cc exam_system/duplicate_checker.cc exam_system/input_validator.cc file_manager/file_manager.cc logger/logger.cc

或者

cd ../build
--config Debug --target all -j 12 --

运行:

.\exam_system.exe

核心类介绍请看doc\ExamSystem.md