﻿================================================================================
趋势预测分析工具 ChartAnalysis - 使用教学与部署说明
================================================================================

目录
--------------------------------------------------------------------------------
  一、程序简介与功能总览
  二、运行环境要求
  三、部署文件清单
  四、快速上手（5 步出图）
  五、界面布局说明
  六、详细操作教学
  七、config.ini 配置说明
  八、测试模式（开发用）
  九、常见问题 FAQ
  十、源码与重新编译

================================================================================
一、程序简介与功能总览
================================================================================

ChartAnalysis.exe 是一个连接 MySQL 数据库的趋势分析与预测绘图工具。
单文件绿色程序（C# WinForms 编写），无需安装、无需任何运行库。

主要功能：
--------------------------------------------------------------------------------
  1. 数据库连接: 连接任意 MySQL 5.5~8.x 服务器，浏览数据库/表/列结构。
  2. 灵活查询:   X 轴单选、Y 轴多选、过滤规则、排序方向、条数/偏移/起点控制。
  3. 智能绘图:   自动识别时间(X)轴（23 种时间格式），支持数值轴/文本轴。
  4. 运算曲线:   13 种数学运算（含 6 种 AI 算法），可叠加在原始曲线上。
  5. 图表交互:   十字准线、点击数据点查看数值、图例固定显示、图表设置。
  6. 图片导出:   一键保存 PNG / JPG / BMP 图片。
  7. 窗口自适应: 左侧配置面板可拖拽宽度，控件随宽度自动伸缩布局。

================================================================================
二、运行环境要求
================================================================================

  1. 操作系统: Windows 7 SP1 / 8 / 8.1 / 10 / 11（32/64 位均可）。
     - 注意: Windows 7 必须为 SP1 或以上版本。
  2. .NET Framework: 4.6.2 或更高（推荐 4.8）。
     - Win10 / 11 系统自带 4.8，开箱即用，无需安装。
     - Win7 SP1 / 8 / 8.1 若缺失，用 Start.bat 启动会自动下载安装。
  3. 数据库: MySQL 5.5 ~ 8.x（本机或远程服务器均可）。
     - MySQL 连接驱动已内嵌进 exe，客户端无需安装任何驱动或 ODBC。
  4. 无需安装: 不依赖 VC++ 运行库、Java、Python 等其他任何组件。

================================================================================
三、部署文件清单
================================================================================

  [必需] ChartAnalysis.exe   主程序（单文件，约 1.5MB）
  [必需] config.ini          数据库连接配置（与 exe 同目录）

  [可选] Start.bat           引导启动器: 自动检测并安装 .NET Framework，
                             解决"没有 .NET 环境"电脑无法运行的问题。
                             Win7 SP1 ~ Win11 全兼容。
  [可选] README.txt          本说明文档

  发布时只需 exe + config.ini 两个文件即可运行。

================================================================================
四、快速上手（5 步出图）
================================================================================

  第 1 步: 双击 ChartAnalysis.exe（或用 Start.bat）启动程序。
  第 2 步: 左侧"服务器连接"区填好 主机/端口/用户名/密码，点击"连 接"。
           （config.ini 已配置时自动填入，可直接连接）
  第 3 步: 连接后自动加载数据库列表，选中数据库后自动加载表列表；
           再选"存储表"→ 自动加载全部列；指定"横坐标"（X 轴）；
           按住 Ctrl 键多选"纵坐标"（Y 轴曲线）。
  第 4 步: 按需设置过滤规则 / 排序 / 条数等，点击"绘制曲线"。
  第 5 步: 等待查询完成，图表自动渲染；可继续叠加运算曲线或保存图片。

================================================================================
五、界面布局说明
================================================================================

┌────────────┬──────────────────────────────────────────────┐
│ 折叠 | 钉住 │ 标题栏 (表名 曲线图)                         │
│ ────────── │ 图例条 (色块+曲线名, 固定在标题下方)          │
│ 服务器连接 │ 工具栏: 曲线 | 运算 | 参数 | 生成/清除/图例/设置/十字线 │
│ 排序规则   │                                              │
│ 存储表坐标 │              图表绘图区                       │
│ 过滤规则   │        (十字线/点击数据点/缩放自由)           │
│ 绘制/保存  │                                              │
└────────────┴──────────────────────────────────────────────┘

  左侧配置面板: 可拖动中间分隔条改变宽度 (380~800px)。
     - 面板宽度 >= 380px 时，控件宽度随面板自适应伸缩；
     - 面板拖到 380px 以下时，控件保持最小布局，右侧开始被遮蔽
       （出现横向滚动条）。
  折叠按钮: 隐藏左侧面板，腾出整个窗口给图表；点"展开配置"恢复。
  钉住按钮: 锁定左侧面板宽度，拖动分隔条不再生效。

================================================================================
六、详细操作教学
================================================================================

6.1 服务器连接
--------------------------------------------------------------------------------
  - 主机地址 / 端口 / 用户名 / 密码: 直接填写；密码框为掩码输入。
  - DB 下拉框: 支持输入过滤，回车或选中即加载该库的表。
  - 点"连 接": 连接服务器并刷新数据库列表（自动选中 config.ini 中的库）。
  - 连接信息会自动保存到 config.ini，下次启动自动填入。

6.2 排序规则
--------------------------------------------------------------------------------
  - 方向: 正序(最早在前) / 倒序(最新在前)，默认正序。
    * 注意: 无论哪种方向，图表 X 轴始终按时间(数值)从左到右递增显示。
      倒序模式 = 只取最新的 N 条数据来画图。
  - 条数: 查询多少行，默认 2000（0 = 不限制）。
  - 偏移: 跳过前 N 行（从最早/最新一侧开始跳，跟随排序方向）。
  - 起点: 从最新数据往回数 N 条作为查询起点，再取"条数"行。
    例: 条数=2000、起点=5000 → 取倒数第 5000 条往前共 2000 条数据。

6.3 存储表与坐标轴
--------------------------------------------------------------------------------
  - 存储表: 选择要查询的表，自动列出所有列。
  - 横坐标: 单选 X 轴列（时间列 / 数值列 / 文本列均可自动识别）。
  - 纵坐标: 按住 Ctrl 可多选，画多条曲线。
    提示: 下方小字"提示: 按住 Ctrl 键可多选纵坐标"。

6.4 过滤规则（多行按 AND/OR 连接）
--------------------------------------------------------------------------------
  每行规则由 4 列组成: 列 | 操作符 | 值 | 逻辑。
  - 操作符: =  !=  >  >=  <  <=  LIKE  BETWEEN  IS NULL  IS NOT NULL
  - 值: 普通条件直接填值；BETWEEN 用逗号分隔两个值，如 10,20；
        LIKE 可直接写 % 通配符，如 'AB%' 可填 AB%。
  - 逻辑: 该行与下一行之间的连接方式，AND 或 OR，默认 AND。
    例:
      列=类型  =   设备1    AND
      列=温度  >=  100      OR
      列=压力  <=  5
    等价 SQL: WHERE 类型='设备1' AND 温度>=100 OR 压力<=5
  - 按钮: "+ 添加规则" 加一行；"- 删除" 删选中行；"清空" 删除全部。
  - 注意: 多行混用 AND/OR 时按行顺序连接，建议用括号语义自行组织顺序。

6.5 绘制曲线与保存图片
--------------------------------------------------------------------------------
  - "绘制曲线": 后台线程查询并渲染，期间按钮禁用，完成后状态栏提示。
  - "保存图片": 弹出保存对话框，可选 PNG / JPG / BMP 格式。

6.6 图表交互
--------------------------------------------------------------------------------
  (1) 十字准线: 鼠标移入绘图区，显示跟随鼠标的灰色虚线十字架；
      离开绘图区自动消失。工具栏"隐藏十字线/显示十字线"可开关。
  (2) 点击数据点: 鼠标左键点击曲线上的数据点，弹出浮动信息窗，显示:
      曲线名 / X 值 / Y 值 / 数据序号。
      时间 X 轴自动格式化为 yyyy-MM-dd HH:mm:ss。
      点击图表空白处或切换窗口自动关闭。
  (3) 图例: 固定在标题下方，色块+曲线名，自动换行、高度自适应。
      工具栏"隐藏图例/显示图例"可开关。
  (4) 工具栏:
      - 曲线: 选择目标曲线（仅"线性变换/二次变换"需要指定）。
      - 运算: 选择运算类型（详见 6.7）。
      - 参数: 输入所选运算的参数（窗口/阶数/迭代/α/a,b）。
      - "生成运算曲线": 对已绘制曲线执行运算并叠加显示。
      - "清除运算": 移除全部运算曲线。
      - "图表设置": 打开设置对话框（详见 6.8）。

6.7 运算功能详解（13 种，按拼音排序）
--------------------------------------------------------------------------------
  运算列表（默认选中"平滑曲线"）:

  名称                          参数      说明
  ─────────────────────────────────────────────────────────────
  贝叶斯回归 (AI)               α:1      带正则的贝叶斯线性回归，α 越大曲线越平缓
  常用对数 (log10)              -        对 Y 值取以 10 为底的对数（需 Y>0）
  对数 (ln)                     -        对 Y 值取自然对数（需 Y>0）
  多项式拟合 (Polyfit) (AI)     阶数:3    最小二乘多项式拟合，阶数 1~10
  二次变换 (a*y²+b) (AI)        a,b:1,0  对指定曲线做二次变换
  积分 (累积)                   -        梯形法累积积分（∫ydx）
  开方 (sqrt)                   -        对 Y 值开平方（需 Y>=0）
  平滑曲线 (滑动平均)           窗口:5    滑动平均滤波，窗口 3~101（奇数值）
  梯度下降 (AI)            迭代:200  数据归一化后用梯度下降迭代拟合回归线
  微分 (差分)                   -        一阶差分 dy/dx
  线性回归 (AI)                 -        最小二乘线性回归直线
  线性变换 (a*y+b) (AI)         a,b:1,0  对指定曲线做线性变换
  指数 (exp)                    -        对 Y 值取指数

  - 使用步骤: 先"绘制曲线"→ 选择运算与参数 → "生成运算曲线"。
  - "线性变换/二次变换"需先在"曲线"下拉框指定目标曲线（变换只作用于
    该曲线，其余运算对全部曲线各生成一条结果）。
  - (AI) 标记: 表示智能拟合/迭代类算法。

6.8 图表设置对话框
--------------------------------------------------------------------------------
  "常规"页:
    - 标题 / 横轴名称 / 纵轴名称（修改立即应用于图表）。
    - 图例位置: 固定于标题下方（不可调）。
    - 横轴/纵轴网格: 显示开关 + 网格间距（留空 = 自动）。
    - 次网格: 加密网格线开关 + 细分数（默认 4 等分）。
  "坐标轴"页:
    - 横轴/纵轴最小/最大值: 留空 = 自动。
    - 横轴/纵轴对数刻度 (Log): 要求数据均为正值。
  "曲线样式"页:
    - 逐条曲线设置: 颜色 / 线宽(1~8) / 线型(实线/虚线/点线/点划线) /
      标记(无/圆点/方块/三角/菱形)。
  - 点"应用"生效并关闭；"取消"放弃修改。

================================================================================
七、config.ini 配置说明
================================================================================

  [mysql]
  host = 127.0.0.1     数据库服务器地址 (远程填 IP 或域名)
  port = 3306          端口
  user = root          用户名
  password =           密码
  database =           数据库名
  charset = utf8mb4    字符集

  - 也可在程序界面的"连接"区直接填写，点"连接"后自动保存到本文件。
  - 首次运行没有 config.ini 时程序按默认值 (127.0.0.1/3306/root/空) 启动。

================================================================================
八、测试模式（开发用）
================================================================================

  ChartAnalysis.exe --selftest   自检: 连接数据库、枚举表/列、查询数据，
                                  结果写入 selftest_result.txt
  ChartAnalysis.exe --drawtest   绘图测试: 用数据库中第一张表画 1 条曲线，
                                  导出 drawtest.png 验证图表渲染

================================================================================
九、常见问题 FAQ
================================================================================

Q1. 双击 exe 无反应/报错提示缺少 .NET Framework?
A1. 用 Start.bat 启动会自动安装 .NET 4.8；或按第二节手动安装。

Q2. 报错"无法连接数据库"?
A2. 检查 config.ini 或界面中填写的地址/端口/账号/密码/数据库名是否正确，
    并确认服务器防火墙放行了对应端口（默认 3306）。

Q3. Win7 安装 .NET 4.8 失败?
A3. 确认系统是 Win7 SP1，且已安装最新 Windows Update 补丁。
    .NET 4.8 官方最低支持 Win7 SP1。

Q4. 查询很慢或图表点很多很卡?
A4. 在"条数"里减小查询行数（如 500/1000）；或配合"起点"只看最近一段。

Q5. 为什么方向选"倒序"后图表还是从左到右时间递增?
A5. 这是正常设计: 图表 X 轴始终按时间递增显示，"倒序"仅表示取最新的
    数据段来画图（等价于只查看最近 N 条）。

Q6. 对数刻度 / 对数运算为什么有的点不显示?
A6. 对数要求数值为正；sqrt 要求非负。非法点会被自动跳过，曲线相应断开。

Q7. 左侧面板变窄后控件看不全?
A7. 面板小于 380px 时控件保持最小布局并出现横向滚动条，属设计行为；
    拖宽面板即可完整显示。

================================================================================
十、源码与重新编译（开发用）
================================================================================

  Program.cs           主程序源码（C#，单文件，含全部窗体逻辑）
  tools\ref\           .NET 4.6.2 参考程序集（编译时引用）
  lib\                 依赖 DLL（编译时内嵌进 exe）
  build.bat            一键重新编译 ChartAnalysis.exe（本机需装 .NET 4.x）
  config.ini           数据库连接配置

  编译命令: 双击 build.bat，或命令行执行:
      build.bat
  产物: ChartAnalysis.exe（内嵌 MySqlConnector 等 10 个 DLL 及程序图标）

  依赖 DLL 明细（已内嵌，仅供说明）:
    MySqlConnector.dll、Microsoft.Bcl.AsyncInterfaces.dll、
    Microsoft.Extensions.DependencyInjection.Abstractions.dll、
    Microsoft.Extensions.Logging.Abstractions.dll、System.Buffers.dll、
    System.Diagnostics.DiagnosticSource.dll、System.Memory.dll、
    System.Numerics.Vectors.dll、System.Runtime.CompilerServices.Unsafe.dll、
    System.Threading.Tasks.Extensions.dll

================================================================================
